From 9373726b42d9c48b499e4b842af28f64818cba4c Mon Sep 17 00:00:00 2001 From: Ethan Konkolowicz Date: Thu, 5 Feb 2026 18:04:51 -0500 Subject: [PATCH 1/7] webpackified our export iframe --- Dockerfile | 7 +- .../dist/291.bundle.7a021a78b825e05e9dc5.js | 1 + .../dist/825.bundle.cc79276508bd3ade610e.js | 1 + export/dist/favicon.svg | 10 + .../dist/index.bundle.372e10343dd7685ec2e0.js | 3 + ...bundle.372e10343dd7685ec2e0.js.LICENSE.txt | 1 + .../index.bundle.372e10343dd7685ec2e0.js.map | 1 + export/dist/index.html | 1 + .../index.styles.a4288d6084137b3233b5.css | 71 + .../index.styles.a4288d6084137b3233b5.css.map | 1 + export/dist/standalone.html | 0 .../vendors.bundle.8059a8388a5808663419.js | 3 + ...bundle.8059a8388a5808663419.js.LICENSE.txt | 1 + ...vendors.bundle.8059a8388a5808663419.js.map | 1 + export/index.template.html | 1650 ---- export/index.test.js | 41 +- export/noble-ed25519.js | 415 - export/noble-hashes.js | 2772 ------ export/package-lock.json | 7653 +++++++++++++++-- export/package.json | 26 +- export/src/index.js | 363 + export/src/index.template.html | 101 + export/src/standalone.js | 0 export/src/standalone.template.html | 0 export/src/styles.css | 68 + export/src/turnkey-core.js | 157 + export/webpack.config.js | 151 + nginx.conf | 4 +- shared/turnkey-core.js | 70 +- 29 files changed, 8146 insertions(+), 5427 deletions(-) create mode 100644 export/dist/291.bundle.7a021a78b825e05e9dc5.js create mode 100644 export/dist/825.bundle.cc79276508bd3ade610e.js create mode 100644 export/dist/favicon.svg create mode 100644 export/dist/index.bundle.372e10343dd7685ec2e0.js create mode 100644 export/dist/index.bundle.372e10343dd7685ec2e0.js.LICENSE.txt create mode 100644 export/dist/index.bundle.372e10343dd7685ec2e0.js.map create mode 100644 export/dist/index.html create mode 100644 export/dist/index.styles.a4288d6084137b3233b5.css create mode 100644 export/dist/index.styles.a4288d6084137b3233b5.css.map create mode 100644 export/dist/standalone.html create mode 100644 export/dist/vendors.bundle.8059a8388a5808663419.js create mode 100644 export/dist/vendors.bundle.8059a8388a5808663419.js.LICENSE.txt create mode 100644 export/dist/vendors.bundle.8059a8388a5808663419.js.map delete mode 100644 export/index.template.html delete mode 100644 export/noble-ed25519.js delete mode 100644 export/noble-hashes.js create mode 100644 export/src/index.js create mode 100644 export/src/index.template.html create mode 100644 export/src/standalone.js create mode 100644 export/src/standalone.template.html create mode 100644 export/src/styles.css create mode 100644 export/src/turnkey-core.js create mode 100644 export/webpack.config.js diff --git a/Dockerfile b/Dockerfile index 714ab10..c83d9e2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,10 @@ RUN cd export-and-sign && npm ci && npm run build COPY import ./import/ RUN cd import && npm ci && npm run build +#Copy export module and build +COPY export ./export/ +RUN cd export && npm ci && npm run build + # Second stage: nginx runtime # This is nginx 1.24.0 on bullseye. # https://hub.docker.com/layers/nginxinc/nginx-unprivileged/1.24.0-bullseye/images/sha256-a8ec652916ce1e7ab2ab624fe59bb8dfc16a018fd489c6fb979fe35c5dd3ec50 @@ -31,11 +35,10 @@ COPY nginx.conf /etc/nginx/nginx.conf COPY auth /usr/share/nginx/auth COPY auth /usr/share/nginx/recovery -COPY export /usr/share/nginx/export - # Copy built export-and-sign and import files from builder stage COPY --from=builder /app/export-and-sign/dist /usr/share/nginx/export-and-sign COPY --from=builder /app/import/dist /usr/share/nginx/import +COPY --from=builder /app/export/dist /usr/share/nginx/export # oauth COPY oauth-origin /usr/share/nginx/oauth-origin diff --git a/export/dist/291.bundle.7a021a78b825e05e9dc5.js b/export/dist/291.bundle.7a021a78b825e05e9dc5.js new file mode 100644 index 0000000..29070b2 --- /dev/null +++ b/export/dist/291.bundle.7a021a78b825e05e9dc5.js @@ -0,0 +1 @@ +(self.webpackChunkexport_tests=self.webpackChunkexport_tests||[]).push([[291],{291:()=>{}}]); \ No newline at end of file diff --git a/export/dist/825.bundle.cc79276508bd3ade610e.js b/export/dist/825.bundle.cc79276508bd3ade610e.js new file mode 100644 index 0000000..7ceb2eb --- /dev/null +++ b/export/dist/825.bundle.cc79276508bd3ade610e.js @@ -0,0 +1 @@ +(self.webpackChunkexport_tests=self.webpackChunkexport_tests||[]).push([[825],{825:()=>{}}]); \ No newline at end of file diff --git a/export/dist/favicon.svg b/export/dist/favicon.svg new file mode 100644 index 0000000..73948fa --- /dev/null +++ b/export/dist/favicon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/export/dist/index.bundle.372e10343dd7685ec2e0.js b/export/dist/index.bundle.372e10343dd7685ec2e0.js new file mode 100644 index 0000000..c9f1b1f --- /dev/null +++ b/export/dist/index.bundle.372e10343dd7685ec2e0.js @@ -0,0 +1,3 @@ +/*! For license information please see index.bundle.372e10343dd7685ec2e0.js.LICENSE.txt */ +(()=>{"use strict";var e,t,r,n,o,a={503:(e,t,r)=>{var n={};function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function a(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 i(e){for(var t=1;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(o(e)+" is not iterable")}function s(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=p(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function p(e,t,r,n,o){return new d(y().w(e,t,r,n),o||Promise)}function d(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||(v(d.prototype),v(d.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),v(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 y(){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,f=Object.create(c.prototype);return v(f,"_invoke",function(r,n,o){var a,u,c,f=0,s=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&&f&&!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,s,y){if(f>1)throw TypeError("Generator is already running");for(l&&1===s&&d(s,y),u=s,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(f=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{f=1}}return{value:t,done:l}}}(r,o,a),!0),f}var i={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var s=[][n]?t(t([][n]())):(v(t={},n,function(){return this}),t),l=f.prototype=u.prototype=Object.create(s);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,v(e,o,"GeneratorFunction")),e.prototype=Object.create(l),e}return c.prototype=f,v(l,"constructor",f),v(f,"constructor",c),c.displayName="GeneratorFunction",v(f,o,"GeneratorFunction"),v(l),v(l,o,"Generator"),v(l,n,function(){return this}),v(l,"toString",function(){return"[object Generator]"}),(y=function(){return{w:a,m:p}})()}function v(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}v=function(e,t,r,n){function a(t,r){v(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))},v(e,t,r,n)}function b(e,t){this.v=e,this.k=t}function m(e){return function(e){if(Array.isArray(e))return w(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||h(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 h(e,t){if(e){if("string"==typeof e)return w(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)?w(e,t):void 0}}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rfe,applySettings:()=>ge,base58CheckEncode:()=>oe,base58Decode:()=>re,base58Encode:()=>ne,encodeKey:()=>ae,encodeWallet:()=>Ee,fromDerSignature:()=>ce,generateTargetKey:()=>me,getEd25519PublicKey:()=>xe,getEmbeddedKey:()=>be,getItemWithExpiry:()=>Oe,getSettings:()=>Q,initEmbeddedKey:()=>he,logMessage:()=>we,normalizePadding:()=>ue,onResetEmbeddedKey:()=>ye,p256JWKPrivateToPublic:()=>pe,sendMessageUp:()=>Z,setEmbeddedKey:()=>ve,setItemWithExpiry:()=>de,setParentFrameMessageChannelPort:()=>ie,setSettings:()=>V,uint8arrayFromHexString:()=>ee,uint8arrayToHexString:()=>te,validateStyles:()=>le,verifyEnclaveSignature:()=>se}),r(343);var E="TURNKEY_EMBEDDED_KEY",O="TURNKEY_SETTINGS",k=null;function S(){return"undefined"!=typeof globalThis&&globalThis.crypto&&globalThis.crypto.subtle?globalThis.crypto.subtle:"undefined"!=typeof window&&window.crypto&&window.crypto.subtle?window.crypto.subtle:void 0!==r.g&&r.g.crypto&&r.g.crypto.subtle?r.g.crypto.subtle:"undefined"!=typeof crypto&&crypto.subtle?crypto.subtle:null}function j(){return void 0!==window.location.ancestorOrigins?window.location.ancestorOrigins.length>1:window.parent!==window.top}function I(e){return _.apply(this,arguments)}function _(){return(_=x(c().mark(function e(t){var r;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=S()){e.next=3;break}throw new Error("WebCrypto subtle API is unavailable");case 3:return e.next=5,r.importKey("raw",t,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}},e)}))).apply(this,arguments)}function P(){return(P=x(c().mark(function e(){return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!j()){e.next=2;break}throw new Error("Doubly iframed");case 2:return e.next=4,A();case 4:if(null!==e.sent){e.next=10;break}return e.next=8,T();case 8:C(e.sent);case 10:case"end":return e.stop()}},e)}))).apply(this,arguments)}function T(){return N.apply(this,arguments)}function N(){return(N=x(c().mark(function e(){var t,r;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(t=S()){e.next=3;break}throw new Error("WebCrypto subtle API is unavailable");case 3:return e.next=5,t.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 5:return r=e.sent,e.next=8,t.exportKey("jwk",r.privateKey);case 8:return e.abrupt("return",e.sent);case 9:case"end":return e.stop()}},e)}))).apply(this,arguments)}function A(){var e=function(e){var t=window.localStorage.getItem(e);if(!t)return null;var r=JSON.parse(t);return Object.prototype.hasOwnProperty.call(r,"expiry")&&Object.prototype.hasOwnProperty.call(r,"value")?(new Date).getTime()>r.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}(E);return e?JSON.parse(e):null}function C(e){D(E,JSON.stringify(e),1728e5)}function D(e,t,r){var n={value:t,expiry:(new Date).getTime()+r};window.localStorage.setItem(e,JSON.stringify(n))}function R(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 U(e){return m(e).map(function(e){return e.toString(16).padStart(2,"0")}).join("")}function B(e,t){var r=t-e.length;if(r>0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(m(n),m(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;ie.length)&&(t=e.length);for(var r=0,n=Array(t);r0;){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)},ne=Y,oe=J,ae=function(e,t,r){return z.apply(this,arguments)},ie=function(e){k=e},ue=B,ce=K,fe=G,se=function(e,t,r){return L.apply(this,arguments)},le=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})?)?\\))$",labelColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",backgroundColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",width:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",height:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",maxWidth:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",maxHeight:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",lineHeight:"^(\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$",boxShadow:"^(none|(\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)) ?(inset)?)$",textAlign:"^(left|right|center|justify|initial|inherit)$",overflowWrap:"^(normal|break-word|anywhere)$",wordWrap:"^(normal|break-word)$",resize:"^(none|both|horizontal|vertical|block|inline)$"};return Object.entries(e).forEach(function(e){var t,o,a=(o=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,u=[],c=!0,f=!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){f=!0,o=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(f)throw o}}return u}}(t,o)||h(t,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=a[0],u=a[1],c=i.trim();if(0===c.length)throw new Error("css style property cannot be empty");var f=n[c];if(!f)throw new Error('invalid or unsupported css style property: "'.concat(c,'"'));var s=new RegExp(f),l=u.trim();if(0==l.length)throw new Error('css style for "'.concat(c,'" is empty'));if(!s.test(l))throw new Error('invalid css style value for property "'.concat(c,'"'));r[c]=l}),r},pe=M,de=D,ye=function(){window.localStorage.removeItem(E),window.localStorage.removeItem("TURNKEY_EMBEDDED_KEY_ORIGIN")},ve=C,be=A,me=T,he=function(){return P.apply(this,arguments)},we=F;function ge(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=le(r.styles);Object.entries(o).forEach(function(e){var t,r,o=(r=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,u=[],c=!0,f=!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){f=!0,o=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(f)throw o}}return u}}(t,r)||function(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}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=o[0],i=o[1];n.style[a]=i}),o.backgroundColor&&(document.documentElement.style.backgroundColor=o.backgroundColor,document.body.style.backgroundColor=o.backgroundColor),t.styles=o}return JSON.stringify(t)}function xe(e){return H.jn.sha512Sync=function(){var e;return q.Z((e=H.jn).concatBytes.apply(e,arguments))},H.lG(e)}function Ee(e){var t,r=new TextDecoder("utf-8").decode(e),n=null;if(r.includes("\n")){var o=r.split("\n");t=o[0],n=o[1]}else t=r;return{mnemonic:t,passphrase:n}}function Oe(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)}var ke=r(255);function Se(e){return Se="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},Se(e)}function je(){var e=Ae(),t=e.m(je),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,Ie(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(je=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 De(e,t)},AsyncIterator:Ne,async:function(e,t,r,o,i){return(n(t)?Te:Pe)(a(e),t,r,o,i)},keys:_e,values:Ie}})()}function Ie(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(Se(e)+" is not iterable")}function _e(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 Pe(e,t,r,n,o){var a=Te(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function Te(e,t,r,n,o){return new Ne(Ae().w(e,t,r,n),o||Promise)}function Ne(e,t){function r(n,o,a,i){try{var u=e[n](o),c=u.value;return c instanceof De?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||(Ce(Ne.prototype),Ce(Ne.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),Ce(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 Ae(){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,f=Object.create(c.prototype);return Ce(f,"_invoke",function(r,n,o){var a,u,c,f=0,s=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&&f&&!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,s,y){if(f>1)throw TypeError("Generator is already running");for(l&&1===s&&d(s,y),u=s,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(f=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{f=1}}return{value:t,done:l}}}(r,o,a),!0),f}var i={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var s=[][n]?t(t([][n]())):(Ce(t={},n,function(){return this}),t),l=f.prototype=u.prototype=Object.create(s);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,Ce(e,o,"GeneratorFunction")),e.prototype=Object.create(l),e}return c.prototype=f,Ce(l,"constructor",f),Ce(f,"constructor",c),c.displayName="GeneratorFunction",Ce(f,o,"GeneratorFunction"),Ce(l),Ce(l,o,"Generator"),Ce(l,n,function(){return this}),Ce(l,"toString",function(){return"[object Generator]"}),(Ae=function(){return{w:a,m:p}})()}function Ce(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}Ce=function(e,t,r,n){function a(t,r){Ce(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))},Ce(e,t,r,n)}function De(e,t){this.v=e,this.k=t}function Re(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 Ue(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 Je(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 We(e,t,r,n,o){var a=ze(e,t,r,n,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function ze(e,t,r,n,o){return new He(qe().w(e,t,r,n),o||Promise)}function He(e,t){function r(n,o,a,i){try{var u=e[n](o),c=u.value;return c instanceof Qe?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||(Xe(He.prototype),Xe(He.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),Xe(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 qe(){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,f=Object.create(c.prototype);return Xe(f,"_invoke",function(r,n,o){var a,u,c,f=0,s=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&&f&&!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,s,y){if(f>1)throw TypeError("Generator is already running");for(l&&1===s&&d(s,y),u=s,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(f=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{f=1}}return{value:t,done:l}}}(r,o,a),!0),f}var i={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var s=[][n]?t(t([][n]())):(Xe(t={},n,function(){return this}),t),l=f.prototype=u.prototype=Object.create(s);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,Xe(e,o,"GeneratorFunction")),e.prototype=Object.create(l),e}return c.prototype=f,Xe(l,"constructor",f),Xe(f,"constructor",c),c.displayName="GeneratorFunction",Xe(f,o,"GeneratorFunction"),Xe(l),Xe(l,o,"Generator"),Xe(l,n,function(){return this}),Xe(l,"toString",function(){return"[object Generator]"}),(qe=function(){return{w:a,m:p}})()}function Xe(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}Xe=function(e,t,r,n){function a(t,r){Xe(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))},Xe(e,t,r,n)}function Qe(e,t){this.v=e,this.k=t}function Ve(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 Ze(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){Ve(a,n,o,i,u,"next",e)}function u(e){Ve(a,n,o,i,u,"throw",e)}i(void 0)})}}window.TKHQ=n;var et=null,tt=new AbortController,rt=new AbortController,nt=function(){document.getElementById("inject-key").addEventListener("click",function(){var e=Ze($e().mark(function e(t){return $e().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.preventDefault(),window.postMessage({type:"INJECT_KEY_EXPORT_BUNDLE",value:document.getElementById("key-export-bundle").value,keyFormat:document.getElementById("key-export-format").value,organizationId:document.getElementById("key-organization-id").value});case 2:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}(),!1),document.getElementById("inject-wallet").addEventListener("click",function(){var e=Ze($e().mark(function e(t){return $e().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.preventDefault(),window.postMessage({type:"INJECT_WALLET_EXPORT_BUNDLE",value:document.getElementById("wallet-export-bundle").value,organizationId:document.getElementById("wallet-organization-id").value});case 2:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}(),!1),document.getElementById("reset").addEventListener("click",function(){var e=Ze($e().mark(function e(t){return $e().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.preventDefault(),window.postMessage({type:"RESET_EMBEDDED_KEY"});case 2:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}(),!1)},ot=function(){var e=Ze($e().mark(function e(t){return $e().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.data||"INJECT_KEY_EXPORT_BUNDLE"!=t.data.type){e.next=10;break}return we("⬇️ Received message ".concat(t.data.type,": ").concat(t.data.value,", ").concat(t.data.keyFormat,", ").concat(t.data.organizationId)),e.prev=2,e.next=5,ct(t.data.value,t.data.keyFormat,t.data.organizationId,t.data.requestId);case 5:e.next=10;break;case 7:e.prev=7,e.t0=e.catch(2),Z("ERROR",e.t0.toString(),t.data.requestId);case 10:if(!t.data||"INJECT_WALLET_EXPORT_BUNDLE"!=t.data.type){e.next=20;break}return we("⬇️ Received message ".concat(t.data.type,": ").concat(t.data.value,", ").concat(t.data.organizationId)),e.prev=12,e.next=15,st(t.data.value,t.data.organizationId,t.data.requestId);case 15:e.next=20;break;case 17:e.prev=17,e.t1=e.catch(12),Z("ERROR",e.t1.toString(),t.data.requestId);case 20:if(!t.data||"APPLY_SETTINGS"!=t.data.type){e.next=29;break}return e.prev=21,e.next=24,pt(t.data.value,t.data.requestId);case 24:e.next=29;break;case 26:e.prev=26,e.t2=e.catch(21),Z("ERROR",e.t2.toString(),t.data.requestId);case 29:if(t.data&&"RESET_EMBEDDED_KEY"==t.data.type){we("⬇️ Received message ".concat(t.data.type));try{ye()}catch(e){Z("ERROR",e.toString())}}case 30:case"end":return e.stop()}},e,null,[[2,7],[12,17],[21,26]])}));return function(t){return e.apply(this,arguments)}}();function at(e){Array.from(document.body.children).forEach(function(e){"SCRIPT"!==e.tagName&&"key-div"!==e.id&&(e.style.display="none")});var t={border:"none",color:"#555b64",fontSize:".875rem",lineHeight:"1.25rem",overflowWrap:"break-word",textAlign:"left"},r=document.getElementById("key-div");for(var n in r.innerText=e,t)r.style[n]=t[n];document.body.appendChild(r),ge(Q())}function it(e,t){return ut.apply(this,arguments)}function ut(){return(ut=Ze($e().mark(function e(t,r){var n,o,a,i,u;return $e().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:a=JSON.parse(t),e.t0=a.version,e.next="v1.0.0"===e.t0?4:31;break;case 4:if(a.data){e.next=6;break}throw new Error('missing "data" in bundle');case 6:if(a.dataSignature){e.next=8;break}throw new Error('missing "dataSignature" in bundle');case 8:if(a.enclaveQuorumPublic){e.next=10;break}throw new Error('missing "enclaveQuorumPublic" in bundle');case 10:if(se){e.next=12;break}throw new Error("method not loaded");case 12:return e.next=14,se(a.enclaveQuorumPublic,a.dataSignature,a.data);case 14:if(e.sent){e.next=17;break}throw new Error("failed to verify enclave signature: ".concat(t));case 17:if(i=JSON.parse((new TextDecoder).decode(ee(a.data))),r){e.next=22;break}console.warn('we highly recommend a version of @turnkey/iframe-stamper >= v2.0.0 to pass "organizationId" for security purposes.'),e.next=24;break;case 22:if(i.organizationId&&i.organizationId===r){e.next=24;break}throw new Error("organization id does not match expected value. Expected: ".concat(r,". Found: ").concat(i.organizationId,"."));case 24:if(i.encappedPublic){e.next=26;break}throw new Error('missing "encappedPublic" in bundle signed data');case 26:if(i.ciphertext){e.next=28;break}throw new Error('missing "ciphertext" in bundle signed data');case 28:return n=ee(i.encappedPublic),o=ee(i.ciphertext),e.abrupt("break",32);case 31:throw new Error("unsupported version: ".concat(a.version));case 32:return e.next=34,be();case 34:return u=e.sent,e.next=37,Le({ciphertextBuf:o,encappedKeyBuf:n,receiverPrivJwk:u});case 37:return e.abrupt("return",e.sent);case 38:case"end":return e.stop()}},e)}))).apply(this,arguments)}function ct(e,t,r,n){return ft.apply(this,arguments)}function ft(){return(ft=Ze($e().mark(function e(t,r,n,o){var a,i,u,c,f;return $e().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,it(t,n);case 2:if(a=e.sent,ye(),u=new Uint8Array(a),"SOLANA"!==r){e.next=13;break}return c=te(u.subarray(0,32)),f=xe(c),e.next=10,ae(u,r,f);case 10:i=e.sent,e.next=16;break;case 13:return e.next=15,ae(u,r);case 15:i=e.sent;case 16:at(i),Z("BUNDLE_INJECTED",!0,o);case 18:case"end":return e.stop()}},e)}))).apply(this,arguments)}function st(e,t,r){return lt.apply(this,arguments)}function lt(){return(lt=Ze($e().mark(function e(t,r,n){var o;return $e().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,it(t,r);case 2:o=e.sent,ye(),at(Ee(new Uint8Array(o)).mnemonic),Z("BUNDLE_INJECTED",!0,n);case 7:case"end":return e.stop()}},e)}))).apply(this,arguments)}function pt(e,t){return dt.apply(this,arguments)}function dt(){return(dt=Ze($e().mark(function e(t,r){var n;return $e().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:n=ge(t),V(n),Z("SETTINGS_APPLIED",!0,r);case 3:case"end":return e.stop()}},e)}))).apply(this,arguments)}document.addEventListener("DOMContentLoaded",Ze($e().mark(function e(){var t,r,n,o;return $e().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,he();case 2:return e.next=4,be();case 4:return t=e.sent,e.next=7,pe(t);case 7:r=e.sent,n=te(r),document.getElementById("embedded-key").value=n,window.addEventListener("message",ot,{capture:!1,signal:tt.signal}),nt(),tt.signal.aborted||((o=Q())&&ge(o),Z("PUBLIC_KEY_READY",n));case 13:case"end":return e.stop()}},e)})),!1),window.addEventListener("message",function(){var e=Ze($e().mark(function e(t){var r,n,o,a;return $e().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=17;break}return tt.abort(),(et=t.ports[0]).onmessage=ot,ie(et),e.next=7,he();case 7:return e.next=9,be();case 9:return n=e.sent,e.next=12,pe(n);case 12:o=e.sent,a=te(o),document.getElementById("embedded-key").value=a,Z("PUBLIC_KEY_READY",a),rt.abort();case 17:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}(),{signal:rt.signal})}},i={};function u(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return a[e](r,r.exports,u),r.exports}u.m=a,e=[],u.O=(t,r,n,o)=>{if(!r){var a=1/0;for(s=0;s=o)&&Object.keys(u.O).every(e=>u.O[e](r[c]))?r.splice(c--,1):(i=!1,o0&&e[s-1][2]>o;s--)e[s]=e[s-1];e[s]=[r,n,o]},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=>e+".bundle."+{291:"7a021a78b825e05e9dc5",825:"cc79276508bd3ade610e"}[e]+".js",u.miniCssF=e=>{},u.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),u.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},o="export-tests:",u.l=(e,t,r,a)=>{if(n[e])n[e].push(t);else{var i,c;if(void 0!==r)for(var f=document.getElementsByTagName("script"),s=0;s{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.p="/",(()=>{var e={57: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,f=0;if(a.some(t=>0!==e[t])){for(n in i)u.o(i,n)&&(u.m[n]=i[n]);if(c)var s=c(u)}for(t&&t(r);fu(503));c=u.O(c)})(); +//# sourceMappingURL=index.bundle.372e10343dd7685ec2e0.js.map \ No newline at end of file diff --git a/export/dist/index.bundle.372e10343dd7685ec2e0.js.LICENSE.txt b/export/dist/index.bundle.372e10343dd7685ec2e0.js.LICENSE.txt new file mode 100644 index 0000000..775d393 --- /dev/null +++ b/export/dist/index.bundle.372e10343dd7685ec2e0.js.LICENSE.txt @@ -0,0 +1 @@ +/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ diff --git a/export/dist/index.bundle.372e10343dd7685ec2e0.js.map b/export/dist/index.bundle.372e10343dd7685ec2e0.js.map new file mode 100644 index 0000000..127870f --- /dev/null +++ b/export/dist/index.bundle.372e10343dd7685ec2e0.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.bundle.372e10343dd7685ec2e0.js","mappings":"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","sources":["webpack://export-tests/webpack/runtime/chunk loaded","webpack://export-tests/webpack/runtime/create fake namespace object","webpack://export-tests/webpack/runtime/load script","webpack://export-tests/../shared/turnkey-core.js","webpack://export-tests/./src/turnkey-core.js","webpack://export-tests/../shared/crypto-utils.js","webpack://export-tests/./src/index.js","webpack://export-tests/webpack/bootstrap","webpack://export-tests/webpack/runtime/define property getters","webpack://export-tests/webpack/runtime/ensure chunk","webpack://export-tests/webpack/runtime/get javascript chunk filename","webpack://export-tests/webpack/runtime/get mini-css chunk filename","webpack://export-tests/webpack/runtime/global","webpack://export-tests/webpack/runtime/hasOwnProperty shorthand","webpack://export-tests/webpack/runtime/make namespace object","webpack://export-tests/webpack/runtime/publicPath","webpack://export-tests/webpack/runtime/jsonp chunk loading","webpack://export-tests/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-tests:\";\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};","import { bech32 } from \"bech32\";\n\n/**\n * Turnkey Core Module - Shared\n * Contains all the core cryptographic and utility functions shared across frames\n */\n\n/** constants for LocalStorage */\nconst TURNKEY_EMBEDDED_KEY = \"TURNKEY_EMBEDDED_KEY\";\nconst TURNKEY_TARGET_EMBEDDED_KEY = \"TURNKEY_TARGET_EMBEDDED_KEY\";\nconst TURNKEY_SETTINGS = \"TURNKEY_SETTINGS\";\n/** 48 hours in milliseconds */\nconst TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS = 1000 * 60 * 60 * 48;\nconst TURNKEY_EMBEDDED_KEY_ORIGIN = \"TURNKEY_EMBEDDED_KEY_ORIGIN\";\n\nlet parentFrameMessageChannelPort = null;\nvar cryptoProviderOverride = null;\n\n/*\n * Returns a reference to the WebCrypto subtle interface regardless of the host environment.\n */\nfunction getSubtleCrypto() {\n if (cryptoProviderOverride && cryptoProviderOverride.subtle) {\n return cryptoProviderOverride.subtle;\n }\n if (\n typeof globalThis !== \"undefined\" &&\n globalThis.crypto &&\n globalThis.crypto.subtle\n ) {\n return globalThis.crypto.subtle;\n }\n if (typeof window !== \"undefined\" && window.crypto && window.crypto.subtle) {\n return window.crypto.subtle;\n }\n if (typeof global !== \"undefined\" && global.crypto && global.crypto.subtle) {\n return global.crypto.subtle;\n }\n if (typeof crypto !== \"undefined\" && crypto.subtle) {\n return crypto.subtle;\n }\n\n return null;\n}\n\n/*\n * Allows tests to explicitly set the crypto provider (e.g. crypto.webcrypto) when the runtime\n * environment does not expose one on the global/window objects.\n */\nfunction setCryptoProvider(cryptoProvider) {\n cryptoProviderOverride = cryptoProvider || null;\n}\n\n/* Security functions */\n\nfunction isDoublyIframed() {\n if (window.location.ancestorOrigins !== undefined) {\n // Does not exist in IE and firefox.\n // See https://developer.mozilla.org/en-US/docs/Web/API/Location/ancestorOrigins for how this works\n return window.location.ancestorOrigins.length > 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n */\nasync function initEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey();\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n */\nfunction getEmbeddedKey() {\n const jwtKey = getItemWithExpiry(TURNKEY_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n */\nfunction setEmbeddedKey(targetKey) {\n setItemWithExpiry(\n TURNKEY_EMBEDDED_KEY,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n */\nfunction onResetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY);\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Encodes a Uint8Array into a base58-check-encoded string\n * Throws an error if the input is invalid or the checksum is invalid.\n * @param {Uint8Array} payload The raw payload to encode.\n * @return {Promise} The base58check-encoded string.\n */\nasync function base58CheckEncode(payload) {\n const hash1Buf = await crypto.subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n\n const hash2Buf = await crypto.subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n\n const checksum = hash2.slice(0, 4);\n\n const full = new Uint8Array(payload.length + 4);\n full.set(payload, 0);\n full.set(checksum, payload.length);\n\n return base58Encode(full);\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n */\nasync function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) {\n switch (keyFormat) {\n case \"SOLANA\":\n if (!publicKeyBytes) {\n throw new Error(\n \"public key must be specified for SOLANA key format\"\n );\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 case \"BITCOIN_MAINNET_WIF\":\n case \"BITCOIN_TESTNET_WIF\": {\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const version = keyFormat === \"BITCOIN_MAINNET_WIF\" ? 0x80 : 0xef;\n const wifPayload = new Uint8Array(34);\n wifPayload[0] = version;\n wifPayload.set(privateKeyBytes, 1);\n wifPayload[33] = 0x01; // compressed flag\n\n return await base58CheckEncode(wifPayload);\n }\n case \"SUI_BECH32\":\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const schemeFlag = 0x00; // ED25519 | We only support ED25519 keys for Sui currently\n const bech32Payload = new Uint8Array(1 + 32);\n bech32Payload[0] = schemeFlag;\n bech32Payload.set(privateKeyBytes, 1);\n\n return encodeBech32(\"suiprivkey\", bech32Payload);\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n base58CheckEncode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import \"./styles.css\";\nimport * as SharedTKHQ from \"@shared/turnkey-core.js\";\nimport * as nobleEd25519 from \"@noble/ed25519\";\nimport * as nobleHashes from \"@noble/hashes\"\n\nconst {\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58Encode,\n base58CheckEncode,\n encodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n p256JWKPrivateToPublic,\n setItemWithExpiry,\n onResetEmbeddedKey,\n setEmbeddedKey,\n getEmbeddedKey,\n generateTargetKey,\n initEmbeddedKey,\n logMessage,\n} = SharedTKHQ;\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n 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 if (validStyles.backgroundColor) {\n // Apply background color to document and body as well.\n document.documentElement.style.backgroundColor =\n validStyles.backgroundColor;\n document.body.style.backgroundColor = validStyles.backgroundColor;\n }\n\n validSettings[\"styles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\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 * Returns a UTF-8 encoded wallet mnemonic + newline optional passphrase\n * from wallet bytes.\n * @param {Uint8Array} walletBytes\n */\nfunction encodeWallet(walletBytes) {\n const decoder = new TextDecoder(\"utf-8\");\n const wallet = decoder.decode(walletBytes);\n let mnemonic;\n let passphrase = null;\n\n if (wallet.includes(\"\\n\")) {\n const parts = wallet.split(\"\\n\");\n mnemonic = parts[0];\n passphrase = parts[1];\n } else {\n mnemonic = wallet;\n }\n\n return {\n mnemonic: mnemonic,\n passphrase: passphrase,\n };\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\nexport {\n initEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getEmbeddedKey,\n setEmbeddedKey,\n onResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckEncode,\n encodeKey,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n getSettings,\n setSettings,\n logMessage,\n getItemWithExpiry,\n getEd25519PublicKey,\n applySettings,\n encodeWallet,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n","// Vendor @hpke/core from https://esm.sh/@hpke/core@1.2.7\n\nimport * as TKHQ from \"./turnkey-core.js\";\nimport { HpkeDecrypt } from \"@shared/crypto-utils.js\";\nimport * as hpke from \"@hpke/core\";\n\nwindow.TKHQ = TKHQ;\n\n// persist the MessageChannel object so we can use it to communicate with the parent window\nvar iframeMessagePort = null;\n\n// controllers to remove event listeners\nconst messageListenerController = new AbortController();\nconst turnkeyInitController = new AbortController();\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 */\nvar addDOMEventListeners = function () {\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(\"inject-wallet\").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\").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\n/**\n * Message Event Handlers to process messages from the parent frame\n */\nvar messageEventListener = async function (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[\"value\"],\n event.data[\"keyFormat\"],\n event.data[\"organizationId\"],\n event.data[\"requestId\"]\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 );\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};\n\n/**\n * Initialize the embedded key and set up the DOM and message event listeners\n */\ndocument.addEventListener(\n \"DOMContentLoaded\",\n 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 window.addEventListener(\"message\", messageEventListener, {\n capture: false,\n signal: messageListenerController.signal,\n });\n\n addDOMEventListeners();\n\n if (!messageListenerController.signal.aborted) {\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 TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n }\n },\n false\n);\n\nwindow.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 iframeMessagePort = event.ports[0];\n iframeMessagePort.onmessage = messageEventListener;\n\n TKHQ.setParentFrameMessageChannelPort(iframeMessagePort);\n\n await TKHQ.initEmbeddedKey();\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/**\n * Hide every HTML element in except any \ No newline at end of file diff --git a/export/dist/index.styles.a4288d6084137b3233b5.css b/export/dist/index.styles.a4288d6084137b3233b5.css new file mode 100644 index 0000000..7021092 --- /dev/null +++ b/export/dist/index.styles.a4288d6084137b3233b5.css @@ -0,0 +1,71 @@ +body { + text-align: center; + font-family: "Lucida Sans", "Lucida Sans Regular", "Lucida Grande", + "Lucida Sans Unicode", Geneva, Verdana, sans-serif; + max-width: 1024px; + margin: auto; +} +label { + display: inline-block; + width: 8em; +} +form { + text-align: left; +} +input[type="text"], +select { + width: 40em; + margin: 0.5em; + font-family: "Courier New", Courier, monospace; + font-size: 1em; + height: 1.8em; + color: rgb(18, 87, 18); + border: 1px rgb(217, 240, 221) solid; + border-radius: 4px; +} +input:disabled { + background-color: rgb(239, 243, 240); +} +#reset { + color: white; + width: 7em; + font-size: 1em; + padding: 0.38em; + border-radius: 4px; + background-color: rgb(187, 100, 100); + border: 1px rgb(112, 42, 42) solid; + cursor: pointer; + display: inline; +} +#inject-key, +#inject-wallet { + color: white; + width: 7em; + font-size: 1em; + padding: 0.38em; + border-radius: 4px; + background-color: rgb(50, 44, 44); + border: 1px rgb(33, 33, 33) solid; + cursor: pointer; + display: inline; +} +#message-log { + border: 1px #2a2828 solid; + padding: 0 0.7em; + border-radius: 4px; + margin-top: 2em; + max-width: 800px; + margin: auto; + display: block; +} +#message-log p { + font-size: 0.9em; + text-align: left; + word-break: break-all; +} +.hidden { + display: none; +} + + +/*# sourceMappingURL=index.styles.a4288d6084137b3233b5.css.map*/ \ No newline at end of file diff --git a/export/dist/index.styles.a4288d6084137b3233b5.css.map b/export/dist/index.styles.a4288d6084137b3233b5.css.map new file mode 100644 index 0000000..be46f16 --- /dev/null +++ b/export/dist/index.styles.a4288d6084137b3233b5.css.map @@ -0,0 +1 @@ +{"version":3,"file":"index.styles.a4288d6084137b3233b5.css","mappings":"AAAA;EACE,kBAAkB;EAClB;sDACoD;EACpD,iBAAiB;EACjB,YAAY;AACd;AACA;EACE,qBAAqB;EACrB,UAAU;AACZ;AACA;EACE,gBAAgB;AAClB;AACA;;EAEE,WAAW;EACX,aAAa;EACb,8CAA8C;EAC9C,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,oCAAoC;EACpC,kBAAkB;AACpB;AACA;EACE,oCAAoC;AACtC;AACA;EACE,YAAY;EACZ,UAAU;EACV,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,oCAAoC;EACpC,kCAAkC;EAClC,eAAe;EACf,eAAe;AACjB;AACA;;EAEE,YAAY;EACZ,UAAU;EACV,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,iCAAiC;EACjC,iCAAiC;EACjC,eAAe;EACf,eAAe;AACjB;AACA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,cAAc;AAChB;AACA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;AACvB;AACA;EACE,aAAa;AACf","sources":["webpack://export-tests/./src/styles.css"],"sourcesContent":["body {\n text-align: center;\n font-family: \"Lucida Sans\", \"Lucida Sans Regular\", \"Lucida Grande\",\n \"Lucida Sans Unicode\", Geneva, Verdana, sans-serif;\n max-width: 1024px;\n margin: auto;\n}\nlabel {\n display: inline-block;\n width: 8em;\n}\nform {\n text-align: left;\n}\ninput[type=\"text\"],\nselect {\n width: 40em;\n margin: 0.5em;\n font-family: \"Courier New\", Courier, monospace;\n font-size: 1em;\n height: 1.8em;\n color: rgb(18, 87, 18);\n border: 1px rgb(217, 240, 221) solid;\n border-radius: 4px;\n}\ninput:disabled {\n background-color: rgb(239, 243, 240);\n}\n#reset {\n color: white;\n width: 7em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(187, 100, 100);\n border: 1px rgb(112, 42, 42) solid;\n cursor: pointer;\n display: inline;\n}\n#inject-key,\n#inject-wallet {\n color: white;\n width: 7em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(50, 44, 44);\n border: 1px rgb(33, 33, 33) solid;\n cursor: pointer;\n display: inline;\n}\n#message-log {\n border: 1px #2a2828 solid;\n padding: 0 0.7em;\n border-radius: 4px;\n margin-top: 2em;\n max-width: 800px;\n margin: auto;\n display: block;\n}\n#message-log p {\n font-size: 0.9em;\n text-align: left;\n word-break: break-all;\n}\n.hidden {\n display: none;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/export/dist/standalone.html b/export/dist/standalone.html new file mode 100644 index 0000000..e69de29 diff --git a/export/dist/vendors.bundle.8059a8388a5808663419.js b/export/dist/vendors.bundle.8059a8388a5808663419.js new file mode 100644 index 0000000..2c3a635 --- /dev/null +++ b/export/dist/vendors.bundle.8059a8388a5808663419.js @@ -0,0 +1,3 @@ +/*! For license information please see vendors.bundle.8059a8388a5808663419.js.LICENSE.txt */ +"use strict";(self.webpackChunkexport_tests=self.webpackChunkexport_tests||[]).push([[96],{255:(e,t,r)=>{r.d(t,{ws:()=>G,GR:()=>we,RG:()=>be,v7:()=>pe});class i extends Error{constructor(e){let t;t=e instanceof Error?e.message:"string"==typeof e?e:"",super(t),this.name=this.constructor.name}}class n extends i{}class a extends i{}class s extends i{}class o extends i{}class c extends i{}class h extends i{}class l extends i{}class f extends i{}class u extends i{}class d extends i{}class y extends i{}const w=(b=globalThis,p={},new Proxy(b,{get:(e,t,r)=>t in p?p[t]:b[t],set:(e,t,r)=>(t in p&&delete p[t],b[t]=r,!0),deleteProperty(e,t){let r=!1;return t in p&&(delete p[t],r=!0),t in b&&(delete b[t],r=!0),r},ownKeys(e){const t=Reflect.ownKeys(b),r=Reflect.ownKeys(p),i=new Set(r);return[...t.filter(e=>!i.has(e)),...r]},defineProperty:(e,t,r)=>(t in p&&delete p[t],Reflect.defineProperty(b,t,r),!0),getOwnPropertyDescriptor:(e,t)=>t in p?Reflect.getOwnPropertyDescriptor(p,t):Reflect.getOwnPropertyDescriptor(b,t),has:(e,t)=>t in p||t in b}));var b,p;class _{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){void 0===this._api&&(this._api=await async function(){if(void 0!==w&&void 0!==globalThis.crypto)return globalThis.crypto.subtle;try{const{webcrypto:e}=await r.e(825).then(r.t.bind(r,825,19));return e.subtle}catch(e){throw new y(e)}}())}}const g=8192,m=new Uint8Array(0),v=new Uint8Array([75,69,77,0,0]),k=e=>"object"==typeof e&&null!==e&&"object"==typeof e.privateKey&&"object"==typeof e.publicKey;function A(e,t){if(t<=0)throw new Error("i2Osp: too small size");if(e>=256**t)throw new Error("i2Osp: too large integer");const r=new Uint8Array(t);for(let i=0;i>=8;return r}function P(e,t){const r=new Uint8Array(e.length+t.length);return r.set(e,0),r.set(t,e.length),r}const x=new Uint8Array([101,97,101,95,112,114,107]),K=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);class S{constructor(e,t,r){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=t,this._kdf=r;const i=new Uint8Array(v);i.set(A(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,t,r=!0){return await this._prim.importKey(e,t,r)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>g)throw new n("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;t=void 0===e.ekm?await this.generateKeyPair():k(e.ekm)?e.ekm:await this.deriveKeyPair(e.ekm);const r=await this._prim.serializePublicKey(t.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let n,a;if(void 0===e.senderKey)n=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{const r=k(e.senderKey)?e.senderKey.privateKey:e.senderKey;n=P(new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),new Uint8Array(await this._prim.dh(r,e.recipientPublicKey)))}if(void 0===e.senderKey)a=P(new Uint8Array(r),new Uint8Array(i));else{const t=k(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),n=await this._prim.serializePublicKey(t);a=function(e,t,r){const i=new Uint8Array(e.length+t.length+r.length);return i.set(e,0),i.set(t,e.length),i.set(r,e.length+t.length),i}(new Uint8Array(r),new Uint8Array(i),new Uint8Array(n))}return{enc:r,sharedSecret:await this._generateSharedSecret(n,a)}}catch(e){throw new o(e)}}async decap(e){const t=await this._prim.deserializePublicKey(e.enc),r=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=k(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),n=await this._prim.serializePublicKey(i);try{let i,a;if(void 0===e.senderPublicKey)i=new Uint8Array(await this._prim.dh(r,t));else{i=P(new Uint8Array(await this._prim.dh(r,t)),new Uint8Array(await this._prim.dh(r,e.senderPublicKey)))}if(void 0===e.senderPublicKey)a=P(new Uint8Array(e.enc),new Uint8Array(n));else{const t=await this._prim.serializePublicKey(e.senderPublicKey);a=new Uint8Array(e.enc.byteLength+n.byteLength+t.byteLength),a.set(new Uint8Array(e.enc),0),a.set(new Uint8Array(n),e.enc.byteLength),a.set(new Uint8Array(t),e.enc.byteLength+n.byteLength)}return await this._generateSharedSecret(i,a)}catch(e){throw new c(e)}}async _generateSharedSecret(e,t){const r=this._kdf.buildLabeledIkm(x,e),i=this._kdf.buildLabeledInfo(K,t,this.secretSize);return await this._kdf.extractAndExpand(m.buffer,r.buffer,i.buffer,this.secretSize)}}const U=["deriveBits"],E=new Uint8Array([100,107,112,95,112,114,107]);new Uint8Array([115,107]);class j{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}}const O=new Uint8Array([99,97,110,100,105,100,97,116,101]),z=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),I=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),L=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),T=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),C=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),B=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);class R extends _{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case 16:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=z,this._bitmask=255,this._pkcs8AlgId=T;break;case 17:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=I,this._bitmask=255,this._pkcs8AlgId=C;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=L,this._bitmask=1,this._pkcs8AlgId=B}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(e){throw new a(e)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(e){throw new s(e)}}async serializePrivateKey(e){await this._setup();try{const t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return function(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),r=atob(t),i=new Uint8Array(r.length);for(let e=0;e255)throw new Error("Faild to derive a key pair");const i=new Uint8Array(await this._hkdf.labeledExpand(t,O,A(e,1),this._nSk));i[0]=i[0]&this._bitmask,r.set(i)}const i=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:i,publicKey:await this.derivePublicKey(i)}}catch(e){throw new d(e)}}async derivePublicKey(e){await this._setup();try{const t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(e){throw new s(e)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,8*this._nDh)}catch(e){throw new a(e)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(void 0===e.crv||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(void 0!==e.d)throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(void 0===e.d)throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,U)}async _deserializePkcs8Key(e){const t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,U)}}const H=new Uint8Array([72,80,75,69,45,118,49]);class N extends _{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:m}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();const r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(H,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();const i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return i.set(new Uint8Array([0,r]),0),i.set(H,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(t,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,t){if(await this._setup(),0===e.byteLength&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new n("The salt length must be the same as the hashSize");const r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();const i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),n=new ArrayBuffer(r),a=new Uint8Array(n);let s=m;const o=new Uint8Array(t),c=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");const h=new Uint8Array(this.hashSize+o.length+1);for(let e=1,t=0;t=s.length?(a.set(s,t),t+=s.length):(a.set(s.slice(0,a.length-t),t),t+=a.length-t);return n}async extractAndExpand(e,t,r,i){await this._setup();const n=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},n,8*i)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r).buffer)}async labeledExpand(e,t,r,i){return await this.expand(e,this.buildLabeledInfo(t,r,i).buffer,i)}_checkInit(){if(this._suiteId===m)throw new Error("Not initialized. Call init()")}}class q extends N{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}}const D=["encrypt","decrypt"];BigInt(0),BigInt(1),BigInt(2);class M extends _{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();const i={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(i,this._key,t)}async open(e,t,r){await this._setupKey();const i={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(i,this._key,t)}async _setupKey(){if(void 0!==this._key)return;await this._setup();const e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,D)}}class Z{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new M(e)}}class G extends Z{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:2}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}}function X(){return new Promise((e,t)=>{t(new y("Not supported"))})}const Y=new Uint8Array([115,101,99]);class W{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await X()}async open(e,t){return await X()}async export(e,t){if(e.byteLength>g)throw new n("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Y,new Uint8Array(e),t)}catch(e){throw new h(e)}}}class V extends W{}class F extends W{constructor(e,t,r,i){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=i}}class $ extends W{constructor(e,t,r){if(super(e,t,r.exporterSecret),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nK",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nN",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_ctx",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),void 0===r.key||void 0===r.baseNonce||void 0===r.seq)throw new Error("Required parameters are missing");this._aead=r.aead,this._nK=this._aead.keySize,this._nN=this._aead.nonceSize,this._nT=this._aead.tagSize;const i=this._aead.createEncryptionContext(r.key);this._ctx={key:i,baseNonce:r.baseNonce,seq:r.seq}}computeNonce(e){const t=A(e.seq,e.baseNonce.byteLength);return function(e,t){if(e.byteLength!==t.byteLength)throw new Error("xor: different length inputs");const r=new Uint8Array(e.byteLength);for(let i=0;iNumber.MAX_SAFE_INTEGER)throw new u("Message limit reached");e.seq+=1}}var J;class Q{constructor(){J.set(this,Promise.resolve())}async lock(){let e;const t=new Promise(t=>{e=t}),r=function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)}(this,J,"f");return function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===i?n.call(e,r):n?n.value=r:t.set(e,r)}(this,J,t,"f"),await r,e}}J=new WeakMap;var ee,te=function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};class re extends ${constructor(){super(...arguments),ee.set(this,void 0)}async open(e,t=m.buffer){!function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===i?n.call(e,r):n?n.value=r:t.set(e,r)}(this,ee,te(this,ee,"f")??new Q,"f");const r=await te(this,ee,"f").lock();let i;try{i=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(e){throw new f(e)}finally{r()}return this.incrementSeq(this._ctx),i}}ee=new WeakMap;var ie,ne=function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};class ae extends ${constructor(e,t,r,i){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),ie.set(this,void 0),this.enc=i}async seal(e,t=m.buffer){!function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===i?n.call(e,r):n?n.value=r:t.set(e,r)}(this,ie,ne(this,ie,"f")??new Q,"f");const r=await ne(this,ie,"f").lock();let i;try{i=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(e){throw new l(e)}finally{r()}return this.incrementSeq(this._ctx),i}}ie=new WeakMap;const se=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),oe=new Uint8Array([101,120,112]),ce=new Uint8Array([105,110,102,111,95,104,97,115,104]),he=new Uint8Array([107,101,121]),le=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),fe=new Uint8Array([115,101,99,114,101,116]),ue=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);class de extends _{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),"number"==typeof e.kem)throw new n("KemId cannot be used");if(this._kem=e.kem,"number"==typeof e.kdf)throw new n("KdfId cannot be used");if(this._kdf=e.kdf,"number"==typeof e.aead)throw new n("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(ue),this._suiteId.set(A(this._kem.id,2),4),this._suiteId.set(A(this._kdf.id,2),6),this._suiteId.set(A(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();const t=await this._kem.encap(e);let r;return r=void 0!==e.psk?void 0!==e.senderKey?3:1:void 0!==e.senderKey?2:0,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();const t=await this._kem.decap(e);let r;return r=void 0!==e.psk?void 0!==e.senderPublicKey?3:1:void 0!==e.senderPublicKey?2:0,await this._keyScheduleR(r,t,e)}async seal(e,t,r=m.buffer){const i=await this.createSenderContext(e);return{ct:await i.seal(t,r),enc:i.enc}}async open(e,t,r=m.buffer){const i=await this.createRecipientContext(e);return await i.open(t,r)}async _keySchedule(e,t,r){const i=void 0===r.psk?m:new Uint8Array(r.psk.id),n=await this._kdf.labeledExtract(m.buffer,le,i),a=void 0===r.info?m:new Uint8Array(r.info),s=await this._kdf.labeledExtract(m.buffer,ce,a),o=new Uint8Array(1+n.byteLength+s.byteLength);o.set(new Uint8Array([e]),0),o.set(new Uint8Array(n),1),o.set(new Uint8Array(s),1+n.byteLength);const c=void 0===r.psk?m:new Uint8Array(r.psk.key),h=this._kdf.buildLabeledIkm(fe,c).buffer,l=this._kdf.buildLabeledInfo(oe,o,this._kdf.hashSize).buffer,f=await this._kdf.extractAndExpand(t,h,l,this._kdf.hashSize);if(65535===this._aead.id)return{aead:this._aead,exporterSecret:f};const u=this._kdf.buildLabeledInfo(he,o,this._aead.keySize).buffer,d=await this._kdf.extractAndExpand(t,h,u,this._aead.keySize),y=this._kdf.buildLabeledInfo(se,o,this._aead.nonceSize).buffer,w=await this._kdf.extractAndExpand(t,h,y,this._aead.nonceSize);return{aead:this._aead,exporterSecret:f,key:d,baseNonce:new Uint8Array(w),seq:0}}async _keyScheduleS(e,t,r,i){const n=await this._keySchedule(e,t,i);return void 0===n.key?new F(this._api,this._kdf,n.exporterSecret,r):new ae(this._api,this._kdf,n,r)}async _keyScheduleR(e,t,r){const i=await this._keySchedule(e,t,r);return void 0===i.key?new V(this._api,this._kdf,i.exporterSecret):new re(this._api,this._kdf,i)}_validateInputLength(e){if(void 0!==e.info&&e.info.byteLength>65536)throw new n("Too long info");if(void 0!==e.psk){if(e.psk.key.byteLength<32)throw new n("PSK must have at least 32 bytes");if(e.psk.key.byteLength>g)throw new n("Too long psk.key");if(e.psk.id.byteLength>g)throw new n("Too long psk.id")}}}class ye extends S{constructor(){const e=new q;super(16,new R(16,e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}}class we extends de{}class be extends ye{}class pe extends q{}new Uint8Array([48,46,2,1,0,48,5,6,3,43,101,110,4,34,4,32]),new Uint8Array([48,70,2,1,0,48,5,6,3,43,101,111,4,58,4,56])},343:(e,t)=>{const r="qpzry9x8gf2tvdw0s3jn54khce6mua7l",i={};for(let e=0;e<32;e++){const t=r.charAt(e);i[t]=e}function n(e){const t=e>>25;return(33554431&e)<<5^996825010&-(1&t)^642813549&-(t>>1&1)^513874426&-(t>>2&1)^1027748829&-(t>>3&1)^705979059&-(t>>4&1)}function a(e){let t=1;for(let r=0;r126)return"Invalid prefix ("+e+")";t=n(t)^i>>5}t=n(t);for(let r=0;r=r;)a-=r,o.push(n>>a&s);if(i)a>0&&o.push(n<=t)return"Excess padding";if(n<r)return"Exceeds length limit";const s=e.toLowerCase(),o=e.toUpperCase();if(e!==s&&e!==o)return"Mixed-case string "+e;const c=(e=s).lastIndexOf("1");if(-1===c)return"No separator character for "+e;if(0===c)return"Missing prefix for "+e;const h=e.slice(0,c),l=e.slice(c+1);if(l.length<6)return"Data too short";let f=a(h);if("string"==typeof f)return f;const u=[];for(let e=0;e=l.length||u.push(r)}return f!==t?"Invalid checksum for "+e:{prefix:h,words:u}}return t="bech32"===e?1:734539939,{decodeUnsafe:function(e,t){const r=s(e,t);if("object"==typeof r)return r},decode:function(e,t){const r=s(e,t);if("object"==typeof r)return r;throw new Error(r)},encode:function(e,i,s){if(s=s||90,e.length+7+i.length>s)throw new TypeError("Exceeds length limit");let o=a(e=e.toLowerCase());if("string"==typeof o)throw new Error(o);let c=e+"1";for(let e=0;e>5)throw new Error("Non 5-bit word");o=n(o)^t,c+=r.charAt(t)}for(let e=0;e<6;++e)o=n(o);o^=t;for(let e=0;e<6;++e)c+=r.charAt(o>>5*(5-e)&31);return c},toWords:o,fromWordsUnsafe:c,fromWords:h}}l("bech32"),l("bech32m")},561:()=>{throw new Error("root module cannot be imported: import submodules instead. Check out README")},598:(e,t,r)=>{r.d(t,{jn:()=>H,lG:()=>R});const i={p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n},{p:n,n:a,Gx:s,Gy:o,a:c,d:h,h:l}=i,f=(e="")=>{const t=new Error(e);throw((...e)=>{"captureStackTrace"in Error&&"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(...e)})(t,f),t},u=(e,t,r="")=>{const i=(n=e)instanceof Uint8Array||ArrayBuffer.isView(n)&&"Uint8Array"===n.constructor.name;var n;const a=e?.length,s=void 0!==t;return(!i||s&&a!==t)&&f((r&&`"${r}" `)+"expected Uint8Array"+(s?` of length ${t}`:"")+", got "+(i?`length=${a}`:"type="+typeof e)),e},d=e=>new Uint8Array(e),y=e=>Uint8Array.from(e),w=(e,t)=>e.toString(16).padStart(t,"0"),b=e=>Array.from(u(e)).map(e=>w(e,2)).join(""),p=e=>e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:void 0,_=e=>{const t="hex invalid";if("string"!=typeof e)return f(t);const r=e.length,i=r/2;if(r%2)return f(t);const n=d(i);for(let r=0,a=0;rglobalThis?.crypto,m=(...e)=>{const t=d(e.reduce((e,t)=>e+u(t).length,0));let r=0;return e.forEach(e=>{t.set(e,r),r+=e.length}),t},v=BigInt,k=(e,t,r,i="bad number: out of range")=>(e=>"bigint"==typeof e)(e)&&t<=e&&e{const r=e%t;return r>=0n?r:t+r},P=(e,t)=>{(0n===e||t<=0n)&&f("no inverse n="+e+" mod="+t);let r=A(e,t),i=t,n=0n,a=1n,s=1n,o=0n;for(;0n!==r;){const e=i/r,t=i%r,c=n-s*e,h=a-o*e;i=r,r=t,n=s,a=o,s=c,o=h}return 1n===i?A(n,t):f("no inverse")},x=e=>e instanceof S?e:f("Point expected"),K=2n**256n;class S{static BASE;static ZERO;X;Y;Z;T;constructor(e,t,r,i){const n=K;this.X=k(e,0n,n),this.Y=k(t,0n,n),this.Z=k(r,1n,n),this.T=k(i,0n,n),Object.freeze(this)}static CURVE(){return i}static fromAffine(e){return new S(e.x,e.y,1n,A(e.x*e.y))}static fromBytes(e,t=!1){const r=h,i=y(u(e,32)),a=e[31];i[31]=-129&a;const s=O(i);k(s,0n,t?K:n);const o=A(s*s),c=A(o-1n),l=A(r*o+1n);let{isValid:d,value:w}=L(c,l);d||f("bad point: y not sqrt");const b=1n==(1n&w),p=!!(128&a);return!t&&0n===w&&p&&f("bad point: x==0, isLastByteOdd"),p!==b&&(w=A(-w)),new S(w,s,1n,A(w*s))}static fromHex(e,t){return S.fromBytes(_(e),t)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){const e=c,t=h;if(this.is0())return f("bad point: ZERO");const{X:r,Y:i,Z:n,T:a}=this,s=A(r*r),o=A(i*i),l=A(n*n),u=A(l*l),d=A(s*e);return A(l*A(d+o))!==A(u+A(t*A(s*o)))?f("bad point: equation left != right (1)"):A(r*i)!==A(n*a)?f("bad point: equation left != right (2)"):this}equals(e){const{X:t,Y:r,Z:i}=this,{X:n,Y:a,Z:s}=x(e),o=A(t*s),c=A(n*i),h=A(r*s),l=A(a*i);return o===c&&h===l}is0(){return this.equals(E)}negate(){return new S(A(-this.X),this.Y,this.Z,A(-this.T))}double(){const{X:e,Y:t,Z:r}=this,i=c,n=A(e*e),a=A(t*t),s=A(2n*A(r*r)),o=A(i*n),h=e+t,l=A(A(h*h)-n-a),f=o+a,u=f-s,d=o-a,y=A(l*u),w=A(f*d),b=A(l*d),p=A(u*f);return new S(y,w,p,b)}add(e){const{X:t,Y:r,Z:i,T:n}=this,{X:a,Y:s,Z:o,T:l}=x(e),f=c,u=h,d=A(t*a),y=A(r*s),w=A(n*u*l),b=A(i*o),p=A((t+r)*(a+s)-d-y),_=A(b-w),g=A(b+w),m=A(y-f*d),v=A(p*_),k=A(g*m),P=A(p*m),K=A(_*g);return new S(v,k,K,P)}subtract(e){return this.add(x(e).negate())}multiply(e,t=!0){if(!t&&(0n===e||this.is0()))return E;if(k(e,1n,a),1n===e)return this;if(this.equals(U))return Z(e).p;let r=E,i=U;for(let n=this;e>0n;n=n.double(),e>>=1n)1n&e?r=r.add(n):t&&(i=i.add(n));return r}multiplyUnsafe(e){return this.multiply(e,!1)}toAffine(){const{X:e,Y:t,Z:r}=this;if(this.equals(E))return{x:0n,y:1n};const i=P(r,n);return 1n!==A(r*i)&&f("invalid inverse"),{x:A(e*i),y:A(t*i)}}toBytes(){const{x:e,y:t}=this.assertValidity().toAffine(),r=j(t);return r[31]|=1n&e?128:0,r}toHex(){return b(this.toBytes())}clearCofactor(){return this.multiply(v(l),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let e=this.multiply(a/2n,!1).double();return a%2n&&(e=e.add(this)),e.is0()}}const U=new S(s,o,1n,A(s*o)),E=new S(0n,1n,1n,0n);S.BASE=U,S.ZERO=E;const j=e=>_(w(k(e,0n,K),64)).reverse(),O=e=>v("0x"+b(y(u(e)).reverse())),z=(e,t)=>{let r=e;for(;t-- >0n;)r*=r,r%=n;return r},I=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,L=(e,t)=>{const r=A(t*t*t),i=(e=>{const t=e*e%n*e%n,r=z(t,2n)*t%n,i=z(r,1n)*e%n,a=z(i,5n)*i%n,s=z(a,10n)*a%n,o=z(s,20n)*s%n,c=z(o,40n)*o%n,h=z(c,80n)*c%n,l=z(h,80n)*c%n,f=z(l,10n)*a%n;return{pow_p_5_8:z(f,2n)*e%n,b2:t}})(e*A(r*r*t)).pow_p_5_8;let a=A(e*r*i);const s=A(t*a*a),o=a,c=A(a*I),h=s===e,l=s===A(-e),f=s===A(-e*I);return h&&(a=o),(l||f)&&(a=c),1n==(1n&A(a))&&(a=A(-a)),{isValid:h||l,value:a}},T=e=>{return t=O(e),A(t,a);var t},C=(...e)=>(e=>{const t=N[e];return"function"!=typeof t&&f("hashes."+e+" not set"),t})("sha512")(m(...e)),B=e=>(e=>{const t=e.slice(0,32);t[0]&=248,t[31]&=127,t[31]|=64;const r=e.slice(32,64),i=T(t),n=U.multiply(i),a=n.toBytes();return{head:t,prefix:r,scalar:i,point:n,pointBytes:a}})(C(u(e,32))),R=e=>B(e).pointBytes,H={bytesToHex:b,hexToBytes:_,concatBytes:m,mod:A,invert:P,randomBytes:(e=32)=>g().getRandomValues(d(e))},N={sha512Async:async e=>{const t=g()?.subtle??f("crypto.subtle must be defined, consider polyfill"),r=m(e);return d(await t.digest("SHA-512",r.buffer))},sha512:void 0},q=Math.ceil(32)+1;let D;const M=(e,t)=>{const r=t.negate();return e?r:t},Z=e=>{const t=D||(D=(()=>{const e=[];let t=U,r=t;for(let i=0;i>=a,o>128&&(o-=256,e+=1n);const c=128*s,h=c,l=c+Math.abs(o)-1,f=s%2!=0,u=o<0;0===o?i=i.add(M(f,t[h])):r=r.add(M(u,t[l]))}return 0n!==e&&f("invalid wnaf"),{p:r,f:i}}}}]); +//# sourceMappingURL=vendors.bundle.8059a8388a5808663419.js.map \ No newline at end of file diff --git a/export/dist/vendors.bundle.8059a8388a5808663419.js.LICENSE.txt b/export/dist/vendors.bundle.8059a8388a5808663419.js.LICENSE.txt new file mode 100644 index 0000000..b989cb5 --- /dev/null +++ b/export/dist/vendors.bundle.8059a8388a5808663419.js.LICENSE.txt @@ -0,0 +1 @@ +/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */ diff --git a/export/dist/vendors.bundle.8059a8388a5808663419.js.map b/export/dist/vendors.bundle.8059a8388a5808663419.js.map new file mode 100644 index 0000000..921a0d7 --- /dev/null +++ b/export/dist/vendors.bundle.8059a8388a5808663419.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vendors.bundle.8059a8388a5808663419.js","mappings":"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","sources":["webpack://export-tests/./node_modules/@hpke/common/esm/src/errors.js","webpack://export-tests/./node_modules/@hpke/common/esm/_dnt.shims.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/algorithm.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/identifiers.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/consts.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/interfaces/kemInterface.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/utils/misc.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/kems/dhkem.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/interfaces/dhkemPrimitives.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/utils/bignum.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/kems/dhkemPrimitives/ec.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/kdfs/hkdf.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/interfaces/aeadEncryptionContext.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/curve/montgomery.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/aeads/aesGcm.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/utils/emitNotSupported.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/exporterContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/encryptionContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/mutex.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/recipientContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/senderContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/cipherSuiteNative.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/kems/dhkemNative.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/native.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.js","webpack://export-tests/./node_modules/bech32/dist/index.js","webpack://export-tests/./node_modules/@noble/hashes/index.js","webpack://export-tests/./node_modules/@noble/ed25519/index.js"],"sourcesContent":["/**\n * The base error class of hpke-js.\n * @group Errors\n */\nexport class HpkeError extends Error {\n constructor(e) {\n let message;\n if (e instanceof Error) {\n message = e.message;\n }\n else if (typeof e === \"string\") {\n message = e;\n }\n else {\n message = \"\";\n }\n super(message);\n this.name = this.constructor.name;\n }\n}\n/**\n * Invalid parameter.\n * @group Errors\n */\nexport class InvalidParamError extends HpkeError {\n}\n/**\n * KEM input or output validation failure.\n * @group Errors\n */\nexport class ValidationError extends HpkeError {\n}\n/**\n * Public or private key serialization failure.\n * @group Errors\n */\nexport class SerializeError extends HpkeError {\n}\n/**\n * Public or private key deserialization failure.\n * @group Errors\n */\nexport class DeserializeError extends HpkeError {\n}\n/**\n * encap() failure.\n * @group Errors\n */\nexport class EncapError extends HpkeError {\n}\n/**\n * decap() failure.\n * @group Errors\n */\nexport class DecapError extends HpkeError {\n}\n/**\n * Secret export failure.\n * @group Errors\n */\nexport class ExportError extends HpkeError {\n}\n/**\n * seal() failure.\n * @group Errors\n */\nexport class SealError extends HpkeError {\n}\n/**\n * open() failure.\n * @group Errors\n */\nexport class OpenError extends HpkeError {\n}\n/**\n * Sequence number overflow on the encryption context.\n * @group Errors\n */\nexport class MessageLimitReachedError extends HpkeError {\n}\n/**\n * Key pair derivation failure.\n * @group Errors\n */\nexport class DeriveKeyPairError extends HpkeError {\n}\n/**\n * Not supported failure.\n * @group Errors\n */\nexport class NotSupportedError extends HpkeError {\n}\n","const dntGlobals = {};\nexport const dntGlobalThis = createMergeProxy(globalThis, dntGlobals);\nfunction createMergeProxy(baseObj, extObj) {\n return new Proxy(baseObj, {\n get(_target, prop, _receiver) {\n if (prop in extObj) {\n return extObj[prop];\n }\n else {\n return baseObj[prop];\n }\n },\n set(_target, prop, value) {\n if (prop in extObj) {\n delete extObj[prop];\n }\n baseObj[prop] = value;\n return true;\n },\n deleteProperty(_target, prop) {\n let success = false;\n if (prop in extObj) {\n delete extObj[prop];\n success = true;\n }\n if (prop in baseObj) {\n delete baseObj[prop];\n success = true;\n }\n return success;\n },\n ownKeys(_target) {\n const baseKeys = Reflect.ownKeys(baseObj);\n const extKeys = Reflect.ownKeys(extObj);\n const extKeysSet = new Set(extKeys);\n return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];\n },\n defineProperty(_target, prop, desc) {\n if (prop in extObj) {\n delete extObj[prop];\n }\n Reflect.defineProperty(baseObj, prop, desc);\n return true;\n },\n getOwnPropertyDescriptor(_target, prop) {\n if (prop in extObj) {\n return Reflect.getOwnPropertyDescriptor(extObj, prop);\n }\n else {\n return Reflect.getOwnPropertyDescriptor(baseObj, prop);\n }\n },\n has(_target, prop) {\n return prop in extObj || prop in baseObj;\n },\n });\n}\n","import * as dntShim from \"../_dnt.shims.js\";\nimport { NotSupportedError } from \"./errors.js\";\nasync function loadSubtleCrypto() {\n if (dntShim.dntGlobalThis !== undefined && globalThis.crypto !== undefined) {\n // Browsers, Node.js >= v19, Cloudflare Workers, Bun, etc.\n return globalThis.crypto.subtle;\n }\n // Node.js <= v18\n try {\n // @ts-ignore: to ignore \"crypto\"\n const { webcrypto } = await import(\"crypto\"); // node:crypto\n return webcrypto.subtle;\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n}\nexport class NativeAlgorithm {\n constructor() {\n Object.defineProperty(this, \"_api\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: undefined\n });\n }\n async _setup() {\n if (this._api !== undefined) {\n return;\n }\n this._api = await loadSubtleCrypto();\n }\n}\n","/**\n * The supported HPKE modes.\n */\nexport const Mode = {\n Base: 0x00,\n Psk: 0x01,\n Auth: 0x02,\n AuthPsk: 0x03,\n};\n/**\n * The supported Key Encapsulation Mechanism (KEM) identifiers.\n */\nexport const KemId = {\n NotAssigned: 0x0000,\n DhkemP256HkdfSha256: 0x0010,\n DhkemP384HkdfSha384: 0x0011,\n DhkemP521HkdfSha512: 0x0012,\n DhkemSecp256k1HkdfSha256: 0x0013,\n DhkemX25519HkdfSha256: 0x0020,\n DhkemX448HkdfSha512: 0x0021,\n HybridkemX25519Kyber768: 0x0030,\n MlKem512: 0x0040,\n MlKem768: 0x0041,\n MlKem1024: 0x0042,\n XWing: 0x647a,\n};\n/**\n * The supported Key Derivation Function (KDF) identifiers.\n */\nexport const KdfId = {\n HkdfSha256: 0x0001,\n HkdfSha384: 0x0002,\n HkdfSha512: 0x0003,\n};\n/**\n * The supported Authenticated Encryption with Associated Data (AEAD) identifiers.\n */\nexport const AeadId = {\n Aes128Gcm: 0x0001,\n Aes256Gcm: 0x0002,\n Chacha20Poly1305: 0x0003,\n ExportOnly: 0xFFFF,\n};\n","// The input length limit (psk, psk_id, info, exporter_context, ikm).\nexport const INPUT_LENGTH_LIMIT = 8192;\nexport const INFO_LENGTH_LIMIT = 65536;\n// The minimum length of a PSK.\nexport const MINIMUM_PSK_LENGTH = 32;\n// b\"\"\nexport const EMPTY = new Uint8Array(0);\n","// b\"KEM\"\nexport const SUITE_ID_HEADER_KEM = new Uint8Array([\n 75,\n 69,\n 77,\n 0,\n 0,\n]);\n","import * as dntShim from \"../../_dnt.shims.js\";\nimport { KemId } from \"../identifiers.js\";\nexport const isDenoV1 = () => \n// deno-lint-ignore no-explicit-any\ndntShim.dntGlobalThis.process === undefined;\n/**\n * Checks whether the runtime is Deno or not (Node.js).\n * @returns boolean - true if the runtime is Deno, false Node.js.\n */\nexport function isDeno() {\n // deno-lint-ignore no-explicit-any\n if (dntShim.dntGlobalThis.process === undefined) {\n return true;\n }\n // deno-lint-ignore no-explicit-any\n return dntShim.dntGlobalThis.process?.versions?.deno !== undefined;\n}\n/**\n * Checks whetehr the type of input is CryptoKeyPair or not.\n */\nexport const isCryptoKeyPair = (x) => typeof x === \"object\" &&\n x !== null &&\n typeof x.privateKey === \"object\" &&\n typeof x.publicKey === \"object\";\n/**\n * Converts integer to octet string. I2OSP implementation.\n */\nexport function i2Osp(n, w) {\n if (w <= 0) {\n throw new Error(\"i2Osp: too small size\");\n }\n if (n >= 256 ** w) {\n throw new Error(\"i2Osp: too large integer\");\n }\n const ret = new Uint8Array(w);\n for (let i = 0; i < w && n; i++) {\n ret[w - (i + 1)] = n % 256;\n n = n >> 8;\n }\n return ret;\n}\n/**\n * Concatenates two Uint8Arrays.\n * @param a Uint8Array\n * @param b Uint8Array\n * @returns Concatenated Uint8Array\n */\nexport function concat(a, b) {\n const ret = new Uint8Array(a.length + b.length);\n ret.set(a, 0);\n ret.set(b, a.length);\n return ret;\n}\n/**\n * Decodes Base64Url-encoded data.\n * @param v Base64Url-encoded string\n * @returns Uint8Array\n */\nexport function base64UrlToBytes(v) {\n const base64 = v.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const byteString = atob(base64);\n const ret = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n ret[i] = byteString.charCodeAt(i);\n }\n return ret;\n}\n/**\n * Encodes Uint8Array to Base64Url.\n * @param v Uint8Array\n * @returns Base64Url-encoded string\n */\nexport function bytesToBase64Url(v) {\n return btoa(String.fromCharCode(...v))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=*$/g, \"\");\n}\n/**\n * Decodes hex string to Uint8Array.\n * @param v Hex string\n * @returns Uint8Array\n * @throws Error if the input is not a hex string.\n */\nexport function hexToBytes(v) {\n if (v.length === 0) {\n return new Uint8Array([]);\n }\n const res = v.match(/[\\da-f]{2}/gi);\n if (res == null) {\n throw new Error(\"Not hex string.\");\n }\n return new Uint8Array(res.map(function (h) {\n return parseInt(h, 16);\n }));\n}\n/**\n * Encodes Uint8Array to hex string.\n * @param v Uint8Array\n * @returns Hex string\n */\nexport function bytesToHex(v) {\n return [...v].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n/**\n * Converts KemId to KeyAlgorithm.\n * @param kem KemId\n * @returns KeyAlgorithm\n */\nexport function kemToKeyGenAlgorithm(kem) {\n switch (kem) {\n case KemId.DhkemP256HkdfSha256:\n return {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n };\n case KemId.DhkemP384HkdfSha384:\n return {\n name: \"ECDH\",\n namedCurve: \"P-384\",\n };\n case KemId.DhkemP521HkdfSha512:\n return {\n name: \"ECDH\",\n namedCurve: \"P-521\",\n };\n default:\n // case KemId.DhkemX25519HkdfSha256\n return {\n name: \"X25519\",\n };\n }\n}\nexport async function loadSubtleCrypto() {\n if (dntShim.dntGlobalThis !== undefined && globalThis.crypto !== undefined) {\n // Browsers, Node.js >= v19, Cloudflare Workers, Bun, etc.\n return globalThis.crypto.subtle;\n }\n // Node.js <= v18\n try {\n // @ts-ignore: to ignore \"crypto\"\n const { webcrypto } = await import(\"crypto\"); // node:crypto\n return webcrypto.subtle;\n }\n catch (_e) {\n throw new Error(\"Failed to load SubtleCrypto\");\n }\n}\nexport async function loadCrypto() {\n if (dntShim.dntGlobalThis !== undefined && globalThis.crypto !== undefined) {\n // Browsers, Node.js >= v19, Cloudflare Workers, Bun, etc.\n return globalThis.crypto;\n }\n // Node.js <= v18\n try {\n // @ts-ignore: to ignore \"crypto\"\n const { webcrypto } = await import(\"crypto\"); // node:crypto\n return webcrypto;\n }\n catch (_e) {\n throw new Error(\"Web Cryptograph API not supported\");\n }\n}\n/**\n * XOR for Uint8Array.\n */\nexport function xor(a, b) {\n if (a.byteLength !== b.byteLength) {\n throw new Error(\"xor: different length inputs\");\n }\n const buf = new Uint8Array(a.byteLength);\n for (let i = 0; i < a.byteLength; i++) {\n buf[i] = a[i] ^ b[i];\n }\n return buf;\n}\n","import { EMPTY, INPUT_LENGTH_LIMIT } from \"../consts.js\";\nimport { DecapError, EncapError, InvalidParamError } from \"../errors.js\";\nimport { SUITE_ID_HEADER_KEM } from \"../interfaces/kemInterface.js\";\nimport { concat, i2Osp, isCryptoKeyPair } from \"../utils/misc.js\";\n// b\"eae_prk\"\nconst LABEL_EAE_PRK = new Uint8Array([101, 97, 101, 95, 112, 114, 107]);\n// b\"shared_secret\"\n// deno-fmt-ignore\nconst LABEL_SHARED_SECRET = new Uint8Array([\n 115, 104, 97, 114, 101, 100, 95, 115, 101, 99,\n 114, 101, 116,\n]);\nfunction concat3(a, b, c) {\n const ret = new Uint8Array(a.length + b.length + c.length);\n ret.set(a, 0);\n ret.set(b, a.length);\n ret.set(c, a.length + b.length);\n return ret;\n}\nexport class Dhkem {\n constructor(id, prim, kdf) {\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"_prim\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_kdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.id = id;\n this._prim = prim;\n this._kdf = kdf;\n const suiteId = new Uint8Array(SUITE_ID_HEADER_KEM);\n suiteId.set(i2Osp(this.id, 2), 3);\n this._kdf.init(suiteId);\n }\n async serializePublicKey(key) {\n return await this._prim.serializePublicKey(key);\n }\n async deserializePublicKey(key) {\n return await this._prim.deserializePublicKey(key);\n }\n async serializePrivateKey(key) {\n return await this._prim.serializePrivateKey(key);\n }\n async deserializePrivateKey(key) {\n return await this._prim.deserializePrivateKey(key);\n }\n async importKey(format, key, isPublic = true) {\n return await this._prim.importKey(format, key, isPublic);\n }\n async generateKeyPair() {\n return await this._prim.generateKeyPair();\n }\n async deriveKeyPair(ikm) {\n if (ikm.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long ikm\");\n }\n return await this._prim.deriveKeyPair(ikm);\n }\n async encap(params) {\n let ke;\n if (params.ekm === undefined) {\n ke = await this.generateKeyPair();\n }\n else if (isCryptoKeyPair(params.ekm)) {\n // params.ekm is only used for testing.\n ke = params.ekm;\n }\n else {\n // params.ekm is only used for testing.\n ke = await this.deriveKeyPair(params.ekm);\n }\n const enc = await this._prim.serializePublicKey(ke.publicKey);\n const pkrm = await this._prim.serializePublicKey(params.recipientPublicKey);\n try {\n let dh;\n if (params.senderKey === undefined) {\n dh = new Uint8Array(await this._prim.dh(ke.privateKey, params.recipientPublicKey));\n }\n else {\n const sks = isCryptoKeyPair(params.senderKey)\n ? params.senderKey.privateKey\n : params.senderKey;\n const dh1 = new Uint8Array(await this._prim.dh(ke.privateKey, params.recipientPublicKey));\n const dh2 = new Uint8Array(await this._prim.dh(sks, params.recipientPublicKey));\n dh = concat(dh1, dh2);\n }\n let kemContext;\n if (params.senderKey === undefined) {\n kemContext = concat(new Uint8Array(enc), new Uint8Array(pkrm));\n }\n else {\n const pks = isCryptoKeyPair(params.senderKey)\n ? params.senderKey.publicKey\n : await this._prim.derivePublicKey(params.senderKey);\n const pksm = await this._prim.serializePublicKey(pks);\n kemContext = concat3(new Uint8Array(enc), new Uint8Array(pkrm), new Uint8Array(pksm));\n }\n const sharedSecret = await this._generateSharedSecret(dh, kemContext);\n return {\n enc: enc,\n sharedSecret: sharedSecret,\n };\n }\n catch (e) {\n throw new EncapError(e);\n }\n }\n async decap(params) {\n const pke = await this._prim.deserializePublicKey(params.enc);\n const skr = isCryptoKeyPair(params.recipientKey)\n ? params.recipientKey.privateKey\n : params.recipientKey;\n const pkr = isCryptoKeyPair(params.recipientKey)\n ? params.recipientKey.publicKey\n : await this._prim.derivePublicKey(params.recipientKey);\n const pkrm = await this._prim.serializePublicKey(pkr);\n try {\n let dh;\n if (params.senderPublicKey === undefined) {\n dh = new Uint8Array(await this._prim.dh(skr, pke));\n }\n else {\n const dh1 = new Uint8Array(await this._prim.dh(skr, pke));\n const dh2 = new Uint8Array(await this._prim.dh(skr, params.senderPublicKey));\n dh = concat(dh1, dh2);\n }\n let kemContext;\n if (params.senderPublicKey === undefined) {\n kemContext = concat(new Uint8Array(params.enc), new Uint8Array(pkrm));\n }\n else {\n const pksm = await this._prim.serializePublicKey(params.senderPublicKey);\n kemContext = new Uint8Array(params.enc.byteLength + pkrm.byteLength + pksm.byteLength);\n kemContext.set(new Uint8Array(params.enc), 0);\n kemContext.set(new Uint8Array(pkrm), params.enc.byteLength);\n kemContext.set(new Uint8Array(pksm), params.enc.byteLength + pkrm.byteLength);\n }\n return await this._generateSharedSecret(dh, kemContext);\n }\n catch (e) {\n throw new DecapError(e);\n }\n }\n async _generateSharedSecret(dh, kemContext) {\n const labeledIkm = this._kdf.buildLabeledIkm(LABEL_EAE_PRK, dh);\n const labeledInfo = this._kdf.buildLabeledInfo(LABEL_SHARED_SECRET, kemContext, this.secretSize);\n return await this._kdf.extractAndExpand(EMPTY.buffer, labeledIkm.buffer, labeledInfo.buffer, this.secretSize);\n }\n}\n","// The key usages for KEM.\nexport const KEM_USAGES = [\"deriveBits\"];\n// b\"dkp_prk\"\nexport const LABEL_DKP_PRK = new Uint8Array([\n 100,\n 107,\n 112,\n 95,\n 112,\n 114,\n 107,\n]);\n// b\"sk\"\nexport const LABEL_SK = new Uint8Array([115, 107]);\n","/**\n * The minimum inplementation of bignum to derive an EC key pair.\n */\nexport class Bignum {\n constructor(size) {\n Object.defineProperty(this, \"_num\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._num = new Uint8Array(size);\n }\n val() {\n return this._num;\n }\n reset() {\n this._num.fill(0);\n }\n set(src) {\n if (src.length !== this._num.length) {\n throw new Error(\"Bignum.set: invalid argument\");\n }\n this._num.set(src);\n }\n isZero() {\n for (let i = 0; i < this._num.length; i++) {\n if (this._num[i] !== 0) {\n return false;\n }\n }\n return true;\n }\n lessThan(v) {\n if (v.length !== this._num.length) {\n throw new Error(\"Bignum.lessThan: invalid argument\");\n }\n for (let i = 0; i < this._num.length; i++) {\n if (this._num[i] < v[i]) {\n return true;\n }\n if (this._num[i] > v[i]) {\n return false;\n }\n }\n return false;\n }\n}\n","import { NativeAlgorithm } from \"../../algorithm.js\";\nimport { EMPTY } from \"../../consts.js\";\nimport { DeriveKeyPairError, DeserializeError, NotSupportedError, SerializeError, } from \"../../errors.js\";\nimport { KemId } from \"../../identifiers.js\";\nimport { KEM_USAGES, LABEL_DKP_PRK } from \"../../interfaces/dhkemPrimitives.js\";\nimport { Bignum } from \"../../utils/bignum.js\";\nimport { base64UrlToBytes, i2Osp } from \"../../utils/misc.js\";\n// b\"candidate\"\n// deno-fmt-ignore\nconst LABEL_CANDIDATE = new Uint8Array([\n 99, 97, 110, 100, 105, 100, 97, 116, 101,\n]);\n// the order of the curve being used.\n// deno-fmt-ignore\nconst ORDER_P_256 = new Uint8Array([\n 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xbc, 0xe6, 0xfa, 0xad, 0xa7, 0x17, 0x9e, 0x84,\n 0xf3, 0xb9, 0xca, 0xc2, 0xfc, 0x63, 0x25, 0x51,\n]);\n// deno-fmt-ignore\nconst ORDER_P_384 = new Uint8Array([\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xc7, 0x63, 0x4d, 0x81, 0xf4, 0x37, 0x2d, 0xdf,\n 0x58, 0x1a, 0x0d, 0xb2, 0x48, 0xb0, 0xa7, 0x7a,\n 0xec, 0xec, 0x19, 0x6a, 0xcc, 0xc5, 0x29, 0x73,\n]);\n// deno-fmt-ignore\nconst ORDER_P_521 = new Uint8Array([\n 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xfa, 0x51, 0x86, 0x87, 0x83, 0xbf, 0x2f,\n 0x96, 0x6b, 0x7f, 0xcc, 0x01, 0x48, 0xf7, 0x09,\n 0xa5, 0xd0, 0x3b, 0xb5, 0xc9, 0xb8, 0x89, 0x9c,\n 0x47, 0xae, 0xbb, 0x6f, 0xb7, 0x1e, 0x91, 0x38,\n 0x64, 0x09,\n]);\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_P_256 = new Uint8Array([\n 48, 65, 2, 1, 0, 48, 19, 6, 7, 42,\n 134, 72, 206, 61, 2, 1, 6, 8, 42, 134,\n 72, 206, 61, 3, 1, 7, 4, 39, 48, 37,\n 2, 1, 1, 4, 32,\n]);\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_P_384 = new Uint8Array([\n 48, 78, 2, 1, 0, 48, 16, 6, 7, 42,\n 134, 72, 206, 61, 2, 1, 6, 5, 43, 129,\n 4, 0, 34, 4, 55, 48, 53, 2, 1, 1,\n 4, 48,\n]);\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_P_521 = new Uint8Array([\n 48, 96, 2, 1, 0, 48, 16, 6, 7, 42,\n 134, 72, 206, 61, 2, 1, 6, 5, 43, 129,\n 4, 0, 35, 4, 73, 48, 71, 2, 1, 1,\n 4, 66,\n]);\nexport class Ec extends NativeAlgorithm {\n constructor(kem, hkdf) {\n super();\n Object.defineProperty(this, \"_hkdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_alg\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nPk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nSk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nDh\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // EC specific arguments for deriving key pair.\n Object.defineProperty(this, \"_order\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_bitmask\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_pkcs8AlgId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._hkdf = hkdf;\n switch (kem) {\n case KemId.DhkemP256HkdfSha256:\n this._alg = { name: \"ECDH\", namedCurve: \"P-256\" };\n this._nPk = 65;\n this._nSk = 32;\n this._nDh = 32;\n this._order = ORDER_P_256;\n this._bitmask = 0xFF;\n this._pkcs8AlgId = PKCS8_ALG_ID_P_256;\n break;\n case KemId.DhkemP384HkdfSha384:\n this._alg = { name: \"ECDH\", namedCurve: \"P-384\" };\n this._nPk = 97;\n this._nSk = 48;\n this._nDh = 48;\n this._order = ORDER_P_384;\n this._bitmask = 0xFF;\n this._pkcs8AlgId = PKCS8_ALG_ID_P_384;\n break;\n default:\n // case KemId.DhkemP521HkdfSha512:\n this._alg = { name: \"ECDH\", namedCurve: \"P-521\" };\n this._nPk = 133;\n this._nSk = 66;\n this._nDh = 66;\n this._order = ORDER_P_521;\n this._bitmask = 0x01;\n this._pkcs8AlgId = PKCS8_ALG_ID_P_521;\n break;\n }\n }\n async serializePublicKey(key) {\n await this._setup();\n try {\n return await this._api.exportKey(\"raw\", key);\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePublicKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, true);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async serializePrivateKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n if (!(\"d\" in jwk)) {\n throw new Error(\"Not private key\");\n }\n return base64UrlToBytes(jwk[\"d\"]).buffer;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePrivateKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, false);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async importKey(format, key, isPublic) {\n await this._setup();\n try {\n if (format === \"raw\") {\n return await this._importRawKey(key, isPublic);\n }\n // jwk\n if (key instanceof ArrayBuffer) {\n throw new Error(\"Invalid jwk key format\");\n }\n return await this._importJWK(key, isPublic);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async generateKeyPair() {\n await this._setup();\n try {\n return await this._api.generateKey(this._alg, true, KEM_USAGES);\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n }\n async deriveKeyPair(ikm) {\n await this._setup();\n try {\n const dkpPrk = await this._hkdf.labeledExtract(EMPTY.buffer, LABEL_DKP_PRK, new Uint8Array(ikm));\n const bn = new Bignum(this._nSk);\n for (let counter = 0; bn.isZero() || !bn.lessThan(this._order); counter++) {\n if (counter > 255) {\n throw new Error(\"Faild to derive a key pair\");\n }\n const bytes = new Uint8Array(await this._hkdf.labeledExpand(dkpPrk, LABEL_CANDIDATE, i2Osp(counter, 1), this._nSk));\n bytes[0] = bytes[0] & this._bitmask;\n bn.set(bytes);\n }\n const sk = await this._deserializePkcs8Key(bn.val());\n bn.reset();\n return {\n privateKey: sk,\n publicKey: await this.derivePublicKey(sk),\n };\n }\n catch (e) {\n throw new DeriveKeyPairError(e);\n }\n }\n async derivePublicKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n delete jwk[\"d\"];\n delete jwk[\"key_ops\"];\n return await this._api.importKey(\"jwk\", jwk, this._alg, true, []);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async dh(sk, pk) {\n try {\n await this._setup();\n const bits = await this._api.deriveBits({\n name: \"ECDH\",\n public: pk,\n }, sk, this._nDh * 8);\n return bits;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async _importRawKey(key, isPublic) {\n if (isPublic && key.byteLength !== this._nPk) {\n throw new Error(\"Invalid public key for the ciphersuite\");\n }\n if (!isPublic && key.byteLength !== this._nSk) {\n throw new Error(\"Invalid private key for the ciphersuite\");\n }\n if (isPublic) {\n return await this._api.importKey(\"raw\", key, this._alg, true, []);\n }\n return await this._deserializePkcs8Key(new Uint8Array(key));\n }\n async _importJWK(key, isPublic) {\n if (typeof key.crv === \"undefined\" || key.crv !== this._alg.namedCurve) {\n throw new Error(`Invalid crv: ${key.crv}`);\n }\n if (isPublic) {\n if (typeof key.d !== \"undefined\") {\n throw new Error(\"Invalid key: `d` should not be set\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, []);\n }\n if (typeof key.d === \"undefined\") {\n throw new Error(\"Invalid key: `d` not found\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, KEM_USAGES);\n }\n async _deserializePkcs8Key(k) {\n const pkcs8Key = new Uint8Array(this._pkcs8AlgId.length + k.length);\n pkcs8Key.set(this._pkcs8AlgId, 0);\n pkcs8Key.set(k, this._pkcs8AlgId.length);\n return await this._api.importKey(\"pkcs8\", pkcs8Key, this._alg, true, KEM_USAGES);\n }\n}\n","import { EMPTY } from \"../consts.js\";\nimport { InvalidParamError } from \"../errors.js\";\nimport { KdfId } from \"../identifiers.js\";\nimport { NativeAlgorithm } from \"../algorithm.js\";\n// b\"HPKE-v1\"\nconst HPKE_VERSION = new Uint8Array([72, 80, 75, 69, 45, 118, 49]);\nexport class HkdfNative extends NativeAlgorithm {\n constructor() {\n super();\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha256\n });\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"_suiteId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: EMPTY\n });\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-256\",\n length: 256,\n }\n });\n }\n init(suiteId) {\n this._suiteId = suiteId;\n }\n buildLabeledIkm(label, ikm) {\n this._checkInit();\n const ret = new Uint8Array(7 + this._suiteId.byteLength + label.byteLength + ikm.byteLength);\n ret.set(HPKE_VERSION, 0);\n ret.set(this._suiteId, 7);\n ret.set(label, 7 + this._suiteId.byteLength);\n ret.set(ikm, 7 + this._suiteId.byteLength + label.byteLength);\n return ret;\n }\n buildLabeledInfo(label, info, len) {\n this._checkInit();\n const ret = new Uint8Array(9 + this._suiteId.byteLength + label.byteLength + info.byteLength);\n ret.set(new Uint8Array([0, len]), 0);\n ret.set(HPKE_VERSION, 2);\n ret.set(this._suiteId, 9);\n ret.set(label, 9 + this._suiteId.byteLength);\n ret.set(info, 9 + this._suiteId.byteLength + label.byteLength);\n return ret;\n }\n async extract(salt, ikm) {\n await this._setup();\n if (salt.byteLength === 0) {\n salt = new ArrayBuffer(this.hashSize);\n }\n if (salt.byteLength !== this.hashSize) {\n throw new InvalidParamError(\"The salt length must be the same as the hashSize\");\n }\n const key = await this._api.importKey(\"raw\", salt, this.algHash, false, [\n \"sign\",\n ]);\n return await this._api.sign(\"HMAC\", key, ikm);\n }\n async expand(prk, info, len) {\n await this._setup();\n const key = await this._api.importKey(\"raw\", prk, this.algHash, false, [\n \"sign\",\n ]);\n const okm = new ArrayBuffer(len);\n const p = new Uint8Array(okm);\n let prev = EMPTY;\n const mid = new Uint8Array(info);\n const tail = new Uint8Array(1);\n if (len > 255 * this.hashSize) {\n throw new Error(\"Entropy limit reached\");\n }\n const tmp = new Uint8Array(this.hashSize + mid.length + 1);\n for (let i = 1, cur = 0; cur < p.length; i++) {\n tail[0] = i;\n tmp.set(prev, 0);\n tmp.set(mid, prev.length);\n tmp.set(tail, prev.length + mid.length);\n prev = new Uint8Array(await this._api.sign(\"HMAC\", key, tmp.slice(0, prev.length + mid.length + 1)));\n if (p.length - cur >= prev.length) {\n p.set(prev, cur);\n cur += prev.length;\n }\n else {\n p.set(prev.slice(0, p.length - cur), cur);\n cur += p.length - cur;\n }\n }\n return okm;\n }\n async extractAndExpand(salt, ikm, info, len) {\n await this._setup();\n const baseKey = await this._api.importKey(\"raw\", ikm, \"HKDF\", false, [\"deriveBits\"]);\n return await this._api.deriveBits({\n name: \"HKDF\",\n hash: this.algHash.hash,\n salt: salt,\n info: info,\n }, baseKey, len * 8);\n }\n async labeledExtract(salt, label, ikm) {\n return await this.extract(salt, this.buildLabeledIkm(label, ikm).buffer);\n }\n async labeledExpand(prk, label, info, len) {\n return await this.expand(prk, this.buildLabeledInfo(label, info, len).buffer, len);\n }\n _checkInit() {\n if (this._suiteId === EMPTY) {\n throw new Error(\"Not initialized. Call init()\");\n }\n }\n}\nexport class HkdfSha256Native extends HkdfNative {\n constructor() {\n super(...arguments);\n /** KdfId.HkdfSha256 (0x0001) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha256\n });\n /** 32 */\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n /** The parameters for Web Cryptography API */\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-256\",\n length: 256,\n }\n });\n }\n}\nexport class HkdfSha384Native extends HkdfNative {\n constructor() {\n super(...arguments);\n /** KdfId.HkdfSha384 (0x0002) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha384\n });\n /** 48 */\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 48\n });\n /** The parameters for Web Cryptography API */\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-384\",\n length: 384,\n }\n });\n }\n}\nexport class HkdfSha512Native extends HkdfNative {\n constructor() {\n super(...arguments);\n /** KdfId.HkdfSha512 (0x0003) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha512\n });\n /** 64 */\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 64\n });\n /** The parameters for Web Cryptography API */\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-512\",\n length: 512,\n }\n });\n }\n}\n","// The key usages for AEAD.\nexport const AEAD_USAGES = [\"encrypt\", \"decrypt\"];\n","/**\n * This file is based on noble-curves (https://github.com/paulmillr/noble-curves).\n *\n * noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com)\n *\n * The original file is located at:\n * https://github.com/paulmillr/noble-curves/blob/b9d49d2b41d550571a0c5be443ecb62109fa3373/src/abstract/montgomery.ts\n */\n/**\n * Montgomery curve methods. It's not really whole montgomery curve,\n * just bunch of very specific methods for X25519 / X448 from\n * [RFC 7748](https://www.rfc-editor.org/rfc/rfc7748)\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { abytes, aInRange, bytesToNumberLE, copyBytes, numberToBytesLE, randomBytesAsync, validateObject, } from \"../utils/noble.js\";\nimport { createKeygen } from \"./curve.js\";\nimport { mod } from \"./modular.js\";\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nfunction validateOpts(curve) {\n validateObject(curve, {\n adjustScalarBytes: \"function\",\n powPminus2: \"function\",\n });\n return Object.freeze({ ...curve });\n}\nexport function montgomery(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { P, type, adjustScalarBytes, powPminus2, randomBytes: rand } = CURVE;\n const is25519 = type === \"x25519\";\n if (!is25519 && type !== \"x448\")\n throw new Error(\"invalid type\");\n const randomBytes_ = rand || randomBytesAsync;\n const montgomeryBits = is25519 ? 255 : 448;\n const fieldLen = is25519 ? 32 : 56;\n const Gu = is25519 ? BigInt(9) : BigInt(5);\n // RFC 7748 #5:\n // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and\n // (156326 - 2) / 4 = 39081 for curve448/X448\n // const a = is25519 ? 156326n : 486662n;\n const a24 = is25519 ? BigInt(121665) : BigInt(39081);\n // RFC: x25519 \"the resulting integer is of the form 2^254 plus\n // eight times a value between 0 and 2^251 - 1 (inclusive)\"\n // x448: \"2^447 plus four times a value between 0 and 2^445 - 1 (inclusive)\"\n const minScalar = is25519 ? _2n ** BigInt(254) : _2n ** BigInt(447);\n const maxAdded = is25519\n ? BigInt(8) * _2n ** BigInt(251) - _1n\n : BigInt(4) * _2n ** BigInt(445) - _1n;\n const maxScalar = minScalar + maxAdded + _1n; // (inclusive)\n const modP = (n) => mod(n, P);\n const GuBytes = encodeU(Gu);\n function encodeU(u) {\n return numberToBytesLE(modP(u), fieldLen);\n }\n function decodeU(u) {\n const _u = copyBytes(abytes(u, fieldLen, \"uCoordinate\"));\n // RFC: When receiving such an array, implementations of X25519\n // (but not X448) MUST mask the most significant bit in the final byte.\n if (is25519)\n _u[31] &= 127; // 0b0111_1111\n // RFC: Implementations MUST accept non-canonical values and process them as\n // if they had been reduced modulo the field prime. The non-canonical\n // values are 2^255 - 19 through 2^255 - 1 for X25519 and 2^448 - 2^224\n // - 1 through 2^448 - 1 for X448.\n return modP(bytesToNumberLE(_u));\n }\n function decodeScalar(scalar) {\n return bytesToNumberLE(adjustScalarBytes(copyBytes(abytes(scalar, fieldLen, \"scalar\"))));\n }\n function scalarMult(scalar, u) {\n const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar));\n // Some public keys are useless, of low-order. Curve author doesn't think\n // it needs to be validated, but we do it nonetheless.\n // https://cr.yp.to/ecdh.html#validate\n if (pu === _0n)\n throw new Error(\"invalid private or public key received\");\n return encodeU(pu);\n }\n // Computes public key from private. By doing scalar multiplication of base point.\n function scalarMultBase(scalar) {\n return scalarMult(scalar, GuBytes);\n }\n const getPublicKey = scalarMultBase;\n const getSharedSecret = scalarMult;\n // cswap from RFC7748 \"example code\"\n function cswap(swap, x_2, x_3) {\n // dummy = mask(swap) AND (x_2 XOR x_3)\n // Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n // and x_3, computed, e.g., as mask(swap) = 0 - swap.\n const dummy = modP(swap * (x_2 - x_3));\n x_2 = modP(x_2 - dummy); // x_2 = x_2 XOR dummy\n x_3 = modP(x_3 + dummy); // x_3 = x_3 XOR dummy\n return { x_2, x_3 };\n }\n /**\n * Montgomery x-only multiplication ladder.\n * @param pointU u coordinate (x) on Montgomery Curve 25519\n * @param scalar by which the point would be multiplied\n * @returns new Point on Montgomery curve\n */\n function montgomeryLadder(u, scalar) {\n aInRange(\"u\", u, _0n, P);\n aInRange(\"scalar\", scalar, minScalar, maxScalar);\n const k = scalar;\n const x_1 = u;\n let x_2 = _1n;\n let z_2 = _0n;\n let x_3 = u;\n let z_3 = _1n;\n let swap = _0n;\n for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n const k_t = (k >> t) & _1n;\n swap ^= k_t;\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n swap = k_t;\n const A = x_2 + z_2;\n const AA = modP(A * A);\n const B = x_2 - z_2;\n const BB = modP(B * B);\n const E = AA - BB;\n const C = x_3 + z_3;\n const D = x_3 - z_3;\n const DA = modP(D * A);\n const CB = modP(C * B);\n const dacb = DA + CB;\n const da_cb = DA - CB;\n x_3 = modP(dacb * dacb);\n z_3 = modP(x_1 * modP(da_cb * da_cb));\n x_2 = modP(AA * BB);\n z_2 = modP(E * (AA + modP(a24 * E)));\n }\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n const z2 = powPminus2(z_2); // `Fp.pow(x, P - _2n)` is much slower equivalent\n return modP(x_2 * z2); // Return x_2 * (z_2^(p - 2))\n }\n const lengths = {\n secretKey: fieldLen,\n publicKey: fieldLen,\n seed: fieldLen,\n };\n const randomSecretKey = async (seed) => {\n if (seed === undefined) {\n seed = await randomBytes_(fieldLen);\n }\n abytes(seed, lengths.seed, \"seed\");\n return seed;\n };\n const utils = { randomSecretKey };\n return Object.freeze({\n keygen: createKeygen(randomSecretKey, getPublicKey),\n getSharedSecret,\n getPublicKey,\n scalarMult,\n scalarMultBase,\n utils,\n GuBytes: GuBytes.slice(),\n lengths,\n });\n}\n","import { AEAD_USAGES, AeadId, NativeAlgorithm } from \"@hpke/common\";\nexport class AesGcmContext extends NativeAlgorithm {\n constructor(key) {\n super();\n Object.defineProperty(this, \"_rawKey\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_key\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: undefined\n });\n this._rawKey = key;\n }\n async seal(iv, data, aad) {\n await this._setupKey();\n const alg = {\n name: \"AES-GCM\",\n iv: iv,\n additionalData: aad,\n };\n const ct = await this._api.encrypt(alg, this._key, data);\n return ct;\n }\n async open(iv, data, aad) {\n await this._setupKey();\n const alg = {\n name: \"AES-GCM\",\n iv: iv,\n additionalData: aad,\n };\n const pt = await this._api.decrypt(alg, this._key, data);\n return pt;\n }\n async _setupKey() {\n if (this._key !== undefined) {\n return;\n }\n await this._setup();\n const key = await this._importKey(this._rawKey);\n (new Uint8Array(this._rawKey)).fill(0);\n this._key = key;\n return;\n }\n async _importKey(key) {\n return await this._api.importKey(\"raw\", key, { name: \"AES-GCM\" }, true, AEAD_USAGES);\n }\n}\n/**\n * The AES-128-GCM for HPKE AEAD implementing {@link AeadInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `aead` parameter of {@link CipherSuiteParams} instead of `AeadId.Aes128Gcm`.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class Aes128Gcm {\n constructor() {\n /** AeadId.Aes128Gcm (0x0001) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: AeadId.Aes128Gcm\n });\n /** 16 */\n Object.defineProperty(this, \"keySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 16\n });\n /** 12 */\n Object.defineProperty(this, \"nonceSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 12\n });\n /** 16 */\n Object.defineProperty(this, \"tagSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 16\n });\n }\n createEncryptionContext(key) {\n return new AesGcmContext(key);\n }\n}\n/**\n * The AES-256-GCM for HPKE AEAD implementing {@link AeadInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `aead` parameter of {@link CipherSuiteParams} instead of `AeadId.Aes256Gcm`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes256Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes256Gcm(),\n * });\n * ```\n */\nexport class Aes256Gcm extends Aes128Gcm {\n constructor() {\n super(...arguments);\n /** AeadId.Aes256Gcm (0x0002) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: AeadId.Aes256Gcm\n });\n /** 32 */\n Object.defineProperty(this, \"keySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n /** 12 */\n Object.defineProperty(this, \"nonceSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 12\n });\n /** 16 */\n Object.defineProperty(this, \"tagSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 16\n });\n }\n}\n","import { NotSupportedError } from \"@hpke/common\";\nexport function emitNotSupported() {\n return new Promise((_resolve, reject) => {\n reject(new NotSupportedError(\"Not supported\"));\n });\n}\n","import { ExportError, INPUT_LENGTH_LIMIT, InvalidParamError, } from \"@hpke/common\";\nimport { emitNotSupported } from \"./utils/emitNotSupported.js\";\n// b\"sec\"\nconst LABEL_SEC = new Uint8Array([115, 101, 99]);\nexport class ExporterContextImpl {\n constructor(api, kdf, exporterSecret) {\n Object.defineProperty(this, \"_api\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"exporterSecret\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_kdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._api = api;\n this._kdf = kdf;\n this.exporterSecret = exporterSecret;\n }\n async seal(_data, _aad) {\n return await emitNotSupported();\n }\n async open(_data, _aad) {\n return await emitNotSupported();\n }\n async export(exporterContext, len) {\n if (exporterContext.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long exporter context\");\n }\n try {\n return await this._kdf.labeledExpand(this.exporterSecret, LABEL_SEC, new Uint8Array(exporterContext), len);\n }\n catch (e) {\n throw new ExportError(e);\n }\n }\n}\nexport class RecipientExporterContextImpl extends ExporterContextImpl {\n}\nexport class SenderExporterContextImpl extends ExporterContextImpl {\n constructor(api, kdf, exporterSecret, enc) {\n super(api, kdf, exporterSecret);\n Object.defineProperty(this, \"enc\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.enc = enc;\n return;\n }\n}\n","import { i2Osp, MessageLimitReachedError, xor } from \"@hpke/common\";\nimport { ExporterContextImpl } from \"./exporterContext.js\";\nexport class EncryptionContextImpl extends ExporterContextImpl {\n constructor(api, kdf, params) {\n super(api, kdf, params.exporterSecret);\n // AEAD id.\n Object.defineProperty(this, \"_aead\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The length in bytes of a key for the algorithm.\n Object.defineProperty(this, \"_nK\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The length in bytes of a nonce for the algorithm.\n Object.defineProperty(this, \"_nN\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The length in bytes of an authentication tag for the algorithm.\n Object.defineProperty(this, \"_nT\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The end-to-end encryption key information.\n Object.defineProperty(this, \"_ctx\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n if (params.key === undefined || params.baseNonce === undefined ||\n params.seq === undefined) {\n throw new Error(\"Required parameters are missing\");\n }\n this._aead = params.aead;\n this._nK = this._aead.keySize;\n this._nN = this._aead.nonceSize;\n this._nT = this._aead.tagSize;\n const key = this._aead.createEncryptionContext(params.key);\n this._ctx = {\n key: key,\n baseNonce: params.baseNonce,\n seq: params.seq,\n };\n }\n computeNonce(k) {\n const seqBytes = i2Osp(k.seq, k.baseNonce.byteLength);\n return xor(k.baseNonce, seqBytes).buffer;\n }\n incrementSeq(k) {\n // if (this.seq >= (1 << (8 * this.baseNonce.byteLength)) - 1) {\n if (k.seq > Number.MAX_SAFE_INTEGER) {\n throw new MessageLimitReachedError(\"Message limit reached\");\n }\n k.seq += 1;\n return;\n }\n}\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _Mutex_locked;\nexport class Mutex {\n constructor() {\n _Mutex_locked.set(this, Promise.resolve());\n }\n async lock() {\n let releaseLock;\n const nextLock = new Promise((resolve) => {\n releaseLock = resolve;\n });\n const previousLock = __classPrivateFieldGet(this, _Mutex_locked, \"f\");\n __classPrivateFieldSet(this, _Mutex_locked, nextLock, \"f\");\n await previousLock;\n return releaseLock;\n }\n}\n_Mutex_locked = new WeakMap();\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _RecipientContextImpl_mutex;\nimport { EMPTY, OpenError } from \"@hpke/common\";\nimport { EncryptionContextImpl } from \"./encryptionContext.js\";\nimport { Mutex } from \"./mutex.js\";\nexport class RecipientContextImpl extends EncryptionContextImpl {\n constructor() {\n super(...arguments);\n _RecipientContextImpl_mutex.set(this, void 0);\n }\n async open(data, aad = EMPTY.buffer) {\n __classPrivateFieldSet(this, _RecipientContextImpl_mutex, __classPrivateFieldGet(this, _RecipientContextImpl_mutex, \"f\") ?? new Mutex(), \"f\");\n const release = await __classPrivateFieldGet(this, _RecipientContextImpl_mutex, \"f\").lock();\n let pt;\n try {\n pt = await this._ctx.key.open(this.computeNonce(this._ctx), data, aad);\n }\n catch (e) {\n throw new OpenError(e);\n }\n finally {\n release();\n }\n this.incrementSeq(this._ctx);\n return pt;\n }\n}\n_RecipientContextImpl_mutex = new WeakMap();\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _SenderContextImpl_mutex;\nimport { EMPTY, SealError } from \"@hpke/common\";\nimport { EncryptionContextImpl } from \"./encryptionContext.js\";\nimport { Mutex } from \"./mutex.js\";\nexport class SenderContextImpl extends EncryptionContextImpl {\n constructor(api, kdf, params, enc) {\n super(api, kdf, params);\n Object.defineProperty(this, \"enc\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n _SenderContextImpl_mutex.set(this, void 0);\n this.enc = enc;\n }\n async seal(data, aad = EMPTY.buffer) {\n __classPrivateFieldSet(this, _SenderContextImpl_mutex, __classPrivateFieldGet(this, _SenderContextImpl_mutex, \"f\") ?? new Mutex(), \"f\");\n const release = await __classPrivateFieldGet(this, _SenderContextImpl_mutex, \"f\").lock();\n let ct;\n try {\n ct = await this._ctx.key.seal(this.computeNonce(this._ctx), data, aad);\n }\n catch (e) {\n throw new SealError(e);\n }\n finally {\n release();\n }\n this.incrementSeq(this._ctx);\n return ct;\n }\n}\n_SenderContextImpl_mutex = new WeakMap();\n","import { AeadId, EMPTY, i2Osp, INFO_LENGTH_LIMIT, INPUT_LENGTH_LIMIT, InvalidParamError, MINIMUM_PSK_LENGTH, Mode, NativeAlgorithm, } from \"@hpke/common\";\nimport { RecipientExporterContextImpl, SenderExporterContextImpl, } from \"./exporterContext.js\";\nimport { RecipientContextImpl } from \"./recipientContext.js\";\nimport { SenderContextImpl } from \"./senderContext.js\";\n// b\"base_nonce\"\n// deno-fmt-ignore\nconst LABEL_BASE_NONCE = new Uint8Array([\n 98, 97, 115, 101, 95, 110, 111, 110, 99, 101,\n]);\n// b\"exp\"\nconst LABEL_EXP = new Uint8Array([101, 120, 112]);\n// b\"info_hash\"\n// deno-fmt-ignore\nconst LABEL_INFO_HASH = new Uint8Array([\n 105, 110, 102, 111, 95, 104, 97, 115, 104,\n]);\n// b\"key\"\nconst LABEL_KEY = new Uint8Array([107, 101, 121]);\n// b\"psk_id_hash\"\n// deno-fmt-ignore\nconst LABEL_PSK_ID_HASH = new Uint8Array([\n 112, 115, 107, 95, 105, 100, 95, 104, 97, 115, 104,\n]);\n// b\"secret\"\nconst LABEL_SECRET = new Uint8Array([115, 101, 99, 114, 101, 116]);\n// b\"HPKE\"\n// deno-fmt-ignore\nconst SUITE_ID_HEADER_HPKE = new Uint8Array([\n 72, 80, 75, 69, 0, 0, 0, 0, 0, 0,\n]);\n/**\n * The Hybrid Public Key Encryption (HPKE) ciphersuite,\n * which is implemented using only\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n *\n * This is the super class of {@link CipherSuite} and the same as\n * {@link https://jsr.io/@hpke/core/doc/~/CipherSuite | @hpke/core#CipherSuite} as follows:\n * which supports only the ciphersuites that can be implemented on the native\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n * Therefore, the following cryptographic algorithms are not supported for now:\n * - DHKEM(X25519, HKDF-SHA256)\n * - DHKEM(X448, HKDF-SHA512)\n * - ChaCha20Poly1305\n *\n * In addtion, the HKDF functions contained in this class can only derive\n * keys of the same length as the `hashSize`.\n *\n * If you want to use the unsupported cryptographic algorithms\n * above or derive keys longer than the `hashSize`,\n * please use {@link CipherSuite}.\n *\n * This class provides following functions:\n *\n * - Creates encryption contexts both for senders and recipients.\n * - {@link createSenderContext}\n * - {@link createRecipientContext}\n * - Provides single-shot encryption API.\n * - {@link seal}\n * - {@link open}\n *\n * The calling of the constructor of this class is the starting\n * point for HPKE operations for both senders and recipients.\n *\n * @example Use only ciphersuites supported by Web Cryptography API.\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * CipherSuite,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n *\n * @example Use a ciphersuite which is currently not supported by Web Cryptography API.\n *\n * ```ts\n * import { Aes128Gcm, HkdfSha256, CipherSuite } from \"@hpke/core\";\n * // Use an extension module.\n * import { DhkemX25519HkdfSha256 } from \"@hpke/dhkem-x25519\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemX25519HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class CipherSuiteNative extends NativeAlgorithm {\n /**\n * @param params A set of parameters for building a cipher suite.\n *\n * If the error occurred, throws {@link InvalidParamError}.\n *\n * @throws {@link InvalidParamError}\n */\n constructor(params) {\n super();\n Object.defineProperty(this, \"_kem\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_kdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_aead\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_suiteId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // KEM\n if (typeof params.kem === \"number\") {\n throw new InvalidParamError(\"KemId cannot be used\");\n }\n this._kem = params.kem;\n // KDF\n if (typeof params.kdf === \"number\") {\n throw new InvalidParamError(\"KdfId cannot be used\");\n }\n this._kdf = params.kdf;\n // AEAD\n if (typeof params.aead === \"number\") {\n throw new InvalidParamError(\"AeadId cannot be used\");\n }\n this._aead = params.aead;\n this._suiteId = new Uint8Array(SUITE_ID_HEADER_HPKE);\n this._suiteId.set(i2Osp(this._kem.id, 2), 4);\n this._suiteId.set(i2Osp(this._kdf.id, 2), 6);\n this._suiteId.set(i2Osp(this._aead.id, 2), 8);\n this._kdf.init(this._suiteId);\n }\n /**\n * Gets the KEM context of the ciphersuite.\n */\n get kem() {\n return this._kem;\n }\n /**\n * Gets the KDF context of the ciphersuite.\n */\n get kdf() {\n return this._kdf;\n }\n /**\n * Gets the AEAD context of the ciphersuite.\n */\n get aead() {\n return this._aead;\n }\n /**\n * Creates an encryption context for a sender.\n *\n * If the error occurred, throws {@link DecapError} | {@link ValidationError}.\n *\n * @param params A set of parameters for the sender encryption context.\n * @returns A sender encryption context.\n * @throws {@link EncapError}, {@link ValidationError}\n */\n async createSenderContext(params) {\n this._validateInputLength(params);\n await this._setup();\n const dh = await this._kem.encap(params);\n let mode;\n if (params.psk !== undefined) {\n mode = params.senderKey !== undefined ? Mode.AuthPsk : Mode.Psk;\n }\n else {\n mode = params.senderKey !== undefined ? Mode.Auth : Mode.Base;\n }\n return await this._keyScheduleS(mode, dh.sharedSecret, dh.enc, params);\n }\n /**\n * Creates an encryption context for a recipient.\n *\n * If the error occurred, throws {@link DecapError}\n * | {@link DeserializeError} | {@link ValidationError}.\n *\n * @param params A set of parameters for the recipient encryption context.\n * @returns A recipient encryption context.\n * @throws {@link DecapError}, {@link DeserializeError}, {@link ValidationError}\n */\n async createRecipientContext(params) {\n this._validateInputLength(params);\n await this._setup();\n const sharedSecret = await this._kem.decap(params);\n let mode;\n if (params.psk !== undefined) {\n mode = params.senderPublicKey !== undefined ? Mode.AuthPsk : Mode.Psk;\n }\n else {\n mode = params.senderPublicKey !== undefined ? Mode.Auth : Mode.Base;\n }\n return await this._keyScheduleR(mode, sharedSecret, params);\n }\n /**\n * Encrypts a message to a recipient.\n *\n * If the error occurred, throws `EncapError` | `MessageLimitReachedError` | `SealError` | `ValidationError`.\n *\n * @param params A set of parameters for building a sender encryption context.\n * @param pt A plain text as bytes to be encrypted.\n * @param aad Additional authenticated data as bytes fed by an application.\n * @returns A cipher text and an encapsulated key as bytes.\n * @throws {@link EncapError}, {@link MessageLimitReachedError}, {@link SealError}, {@link ValidationError}\n */\n async seal(params, pt, aad = EMPTY.buffer) {\n const ctx = await this.createSenderContext(params);\n return {\n ct: await ctx.seal(pt, aad),\n enc: ctx.enc,\n };\n }\n /**\n * Decrypts a message from a sender.\n *\n * If the error occurred, throws `DecapError` | `DeserializeError` | `OpenError` | `ValidationError`.\n *\n * @param params A set of parameters for building a recipient encryption context.\n * @param ct An encrypted text as bytes to be decrypted.\n * @param aad Additional authenticated data as bytes fed by an application.\n * @returns A decrypted plain text as bytes.\n * @throws {@link DecapError}, {@link DeserializeError}, {@link OpenError}, {@link ValidationError}\n */\n async open(params, ct, aad = EMPTY.buffer) {\n const ctx = await this.createRecipientContext(params);\n return await ctx.open(ct, aad);\n }\n // private verifyPskInputs(mode: Mode, params: KeyScheduleParams) {\n // const gotPsk = (params.psk !== undefined);\n // const gotPskId = (params.psk !== undefined && params.psk.id.byteLength > 0);\n // if (gotPsk !== gotPskId) {\n // throw new Error('Inconsistent PSK inputs');\n // }\n // if (gotPsk && (mode === Mode.Base || mode === Mode.Auth)) {\n // throw new Error('PSK input provided when not needed');\n // }\n // if (!gotPsk && (mode === Mode.Psk || mode === Mode.AuthPsk)) {\n // throw new Error('Missing required PSK input');\n // }\n // return;\n // }\n async _keySchedule(mode, sharedSecret, params) {\n // Currently, there is no point in executing this function\n // because this hpke library does not allow users to explicitly specify the mode.\n //\n // this.verifyPskInputs(mode, params);\n const pskId = params.psk === undefined\n ? EMPTY\n : new Uint8Array(params.psk.id);\n const pskIdHash = await this._kdf.labeledExtract(EMPTY.buffer, LABEL_PSK_ID_HASH, pskId);\n const info = params.info === undefined\n ? EMPTY\n : new Uint8Array(params.info);\n const infoHash = await this._kdf.labeledExtract(EMPTY.buffer, LABEL_INFO_HASH, info);\n const keyScheduleContext = new Uint8Array(1 + pskIdHash.byteLength + infoHash.byteLength);\n keyScheduleContext.set(new Uint8Array([mode]), 0);\n keyScheduleContext.set(new Uint8Array(pskIdHash), 1);\n keyScheduleContext.set(new Uint8Array(infoHash), 1 + pskIdHash.byteLength);\n const psk = params.psk === undefined\n ? EMPTY\n : new Uint8Array(params.psk.key);\n const ikm = this._kdf.buildLabeledIkm(LABEL_SECRET, psk)\n .buffer;\n const exporterSecretInfo = this._kdf.buildLabeledInfo(LABEL_EXP, keyScheduleContext, this._kdf.hashSize).buffer;\n const exporterSecret = await this._kdf.extractAndExpand(sharedSecret, ikm, exporterSecretInfo, this._kdf.hashSize);\n if (this._aead.id === AeadId.ExportOnly) {\n return { aead: this._aead, exporterSecret: exporterSecret };\n }\n const keyInfo = this._kdf.buildLabeledInfo(LABEL_KEY, keyScheduleContext, this._aead.keySize).buffer;\n const key = await this._kdf.extractAndExpand(sharedSecret, ikm, keyInfo, this._aead.keySize);\n const baseNonceInfo = this._kdf.buildLabeledInfo(LABEL_BASE_NONCE, keyScheduleContext, this._aead.nonceSize).buffer;\n const baseNonce = await this._kdf.extractAndExpand(sharedSecret, ikm, baseNonceInfo, this._aead.nonceSize);\n return {\n aead: this._aead,\n exporterSecret: exporterSecret,\n key: key,\n baseNonce: new Uint8Array(baseNonce),\n seq: 0,\n };\n }\n async _keyScheduleS(mode, sharedSecret, enc, params) {\n const res = await this._keySchedule(mode, sharedSecret, params);\n if (res.key === undefined) {\n return new SenderExporterContextImpl(this._api, this._kdf, res.exporterSecret, enc);\n }\n return new SenderContextImpl(this._api, this._kdf, res, enc);\n }\n async _keyScheduleR(mode, sharedSecret, params) {\n const res = await this._keySchedule(mode, sharedSecret, params);\n if (res.key === undefined) {\n return new RecipientExporterContextImpl(this._api, this._kdf, res.exporterSecret);\n }\n return new RecipientContextImpl(this._api, this._kdf, res);\n }\n _validateInputLength(params) {\n if (params.info !== undefined &&\n params.info.byteLength > INFO_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long info\");\n }\n if (params.psk !== undefined) {\n if (params.psk.key.byteLength < MINIMUM_PSK_LENGTH) {\n throw new InvalidParamError(`PSK must have at least ${MINIMUM_PSK_LENGTH} bytes`);\n }\n if (params.psk.key.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long psk.key\");\n }\n if (params.psk.id.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long psk.id\");\n }\n }\n return;\n }\n}\n","import { Dhkem, Ec, HkdfSha256Native, HkdfSha384Native, HkdfSha512Native, KemId, } from \"@hpke/common\";\nexport class DhkemP256HkdfSha256Native extends Dhkem {\n constructor() {\n const kdf = new HkdfSha256Native();\n const prim = new Ec(KemId.DhkemP256HkdfSha256, kdf);\n super(KemId.DhkemP256HkdfSha256, prim, kdf);\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KemId.DhkemP256HkdfSha256\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 65\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 65\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n }\n}\nexport class DhkemP384HkdfSha384Native extends Dhkem {\n constructor() {\n const kdf = new HkdfSha384Native();\n const prim = new Ec(KemId.DhkemP384HkdfSha384, kdf);\n super(KemId.DhkemP384HkdfSha384, prim, kdf);\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KemId.DhkemP384HkdfSha384\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 48\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 97\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 97\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 48\n });\n }\n}\nexport class DhkemP521HkdfSha512Native extends Dhkem {\n constructor() {\n const kdf = new HkdfSha512Native();\n const prim = new Ec(KemId.DhkemP521HkdfSha512, kdf);\n super(KemId.DhkemP521HkdfSha512, prim, kdf);\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KemId.DhkemP521HkdfSha512\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 64\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 133\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 133\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 64\n });\n }\n}\n","import { HkdfSha256Native, HkdfSha384Native, HkdfSha512Native, } from \"@hpke/common\";\nimport { CipherSuiteNative } from \"./cipherSuiteNative.js\";\nimport { DhkemP256HkdfSha256Native, DhkemP384HkdfSha384Native, DhkemP521HkdfSha512Native, } from \"./kems/dhkemNative.js\";\n/**\n * The Hybrid Public Key Encryption (HPKE) ciphersuite,\n * which is implemented using only\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n *\n * This class is the same as\n * {@link https://jsr.io/@hpke/core/doc/~/CipherSuiteNative | @hpke/core#CipherSuiteNative} as follows:\n * which supports only the ciphersuites that can be implemented on the native\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n * Therefore, the following cryptographic algorithms are not supported for now:\n * - `DHKEM(X25519, HKDF-SHA256)`\n * - `DHKEM(X448, HKDF-SHA512)`\n * - `ChaCha20Poly1305`\n *\n * In addtion, the HKDF functions contained in this `CipherSuiteNative`\n * class can only derive keys of the same length as the `hashSize`.\n *\n * If you want to use the unsupported cryptographic algorithms\n * above or derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * This class provides following functions:\n *\n * - Creates encryption contexts both for senders and recipients.\n * - {@link createSenderContext}\n * - {@link createRecipientContext}\n * - Provides single-shot encryption API.\n * - {@link seal}\n * - {@link open}\n *\n * The calling of the constructor of this class is the starting\n * point for HPKE operations for both senders and recipients.\n *\n * @example Use only ciphersuites supported by Web Cryptography API.\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * CipherSuite,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n *\n * @example Use a ciphersuite which is currently not supported by Web Cryptography API.\n *\n * ```ts\n * import { Aes128Gcm, HkdfSha256, CipherSuite } from \"@hpke/core\";\n * import { DhkemX25519HkdfSha256 } from \"@hpke/dhkem-x25519\";\n * const suite = new CipherSuite({\n * kem: new DhkemX25519HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class CipherSuite extends CipherSuiteNative {\n}\n/**\n * The DHKEM(P-256, HKDF-SHA256) for HPKE KEM implementing {@link KemInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KemId.DhkemP256HkdfSha256`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class DhkemP256HkdfSha256 extends DhkemP256HkdfSha256Native {\n}\n/**\n * The DHKEM(P-384, HKDF-SHA384) for HPKE KEM implementing {@link KemInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KemId.DhkemP384HkdfSha384`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP384HkdfSha384,\n * HkdfSha384,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP384HkdfSha384(),\n * kdf: new HkdfSha384(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class DhkemP384HkdfSha384 extends DhkemP384HkdfSha384Native {\n}\n/**\n * The DHKEM(P-521, HKDF-SHA512) for HPKE KEM implementing {@link KemInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KemId.DhkemP521HkdfSha512`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes256Gcm,\n * CipherSuite,\n * DhkemP521HkdfSha512,\n * HkdfSha512,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP521HkdfSha512(),\n * kdf: new HkdfSha512(),\n * aead: new Aes256Gcm(),\n * });\n * ```\n */\nexport class DhkemP521HkdfSha512 extends DhkemP521HkdfSha512Native {\n}\n/**\n * The HKDF-SHA256 for HPKE KDF implementing {@link KdfInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KdfId.HkdfSha256`.\n *\n * The KDF class can only derive keys of the same length as the `hashSize`.\n * If you want to derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class HkdfSha256 extends HkdfSha256Native {\n}\n/**\n * The HKDF-SHA384 for HPKE KDF implementing {@link KdfInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KdfId.HkdfSha384`.\n *\n * The KDF class can only derive keys of the same length as the `hashSize`.\n * If you want to derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP384HkdfSha384,\n * HkdfSha384,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP384HkdfSha384(),\n * kdf: new HkdfSha384(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class HkdfSha384 extends HkdfSha384Native {\n}\n/**\n * The HKDF-SHA512 for HPKE KDF implementing {@link KdfInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KdfId.HkdfSha512`.\n *\n * The KDF class can only derive keys of the same length as the `hashSize`.\n * If you want to derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes256Gcm,\n * CipherSuite,\n * DhkemP521HkdfSha512,\n * HkdfSha512,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP521HkdfSha512(),\n * kdf: new HkdfSha512(),\n * aead: new Aes256Gcm(),\n * });\n * ```\n */\nexport class HkdfSha512 extends HkdfSha512Native {\n}\n","import { base64UrlToBytes, DeriveKeyPairError, DeserializeError, EMPTY, KEM_USAGES, LABEL_DKP_PRK, LABEL_SK, NativeAlgorithm, NotSupportedError, SerializeError, } from \"@hpke/common\";\nconst ALG_NAME = \"X25519\";\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_X25519 = new Uint8Array([\n 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06,\n 0x03, 0x2b, 0x65, 0x6e, 0x04, 0x22, 0x04, 0x20,\n]);\nexport class X25519 extends NativeAlgorithm {\n constructor(hkdf) {\n super();\n Object.defineProperty(this, \"_hkdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_alg\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nPk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nSk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nDh\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_pkcs8AlgId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._alg = { name: ALG_NAME };\n this._hkdf = hkdf;\n this._nPk = 32;\n this._nSk = 32;\n this._nDh = 32;\n this._pkcs8AlgId = PKCS8_ALG_ID_X25519;\n }\n async serializePublicKey(key) {\n await this._setup();\n try {\n return await this._api.exportKey(\"raw\", key);\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePublicKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, true);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async serializePrivateKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n if (!(\"d\" in jwk)) {\n throw new Error(\"Not private key\");\n }\n return base64UrlToBytes(jwk[\"d\"]).buffer;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePrivateKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, false);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async importKey(format, key, isPublic) {\n await this._setup();\n try {\n if (format === \"raw\") {\n return await this._importRawKey(key, isPublic);\n }\n // jwk\n if (key instanceof ArrayBuffer) {\n throw new Error(\"Invalid jwk key format\");\n }\n return await this._importJWK(key, isPublic);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async generateKeyPair() {\n await this._setup();\n try {\n return await this._api.generateKey(ALG_NAME, true, KEM_USAGES);\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n }\n async deriveKeyPair(ikm) {\n await this._setup();\n try {\n const dkpPrk = await this._hkdf.labeledExtract(EMPTY.buffer, LABEL_DKP_PRK, new Uint8Array(ikm));\n const rawSk = await this._hkdf.labeledExpand(dkpPrk, LABEL_SK, EMPTY, this._nSk);\n const rawSkBytes = new Uint8Array(rawSk);\n const sk = await this._deserializePkcs8Key(rawSkBytes);\n rawSkBytes.fill(0);\n return {\n privateKey: sk,\n publicKey: await this.derivePublicKey(sk),\n };\n }\n catch (e) {\n throw new DeriveKeyPairError(e);\n }\n }\n async derivePublicKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n delete jwk[\"d\"];\n delete jwk[\"key_ops\"];\n return await this._api.importKey(\"jwk\", jwk, this._alg, true, []);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async dh(sk, pk) {\n await this._setup();\n try {\n const bits = await this._api.deriveBits({\n name: ALG_NAME,\n public: pk,\n }, sk, this._nDh * 8);\n return bits;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async _importRawKey(key, isPublic) {\n if (isPublic && key.byteLength !== this._nPk) {\n throw new Error(\"Invalid public key for the ciphersuite\");\n }\n if (!isPublic && key.byteLength !== this._nSk) {\n throw new Error(\"Invalid private key for the ciphersuite\");\n }\n if (isPublic) {\n return await this._api.importKey(\"raw\", key, this._alg, true, []);\n }\n return await this._deserializePkcs8Key(new Uint8Array(key));\n }\n async _importJWK(key, isPublic) {\n if (typeof key.kty === \"undefined\" || key.kty !== \"OKP\") {\n throw new Error(`Invalid kty: ${key.crv}`);\n }\n if (typeof key.crv === \"undefined\" || key.crv !== ALG_NAME) {\n throw new Error(`Invalid crv: ${key.crv}`);\n }\n if (isPublic) {\n if (typeof key.d !== \"undefined\") {\n throw new Error(\"Invalid key: `d` should not be set\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, []);\n }\n if (typeof key.d === \"undefined\") {\n throw new Error(\"Invalid key: `d` not found\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, KEM_USAGES);\n }\n async _deserializePkcs8Key(k) {\n const pkcs8Key = new Uint8Array(this._pkcs8AlgId.length + k.length);\n pkcs8Key.set(this._pkcs8AlgId, 0);\n pkcs8Key.set(k, this._pkcs8AlgId.length);\n return await this._api.importKey(\"pkcs8\", pkcs8Key, this._alg, true, KEM_USAGES);\n }\n}\n","import { base64UrlToBytes, DeriveKeyPairError, DeserializeError, EMPTY, KEM_USAGES, LABEL_DKP_PRK, LABEL_SK, NativeAlgorithm, NotSupportedError, SerializeError, } from \"@hpke/common\";\nconst ALG_NAME = \"X448\";\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_X448 = new Uint8Array([\n 0x30, 0x46, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06,\n 0x03, 0x2b, 0x65, 0x6f, 0x04, 0x3a, 0x04, 0x38,\n]);\nexport class X448 extends NativeAlgorithm {\n constructor(hkdf) {\n super();\n Object.defineProperty(this, \"_hkdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_alg\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nPk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nSk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nDh\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_pkcs8AlgId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._alg = { name: ALG_NAME };\n this._hkdf = hkdf;\n this._nPk = 56;\n this._nSk = 56;\n this._nDh = 56;\n this._pkcs8AlgId = PKCS8_ALG_ID_X448;\n }\n async serializePublicKey(key) {\n await this._setup();\n try {\n return await this._api.exportKey(\"raw\", key);\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePublicKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, true);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async serializePrivateKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n if (!(\"d\" in jwk)) {\n throw new Error(\"Not private key\");\n }\n return base64UrlToBytes(jwk[\"d\"]).buffer;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePrivateKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, false);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async importKey(format, key, isPublic) {\n await this._setup();\n try {\n if (format === \"raw\") {\n return await this._importRawKey(key, isPublic);\n }\n // jwk\n if (key instanceof ArrayBuffer) {\n throw new Error(\"Invalid jwk key format\");\n }\n return await this._importJWK(key, isPublic);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async generateKeyPair() {\n await this._setup();\n try {\n return await this._api.generateKey(ALG_NAME, true, KEM_USAGES);\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n }\n async deriveKeyPair(ikm) {\n await this._setup();\n try {\n const dkpPrk = await this._hkdf.labeledExtract(EMPTY.buffer, LABEL_DKP_PRK, new Uint8Array(ikm));\n const rawSk = await this._hkdf.labeledExpand(dkpPrk, LABEL_SK, EMPTY, this._nSk);\n const rawSkBytes = new Uint8Array(rawSk);\n const sk = await this._deserializePkcs8Key(rawSkBytes);\n rawSkBytes.fill(0);\n return {\n privateKey: sk,\n publicKey: await this.derivePublicKey(sk),\n };\n }\n catch (e) {\n throw new DeriveKeyPairError(e);\n }\n }\n async derivePublicKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n delete jwk[\"d\"];\n delete jwk[\"key_ops\"];\n return await this._api.importKey(\"jwk\", jwk, this._alg, true, []);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async dh(sk, pk) {\n await this._setup();\n try {\n const bits = await this._api.deriveBits({\n name: ALG_NAME,\n public: pk,\n }, sk, this._nDh * 8);\n return bits;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async _importRawKey(key, isPublic) {\n if (isPublic && key.byteLength !== this._nPk) {\n throw new Error(\"Invalid public key for the ciphersuite\");\n }\n if (!isPublic && key.byteLength !== this._nSk) {\n throw new Error(\"Invalid private key for the ciphersuite\");\n }\n if (isPublic) {\n return await this._api.importKey(\"raw\", key, this._alg, true, []);\n }\n return await this._deserializePkcs8Key(new Uint8Array(key));\n }\n async _importJWK(key, isPublic) {\n if (typeof key.kty === \"undefined\" || key.kty !== \"OKP\") {\n throw new Error(`Invalid kty: ${key.crv}`);\n }\n if (typeof key.crv === \"undefined\" || key.crv !== ALG_NAME) {\n throw new Error(`Invalid crv: ${key.crv}`);\n }\n if (isPublic) {\n if (typeof key.d !== \"undefined\") {\n throw new Error(\"Invalid key: `d` should not be set\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, []);\n }\n if (typeof key.d === \"undefined\") {\n throw new Error(\"Invalid key: `d` not found\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, KEM_USAGES);\n }\n async _deserializePkcs8Key(k) {\n const pkcs8Key = new Uint8Array(this._pkcs8AlgId.length + k.length);\n pkcs8Key.set(this._pkcs8AlgId, 0);\n pkcs8Key.set(k, this._pkcs8AlgId.length);\n return await this._api.importKey(\"pkcs8\", pkcs8Key, this._alg, true, KEM_USAGES);\n }\n}\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bech32m = exports.bech32 = void 0;\nconst ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\nconst ALPHABET_MAP = {};\nfor (let z = 0; z < ALPHABET.length; z++) {\n const x = ALPHABET.charAt(z);\n ALPHABET_MAP[x] = z;\n}\nfunction polymodStep(pre) {\n const b = pre >> 25;\n return (((pre & 0x1ffffff) << 5) ^\n (-((b >> 0) & 1) & 0x3b6a57b2) ^\n (-((b >> 1) & 1) & 0x26508e6d) ^\n (-((b >> 2) & 1) & 0x1ea119fa) ^\n (-((b >> 3) & 1) & 0x3d4233dd) ^\n (-((b >> 4) & 1) & 0x2a1462b3));\n}\nfunction prefixChk(prefix) {\n let chk = 1;\n for (let i = 0; i < prefix.length; ++i) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n return 'Invalid prefix (' + prefix + ')';\n chk = polymodStep(chk) ^ (c >> 5);\n }\n chk = polymodStep(chk);\n for (let i = 0; i < prefix.length; ++i) {\n const v = prefix.charCodeAt(i);\n chk = polymodStep(chk) ^ (v & 0x1f);\n }\n return chk;\n}\nfunction convert(data, inBits, outBits, pad) {\n let value = 0;\n let bits = 0;\n const maxV = (1 << outBits) - 1;\n const result = [];\n for (let i = 0; i < data.length; ++i) {\n value = (value << inBits) | data[i];\n bits += inBits;\n while (bits >= outBits) {\n bits -= outBits;\n result.push((value >> bits) & maxV);\n }\n }\n if (pad) {\n if (bits > 0) {\n result.push((value << (outBits - bits)) & maxV);\n }\n }\n else {\n if (bits >= inBits)\n return 'Excess padding';\n if ((value << (outBits - bits)) & maxV)\n return 'Non-zero padding';\n }\n return result;\n}\nfunction toWords(bytes) {\n return convert(bytes, 8, 5, true);\n}\nfunction fromWordsUnsafe(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n}\nfunction fromWords(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n throw new Error(res);\n}\nfunction getLibraryFromEncoding(encoding) {\n let ENCODING_CONST;\n if (encoding === 'bech32') {\n ENCODING_CONST = 1;\n }\n else {\n ENCODING_CONST = 0x2bc830a3;\n }\n function encode(prefix, words, LIMIT) {\n LIMIT = LIMIT || 90;\n if (prefix.length + 7 + words.length > LIMIT)\n throw new TypeError('Exceeds length limit');\n prefix = prefix.toLowerCase();\n // determine chk mod\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n throw new Error(chk);\n let result = prefix + '1';\n for (let i = 0; i < words.length; ++i) {\n const x = words[i];\n if (x >> 5 !== 0)\n throw new Error('Non 5-bit word');\n chk = polymodStep(chk) ^ x;\n result += ALPHABET.charAt(x);\n }\n for (let i = 0; i < 6; ++i) {\n chk = polymodStep(chk);\n }\n chk ^= ENCODING_CONST;\n for (let i = 0; i < 6; ++i) {\n const v = (chk >> ((5 - i) * 5)) & 0x1f;\n result += ALPHABET.charAt(v);\n }\n return result;\n }\n function __decode(str, LIMIT) {\n LIMIT = LIMIT || 90;\n if (str.length < 8)\n return str + ' too short';\n if (str.length > LIMIT)\n return 'Exceeds length limit';\n // don't allow mixed case\n const lowered = str.toLowerCase();\n const uppered = str.toUpperCase();\n if (str !== lowered && str !== uppered)\n return 'Mixed-case string ' + str;\n str = lowered;\n const split = str.lastIndexOf('1');\n if (split === -1)\n return 'No separator character for ' + str;\n if (split === 0)\n return 'Missing prefix for ' + str;\n const prefix = str.slice(0, split);\n const wordChars = str.slice(split + 1);\n if (wordChars.length < 6)\n return 'Data too short';\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n return chk;\n const words = [];\n for (let i = 0; i < wordChars.length; ++i) {\n const c = wordChars.charAt(i);\n const v = ALPHABET_MAP[c];\n if (v === undefined)\n return 'Unknown character ' + c;\n chk = polymodStep(chk) ^ v;\n // not in the checksum?\n if (i + 6 >= wordChars.length)\n continue;\n words.push(v);\n }\n if (chk !== ENCODING_CONST)\n return 'Invalid checksum for ' + str;\n return { prefix, words };\n }\n function decodeUnsafe(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n }\n function decode(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n throw new Error(res);\n }\n return {\n decodeUnsafe,\n decode,\n encode,\n toWords,\n fromWordsUnsafe,\n fromWords,\n };\n}\nexports.bech32 = getLibraryFromEncoding('bech32');\nexports.bech32m = getLibraryFromEncoding('bech32m');\n","/**\n * Audited & minimal JS implementation of hash functions, MACs and KDFs. Check out individual modules.\n * @module\n * @example\n```js\nimport {\n sha256, sha384, sha512, sha224, sha512_224, sha512_256\n} from '@noble/hashes/sha2.js';\nimport {\n sha3_224, sha3_256, sha3_384, sha3_512,\n keccak_224, keccak_256, keccak_384, keccak_512,\n shake128, shake256\n} from '@noble/hashes/sha3.js';\nimport {\n cshake128, cshake256,\n turboshake128, turboshake256,\n kt128, kt256,\n kmac128, kmac256,\n tuplehash256, parallelhash256,\n keccakprg\n} from '@noble/hashes/sha3-addons.js';\nimport { blake3 } from '@noble/hashes/blake3.js';\nimport { blake2b, blake2s } from '@noble/hashes/blake2.js';\nimport { hmac } from '@noble/hashes/hmac.js';\nimport { hkdf } from '@noble/hashes/hkdf.js';\nimport { pbkdf2, pbkdf2Async } from '@noble/hashes/pbkdf2.js';\nimport { scrypt, scryptAsync } from '@noble/hashes/scrypt.js';\nimport { md5, ripemd160, sha1 } from '@noble/hashes/legacy.js';\nimport * as utils from '@noble/hashes/utils.js';\n```\n */\nthrow new Error('root module cannot be imported: import submodules instead. Check out README');\nexport {};\n//# sourceMappingURL=index.js.map","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 5KB JS implementation of ed25519 EdDSA signatures.\n * Compliant with RFC8032, FIPS 186-5 & ZIP215.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const secretKey = ed.utils.randomSecretKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(secretKey); // Sync methods are also present\n const signature = await ed.signAsync(message, secretKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. ed25519 is twisted edwards curve. Equation is −x² + y² = -a + dx²y².\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // group order, amount of curve points\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n */\nconst ed25519_CURVE = {\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n};\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d, h } = ed25519_CURVE;\nconst L = 32; // field / group byte length\nconst L2 = 64;\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\nconst captureTrace = (...args) => {\n if ('captureStackTrace' in Error && typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(...args);\n }\n};\nconst err = (message = '') => {\n const e = new Error(message);\n captureTrace(e, err);\n throw e;\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\nconst isBytes = (a) => a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n/** Asserts something is Uint8Array. */\nconst abytes = (value, length, title = '') => {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n err(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n};\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\nconst u8fr = (buf) => Uint8Array.from(buf);\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\nconst cr = () => globalThis?.crypto; // WebCrypto is available in all modern environments\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined, consider polyfill');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0)); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Will throw when not available. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\nconst assertRange = (n, min, max, msg = 'bad number: out of range') => (isBig(n) && min <= n && n < max ? n : err(msg));\n/** modular division */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\nconst modN = (a) => M(a, N);\n/** Modular inversion using euclidean GCD (non-CT). No negative exponent for now. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst callHash = (name) => {\n // @ts-ignore\n const fn = hashes[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\nconst hash = (msg) => callHash('sha512')(msg);\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\nconst B256 = 2n ** 256n;\n/** Point in XYZT extended coordinates. */\nclass Point {\n static BASE;\n static ZERO;\n X;\n Y;\n Z;\n T;\n constructor(X, Y, Z, T) {\n const max = B256;\n this.X = assertRange(X, 0n, max);\n this.Y = assertRange(Y, 0n, max);\n this.Z = assertRange(Z, 1n, max);\n this.T = assertRange(T, 0n, max);\n Object.freeze(this);\n }\n static CURVE() {\n return ed25519_CURVE;\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, M(p.x * p.y));\n }\n /** RFC8032 5.1.3: Uint8Array to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumLE(normed);\n // zip215=true: 0 <= y < 2^256\n // zip215=false, RFC8032: 0 <= y < 2^255-19\n const max = zip215 ? B256 : P;\n assertRange(y, 0n, max);\n const y2 = M(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = M(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, M(x * y)); // Z=1, T=xy\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(hexToBytes(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n if (p.is0())\n return err('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = M(X * X); // X²\n const Y2 = M(Y * Y); // Y²\n const Z2 = M(Z * Z); // Z²\n const Z4 = M(Z2 * Z2); // Z⁴\n const aX2 = M(X2 * a); // aX²\n const left = M(Z2 * M(aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + M(d * M(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n return err('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = M(X * Y);\n const ZT = M(Z * T);\n if (XY !== ZT)\n return err('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = apoint(other); // checks class equality\n const X1Z2 = M(X1 * Z2);\n const X2Z1 = M(X2 * Z1);\n const Y1Z2 = M(Y1 * Z2);\n const Y2Z1 = M(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.X), this.Y, this.Z, M(-this.T));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(apoint(other).negate());\n }\n /**\n * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n scalar by which point is multiplied\n * @param safe safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n if (!safe && (n === 0n || this.is0()))\n return I;\n assertRange(n, 1n, N);\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n multiplyUnsafe(scalar) {\n return this.multiply(scalar, false);\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { X, Y, Z } = this;\n // fast-paths for ZERO point OR Z=1\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(Z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (M(Z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n const x = M(X * iz);\n const y = M(Y * iz);\n return { x, y };\n }\n toBytes() {\n const { x, y } = this.assertValidity().toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n }\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // Multiply by big number N. We can't `mul(N)` because of checks. Instead, we `mul(N/2)*2+1`\n let p = this.multiply(N / 2n, false).double();\n if (N % 2n)\n p = p.add(this);\n return p.is0();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(assertRange(num, 0n, B256), L2)).reverse();\nconst bytesToNumLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n let r = x;\n while (power-- > 0n) {\n r *= r;\n r %= P;\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = (x * x) % P; // x^2, bits 1\n const b2 = (x2 * x) % P; // x^3, bits 11\n const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // √-1\n// for sqrt comp\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = M(v * v * v); // v³\n const v7 = M(v3 * v3 * v); // v⁷\n const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = M(u * v3 * pow); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = M(v * x * x); // vx²\n const root1 = x; // First root candidate\n const root2 = M(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// N == L, just weird naming\nconst modL_LE = (hash) => modN(bytesToNumLE(hash)); // modulo L; but little-endian\n/** hashes.sha512 should conform to the interface. */\n// TODO: rename\nconst sha512a = (...m) => hashes.sha512Async(concatBytes(...m)); // Async SHA512\nconst sha512s = (...m) => callHash('sha512')(concatBytes(...m));\n// RFC8032 5.1.5\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const head = hashed.slice(0, L);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = hashed.slice(L, L2); // secret key \"prefix\"\n const scalar = modL_LE(head); // modular division over curve order\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (secretKey) => sha512a(abytes(secretKey, L)).then(hash2extK);\nconst getExtendedPublicKey = (secretKey) => hash2extK(sha512s(abytes(secretKey, L)));\n/** Creates 32-byte ed25519 public key from 32-byte secret key. Async. */\nconst getPublicKeyAsync = (secretKey) => getExtendedPublicKeyAsync(secretKey).then((p) => p.pointBytes);\n/** Creates 32-byte ed25519 public key from 32-byte secret key. To use, set `hashes.sha512` first. */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\n// Code, shared between sync & async sign\nconst _sign = (e, rBytes, msg) => {\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), L2); // 64-byte sig: 32b R.x + 32b LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message using secret key. Async.\n * Follows RFC8032 5.1.6.\n */\nconst signAsync = async (message, secretKey) => {\n const m = abytes(message);\n const e = await getExtendedPublicKeyAsync(secretKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message using secret key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n */\nconst sign = (message, secretKey) => {\n const m = abytes(message);\n const e = getExtendedPublicKey(secretKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst defaultVerifyOpts = { zip215: true };\nconst _verify = (sig, msg, pub, opts = defaultVerifyOpts) => {\n sig = abytes(sig, L2); // Signature hex str/Bytes, must be 64 bytes\n msg = abytes(msg); // Message hex str/Bytes\n pub = abytes(pub, L);\n const { zip215 } = opts; // switch between zip215 and rfc8032 verif\n let A;\n let R;\n let s;\n let SB;\n let hashable = Uint8Array.of();\n try {\n A = Point.fromBytes(pub, zip215); // public key A decoded\n R = Point.fromBytes(sig.slice(0, L), zip215); // 0 <= R < 2^256: ZIP215 R can be >= P\n s = bytesToNumLE(sig.slice(L, L2)); // Decode second half as an integer S\n SB = G.multiply(s, false); // in the range 0 <= s < L\n hashable = concatBytes(R.toBytes(), A.toBytes(), msg); // dom2(F, C) || R || A || PH(M)\n }\n catch (error) { }\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n if (SB == null)\n return false; // false if try-catch catched an error\n if (!zip215 && A.isSmallOrder())\n return false; // false for SBS: Strongly Binding Signature\n const k = modL_LE(hashed); // decode in little-endian, modulo L\n const RkA = R.add(A.multiply(k, false)); // [8]R + [8][k]A'\n return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n };\n return { hashable, finish };\n};\n/** Verifies signature on message and public key. Async. Follows RFC8032 5.1.7. */\nconst verifyAsync = async (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishA(_verify(signature, message, publicKey, opts));\n/** Verifies signature on message and public key. To use, set `hashes.sha512` first. Follows RFC8032 5.1.7. */\nconst verify = (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishS(_verify(signature, message, publicKey, opts));\n/** Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves. */\nconst etc = {\n bytesToHex: bytesToHex,\n hexToBytes: hexToBytes,\n concatBytes: concatBytes,\n mod: M,\n invert: invert,\n randomBytes: randomBytes,\n};\nconst hashes = {\n sha512Async: async (message) => {\n const s = subtle();\n const m = concatBytes(message);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512: undefined,\n};\n// FIPS 186 B.4.1 compliant key generation produces private keys\n// with modulo bias being neglible. takes >N+16 bytes, returns (hash mod n-1)+1\nconst randomSecretKey = (seed = randomBytes(L)) => seed;\nconst keygen = (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = getPublicKey(secretKey);\n return { secretKey, publicKey };\n};\nconst keygenAsync = async (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = await getPublicKeyAsync(secretKey);\n return { secretKey, publicKey };\n};\n/** ed25519-specific key utilities. */\nconst utils = {\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomSecretKey: randomSecretKey,\n};\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8, NOT 32 - see wNAF loop\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // precomputes for base point G\n// const-time negate\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n // We use negative indexes to reduce size of precomputed table by 2x.\n // Instead of needing precomputes 0..256, we only calculate them for 0..128.\n // If an index > 128 is found, we do (256-index) - where 256 is next window.\n // Naive: index +127 => 127, +224 => 224\n // Optimized: index +127 => 127, +224 => 256-32\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n }\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n if (n !== 0n)\n err('invalid wnaf');\n return { p, f }; // return both real and fake points for JIT\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { etc, getPublicKey, getPublicKeyAsync, hash, hashes, keygen, keygenAsync, Point, sign, signAsync, utils, verify, verifyAsync, };\n"],"names":["HpkeError","Error","constructor","e","message","super","this","name","EncapError","DecapError","ExportError","SealError","OpenError","MessageLimitReachedError","DeriveKeyPairError","dntGlobalThis","baseObj","globalThis","extObj","Proxy","get","_target","prop","_receiver","set","value","deleteProperty","success","ownKeys","baseKeys","Reflect","extKeys","extKeysSet","Set","filter","k","has","defineProperty","desc","getOwnPropertyDescriptor","NativeAlgorithm","Object","enumerable","configurable","writable","undefined","_setup","_api","async","crypto","subtle","webcrypto","loadSubtleCrypto","INPUT_LENGTH_LIMIT","Uint8Array","x","privateKey","publicKey","n","w","ret","i","a","b","length","LABEL_EAE_PRK","LABEL_SHARED_SECRET","Dhkem","id","prim","kdf","_prim","_kdf","suiteId","init","serializePublicKey","key","deserializePublicKey","serializePrivateKey","deserializePrivateKey","importKey","format","isPublic","generateKeyPair","deriveKeyPair","ikm","byteLength","encap","params","ke","ekm","enc","pkrm","recipientPublicKey","dh","kemContext","senderKey","sks","pks","derivePublicKey","pksm","c","concat3","sharedSecret","_generateSharedSecret","decap","pke","skr","recipientKey","pkr","senderPublicKey","labeledIkm","buildLabeledIkm","labeledInfo","buildLabeledInfo","secretSize","extractAndExpand","buffer","KEM_USAGES","Bignum","size","_num","val","reset","fill","src","isZero","lessThan","v","LABEL_CANDIDATE","ORDER_P_256","ORDER_P_384","ORDER_P_521","PKCS8_ALG_ID_P_256","PKCS8_ALG_ID_P_384","PKCS8_ALG_ID_P_521","Ec","kem","hkdf","_hkdf","_alg","namedCurve","_nPk","_nSk","_nDh","_order","_bitmask","_pkcs8AlgId","exportKey","_importRawKey","jwk","base64","replace","byteString","atob","charCodeAt","base64UrlToBytes","ArrayBuffer","_importJWK","generateKey","dkpPrk","labeledExtract","bn","counter","bytes","labeledExpand","sk","_deserializePkcs8Key","pk","deriveBits","public","crv","d","pkcs8Key","HPKE_VERSION","HkdfNative","hash","_suiteId","label","_checkInit","info","len","extract","salt","hashSize","algHash","sign","expand","prk","okm","p","prev","mid","tail","tmp","cur","slice","baseKey","HkdfSha256Native","arguments","AEAD_USAGES","BigInt","AesGcmContext","_rawKey","seal","iv","data","aad","_setupKey","alg","additionalData","encrypt","_key","open","decrypt","_importKey","Aes128Gcm","createEncryptionContext","Aes256Gcm","emitNotSupported","Promise","_resolve","reject","LABEL_SEC","ExporterContextImpl","api","exporterSecret","_data","_aad","exporterContext","RecipientExporterContextImpl","SenderExporterContextImpl","EncryptionContextImpl","baseNonce","seq","_aead","aead","_nK","keySize","_nN","nonceSize","_nT","tagSize","_ctx","computeNonce","seqBytes","buf","xor","incrementSeq","Number","MAX_SAFE_INTEGER","_Mutex_locked","Mutex","resolve","lock","releaseLock","nextLock","previousLock","receiver","state","kind","f","TypeError","call","__classPrivateFieldGet","__classPrivateFieldSet","WeakMap","_RecipientContextImpl_mutex","RecipientContextImpl","release","pt","_SenderContextImpl_mutex","SenderContextImpl","ct","LABEL_BASE_NONCE","LABEL_EXP","LABEL_INFO_HASH","LABEL_KEY","LABEL_PSK_ID_HASH","LABEL_SECRET","SUITE_ID_HEADER_HPKE","CipherSuiteNative","_kem","createSenderContext","_validateInputLength","mode","psk","_keyScheduleS","createRecipientContext","_keyScheduleR","ctx","_keySchedule","pskId","pskIdHash","infoHash","keyScheduleContext","exporterSecretInfo","keyInfo","baseNonceInfo","res","DhkemP256HkdfSha256Native","CipherSuite","DhkemP256HkdfSha256","HkdfSha256","ALPHABET","ALPHABET_MAP","z","charAt","polymodStep","pre","prefixChk","prefix","chk","convert","inBits","outBits","pad","bits","maxV","result","push","toWords","fromWordsUnsafe","words","Array","isArray","fromWords","getLibraryFromEncoding","encoding","ENCODING_CONST","__decode","str","LIMIT","lowered","toLowerCase","uppered","toUpperCase","split","lastIndexOf","wordChars","decodeUnsafe","decode","encode","ed25519_CURVE","h","Gx","Gy","P","N","_a","_d","err","args","captureStackTrace","captureTrace","abytes","title","isView","needsLen","u8n","u8fr","from","padh","toString","padStart","bytesToHex","map","join","_ch","ch","hexToBytes","hex","hl","al","array","ai","hi","n1","n2","cr","concatBytes","arrs","r","reduce","sum","forEach","big","assertRange","min","max","msg","isBig","M","invert","num","md","y","u","q","m","apoint","Point","B256","static","X","Y","Z","T","freeze","CURVE","fromAffine","fromBytes","zip215","normed","lastByte","bytesToNumLE","y2","isValid","uvRatio","isXOdd","isLastByteOdd","fromHex","toAffine","assertValidity","is0","X2","Y2","Z2","Z4","aX2","equals","other","X1","Y1","Z1","X1Z2","X2Z1","Y1Z2","Y2Z1","I","negate","double","A","B","C","D","x1y1","E","G","F","H","X3","Y3","T3","Z3","add","T1","T2","subtract","multiply","safe","wNAF","multiplyUnsafe","scalar","iz","toBytes","numTo32bLE","toHex","clearCofactor","isSmallOrder","isTorsionFree","BASE","ZERO","reverse","pow2","power","RM1","v3","pow","b2","b4","b5","b10","b20","b40","b80","b160","b240","b250","pow_p_5_8","pow_2_252_3","vx2","root1","root2","useRoot1","useRoot2","noRoot","modL_LE","modN","sha512s","fn","hashes","callHash","getExtendedPublicKey","secretKey","hashed","head","point","pointBytes","hash2extK","getPublicKey","priv","etc","mod","randomBytes","getRandomValues","sha512Async","s","digest","sha512","pwindows","Math","ceil","scalarBits","Gpows","ctneg","cnd","comp","points","precompute","mask","pow_2_w","shiftBy","wbits","off","offF","offP","abs","isEven","isNeg"],"sourceRoot":""} \ No newline at end of file diff --git a/export/index.template.html b/export/index.template.html deleted file mode 100644 index e9d2324..0000000 --- a/export/index.template.html +++ /dev/null @@ -1,1650 +0,0 @@ - - - - - - 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). -

-
- - - -
- - -
-
-
-

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. -

-
-
- - - - - - - - - - diff --git a/export/index.test.js b/export/index.test.js index 79648fe..bb8fec7 100644 --- a/export/index.test.js +++ b/export/index.test.js @@ -1,44 +1,25 @@ import "@testing-library/jest-dom"; -import { JSDOM } from "jsdom"; -import fs from "fs"; -import path from "path"; import * as crypto from "crypto"; +import * as TKHQ from "./src/turnkey-core.js"; -const html = fs - .readFileSync(path.resolve(__dirname, "./index.template.html"), "utf8") - .replace("${TURNKEY_SIGNER_ENVIRONMENT}", "prod"); - -let dom; -let TKHQ; describe("TKHQ", () => { beforeEach(() => { - dom = new JSDOM(html, { - // Necessary to run script tags - runScripts: "dangerously", - // Necessary to have access to localStorage - url: "http://localhost", - // Necessary for TextDecoder to be available. - // See https://github.com/jsdom/jsdom/issues/2524 - beforeParse(window) { - window.TextDecoder = TextDecoder; - window.TextEncoder = TextEncoder; - }, - }); - - // Necessary for crypto to be available. - // See https://github.com/jsdom/jsdom/issues/1612 - Object.defineProperty(dom.window, "crypto", { - value: crypto.webcrypto, - }); - - TKHQ = dom.window.TKHQ; + window.TextDecoder = global.TextDecoder; + window.TextEncoder = global.TextEncoder; + window.__TURNKEY_SIGNER_ENVIRONMENT__ = "prod"; + + global.crypto = crypto.webcrypto; + window.crypto = crypto.webcrypto; + TKHQ.setCryptoProvider(crypto.webcrypto); + + window.localStorage.clear(); }); it("gets and sets items with expiry localStorage", async () => { // Set a TTL of 1000ms TKHQ.setItemWithExpiry("k", "v", 1000); - let item = JSON.parse(dom.window.localStorage.getItem("k")); + let item = JSON.parse(window.localStorage.getItem("k")); expect(item.value).toBe("v"); expect(item.expiry).toBeTruthy(); diff --git a/export/noble-ed25519.js b/export/noble-ed25519.js deleted file mode 100644 index ec6f498..0000000 --- a/export/noble-ed25519.js +++ /dev/null @@ -1,415 +0,0 @@ -"use strict"; -var nobleEd25519 = (() => { - var __defProp = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames = Object.getOwnPropertyNames; - var __hasOwnProp = Object.prototype.hasOwnProperty; - var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - - // only exporting what we need for getting the public key - var input_exports = {}; - __export(input_exports, { - getPublicKey: () => getPublicKey, - etc: () => etc - }); - - const P = 2n ** 255n - 19n; // ed25519 is twisted edwards curve - const N = 2n ** 252n + 27742317777372353535851937790883648493n; // curve's (group) order - const Gx = 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an; // base point x - const Gy = 0x6666666666666666666666666666666666666666666666666666666666666658n; // base point y - const CURVE = { - a: -1n, // where a=-1, d = -(121665/121666) == -(121665 * inv(121666)) mod P - d: 37095705934669439343138083508754565189542113879843219016388785533085940283555n, - p: P, n: N, h: 8, Gx, Gy // field prime, curve (group) order, cofactor - }; - const err = (m = '') => { throw new Error(m); }; // error helper, messes-up stack trace - const str = (s) => typeof s === 'string'; // is string - const isu8 = (a) => (a instanceof Uint8Array || - (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')); - const au8 = (a, l) => // is Uint8Array (of specific length) - !isu8(a) || (typeof l === 'number' && l > 0 && a.length !== l) ? - err('Uint8Array of valid length expected') : a; - const u8n = (data) => new Uint8Array(data); // creates Uint8Array - const toU8 = (a, len) => au8(str(a) ? h2b(a) : u8n(au8(a)), len); // norm(hex/u8a) to u8a - const mod = (a, b = P) => { let r = a % b; return r >= 0n ? r : b + r; }; // mod division - const isPoint = (p) => (p instanceof Point ? p : err('Point expected')); // is xyzt point - class Point { - constructor(ex, ey, ez, et) { - this.ex = ex; - this.ey = ey; - this.ez = ez; - this.et = et; - } - static fromAffine(p) { return new Point(p.x, p.y, 1n, mod(p.x * p.y)); } - static fromHex(hex, zip215 = false) { - const { d } = CURVE; - hex = toU8(hex, 32); - const normed = hex.slice(); // copy the array to not mess it up - const lastByte = hex[31]; - normed[31] = lastByte & ~0x80; // adjust first LE byte = last BE byte - const y = b2n_LE(normed); // decode as little-endian, convert to num - if (zip215 && !(0n <= y && y < 2n ** 256n)) - err('bad y coord 1'); // zip215=true [1..2^256-1] - if (!zip215 && !(0n <= y && y < P)) - err('bad y coord 2'); // zip215=false [1..P-1] - const y2 = mod(y * y); // y² - const u = mod(y2 - 1n); // u=y²-1 - const v = mod(d * y2 + 1n); // v=dy²+1 - let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root - if (!isValid) - err('bad y coordinate 3'); // not square root: bad point - const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate - const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit - if (!zip215 && x === 0n && isLastByteOdd) - err('bad y coord 3'); // x=0 and x_0 = 1 - if (isLastByteOdd !== isXOdd) - x = mod(-x); - return new Point(x, y, 1n, mod(x * y)); // Z=1, T=xy - } - get x() { return this.toAffine().x; } // .x, .y will call expensive toAffine. - get y() { return this.toAffine().y; } // Should be used with care. - equals(other) { - const { ex: X1, ey: Y1, ez: Z1 } = this; - const { ex: X2, ey: Y2, ez: Z2 } = isPoint(other); // isPoint() checks class equality - const X1Z2 = mod(X1 * Z2), X2Z1 = mod(X2 * Z1); - const Y1Z2 = mod(Y1 * Z2), Y2Z1 = mod(Y2 * Z1); - return X1Z2 === X2Z1 && Y1Z2 === Y2Z1; - } - is0() { return this.equals(I); } - negate() { - return new Point(mod(-this.ex), this.ey, this.ez, mod(-this.et)); - } - double() { - const { ex: X1, ey: Y1, ez: Z1 } = this; // Cost: 4M + 4S + 1*a + 6add + 1*2 - const { a } = CURVE; // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd - const A = mod(X1 * X1); - const B = mod(Y1 * Y1); - const C = mod(2n * mod(Z1 * Z1)); - const D = mod(a * A); - const x1y1 = X1 + Y1; - const E = mod(mod(x1y1 * x1y1) - A - B); - const G = D + B; - const F = G - C; - const H = D - B; - const X3 = mod(E * F); - const Y3 = mod(G * H); - const T3 = mod(E * H); - const Z3 = mod(F * G); - return new Point(X3, Y3, Z3, T3); - } - add(other) { - const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this; // Cost: 8M + 1*k + 8add + 1*2. - const { ex: X2, ey: Y2, ez: Z2, et: T2 } = isPoint(other); // doesn't check if other on-curve - const { a, d } = CURVE; // http://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3 - const A = mod(X1 * X2); - const B = mod(Y1 * Y2); - const C = mod(T1 * d * T2); - const D = mod(Z1 * Z2); - const E = mod((X1 + Y1) * (X2 + Y2) - A - B); - const F = mod(D - C); - const G = mod(D + C); - const H = mod(B - a * A); - const X3 = mod(E * F); - const Y3 = mod(G * H); - const T3 = mod(E * H); - const Z3 = mod(F * G); - return new Point(X3, Y3, Z3, T3); - } - mul(n, safe = true) { - if (n === 0n) - return safe === true ? err('cannot multiply by 0') : I; - if (!(typeof n === 'bigint' && 0n < n && n < N)) - err('invalid scalar, must be < L'); - if (!safe && this.is0() || n === 1n) - return this; // safe=true bans 0. safe=false allows 0. - if (this.equals(G)) - return wNAF(n).p; // use wNAF precomputes for base points - let p = I, f = G; // init result point & fake point - for (let d = this; n > 0n; d = d.double(), n >>= 1n) { // double-and-add ladder - if (n & 1n) - p = p.add(d); // if bit is present, add to point - else if (safe) - f = f.add(d); // if not, add to fake for timing safety - } - return p; - } - multiply(scalar) { return this.mul(scalar); } // Aliases for compatibilty - clearCofactor() { return this.mul(BigInt(CURVE.h), false); } // multiply by cofactor - isSmallOrder() { return this.clearCofactor().is0(); } // check if P is small order - isTorsionFree() { - let p = this.mul(N / 2n, false).double(); // ensures the point is not "bad". - if (N % 2n) - p = p.add(this); // P^(N+1) // P*N == (P*(N/2))*2+P - return p.is0(); - } - toAffine() { - const { ex: x, ey: y, ez: z } = this; // (x, y, z, t) ∋ (x=x/z, y=y/z, t=xy) - if (this.equals(I)) - return { x: 0n, y: 1n }; // fast-path for zero point - const iz = invert(z); // z^-1: invert z - if (mod(z * iz) !== 1n) - err('invalid inverse'); // (z * z^-1) must be 1, otherwise bad math - return { x: mod(x * iz), y: mod(y * iz) }; // x = x*z^-1; y = y*z^-1 - } - toRawBytes() { - const { x, y } = this.toAffine(); // convert to affine 2d point - const b = n2b_32LE(y); // encode number to 32 bytes - b[31] |= x & 1n ? 0x80 : 0; // store sign in first LE byte - return b; - } - toHex() { return b2h(this.toRawBytes()); } // encode to hex string - } - Point.BASE = new Point(Gx, Gy, 1n, mod(Gx * Gy)); // Generator / Base point - Point.ZERO = new Point(0n, 1n, 1n, 0n); // Identity / Zero point - const { BASE: G, ZERO: I } = Point; // Generator, identity points - const padh = (num, pad) => num.toString(16).padStart(pad, '0'); - const b2h = (b) => Array.from(b).map(e => padh(e, 2)).join(''); // bytes to hex - const h2b = (hex) => { - const l = hex.length; // error if not string, - if (!str(hex) || l % 2) - err('hex invalid 1'); // or has odd length like 3, 5. - const arr = u8n(l / 2); // create result array - for (let i = 0; i < arr.length; i++) { - const j = i * 2; - const h = hex.slice(j, j + 2); // hexByte. slice is faster than substr - const b = Number.parseInt(h, 16); // byte, created from string part - if (Number.isNaN(b) || b < 0) - err('hex invalid 2'); // byte must be valid 0 <= byte < 256 - arr[i] = b; - } - return arr; - }; - const n2b_32LE = (num) => h2b(padh(num, 32 * 2)).reverse(); // number to bytes LE - const b2n_LE = (b) => BigInt('0x' + b2h(u8n(au8(b)).reverse())); // bytes LE to num - const concatB = (...arrs) => { - const r = u8n(arrs.reduce((sum, a) => sum + au8(a).length, 0)); // create u8a of summed length - let pad = 0; // walk through each array, - arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type - return r; - }; - const invert = (num, md = P) => { - if (num === 0n || md <= 0n) - err('no inverse n=' + num + ' mod=' + md); // no neg exponent for now - let a = mod(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n; - while (a !== 0n) { // uses euclidean gcd algorithm - const q = b / a, r = b % a; // not constant-time - const m = x - u * q, n = y - v * q; - b = a, a = r, x = u, y = v, u = m, v = n; - } - return b === 1n ? mod(x, md) : err('no inverse'); // b is gcd at this point - }; - const pow2 = (x, power) => { - let r = x; - while (power-- > 0n) { - r *= r; - r %= P; - } - return r; - }; - const pow_2_252_3 = (x) => { - const x2 = (x * x) % P; // x^2, bits 1 - const b2 = (x2 * x) % P; // x^3, bits 11 - const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111 - const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111 - const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10) - const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20) - const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40) - const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80) - const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160) - const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240) - const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250) - const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x. - return { pow_p_5_8, b2 }; - }; - const RM1 = 19681161376707505956807079304988542015446066515923890162744021073123829784752n; // √-1 - const uvRatio = (u, v) => { - const v3 = mod(v * v * v); // v³ - const v7 = mod(v3 * v3 * v); // v⁷ - const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv⁷)^(p-5)/8 - let x = mod(u * v3 * pow); // (uv³)(uv⁷)^(p-5)/8 - const vx2 = mod(v * x * x); // vx² - const root1 = x; // First root candidate - const root2 = mod(x * RM1); // Second root candidate; RM1 is √-1 - const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root - const useRoot2 = vx2 === mod(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4) - const noRoot = vx2 === mod(-u * RM1); // There is no valid root, vx² = -u√-1 - if (useRoot1) - x = root1; - if (useRoot2 || noRoot) - x = root2; // We return root2 anyway, for const-time - if ((mod(x) & 1n) === 1n) - x = mod(-x); // edIsNegative - return { isValid: useRoot1 || useRoot2, value: x }; - }; - const modL_LE = (hash) => mod(b2n_LE(hash), N); // modulo L; but little-endian - let _shaS; - const sha512a = (...m) => etc.sha512Async(...m); // Async SHA512 - const sha512s = (...m) => // Sync SHA512, not set by default - typeof _shaS === 'function' ? _shaS(...m) : err('etc.sha512Sync not set'); - const hash2extK = (hashed) => { - const head = hashed.slice(0, 32); // slice creates a copy, unlike subarray - head[0] &= 248; // Clamp bits: 0b1111_1000, - head[31] &= 127; // 0b0111_1111, - head[31] |= 64; // 0b0100_0000 - const prefix = hashed.slice(32, 64); // private key "prefix" - const scalar = modL_LE(head); // modular division over curve order - const point = G.mul(scalar); // public key point - const pointBytes = point.toRawBytes(); // point serialized to Uint8Array - return { head, prefix, scalar, point, pointBytes }; - }; - // RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point. - const getExtendedPublicKeyAsync = (priv) => sha512a(toU8(priv, 32)).then(hash2extK); - const getExtendedPublicKey = (priv) => hash2extK(sha512s(toU8(priv, 32))); - const getPublicKeyAsync = (priv) => getExtendedPublicKeyAsync(priv).then(p => p.pointBytes); - const getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes; - function hashFinish(asynchronous, res) { - if (asynchronous) - return sha512a(res.hashable).then(res.finish); - return res.finish(sha512s(res.hashable)); - } - const _sign = (e, rBytes, msg) => { - const { pointBytes: P, scalar: s } = e; - const r = modL_LE(rBytes); // r was created outside, reduce it modulo L - const R = G.mul(r).toRawBytes(); // R = [r]B - const hashable = concatB(R, P, msg); // dom2(F, C) || R || A || PH(M) - const finish = (hashed) => { - const S = mod(r + modL_LE(hashed) * s, N); // S = (r + k * s) mod L; 0 <= s < l - return au8(concatB(R, n2b_32LE(S)), 64); // 64-byte sig: 32b R.x + 32b LE(S) - }; - return { hashable, finish }; - }; - const signAsync = async (msg, privKey) => { - const m = toU8(msg); // RFC8032 5.1.6: sign msg with key async - const e = await getExtendedPublicKeyAsync(privKey); // pub,prfx - const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M)) - return hashFinish(true, _sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature - }; - const sign = (msg, privKey) => { - const m = toU8(msg); // RFC8032 5.1.6: sign msg with key sync - const e = getExtendedPublicKey(privKey); // pub,prfx - const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M)) - return hashFinish(false, _sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature - }; - const dvo = { zip215: true }; - const _verify = (sig, msg, pub, opts = dvo) => { - msg = toU8(msg); // Message hex str/Bytes - sig = toU8(sig, 64); // Signature hex str/Bytes, must be 64 bytes - const { zip215 } = opts; // switch between zip215 and rfc8032 verif - let A, R, s, SB, hashable = new Uint8Array(); - try { - A = Point.fromHex(pub, zip215); // public key A decoded - R = Point.fromHex(sig.slice(0, 32), zip215); // 0 <= R < 2^256: ZIP215 R can be >= P - s = b2n_LE(sig.slice(32, 64)); // Decode second half as an integer S - SB = G.mul(s, false); // in the range 0 <= s < L - hashable = concatB(R.toRawBytes(), A.toRawBytes(), msg); // dom2(F, C) || R || A || PH(M) - } - catch (_error) { - // Error caught during parsing - will be handled by checking SB == null below - } - const finish = (hashed) => { - if (SB == null) - return false; // false if try-catch catched an error - if (!zip215 && A.isSmallOrder()) - return false; // false for SBS: Strongly Binding Signature - const k = modL_LE(hashed); // decode in little-endian, modulo L - const RkA = R.add(A.mul(k, false)); // [8]R + [8][k]A' - return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A' - }; - return { hashable, finish }; - }; - // RFC8032 5.1.7: verification async, sync - const verifyAsync = async (s, m, p, opts = dvo) => hashFinish(true, _verify(s, m, p, opts)); - const verify = (s, m, p, opts = dvo) => hashFinish(false, _verify(s, m, p, opts)); - const cr = () => // We support: 1) browsers 2) node.js 19+ - typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined; - const etc = { - bytesToHex: b2h, hexToBytes: h2b, concatBytes: concatB, - mod, invert, - randomBytes: (len = 32) => { - const crypto = cr(); // Can be shimmed in node.js <= 18 to prevent error: - // import { webcrypto } from 'node:crypto'; - // if (!globalThis.crypto) globalThis.crypto = webcrypto; - if (!crypto || !crypto.getRandomValues) - err('crypto.getRandomValues must be defined'); - return crypto.getRandomValues(u8n(len)); - }, - sha512Async: async (...messages) => { - const crypto = cr(); - if (!crypto || !crypto.subtle) - err('crypto.subtle or etc.sha512Async must be defined'); - const m = concatB(...messages); - return u8n(await crypto.subtle.digest('SHA-512', m.buffer)); - }, - sha512Sync: undefined, // Actual logic below - }; - Object.defineProperties(etc, { sha512Sync: { - configurable: false, get() { return _shaS; }, set(f) { if (!_shaS) - _shaS = f; }, - } }); - const utils = { - getExtendedPublicKeyAsync, getExtendedPublicKey, - randomPrivateKey: () => etc.randomBytes(32), - precompute(w = 8, p = G) { p.multiply(3n); w; return p; }, // no-op - }; - const W = 8; // Precomputes-related code. W = window size - const precompute = () => { - const points = []; // 10x sign(), 2x verify(). To achieve this, - const windows = 256 / W + 1; // app needs to spend 40ms+ to calculate - let p = G, b = p; // a lot of points related to base point G. - for (let w = 0; w < windows; w++) { // Points are stored in array and used - b = p; // any time Gx multiplication is done. - points.push(b); // They consume 16-32 MiB of RAM. - for (let i = 1; i < 2 ** (W - 1); i++) { - b = b.add(p); - points.push(b); - } - p = b.double(); // Precomputes don't speed-up getSharedKey, - } // which multiplies user point by scalar, - return points; // when precomputes are using base point - }; - let Gpows = undefined; // precomputes for base point G - const wNAF = (n) => { - // Compared to other point mult methods, - const comp = Gpows || (Gpows = precompute()); // stores 2x less points using subtraction - const neg = (cnd, p) => { let n = p.negate(); return cnd ? n : p; }; // negate - let p = I, f = G; // f must be G, or could become I in the end - const windows = 1 + 256 / W; // W=8 17 windows - const wsize = 2 ** (W - 1); // W=8 128 window size - const mask = BigInt(2 ** W - 1); // W=8 will create mask 0b11111111 - const maxNum = 2 ** W; // W=8 256 - const shiftBy = BigInt(W); // W=8 8 - for (let w = 0; w < windows; w++) { - const off = w * wsize; - let wbits = Number(n & mask); // extract W bits. - n >>= shiftBy; // shift number by W bits. - if (wbits > wsize) { - wbits -= maxNum; - n += 1n; - } // split if bits > max: +224 => 256-32 - const off1 = off, off2 = off + Math.abs(wbits) - 1; // offsets, evaluate both - const cnd1 = w % 2 !== 0, cnd2 = wbits < 0; // conditions, evaluate both - if (wbits === 0) { - f = f.add(neg(cnd1, comp[off1])); // bits are 0: add garbage to fake point - } - else { // ^ can't add off2, off2 = I - p = p.add(neg(cnd2, comp[off2])); // bits are 1: add to result point - } - } - return { p, f }; // return both real and fake points for JIT - }; // !! you can disable precomputes by commenting-out call of the wNAF() inside Point#mul() - - return __toCommonJS(input_exports); -})(); -/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */ \ No newline at end of file diff --git a/export/noble-hashes.js b/export/noble-hashes.js deleted file mode 100644 index 7cab120..0000000 --- a/export/noble-hashes.js +++ /dev/null @@ -1,2772 +0,0 @@ -"use strict"; -var nobleHashes = (() => { - var __defProp = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames = Object.getOwnPropertyNames; - var __hasOwnProp = Object.prototype.hasOwnProperty; - var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - - // input.js - var input_exports = {}; - __export(input_exports, { - argon2id: () => argon2id, - blake2b: () => blake2b, - blake2s: () => blake2s, - blake3: () => blake3, - cshake128: () => cshake128, - cshake256: () => cshake256, - eskdf: () => eskdf, - hkdf: () => hkdf, - hmac: () => hmac, - k12: () => k12, - keccak_224: () => keccak_224, - keccak_256: () => keccak_256, - keccak_384: () => keccak_384, - keccak_512: () => keccak_512, - kmac128: () => kmac128, - kmac256: () => kmac256, - m14: () => m14, - pbkdf2: () => pbkdf2, - pbkdf2Async: () => pbkdf2Async, - ripemd160: () => ripemd160, - scrypt: () => scrypt, - scryptAsync: () => scryptAsync, - sha1: () => sha1, - sha256: () => sha256, - sha3_224: () => sha3_224, - sha3_256: () => sha3_256, - sha3_384: () => sha3_384, - sha3_512: () => sha3_512, - sha512: () => sha512, - turboshake128: () => turboshake128, - turboshake256: () => turboshake256, - utils: () => utils - }); - - // ../src/crypto.ts - var crypto = typeof globalThis === "object" && "crypto" in globalThis ? globalThis.crypto : void 0; - - // ../esm/_assert.js - function number(n) { - if (!Number.isSafeInteger(n) || n < 0) - throw new Error(`positive integer expected, not ${n}`); - } - function isBytes(a) { - return a instanceof Uint8Array || a != null && typeof a === "object" && a.constructor.name === "Uint8Array"; - } - function bytes(b, ...lengths) { - if (!isBytes(b)) - throw new Error("Uint8Array expected"); - if (lengths.length > 0 && !lengths.includes(b.length)) - throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`); - } - function hash(h) { - if (typeof h !== "function" || typeof h.create !== "function") - throw new Error("Hash should be wrapped by utils.wrapConstructor"); - number(h.outputLen); - number(h.blockLen); - } - function exists(instance, checkFinished = true) { - if (instance.destroyed) - throw new Error("Hash instance has been destroyed"); - if (checkFinished && instance.finished) - throw new Error("Hash#digest() has already been called"); - } - function output(out, instance) { - bytes(out); - const min = instance.outputLen; - if (out.length < min) { - throw new Error(`digestInto() expects output buffer of length at least ${min}`); - } - } - - // ../esm/utils.js - var u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength); - var u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4)); - var createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength); - var rotr = (word, shift) => word << 32 - shift | word >>> shift; - var rotl = (word, shift) => word << shift | word >>> 32 - shift >>> 0; - var isLE = new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68; - var byteSwap = (word) => word << 24 & 4278190080 | word << 8 & 16711680 | word >>> 8 & 65280 | word >>> 24 & 255; - var byteSwapIfBE = isLE ? (n) => n : (n) => byteSwap(n); - function byteSwap32(arr) { - for (let i = 0; i < arr.length; i++) { - arr[i] = byteSwap(arr[i]); - } - } - var hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0")); - function bytesToHex(bytes2) { - bytes(bytes2); - let hex = ""; - for (let i = 0; i < bytes2.length; i++) { - hex += hexes[bytes2[i]]; - } - return hex; - } - var asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 }; - function asciiToBase16(char) { - if (char >= asciis._0 && char <= asciis._9) - return char - asciis._0; - if (char >= asciis._A && char <= asciis._F) - return char - (asciis._A - 10); - if (char >= asciis._a && char <= asciis._f) - return char - (asciis._a - 10); - return; - } - function hexToBytes(hex) { - if (typeof hex !== "string") - throw new Error("hex string expected, got " + typeof hex); - const hl = hex.length; - const al = hl / 2; - if (hl % 2) - throw new Error("padded hex string expected, got unpadded hex of length " + hl); - const array = new Uint8Array(al); - for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) { - const n1 = asciiToBase16(hex.charCodeAt(hi)); - const n2 = asciiToBase16(hex.charCodeAt(hi + 1)); - if (n1 === void 0 || n2 === void 0) { - const char = hex[hi] + hex[hi + 1]; - throw new Error('hex string expected, got non-hex character "' + char + '" at index ' + hi); - } - array[ai] = n1 * 16 + n2; - } - return array; - } - var nextTick = async () => { - }; - async function asyncLoop(iters, tick, cb) { - let ts = Date.now(); - for (let i = 0; i < iters; i++) { - cb(i); - const diff = Date.now() - ts; - if (diff >= 0 && diff < tick) - continue; - await nextTick(); - ts += diff; - } - } - function utf8ToBytes(str) { - if (typeof str !== "string") - throw new Error(`utf8ToBytes expected string, got ${typeof str}`); - return new Uint8Array(new TextEncoder().encode(str)); - } - function toBytes(data) { - if (typeof data === "string") - data = utf8ToBytes(data); - bytes(data); - return data; - } - function concatBytes(...arrays) { - let sum = 0; - for (let i = 0; i < arrays.length; i++) { - const a = arrays[i]; - bytes(a); - sum += a.length; - } - const res = new Uint8Array(sum); - for (let i = 0, pad = 0; i < arrays.length; i++) { - const a = arrays[i]; - res.set(a, pad); - pad += a.length; - } - return res; - } - var Hash = class { - // Safe version that clones internal state - clone() { - return this._cloneInto(); - } - }; - var toStr = {}.toString; - function checkOpts(defaults, opts) { - if (opts !== void 0 && toStr.call(opts) !== "[object Object]") - throw new Error("Options should be object or undefined"); - const merged = Object.assign(defaults, opts); - return merged; - } - function wrapConstructor(hashCons) { - const hashC = (msg) => hashCons().update(toBytes(msg)).digest(); - const tmp = hashCons(); - hashC.outputLen = tmp.outputLen; - hashC.blockLen = tmp.blockLen; - hashC.create = () => hashCons(); - return hashC; - } - function wrapConstructorWithOpts(hashCons) { - const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest(); - const tmp = hashCons({}); - hashC.outputLen = tmp.outputLen; - hashC.blockLen = tmp.blockLen; - hashC.create = (opts) => hashCons(opts); - return hashC; - } - function wrapXOFConstructorWithOpts(hashCons) { - const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest(); - const tmp = hashCons({}); - hashC.outputLen = tmp.outputLen; - hashC.blockLen = tmp.blockLen; - hashC.create = (opts) => hashCons(opts); - return hashC; - } - function randomBytes(bytesLength = 32) { - if (crypto && typeof crypto.getRandomValues === "function") { - return crypto.getRandomValues(new Uint8Array(bytesLength)); - } - throw new Error("crypto.getRandomValues must be defined"); - } - - // ../esm/_blake.js - var SIGMA = /* @__PURE__ */ new Uint8Array([ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 14, - 10, - 4, - 8, - 9, - 15, - 13, - 6, - 1, - 12, - 0, - 2, - 11, - 7, - 5, - 3, - 11, - 8, - 12, - 0, - 5, - 2, - 15, - 13, - 10, - 14, - 3, - 6, - 7, - 1, - 9, - 4, - 7, - 9, - 3, - 1, - 13, - 12, - 11, - 14, - 2, - 6, - 5, - 10, - 4, - 0, - 15, - 8, - 9, - 0, - 5, - 7, - 2, - 4, - 10, - 15, - 14, - 1, - 11, - 12, - 6, - 8, - 3, - 13, - 2, - 12, - 6, - 10, - 0, - 11, - 8, - 3, - 4, - 13, - 7, - 5, - 15, - 14, - 1, - 9, - 12, - 5, - 1, - 15, - 14, - 13, - 4, - 10, - 0, - 7, - 6, - 3, - 9, - 2, - 8, - 11, - 13, - 11, - 7, - 14, - 12, - 1, - 3, - 9, - 5, - 0, - 15, - 4, - 8, - 6, - 2, - 10, - 6, - 15, - 14, - 9, - 11, - 3, - 0, - 8, - 12, - 2, - 13, - 7, - 1, - 4, - 10, - 5, - 10, - 2, - 8, - 4, - 7, - 6, - 1, - 5, - 15, - 11, - 9, - 14, - 3, - 12, - 13, - 0, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 14, - 10, - 4, - 8, - 9, - 15, - 13, - 6, - 1, - 12, - 0, - 2, - 11, - 7, - 5, - 3 - ]); - var BLAKE = class extends Hash { - constructor(blockLen, outputLen, opts = {}, keyLen, saltLen, persLen) { - super(); - this.blockLen = blockLen; - this.outputLen = outputLen; - this.length = 0; - this.pos = 0; - this.finished = false; - this.destroyed = false; - number(blockLen); - number(outputLen); - number(keyLen); - if (outputLen < 0 || outputLen > keyLen) - throw new Error("outputLen bigger than keyLen"); - if (opts.key !== void 0 && (opts.key.length < 1 || opts.key.length > keyLen)) - throw new Error(`key must be up 1..${keyLen} byte long or undefined`); - if (opts.salt !== void 0 && opts.salt.length !== saltLen) - throw new Error(`salt must be ${saltLen} byte long or undefined`); - if (opts.personalization !== void 0 && opts.personalization.length !== persLen) - throw new Error(`personalization must be ${persLen} byte long or undefined`); - this.buffer32 = u32(this.buffer = new Uint8Array(blockLen)); - } - update(data) { - exists(this); - const { blockLen, buffer, buffer32 } = this; - data = toBytes(data); - const len = data.length; - const offset = data.byteOffset; - const buf = data.buffer; - for (let pos = 0; pos < len; ) { - if (this.pos === blockLen) { - if (!isLE) - byteSwap32(buffer32); - this.compress(buffer32, 0, false); - if (!isLE) - byteSwap32(buffer32); - this.pos = 0; - } - const take = Math.min(blockLen - this.pos, len - pos); - const dataOffset = offset + pos; - if (take === blockLen && !(dataOffset % 4) && pos + take < len) { - const data32 = new Uint32Array(buf, dataOffset, Math.floor((len - pos) / 4)); - if (!isLE) - byteSwap32(data32); - for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) { - this.length += blockLen; - this.compress(data32, pos32, false); - } - if (!isLE) - byteSwap32(data32); - continue; - } - buffer.set(data.subarray(pos, pos + take), this.pos); - this.pos += take; - this.length += take; - pos += take; - } - return this; - } - digestInto(out) { - exists(this); - output(out, this); - const { pos, buffer32 } = this; - this.finished = true; - this.buffer.subarray(pos).fill(0); - if (!isLE) - byteSwap32(buffer32); - this.compress(buffer32, 0, true); - if (!isLE) - byteSwap32(buffer32); - const out32 = u32(out); - this.get().forEach((v, i) => out32[i] = byteSwapIfBE(v)); - } - digest() { - const { buffer, outputLen } = this; - this.digestInto(buffer); - const res = buffer.slice(0, outputLen); - this.destroy(); - return res; - } - _cloneInto(to) { - const { buffer, length, finished, destroyed, outputLen, pos } = this; - to || (to = new this.constructor({ dkLen: outputLen })); - to.set(...this.get()); - to.length = length; - to.finished = finished; - to.destroyed = destroyed; - to.outputLen = outputLen; - to.buffer.set(buffer); - to.pos = pos; - return to; - } - }; - - // ../esm/_u64.js - var U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1); - var _32n = /* @__PURE__ */ BigInt(32); - function fromBig(n, le = false) { - if (le) - return { h: Number(n & U32_MASK64), l: Number(n >> _32n & U32_MASK64) }; - return { h: Number(n >> _32n & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 }; - } - function split(lst, le = false) { - let Ah = new Uint32Array(lst.length); - let Al = new Uint32Array(lst.length); - for (let i = 0; i < lst.length; i++) { - const { h, l } = fromBig(lst[i], le); - [Ah[i], Al[i]] = [h, l]; - } - return [Ah, Al]; - } - var toBig = (h, l) => BigInt(h >>> 0) << _32n | BigInt(l >>> 0); - var shrSH = (h, _l, s) => h >>> s; - var shrSL = (h, l, s) => h << 32 - s | l >>> s; - var rotrSH = (h, l, s) => h >>> s | l << 32 - s; - var rotrSL = (h, l, s) => h << 32 - s | l >>> s; - var rotrBH = (h, l, s) => h << 64 - s | l >>> s - 32; - var rotrBL = (h, l, s) => h >>> s - 32 | l << 64 - s; - var rotr32H = (_h, l) => l; - var rotr32L = (h, _l) => h; - var rotlSH = (h, l, s) => h << s | l >>> 32 - s; - var rotlSL = (h, l, s) => l << s | h >>> 32 - s; - var rotlBH = (h, l, s) => l << s - 32 | h >>> 64 - s; - var rotlBL = (h, l, s) => h << s - 32 | l >>> 64 - s; - function add(Ah, Al, Bh, Bl) { - const l = (Al >>> 0) + (Bl >>> 0); - return { h: Ah + Bh + (l / 2 ** 32 | 0) | 0, l: l | 0 }; - } - var add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0); - var add3H = (low, Ah, Bh, Ch) => Ah + Bh + Ch + (low / 2 ** 32 | 0) | 0; - var add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0); - var add4H = (low, Ah, Bh, Ch, Dh) => Ah + Bh + Ch + Dh + (low / 2 ** 32 | 0) | 0; - var add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0); - var add5H = (low, Ah, Bh, Ch, Dh, Eh) => Ah + Bh + Ch + Dh + Eh + (low / 2 ** 32 | 0) | 0; - var u64 = { - fromBig, - split, - toBig, - shrSH, - shrSL, - rotrSH, - rotrSL, - rotrBH, - rotrBL, - rotr32H, - rotr32L, - rotlSH, - rotlSL, - rotlBH, - rotlBL, - add, - add3L, - add3H, - add4L, - add4H, - add5H, - add5L - }; - var u64_default = u64; - - // ../esm/blake2b.js - var B2B_IV = /* @__PURE__ */ new Uint32Array([ - 4089235720, - 1779033703, - 2227873595, - 3144134277, - 4271175723, - 1013904242, - 1595750129, - 2773480762, - 2917565137, - 1359893119, - 725511199, - 2600822924, - 4215389547, - 528734635, - 327033209, - 1541459225 - ]); - var BBUF = /* @__PURE__ */ new Uint32Array(32); - function G1b(a, b, c, d, msg, x) { - const Xl = msg[x], Xh = msg[x + 1]; - let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; - let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; - let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; - let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; - let ll = u64_default.add3L(Al, Bl, Xl); - Ah = u64_default.add3H(ll, Ah, Bh, Xh); - Al = ll | 0; - ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al }); - ({ Dh, Dl } = { Dh: u64_default.rotr32H(Dh, Dl), Dl: u64_default.rotr32L(Dh, Dl) }); - ({ h: Ch, l: Cl } = u64_default.add(Ch, Cl, Dh, Dl)); - ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl }); - ({ Bh, Bl } = { Bh: u64_default.rotrSH(Bh, Bl, 24), Bl: u64_default.rotrSL(Bh, Bl, 24) }); - BBUF[2 * a] = Al, BBUF[2 * a + 1] = Ah; - BBUF[2 * b] = Bl, BBUF[2 * b + 1] = Bh; - BBUF[2 * c] = Cl, BBUF[2 * c + 1] = Ch; - BBUF[2 * d] = Dl, BBUF[2 * d + 1] = Dh; - } - function G2b(a, b, c, d, msg, x) { - const Xl = msg[x], Xh = msg[x + 1]; - let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; - let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; - let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; - let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; - let ll = u64_default.add3L(Al, Bl, Xl); - Ah = u64_default.add3H(ll, Ah, Bh, Xh); - Al = ll | 0; - ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al }); - ({ Dh, Dl } = { Dh: u64_default.rotrSH(Dh, Dl, 16), Dl: u64_default.rotrSL(Dh, Dl, 16) }); - ({ h: Ch, l: Cl } = u64_default.add(Ch, Cl, Dh, Dl)); - ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl }); - ({ Bh, Bl } = { Bh: u64_default.rotrBH(Bh, Bl, 63), Bl: u64_default.rotrBL(Bh, Bl, 63) }); - BBUF[2 * a] = Al, BBUF[2 * a + 1] = Ah; - BBUF[2 * b] = Bl, BBUF[2 * b + 1] = Bh; - BBUF[2 * c] = Cl, BBUF[2 * c + 1] = Ch; - BBUF[2 * d] = Dl, BBUF[2 * d + 1] = Dh; - } - var BLAKE2b = class extends BLAKE { - constructor(opts = {}) { - super(128, opts.dkLen === void 0 ? 64 : opts.dkLen, opts, 64, 16, 16); - this.v0l = B2B_IV[0] | 0; - this.v0h = B2B_IV[1] | 0; - this.v1l = B2B_IV[2] | 0; - this.v1h = B2B_IV[3] | 0; - this.v2l = B2B_IV[4] | 0; - this.v2h = B2B_IV[5] | 0; - this.v3l = B2B_IV[6] | 0; - this.v3h = B2B_IV[7] | 0; - this.v4l = B2B_IV[8] | 0; - this.v4h = B2B_IV[9] | 0; - this.v5l = B2B_IV[10] | 0; - this.v5h = B2B_IV[11] | 0; - this.v6l = B2B_IV[12] | 0; - this.v6h = B2B_IV[13] | 0; - this.v7l = B2B_IV[14] | 0; - this.v7h = B2B_IV[15] | 0; - const keyLength = opts.key ? opts.key.length : 0; - this.v0l ^= this.outputLen | keyLength << 8 | 1 << 16 | 1 << 24; - if (opts.salt) { - const salt = u32(toBytes(opts.salt)); - this.v4l ^= byteSwapIfBE(salt[0]); - this.v4h ^= byteSwapIfBE(salt[1]); - this.v5l ^= byteSwapIfBE(salt[2]); - this.v5h ^= byteSwapIfBE(salt[3]); - } - if (opts.personalization) { - const pers = u32(toBytes(opts.personalization)); - this.v6l ^= byteSwapIfBE(pers[0]); - this.v6h ^= byteSwapIfBE(pers[1]); - this.v7l ^= byteSwapIfBE(pers[2]); - this.v7h ^= byteSwapIfBE(pers[3]); - } - if (opts.key) { - const tmp = new Uint8Array(this.blockLen); - tmp.set(toBytes(opts.key)); - this.update(tmp); - } - } - // prettier-ignore - get() { - let { v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h } = this; - return [v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h]; - } - // prettier-ignore - set(v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h) { - this.v0l = v0l | 0; - this.v0h = v0h | 0; - this.v1l = v1l | 0; - this.v1h = v1h | 0; - this.v2l = v2l | 0; - this.v2h = v2h | 0; - this.v3l = v3l | 0; - this.v3h = v3h | 0; - this.v4l = v4l | 0; - this.v4h = v4h | 0; - this.v5l = v5l | 0; - this.v5h = v5h | 0; - this.v6l = v6l | 0; - this.v6h = v6h | 0; - this.v7l = v7l | 0; - this.v7h = v7h | 0; - } - compress(msg, offset, isLast) { - this.get().forEach((v, i) => BBUF[i] = v); - BBUF.set(B2B_IV, 16); - let { h, l } = u64_default.fromBig(BigInt(this.length)); - BBUF[24] = B2B_IV[8] ^ l; - BBUF[25] = B2B_IV[9] ^ h; - if (isLast) { - BBUF[28] = ~BBUF[28]; - BBUF[29] = ~BBUF[29]; - } - let j = 0; - const s = SIGMA; - for (let i = 0; i < 12; i++) { - G1b(0, 4, 8, 12, msg, offset + 2 * s[j++]); - G2b(0, 4, 8, 12, msg, offset + 2 * s[j++]); - G1b(1, 5, 9, 13, msg, offset + 2 * s[j++]); - G2b(1, 5, 9, 13, msg, offset + 2 * s[j++]); - G1b(2, 6, 10, 14, msg, offset + 2 * s[j++]); - G2b(2, 6, 10, 14, msg, offset + 2 * s[j++]); - G1b(3, 7, 11, 15, msg, offset + 2 * s[j++]); - G2b(3, 7, 11, 15, msg, offset + 2 * s[j++]); - G1b(0, 5, 10, 15, msg, offset + 2 * s[j++]); - G2b(0, 5, 10, 15, msg, offset + 2 * s[j++]); - G1b(1, 6, 11, 12, msg, offset + 2 * s[j++]); - G2b(1, 6, 11, 12, msg, offset + 2 * s[j++]); - G1b(2, 7, 8, 13, msg, offset + 2 * s[j++]); - G2b(2, 7, 8, 13, msg, offset + 2 * s[j++]); - G1b(3, 4, 9, 14, msg, offset + 2 * s[j++]); - G2b(3, 4, 9, 14, msg, offset + 2 * s[j++]); - } - this.v0l ^= BBUF[0] ^ BBUF[16]; - this.v0h ^= BBUF[1] ^ BBUF[17]; - this.v1l ^= BBUF[2] ^ BBUF[18]; - this.v1h ^= BBUF[3] ^ BBUF[19]; - this.v2l ^= BBUF[4] ^ BBUF[20]; - this.v2h ^= BBUF[5] ^ BBUF[21]; - this.v3l ^= BBUF[6] ^ BBUF[22]; - this.v3h ^= BBUF[7] ^ BBUF[23]; - this.v4l ^= BBUF[8] ^ BBUF[24]; - this.v4h ^= BBUF[9] ^ BBUF[25]; - this.v5l ^= BBUF[10] ^ BBUF[26]; - this.v5h ^= BBUF[11] ^ BBUF[27]; - this.v6l ^= BBUF[12] ^ BBUF[28]; - this.v6h ^= BBUF[13] ^ BBUF[29]; - this.v7l ^= BBUF[14] ^ BBUF[30]; - this.v7h ^= BBUF[15] ^ BBUF[31]; - BBUF.fill(0); - } - destroy() { - this.destroyed = true; - this.buffer32.fill(0); - this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - } - }; - var blake2b = /* @__PURE__ */ wrapConstructorWithOpts((opts) => new BLAKE2b(opts)); - - // ../esm/blake2s.js - var B2S_IV = /* @__PURE__ */ new Uint32Array([ - 1779033703, - 3144134277, - 1013904242, - 2773480762, - 1359893119, - 2600822924, - 528734635, - 1541459225 - ]); - function G1s(a, b, c, d, x) { - a = a + b + x | 0; - d = rotr(d ^ a, 16); - c = c + d | 0; - b = rotr(b ^ c, 12); - return { a, b, c, d }; - } - function G2s(a, b, c, d, x) { - a = a + b + x | 0; - d = rotr(d ^ a, 8); - c = c + d | 0; - b = rotr(b ^ c, 7); - return { a, b, c, d }; - } - function compress(s, offset, msg, rounds, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) { - let j = 0; - for (let i = 0; i < rounds; i++) { - ({ a: v0, b: v4, c: v8, d: v12 } = G1s(v0, v4, v8, v12, msg[offset + s[j++]])); - ({ a: v0, b: v4, c: v8, d: v12 } = G2s(v0, v4, v8, v12, msg[offset + s[j++]])); - ({ a: v1, b: v5, c: v9, d: v13 } = G1s(v1, v5, v9, v13, msg[offset + s[j++]])); - ({ a: v1, b: v5, c: v9, d: v13 } = G2s(v1, v5, v9, v13, msg[offset + s[j++]])); - ({ a: v2, b: v6, c: v10, d: v14 } = G1s(v2, v6, v10, v14, msg[offset + s[j++]])); - ({ a: v2, b: v6, c: v10, d: v14 } = G2s(v2, v6, v10, v14, msg[offset + s[j++]])); - ({ a: v3, b: v7, c: v11, d: v15 } = G1s(v3, v7, v11, v15, msg[offset + s[j++]])); - ({ a: v3, b: v7, c: v11, d: v15 } = G2s(v3, v7, v11, v15, msg[offset + s[j++]])); - ({ a: v0, b: v5, c: v10, d: v15 } = G1s(v0, v5, v10, v15, msg[offset + s[j++]])); - ({ a: v0, b: v5, c: v10, d: v15 } = G2s(v0, v5, v10, v15, msg[offset + s[j++]])); - ({ a: v1, b: v6, c: v11, d: v12 } = G1s(v1, v6, v11, v12, msg[offset + s[j++]])); - ({ a: v1, b: v6, c: v11, d: v12 } = G2s(v1, v6, v11, v12, msg[offset + s[j++]])); - ({ a: v2, b: v7, c: v8, d: v13 } = G1s(v2, v7, v8, v13, msg[offset + s[j++]])); - ({ a: v2, b: v7, c: v8, d: v13 } = G2s(v2, v7, v8, v13, msg[offset + s[j++]])); - ({ a: v3, b: v4, c: v9, d: v14 } = G1s(v3, v4, v9, v14, msg[offset + s[j++]])); - ({ a: v3, b: v4, c: v9, d: v14 } = G2s(v3, v4, v9, v14, msg[offset + s[j++]])); - } - return { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 }; - } - var BLAKE2s = class extends BLAKE { - constructor(opts = {}) { - super(64, opts.dkLen === void 0 ? 32 : opts.dkLen, opts, 32, 8, 8); - this.v0 = B2S_IV[0] | 0; - this.v1 = B2S_IV[1] | 0; - this.v2 = B2S_IV[2] | 0; - this.v3 = B2S_IV[3] | 0; - this.v4 = B2S_IV[4] | 0; - this.v5 = B2S_IV[5] | 0; - this.v6 = B2S_IV[6] | 0; - this.v7 = B2S_IV[7] | 0; - const keyLength = opts.key ? opts.key.length : 0; - this.v0 ^= this.outputLen | keyLength << 8 | 1 << 16 | 1 << 24; - if (opts.salt) { - const salt = u32(toBytes(opts.salt)); - this.v4 ^= byteSwapIfBE(salt[0]); - this.v5 ^= byteSwapIfBE(salt[1]); - } - if (opts.personalization) { - const pers = u32(toBytes(opts.personalization)); - this.v6 ^= byteSwapIfBE(pers[0]); - this.v7 ^= byteSwapIfBE(pers[1]); - } - if (opts.key) { - const tmp = new Uint8Array(this.blockLen); - tmp.set(toBytes(opts.key)); - this.update(tmp); - } - } - get() { - const { v0, v1, v2, v3, v4, v5, v6, v7 } = this; - return [v0, v1, v2, v3, v4, v5, v6, v7]; - } - // prettier-ignore - set(v0, v1, v2, v3, v4, v5, v6, v7) { - this.v0 = v0 | 0; - this.v1 = v1 | 0; - this.v2 = v2 | 0; - this.v3 = v3 | 0; - this.v4 = v4 | 0; - this.v5 = v5 | 0; - this.v6 = v6 | 0; - this.v7 = v7 | 0; - } - compress(msg, offset, isLast) { - const { h, l } = fromBig(BigInt(this.length)); - const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(SIGMA, offset, msg, 10, this.v0, this.v1, this.v2, this.v3, this.v4, this.v5, this.v6, this.v7, B2S_IV[0], B2S_IV[1], B2S_IV[2], B2S_IV[3], l ^ B2S_IV[4], h ^ B2S_IV[5], isLast ? ~B2S_IV[6] : B2S_IV[6], B2S_IV[7]); - this.v0 ^= v0 ^ v8; - this.v1 ^= v1 ^ v9; - this.v2 ^= v2 ^ v10; - this.v3 ^= v3 ^ v11; - this.v4 ^= v4 ^ v12; - this.v5 ^= v5 ^ v13; - this.v6 ^= v6 ^ v14; - this.v7 ^= v7 ^ v15; - } - destroy() { - this.destroyed = true; - this.buffer32.fill(0); - this.set(0, 0, 0, 0, 0, 0, 0, 0); - } - }; - var blake2s = /* @__PURE__ */ wrapConstructorWithOpts((opts) => new BLAKE2s(opts)); - - // ../esm/blake3.js - var SIGMA2 = /* @__PURE__ */ (() => { - const Id2 = Array.from({ length: 16 }, (_, i) => i); - const permute = (arr) => [2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8].map((i) => arr[i]); - const res = []; - for (let i = 0, v = Id2; i < 7; i++, v = permute(v)) - res.push(...v); - return Uint8Array.from(res); - })(); - var BLAKE3 = class _BLAKE3 extends BLAKE { - constructor(opts = {}, flags = 0) { - super(64, opts.dkLen === void 0 ? 32 : opts.dkLen, {}, Number.MAX_SAFE_INTEGER, 0, 0); - this.flags = 0 | 0; - this.chunkPos = 0; - this.chunksDone = 0; - this.stack = []; - this.posOut = 0; - this.bufferOut32 = new Uint32Array(16); - this.chunkOut = 0; - this.enableXOF = true; - this.outputLen = opts.dkLen === void 0 ? 32 : opts.dkLen; - number(this.outputLen); - if (opts.key !== void 0 && opts.context !== void 0) - throw new Error("Blake3: only key or context can be specified at same time"); - else if (opts.key !== void 0) { - const key = toBytes(opts.key).slice(); - if (key.length !== 32) - throw new Error("Blake3: key should be 32 byte"); - this.IV = u32(key); - if (!isLE) - byteSwap32(this.IV); - this.flags = flags | 16; - } else if (opts.context !== void 0) { - const context_key = new _BLAKE3( - { dkLen: 32 }, - 32 - /* B3_Flags.DERIVE_KEY_CONTEXT */ - ).update(opts.context).digest(); - this.IV = u32(context_key); - if (!isLE) - byteSwap32(this.IV); - this.flags = flags | 64; - } else { - this.IV = B2S_IV.slice(); - this.flags = flags; - } - this.state = this.IV.slice(); - this.bufferOut = u8(this.bufferOut32); - } - // Unused - get() { - return []; - } - set() { - } - b2Compress(counter, flags, buf, bufPos = 0) { - const { state: s, pos } = this; - const { h, l } = fromBig(BigInt(counter), true); - const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(SIGMA2, bufPos, buf, 7, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], B2S_IV[0], B2S_IV[1], B2S_IV[2], B2S_IV[3], h, l, pos, flags); - s[0] = v0 ^ v8; - s[1] = v1 ^ v9; - s[2] = v2 ^ v10; - s[3] = v3 ^ v11; - s[4] = v4 ^ v12; - s[5] = v5 ^ v13; - s[6] = v6 ^ v14; - s[7] = v7 ^ v15; - } - compress(buf, bufPos = 0, isLast = false) { - let flags = this.flags; - if (!this.chunkPos) - flags |= 1; - if (this.chunkPos === 15 || isLast) - flags |= 2; - if (!isLast) - this.pos = this.blockLen; - this.b2Compress(this.chunksDone, flags, buf, bufPos); - this.chunkPos += 1; - if (this.chunkPos === 16 || isLast) { - let chunk = this.state; - this.state = this.IV.slice(); - for (let last, chunks = this.chunksDone + 1; isLast || !(chunks & 1); chunks >>= 1) { - if (!(last = this.stack.pop())) - break; - this.buffer32.set(last, 0); - this.buffer32.set(chunk, 8); - this.pos = this.blockLen; - this.b2Compress(0, this.flags | 4, this.buffer32, 0); - chunk = this.state; - this.state = this.IV.slice(); - } - this.chunksDone++; - this.chunkPos = 0; - this.stack.push(chunk); - } - this.pos = 0; - } - _cloneInto(to) { - to = super._cloneInto(to); - const { IV, flags, state, chunkPos, posOut, chunkOut, stack, chunksDone } = this; - to.state.set(state.slice()); - to.stack = stack.map((i) => Uint32Array.from(i)); - to.IV.set(IV); - to.flags = flags; - to.chunkPos = chunkPos; - to.chunksDone = chunksDone; - to.posOut = posOut; - to.chunkOut = chunkOut; - to.enableXOF = this.enableXOF; - to.bufferOut32.set(this.bufferOut32); - return to; - } - destroy() { - this.destroyed = true; - this.state.fill(0); - this.buffer32.fill(0); - this.IV.fill(0); - this.bufferOut32.fill(0); - for (let i of this.stack) - i.fill(0); - } - // Same as b2Compress, but doesn't modify state and returns 16 u32 array (instead of 8) - b2CompressOut() { - const { state: s, pos, flags, buffer32, bufferOut32: out32 } = this; - const { h, l } = fromBig(BigInt(this.chunkOut++)); - if (!isLE) - byteSwap32(buffer32); - const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(SIGMA2, 0, buffer32, 7, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], B2S_IV[0], B2S_IV[1], B2S_IV[2], B2S_IV[3], l, h, pos, flags); - out32[0] = v0 ^ v8; - out32[1] = v1 ^ v9; - out32[2] = v2 ^ v10; - out32[3] = v3 ^ v11; - out32[4] = v4 ^ v12; - out32[5] = v5 ^ v13; - out32[6] = v6 ^ v14; - out32[7] = v7 ^ v15; - out32[8] = s[0] ^ v8; - out32[9] = s[1] ^ v9; - out32[10] = s[2] ^ v10; - out32[11] = s[3] ^ v11; - out32[12] = s[4] ^ v12; - out32[13] = s[5] ^ v13; - out32[14] = s[6] ^ v14; - out32[15] = s[7] ^ v15; - if (!isLE) { - byteSwap32(buffer32); - byteSwap32(out32); - } - this.posOut = 0; - } - finish() { - if (this.finished) - return; - this.finished = true; - this.buffer.fill(0, this.pos); - let flags = this.flags | 8; - if (this.stack.length) { - flags |= 4; - if (!isLE) - byteSwap32(this.buffer32); - this.compress(this.buffer32, 0, true); - if (!isLE) - byteSwap32(this.buffer32); - this.chunksDone = 0; - this.pos = this.blockLen; - } else { - flags |= (!this.chunkPos ? 1 : 0) | 2; - } - this.flags = flags; - this.b2CompressOut(); - } - writeInto(out) { - exists(this, false); - bytes(out); - this.finish(); - const { blockLen, bufferOut } = this; - for (let pos = 0, len = out.length; pos < len; ) { - if (this.posOut >= blockLen) - this.b2CompressOut(); - const take = Math.min(blockLen - this.posOut, len - pos); - out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos); - this.posOut += take; - pos += take; - } - return out; - } - xofInto(out) { - if (!this.enableXOF) - throw new Error("XOF is not possible after digest call"); - return this.writeInto(out); - } - xof(bytes2) { - number(bytes2); - return this.xofInto(new Uint8Array(bytes2)); - } - digestInto(out) { - output(out, this); - if (this.finished) - throw new Error("digest() was already called"); - this.enableXOF = false; - this.writeInto(out); - this.destroy(); - return out; - } - digest() { - return this.digestInto(new Uint8Array(this.outputLen)); - } - }; - var blake3 = /* @__PURE__ */ wrapXOFConstructorWithOpts((opts) => new BLAKE3(opts)); - - // ../esm/hmac.js - var HMAC = class extends Hash { - constructor(hash2, _key) { - super(); - this.finished = false; - this.destroyed = false; - hash(hash2); - const key = toBytes(_key); - this.iHash = hash2.create(); - if (typeof this.iHash.update !== "function") - throw new Error("Expected instance of class which extends utils.Hash"); - this.blockLen = this.iHash.blockLen; - this.outputLen = this.iHash.outputLen; - const blockLen = this.blockLen; - const pad = new Uint8Array(blockLen); - pad.set(key.length > blockLen ? hash2.create().update(key).digest() : key); - for (let i = 0; i < pad.length; i++) - pad[i] ^= 54; - this.iHash.update(pad); - this.oHash = hash2.create(); - for (let i = 0; i < pad.length; i++) - pad[i] ^= 54 ^ 92; - this.oHash.update(pad); - pad.fill(0); - } - update(buf) { - exists(this); - this.iHash.update(buf); - return this; - } - digestInto(out) { - exists(this); - bytes(out, this.outputLen); - this.finished = true; - this.iHash.digestInto(out); - this.oHash.update(out); - this.oHash.digestInto(out); - this.destroy(); - } - digest() { - const out = new Uint8Array(this.oHash.outputLen); - this.digestInto(out); - return out; - } - _cloneInto(to) { - to || (to = Object.create(Object.getPrototypeOf(this), {})); - const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this; - to.finished = finished; - to.destroyed = destroyed; - to.blockLen = blockLen; - to.outputLen = outputLen; - to.oHash = oHash._cloneInto(to.oHash); - to.iHash = iHash._cloneInto(to.iHash); - return to; - } - destroy() { - this.destroyed = true; - this.oHash.destroy(); - this.iHash.destroy(); - } - }; - var hmac = (hash2, key, message) => new HMAC(hash2, key).update(message).digest(); - hmac.create = (hash2, key) => new HMAC(hash2, key); - - // ../esm/hkdf.js - function extract(hash2, ikm, salt) { - hash(hash2); - if (salt === void 0) - salt = new Uint8Array(hash2.outputLen); - return hmac(hash2, toBytes(salt), toBytes(ikm)); - } - var HKDF_COUNTER = /* @__PURE__ */ new Uint8Array([0]); - var EMPTY_BUFFER = /* @__PURE__ */ new Uint8Array(); - function expand(hash2, prk, info, length = 32) { - hash(hash2); - number(length); - if (length > 255 * hash2.outputLen) - throw new Error("Length should be <= 255*HashLen"); - const blocks = Math.ceil(length / hash2.outputLen); - if (info === void 0) - info = EMPTY_BUFFER; - const okm = new Uint8Array(blocks * hash2.outputLen); - const HMAC2 = hmac.create(hash2, prk); - const HMACTmp = HMAC2._cloneInto(); - const T = new Uint8Array(HMAC2.outputLen); - for (let counter = 0; counter < blocks; counter++) { - HKDF_COUNTER[0] = counter + 1; - HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T).update(info).update(HKDF_COUNTER).digestInto(T); - okm.set(T, hash2.outputLen * counter); - HMAC2._cloneInto(HMACTmp); - } - HMAC2.destroy(); - HMACTmp.destroy(); - T.fill(0); - HKDF_COUNTER.fill(0); - return okm.slice(0, length); - } - var hkdf = (hash2, ikm, salt, info, length) => expand(hash2, extract(hash2, ikm, salt), info, length); - - // ../esm/pbkdf2.js - function pbkdf2Init(hash2, _password, _salt, _opts) { - hash(hash2); - const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts); - const { c, dkLen, asyncTick } = opts; - number(c); - number(dkLen); - number(asyncTick); - if (c < 1) - throw new Error("PBKDF2: iterations (c) should be >= 1"); - const password = toBytes(_password); - const salt = toBytes(_salt); - const DK = new Uint8Array(dkLen); - const PRF = hmac.create(hash2, password); - const PRFSalt = PRF._cloneInto().update(salt); - return { c, dkLen, asyncTick, DK, PRF, PRFSalt }; - } - function pbkdf2Output(PRF, PRFSalt, DK, prfW, u) { - PRF.destroy(); - PRFSalt.destroy(); - if (prfW) - prfW.destroy(); - u.fill(0); - return DK; - } - function pbkdf2(hash2, password, salt, opts) { - const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash2, password, salt, opts); - let prfW; - const arr = new Uint8Array(4); - const view = createView(arr); - const u = new Uint8Array(PRF.outputLen); - for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) { - const Ti = DK.subarray(pos, pos + PRF.outputLen); - view.setInt32(0, ti, false); - (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u); - Ti.set(u.subarray(0, Ti.length)); - for (let ui = 1; ui < c; ui++) { - PRF._cloneInto(prfW).update(u).digestInto(u); - for (let i = 0; i < Ti.length; i++) - Ti[i] ^= u[i]; - } - } - return pbkdf2Output(PRF, PRFSalt, DK, prfW, u); - } - async function pbkdf2Async(hash2, password, salt, opts) { - const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash2, password, salt, opts); - let prfW; - const arr = new Uint8Array(4); - const view = createView(arr); - const u = new Uint8Array(PRF.outputLen); - for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) { - const Ti = DK.subarray(pos, pos + PRF.outputLen); - view.setInt32(0, ti, false); - (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u); - Ti.set(u.subarray(0, Ti.length)); - await asyncLoop(c - 1, asyncTick, () => { - PRF._cloneInto(prfW).update(u).digestInto(u); - for (let i = 0; i < Ti.length; i++) - Ti[i] ^= u[i]; - }); - } - return pbkdf2Output(PRF, PRFSalt, DK, prfW, u); - } - - // ../esm/_md.js - function setBigUint64(view, byteOffset, value, isLE2) { - if (typeof view.setBigUint64 === "function") - return view.setBigUint64(byteOffset, value, isLE2); - const _32n2 = BigInt(32); - const _u32_max = BigInt(4294967295); - const wh = Number(value >> _32n2 & _u32_max); - const wl = Number(value & _u32_max); - const h = isLE2 ? 4 : 0; - const l = isLE2 ? 0 : 4; - view.setUint32(byteOffset + h, wh, isLE2); - view.setUint32(byteOffset + l, wl, isLE2); - } - var Chi = (a, b, c) => a & b ^ ~a & c; - var Maj = (a, b, c) => a & b ^ a & c ^ b & c; - var HashMD = class extends Hash { - constructor(blockLen, outputLen, padOffset, isLE2) { - super(); - this.blockLen = blockLen; - this.outputLen = outputLen; - this.padOffset = padOffset; - this.isLE = isLE2; - this.finished = false; - this.length = 0; - this.pos = 0; - this.destroyed = false; - this.buffer = new Uint8Array(blockLen); - this.view = createView(this.buffer); - } - update(data) { - exists(this); - const { view, buffer, blockLen } = this; - data = toBytes(data); - const len = data.length; - for (let pos = 0; pos < len; ) { - const take = Math.min(blockLen - this.pos, len - pos); - if (take === blockLen) { - const dataView = createView(data); - for (; blockLen <= len - pos; pos += blockLen) - this.process(dataView, pos); - continue; - } - buffer.set(data.subarray(pos, pos + take), this.pos); - this.pos += take; - pos += take; - if (this.pos === blockLen) { - this.process(view, 0); - this.pos = 0; - } - } - this.length += data.length; - this.roundClean(); - return this; - } - digestInto(out) { - exists(this); - output(out, this); - this.finished = true; - const { buffer, view, blockLen, isLE: isLE2 } = this; - let { pos } = this; - buffer[pos++] = 128; - this.buffer.subarray(pos).fill(0); - if (this.padOffset > blockLen - pos) { - this.process(view, 0); - pos = 0; - } - for (let i = pos; i < blockLen; i++) - buffer[i] = 0; - setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE2); - this.process(view, 0); - const oview = createView(out); - const len = this.outputLen; - if (len % 4) - throw new Error("_sha2: outputLen should be aligned to 32bit"); - const outLen = len / 4; - const state = this.get(); - if (outLen > state.length) - throw new Error("_sha2: outputLen bigger than state"); - for (let i = 0; i < outLen; i++) - oview.setUint32(4 * i, state[i], isLE2); - } - digest() { - const { buffer, outputLen } = this; - this.digestInto(buffer); - const res = buffer.slice(0, outputLen); - this.destroy(); - return res; - } - _cloneInto(to) { - to || (to = new this.constructor()); - to.set(...this.get()); - const { blockLen, buffer, length, finished, destroyed, pos } = this; - to.length = length; - to.pos = pos; - to.finished = finished; - to.destroyed = destroyed; - if (length % blockLen) - to.buffer.set(buffer); - return to; - } - }; - - // ../esm/ripemd160.js - var Rho = /* @__PURE__ */ new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]); - var Id = /* @__PURE__ */ new Uint8Array(new Array(16).fill(0).map((_, i) => i)); - var Pi = /* @__PURE__ */ Id.map((i) => (9 * i + 5) % 16); - var idxL = [Id]; - var idxR = [Pi]; - for (let i = 0; i < 4; i++) - for (let j of [idxL, idxR]) - j.push(j[i].map((k) => Rho[k])); - var shifts = /* @__PURE__ */ [ - [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8], - [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7], - [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9], - [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6], - [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5] - ].map((i) => new Uint8Array(i)); - var shiftsL = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts[i][j])); - var shiftsR = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts[i][j])); - var Kl = /* @__PURE__ */ new Uint32Array([ - 0, - 1518500249, - 1859775393, - 2400959708, - 2840853838 - ]); - var Kr = /* @__PURE__ */ new Uint32Array([ - 1352829926, - 1548603684, - 1836072691, - 2053994217, - 0 - ]); - function f(group, x, y, z) { - if (group === 0) - return x ^ y ^ z; - else if (group === 1) - return x & y | ~x & z; - else if (group === 2) - return (x | ~y) ^ z; - else if (group === 3) - return x & z | y & ~z; - else - return x ^ (y | ~z); - } - var R_BUF = /* @__PURE__ */ new Uint32Array(16); - var RIPEMD160 = class extends HashMD { - constructor() { - super(64, 20, 8, true); - this.h0 = 1732584193 | 0; - this.h1 = 4023233417 | 0; - this.h2 = 2562383102 | 0; - this.h3 = 271733878 | 0; - this.h4 = 3285377520 | 0; - } - get() { - const { h0, h1, h2, h3, h4 } = this; - return [h0, h1, h2, h3, h4]; - } - set(h0, h1, h2, h3, h4) { - this.h0 = h0 | 0; - this.h1 = h1 | 0; - this.h2 = h2 | 0; - this.h3 = h3 | 0; - this.h4 = h4 | 0; - } - process(view, offset) { - for (let i = 0; i < 16; i++, offset += 4) - R_BUF[i] = view.getUint32(offset, true); - let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el; - for (let group = 0; group < 5; group++) { - const rGroup = 4 - group; - const hbl = Kl[group], hbr = Kr[group]; - const rl = idxL[group], rr = idxR[group]; - const sl = shiftsL[group], sr = shiftsR[group]; - for (let i = 0; i < 16; i++) { - const tl = rotl(al + f(group, bl, cl, dl) + R_BUF[rl[i]] + hbl, sl[i]) + el | 0; - al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; - } - for (let i = 0; i < 16; i++) { - const tr = rotl(ar + f(rGroup, br, cr, dr) + R_BUF[rr[i]] + hbr, sr[i]) + er | 0; - ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; - } - } - this.set(this.h1 + cl + dr | 0, this.h2 + dl + er | 0, this.h3 + el + ar | 0, this.h4 + al + br | 0, this.h0 + bl + cr | 0); - } - roundClean() { - R_BUF.fill(0); - } - destroy() { - this.destroyed = true; - this.buffer.fill(0); - this.set(0, 0, 0, 0, 0); - } - }; - var ripemd160 = /* @__PURE__ */ wrapConstructor(() => new RIPEMD160()); - - // ../esm/sha256.js - var SHA256_K = /* @__PURE__ */ new Uint32Array([ - 1116352408, - 1899447441, - 3049323471, - 3921009573, - 961987163, - 1508970993, - 2453635748, - 2870763221, - 3624381080, - 310598401, - 607225278, - 1426881987, - 1925078388, - 2162078206, - 2614888103, - 3248222580, - 3835390401, - 4022224774, - 264347078, - 604807628, - 770255983, - 1249150122, - 1555081692, - 1996064986, - 2554220882, - 2821834349, - 2952996808, - 3210313671, - 3336571891, - 3584528711, - 113926993, - 338241895, - 666307205, - 773529912, - 1294757372, - 1396182291, - 1695183700, - 1986661051, - 2177026350, - 2456956037, - 2730485921, - 2820302411, - 3259730800, - 3345764771, - 3516065817, - 3600352804, - 4094571909, - 275423344, - 430227734, - 506948616, - 659060556, - 883997877, - 958139571, - 1322822218, - 1537002063, - 1747873779, - 1955562222, - 2024104815, - 2227730452, - 2361852424, - 2428436474, - 2756734187, - 3204031479, - 3329325298 - ]); - var SHA256_IV = /* @__PURE__ */ new Uint32Array([ - 1779033703, - 3144134277, - 1013904242, - 2773480762, - 1359893119, - 2600822924, - 528734635, - 1541459225 - ]); - var SHA256_W = /* @__PURE__ */ new Uint32Array(64); - var SHA256 = class extends HashMD { - constructor() { - super(64, 32, 8, false); - this.A = SHA256_IV[0] | 0; - this.B = SHA256_IV[1] | 0; - this.C = SHA256_IV[2] | 0; - this.D = SHA256_IV[3] | 0; - this.E = SHA256_IV[4] | 0; - this.F = SHA256_IV[5] | 0; - this.G = SHA256_IV[6] | 0; - this.H = SHA256_IV[7] | 0; - } - get() { - const { A, B, C, D, E, F, G: G2, H } = this; - return [A, B, C, D, E, F, G2, H]; - } - // prettier-ignore - set(A, B, C, D, E, F, G2, H) { - this.A = A | 0; - this.B = B | 0; - this.C = C | 0; - this.D = D | 0; - this.E = E | 0; - this.F = F | 0; - this.G = G2 | 0; - this.H = H | 0; - } - process(view, offset) { - for (let i = 0; i < 16; i++, offset += 4) - SHA256_W[i] = view.getUint32(offset, false); - for (let i = 16; i < 64; i++) { - const W15 = SHA256_W[i - 15]; - const W2 = SHA256_W[i - 2]; - const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ W15 >>> 3; - const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ W2 >>> 10; - SHA256_W[i] = s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16] | 0; - } - let { A, B, C, D, E, F, G: G2, H } = this; - for (let i = 0; i < 64; i++) { - const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25); - const T1 = H + sigma1 + Chi(E, F, G2) + SHA256_K[i] + SHA256_W[i] | 0; - const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22); - const T2 = sigma0 + Maj(A, B, C) | 0; - H = G2; - G2 = F; - F = E; - E = D + T1 | 0; - D = C; - C = B; - B = A; - A = T1 + T2 | 0; - } - A = A + this.A | 0; - B = B + this.B | 0; - C = C + this.C | 0; - D = D + this.D | 0; - E = E + this.E | 0; - F = F + this.F | 0; - G2 = G2 + this.G | 0; - H = H + this.H | 0; - this.set(A, B, C, D, E, F, G2, H); - } - roundClean() { - SHA256_W.fill(0); - } - destroy() { - this.set(0, 0, 0, 0, 0, 0, 0, 0); - this.buffer.fill(0); - } - }; - var sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256()); - - // ../esm/scrypt.js - function XorAndSalsa(prev, pi, input, ii, out, oi) { - let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++]; - let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++]; - let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++]; - let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++]; - let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++]; - let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++]; - let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++]; - let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++]; - let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15; - for (let i = 0; i < 8; i += 2) { - x04 ^= rotl(x00 + x12 | 0, 7); - x08 ^= rotl(x04 + x00 | 0, 9); - x12 ^= rotl(x08 + x04 | 0, 13); - x00 ^= rotl(x12 + x08 | 0, 18); - x09 ^= rotl(x05 + x01 | 0, 7); - x13 ^= rotl(x09 + x05 | 0, 9); - x01 ^= rotl(x13 + x09 | 0, 13); - x05 ^= rotl(x01 + x13 | 0, 18); - x14 ^= rotl(x10 + x06 | 0, 7); - x02 ^= rotl(x14 + x10 | 0, 9); - x06 ^= rotl(x02 + x14 | 0, 13); - x10 ^= rotl(x06 + x02 | 0, 18); - x03 ^= rotl(x15 + x11 | 0, 7); - x07 ^= rotl(x03 + x15 | 0, 9); - x11 ^= rotl(x07 + x03 | 0, 13); - x15 ^= rotl(x11 + x07 | 0, 18); - x01 ^= rotl(x00 + x03 | 0, 7); - x02 ^= rotl(x01 + x00 | 0, 9); - x03 ^= rotl(x02 + x01 | 0, 13); - x00 ^= rotl(x03 + x02 | 0, 18); - x06 ^= rotl(x05 + x04 | 0, 7); - x07 ^= rotl(x06 + x05 | 0, 9); - x04 ^= rotl(x07 + x06 | 0, 13); - x05 ^= rotl(x04 + x07 | 0, 18); - x11 ^= rotl(x10 + x09 | 0, 7); - x08 ^= rotl(x11 + x10 | 0, 9); - x09 ^= rotl(x08 + x11 | 0, 13); - x10 ^= rotl(x09 + x08 | 0, 18); - x12 ^= rotl(x15 + x14 | 0, 7); - x13 ^= rotl(x12 + x15 | 0, 9); - x14 ^= rotl(x13 + x12 | 0, 13); - x15 ^= rotl(x14 + x13 | 0, 18); - } - out[oi++] = y00 + x00 | 0; - out[oi++] = y01 + x01 | 0; - out[oi++] = y02 + x02 | 0; - out[oi++] = y03 + x03 | 0; - out[oi++] = y04 + x04 | 0; - out[oi++] = y05 + x05 | 0; - out[oi++] = y06 + x06 | 0; - out[oi++] = y07 + x07 | 0; - out[oi++] = y08 + x08 | 0; - out[oi++] = y09 + x09 | 0; - out[oi++] = y10 + x10 | 0; - out[oi++] = y11 + x11 | 0; - out[oi++] = y12 + x12 | 0; - out[oi++] = y13 + x13 | 0; - out[oi++] = y14 + x14 | 0; - out[oi++] = y15 + x15 | 0; - } - function BlockMix(input, ii, out, oi, r) { - let head = oi + 0; - let tail = oi + 16 * r; - for (let i = 0; i < 16; i++) - out[tail + i] = input[ii + (2 * r - 1) * 16 + i]; - for (let i = 0; i < r; i++, head += 16, ii += 16) { - XorAndSalsa(out, tail, input, ii, out, head); - if (i > 0) - tail += 16; - XorAndSalsa(out, head, input, ii += 16, out, tail); - } - } - function scryptInit(password, salt, _opts) { - const opts = checkOpts({ - dkLen: 32, - asyncTick: 10, - maxmem: 1024 ** 3 + 1024 - }, _opts); - const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts; - number(N); - number(r); - number(p); - number(dkLen); - number(asyncTick); - number(maxmem); - if (onProgress !== void 0 && typeof onProgress !== "function") - throw new Error("progressCb should be function"); - const blockSize = 128 * r; - const blockSize32 = blockSize / 4; - if (N <= 1 || (N & N - 1) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) { - throw new Error("Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32"); - } - if (p < 0 || p > (2 ** 32 - 1) * 32 / blockSize) { - throw new Error("Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)"); - } - if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) { - throw new Error("Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32"); - } - const memUsed = blockSize * (N + p); - if (memUsed > maxmem) { - throw new Error(`Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`); - } - const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p }); - const B32 = u32(B); - const V = u32(new Uint8Array(blockSize * N)); - const tmp = u32(new Uint8Array(blockSize)); - let blockMixCb = () => { - }; - if (onProgress) { - const totalBlockMix = 2 * N * p; - const callbackPer = Math.max(Math.floor(totalBlockMix / 1e4), 1); - let blockMixCnt = 0; - blockMixCb = () => { - blockMixCnt++; - if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix)) - onProgress(blockMixCnt / totalBlockMix); - }; - } - return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick }; - } - function scryptOutput(password, dkLen, B, V, tmp) { - const res = pbkdf2(sha256, password, B, { c: 1, dkLen }); - B.fill(0); - V.fill(0); - tmp.fill(0); - return res; - } - function scrypt(password, salt, opts) { - const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts); - if (!isLE) - byteSwap32(B32); - for (let pi = 0; pi < p; pi++) { - const Pi2 = blockSize32 * pi; - for (let i = 0; i < blockSize32; i++) - V[i] = B32[Pi2 + i]; - for (let i = 0, pos = 0; i < N - 1; i++) { - BlockMix(V, pos, V, pos += blockSize32, r); - blockMixCb(); - } - BlockMix(V, (N - 1) * blockSize32, B32, Pi2, r); - blockMixCb(); - for (let i = 0; i < N; i++) { - const j = B32[Pi2 + blockSize32 - 16] % N; - for (let k = 0; k < blockSize32; k++) - tmp[k] = B32[Pi2 + k] ^ V[j * blockSize32 + k]; - BlockMix(tmp, 0, B32, Pi2, r); - blockMixCb(); - } - } - if (!isLE) - byteSwap32(B32); - return scryptOutput(password, dkLen, B, V, tmp); - } - async function scryptAsync(password, salt, opts) { - const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick } = scryptInit(password, salt, opts); - if (!isLE) - byteSwap32(B32); - for (let pi = 0; pi < p; pi++) { - const Pi2 = blockSize32 * pi; - for (let i = 0; i < blockSize32; i++) - V[i] = B32[Pi2 + i]; - let pos = 0; - await asyncLoop(N - 1, asyncTick, () => { - BlockMix(V, pos, V, pos += blockSize32, r); - blockMixCb(); - }); - BlockMix(V, (N - 1) * blockSize32, B32, Pi2, r); - blockMixCb(); - await asyncLoop(N, asyncTick, () => { - const j = B32[Pi2 + blockSize32 - 16] % N; - for (let k = 0; k < blockSize32; k++) - tmp[k] = B32[Pi2 + k] ^ V[j * blockSize32 + k]; - BlockMix(tmp, 0, B32, Pi2, r); - blockMixCb(); - }); - } - if (!isLE) - byteSwap32(B32); - return scryptOutput(password, dkLen, B, V, tmp); - } - - // ../esm/sha512.js - var [SHA512_Kh, SHA512_Kl] = /* @__PURE__ */ (() => u64_default.split([ - "0x428a2f98d728ae22", - "0x7137449123ef65cd", - "0xb5c0fbcfec4d3b2f", - "0xe9b5dba58189dbbc", - "0x3956c25bf348b538", - "0x59f111f1b605d019", - "0x923f82a4af194f9b", - "0xab1c5ed5da6d8118", - "0xd807aa98a3030242", - "0x12835b0145706fbe", - "0x243185be4ee4b28c", - "0x550c7dc3d5ffb4e2", - "0x72be5d74f27b896f", - "0x80deb1fe3b1696b1", - "0x9bdc06a725c71235", - "0xc19bf174cf692694", - "0xe49b69c19ef14ad2", - "0xefbe4786384f25e3", - "0x0fc19dc68b8cd5b5", - "0x240ca1cc77ac9c65", - "0x2de92c6f592b0275", - "0x4a7484aa6ea6e483", - "0x5cb0a9dcbd41fbd4", - "0x76f988da831153b5", - "0x983e5152ee66dfab", - "0xa831c66d2db43210", - "0xb00327c898fb213f", - "0xbf597fc7beef0ee4", - "0xc6e00bf33da88fc2", - "0xd5a79147930aa725", - "0x06ca6351e003826f", - "0x142929670a0e6e70", - "0x27b70a8546d22ffc", - "0x2e1b21385c26c926", - "0x4d2c6dfc5ac42aed", - "0x53380d139d95b3df", - "0x650a73548baf63de", - "0x766a0abb3c77b2a8", - "0x81c2c92e47edaee6", - "0x92722c851482353b", - "0xa2bfe8a14cf10364", - "0xa81a664bbc423001", - "0xc24b8b70d0f89791", - "0xc76c51a30654be30", - "0xd192e819d6ef5218", - "0xd69906245565a910", - "0xf40e35855771202a", - "0x106aa07032bbd1b8", - "0x19a4c116b8d2d0c8", - "0x1e376c085141ab53", - "0x2748774cdf8eeb99", - "0x34b0bcb5e19b48a8", - "0x391c0cb3c5c95a63", - "0x4ed8aa4ae3418acb", - "0x5b9cca4f7763e373", - "0x682e6ff3d6b2b8a3", - "0x748f82ee5defb2fc", - "0x78a5636f43172f60", - "0x84c87814a1f0ab72", - "0x8cc702081a6439ec", - "0x90befffa23631e28", - "0xa4506cebde82bde9", - "0xbef9a3f7b2c67915", - "0xc67178f2e372532b", - "0xca273eceea26619c", - "0xd186b8c721c0c207", - "0xeada7dd6cde0eb1e", - "0xf57d4f7fee6ed178", - "0x06f067aa72176fba", - "0x0a637dc5a2c898a6", - "0x113f9804bef90dae", - "0x1b710b35131c471b", - "0x28db77f523047d84", - "0x32caab7b40c72493", - "0x3c9ebe0a15c9bebc", - "0x431d67c49c100d4c", - "0x4cc5d4becb3e42b6", - "0x597f299cfc657e2a", - "0x5fcb6fab3ad6faec", - "0x6c44198c4a475817" - ].map((n) => BigInt(n))))(); - var SHA512_W_H = /* @__PURE__ */ new Uint32Array(80); - var SHA512_W_L = /* @__PURE__ */ new Uint32Array(80); - var SHA512 = class extends HashMD { - constructor() { - super(128, 64, 16, false); - this.Ah = 1779033703 | 0; - this.Al = 4089235720 | 0; - this.Bh = 3144134277 | 0; - this.Bl = 2227873595 | 0; - this.Ch = 1013904242 | 0; - this.Cl = 4271175723 | 0; - this.Dh = 2773480762 | 0; - this.Dl = 1595750129 | 0; - this.Eh = 1359893119 | 0; - this.El = 2917565137 | 0; - this.Fh = 2600822924 | 0; - this.Fl = 725511199 | 0; - this.Gh = 528734635 | 0; - this.Gl = 4215389547 | 0; - this.Hh = 1541459225 | 0; - this.Hl = 327033209 | 0; - } - // prettier-ignore - get() { - const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this; - return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl]; - } - // prettier-ignore - set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) { - this.Ah = Ah | 0; - this.Al = Al | 0; - this.Bh = Bh | 0; - this.Bl = Bl | 0; - this.Ch = Ch | 0; - this.Cl = Cl | 0; - this.Dh = Dh | 0; - this.Dl = Dl | 0; - this.Eh = Eh | 0; - this.El = El | 0; - this.Fh = Fh | 0; - this.Fl = Fl | 0; - this.Gh = Gh | 0; - this.Gl = Gl | 0; - this.Hh = Hh | 0; - this.Hl = Hl | 0; - } - process(view, offset) { - for (let i = 0; i < 16; i++, offset += 4) { - SHA512_W_H[i] = view.getUint32(offset); - SHA512_W_L[i] = view.getUint32(offset += 4); - } - for (let i = 16; i < 80; i++) { - const W15h = SHA512_W_H[i - 15] | 0; - const W15l = SHA512_W_L[i - 15] | 0; - const s0h = u64_default.rotrSH(W15h, W15l, 1) ^ u64_default.rotrSH(W15h, W15l, 8) ^ u64_default.shrSH(W15h, W15l, 7); - const s0l = u64_default.rotrSL(W15h, W15l, 1) ^ u64_default.rotrSL(W15h, W15l, 8) ^ u64_default.shrSL(W15h, W15l, 7); - const W2h = SHA512_W_H[i - 2] | 0; - const W2l = SHA512_W_L[i - 2] | 0; - const s1h = u64_default.rotrSH(W2h, W2l, 19) ^ u64_default.rotrBH(W2h, W2l, 61) ^ u64_default.shrSH(W2h, W2l, 6); - const s1l = u64_default.rotrSL(W2h, W2l, 19) ^ u64_default.rotrBL(W2h, W2l, 61) ^ u64_default.shrSL(W2h, W2l, 6); - const SUMl = u64_default.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]); - const SUMh = u64_default.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]); - SHA512_W_H[i] = SUMh | 0; - SHA512_W_L[i] = SUMl | 0; - } - let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this; - for (let i = 0; i < 80; i++) { - const sigma1h = u64_default.rotrSH(Eh, El, 14) ^ u64_default.rotrSH(Eh, El, 18) ^ u64_default.rotrBH(Eh, El, 41); - const sigma1l = u64_default.rotrSL(Eh, El, 14) ^ u64_default.rotrSL(Eh, El, 18) ^ u64_default.rotrBL(Eh, El, 41); - const CHIh = Eh & Fh ^ ~Eh & Gh; - const CHIl = El & Fl ^ ~El & Gl; - const T1ll = u64_default.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]); - const T1h = u64_default.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]); - const T1l = T1ll | 0; - const sigma0h = u64_default.rotrSH(Ah, Al, 28) ^ u64_default.rotrBH(Ah, Al, 34) ^ u64_default.rotrBH(Ah, Al, 39); - const sigma0l = u64_default.rotrSL(Ah, Al, 28) ^ u64_default.rotrBL(Ah, Al, 34) ^ u64_default.rotrBL(Ah, Al, 39); - const MAJh = Ah & Bh ^ Ah & Ch ^ Bh & Ch; - const MAJl = Al & Bl ^ Al & Cl ^ Bl & Cl; - Hh = Gh | 0; - Hl = Gl | 0; - Gh = Fh | 0; - Gl = Fl | 0; - Fh = Eh | 0; - Fl = El | 0; - ({ h: Eh, l: El } = u64_default.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0)); - Dh = Ch | 0; - Dl = Cl | 0; - Ch = Bh | 0; - Cl = Bl | 0; - Bh = Ah | 0; - Bl = Al | 0; - const All = u64_default.add3L(T1l, sigma0l, MAJl); - Ah = u64_default.add3H(All, T1h, sigma0h, MAJh); - Al = All | 0; - } - ({ h: Ah, l: Al } = u64_default.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0)); - ({ h: Bh, l: Bl } = u64_default.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0)); - ({ h: Ch, l: Cl } = u64_default.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0)); - ({ h: Dh, l: Dl } = u64_default.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0)); - ({ h: Eh, l: El } = u64_default.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0)); - ({ h: Fh, l: Fl } = u64_default.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0)); - ({ h: Gh, l: Gl } = u64_default.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0)); - ({ h: Hh, l: Hl } = u64_default.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0)); - this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl); - } - roundClean() { - SHA512_W_H.fill(0); - SHA512_W_L.fill(0); - } - destroy() { - this.buffer.fill(0); - this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - } - }; - var sha512 = /* @__PURE__ */ wrapConstructor(() => new SHA512()); - - // ../esm/sha3.js - var SHA3_PI = []; - var SHA3_ROTL = []; - var _SHA3_IOTA = []; - var _0n = /* @__PURE__ */ BigInt(0); - var _1n = /* @__PURE__ */ BigInt(1); - var _2n = /* @__PURE__ */ BigInt(2); - var _7n = /* @__PURE__ */ BigInt(7); - var _256n = /* @__PURE__ */ BigInt(256); - var _0x71n = /* @__PURE__ */ BigInt(113); - for (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) { - [x, y] = [y, (2 * x + 3 * y) % 5]; - SHA3_PI.push(2 * (5 * y + x)); - SHA3_ROTL.push((round + 1) * (round + 2) / 2 % 64); - let t = _0n; - for (let j = 0; j < 7; j++) { - R = (R << _1n ^ (R >> _7n) * _0x71n) % _256n; - if (R & _2n) - t ^= _1n << (_1n << /* @__PURE__ */ BigInt(j)) - _1n; - } - _SHA3_IOTA.push(t); - } - var [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true); - var rotlH = (h, l, s) => s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s); - var rotlL = (h, l, s) => s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s); - function keccakP(s, rounds = 24) { - const B = new Uint32Array(5 * 2); - for (let round = 24 - rounds; round < 24; round++) { - for (let x = 0; x < 10; x++) - B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40]; - for (let x = 0; x < 10; x += 2) { - const idx1 = (x + 8) % 10; - const idx0 = (x + 2) % 10; - const B0 = B[idx0]; - const B1 = B[idx0 + 1]; - const Th = rotlH(B0, B1, 1) ^ B[idx1]; - const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1]; - for (let y = 0; y < 50; y += 10) { - s[x + y] ^= Th; - s[x + y + 1] ^= Tl; - } - } - let curH = s[2]; - let curL = s[3]; - for (let t = 0; t < 24; t++) { - const shift = SHA3_ROTL[t]; - const Th = rotlH(curH, curL, shift); - const Tl = rotlL(curH, curL, shift); - const PI = SHA3_PI[t]; - curH = s[PI]; - curL = s[PI + 1]; - s[PI] = Th; - s[PI + 1] = Tl; - } - for (let y = 0; y < 50; y += 10) { - for (let x = 0; x < 10; x++) - B[x] = s[y + x]; - for (let x = 0; x < 10; x++) - s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10]; - } - s[0] ^= SHA3_IOTA_H[round]; - s[1] ^= SHA3_IOTA_L[round]; - } - B.fill(0); - } - var Keccak = class _Keccak extends Hash { - // NOTE: we accept arguments in bytes instead of bits here. - constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) { - super(); - this.blockLen = blockLen; - this.suffix = suffix; - this.outputLen = outputLen; - this.enableXOF = enableXOF; - this.rounds = rounds; - this.pos = 0; - this.posOut = 0; - this.finished = false; - this.destroyed = false; - number(outputLen); - if (0 >= this.blockLen || this.blockLen >= 200) - throw new Error("Sha3 supports only keccak-f1600 function"); - this.state = new Uint8Array(200); - this.state32 = u32(this.state); - } - keccak() { - if (!isLE) - byteSwap32(this.state32); - keccakP(this.state32, this.rounds); - if (!isLE) - byteSwap32(this.state32); - this.posOut = 0; - this.pos = 0; - } - update(data) { - exists(this); - const { blockLen, state } = this; - data = toBytes(data); - const len = data.length; - for (let pos = 0; pos < len; ) { - const take = Math.min(blockLen - this.pos, len - pos); - for (let i = 0; i < take; i++) - state[this.pos++] ^= data[pos++]; - if (this.pos === blockLen) - this.keccak(); - } - return this; - } - finish() { - if (this.finished) - return; - this.finished = true; - const { state, suffix, pos, blockLen } = this; - state[pos] ^= suffix; - if ((suffix & 128) !== 0 && pos === blockLen - 1) - this.keccak(); - state[blockLen - 1] ^= 128; - this.keccak(); - } - writeInto(out) { - exists(this, false); - bytes(out); - this.finish(); - const bufferOut = this.state; - const { blockLen } = this; - for (let pos = 0, len = out.length; pos < len; ) { - if (this.posOut >= blockLen) - this.keccak(); - const take = Math.min(blockLen - this.posOut, len - pos); - out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos); - this.posOut += take; - pos += take; - } - return out; - } - xofInto(out) { - if (!this.enableXOF) - throw new Error("XOF is not possible for this instance"); - return this.writeInto(out); - } - xof(bytes2) { - number(bytes2); - return this.xofInto(new Uint8Array(bytes2)); - } - digestInto(out) { - output(out, this); - if (this.finished) - throw new Error("digest() was already called"); - this.writeInto(out); - this.destroy(); - return out; - } - digest() { - return this.digestInto(new Uint8Array(this.outputLen)); - } - destroy() { - this.destroyed = true; - this.state.fill(0); - } - _cloneInto(to) { - const { blockLen, suffix, outputLen, rounds, enableXOF } = this; - to || (to = new _Keccak(blockLen, suffix, outputLen, enableXOF, rounds)); - to.state32.set(this.state32); - to.pos = this.pos; - to.posOut = this.posOut; - to.finished = this.finished; - to.rounds = rounds; - to.suffix = suffix; - to.outputLen = outputLen; - to.enableXOF = enableXOF; - to.destroyed = this.destroyed; - return to; - } - }; - var gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen)); - var sha3_224 = /* @__PURE__ */ gen(6, 144, 224 / 8); - var sha3_256 = /* @__PURE__ */ gen(6, 136, 256 / 8); - var sha3_384 = /* @__PURE__ */ gen(6, 104, 384 / 8); - var sha3_512 = /* @__PURE__ */ gen(6, 72, 512 / 8); - var keccak_224 = /* @__PURE__ */ gen(1, 144, 224 / 8); - var keccak_256 = /* @__PURE__ */ gen(1, 136, 256 / 8); - var keccak_384 = /* @__PURE__ */ gen(1, 104, 384 / 8); - var keccak_512 = /* @__PURE__ */ gen(1, 72, 512 / 8); - var genShake = (suffix, blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === void 0 ? outputLen : opts.dkLen, true)); - var shake128 = /* @__PURE__ */ genShake(31, 168, 128 / 8); - var shake256 = /* @__PURE__ */ genShake(31, 136, 256 / 8); - - // ../esm/sha3-addons.js - function leftEncode(n) { - const res = [n & 255]; - n >>= 8; - for (; n > 0; n >>= 8) - res.unshift(n & 255); - res.unshift(res.length); - return new Uint8Array(res); - } - function rightEncode(n) { - const res = [n & 255]; - n >>= 8; - for (; n > 0; n >>= 8) - res.unshift(n & 255); - res.push(res.length); - return new Uint8Array(res); - } - function chooseLen(opts, outputLen) { - return opts.dkLen === void 0 ? outputLen : opts.dkLen; - } - var toBytesOptional = (buf) => buf !== void 0 ? toBytes(buf) : new Uint8Array([]); - var getPadding = (len, block2) => new Uint8Array((block2 - len % block2) % block2); - function cshakePers(hash2, opts = {}) { - if (!opts || !opts.personalization && !opts.NISTfn) - return hash2; - const blockLenBytes = leftEncode(hash2.blockLen); - const fn = toBytesOptional(opts.NISTfn); - const fnLen = leftEncode(8 * fn.length); - const pers = toBytesOptional(opts.personalization); - const persLen = leftEncode(8 * pers.length); - if (!fn.length && !pers.length) - return hash2; - hash2.suffix = 4; - hash2.update(blockLenBytes).update(fnLen).update(fn).update(persLen).update(pers); - let totalLen = blockLenBytes.length + fnLen.length + fn.length + persLen.length + pers.length; - hash2.update(getPadding(totalLen, hash2.blockLen)); - return hash2; - } - var gencShake = (suffix, blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => cshakePers(new Keccak(blockLen, suffix, chooseLen(opts, outputLen), true), opts)); - var cshake128 = /* @__PURE__ */ (() => gencShake(31, 168, 128 / 8))(); - var cshake256 = /* @__PURE__ */ (() => gencShake(31, 136, 256 / 8))(); - var KMAC = class extends Keccak { - constructor(blockLen, outputLen, enableXOF, key, opts = {}) { - super(blockLen, 31, outputLen, enableXOF); - cshakePers(this, { NISTfn: "KMAC", personalization: opts.personalization }); - key = toBytes(key); - const blockLenBytes = leftEncode(this.blockLen); - const keyLen = leftEncode(8 * key.length); - this.update(blockLenBytes).update(keyLen).update(key); - const totalLen = blockLenBytes.length + keyLen.length + key.length; - this.update(getPadding(totalLen, this.blockLen)); - } - finish() { - if (!this.finished) - this.update(rightEncode(this.enableXOF ? 0 : this.outputLen * 8)); - super.finish(); - } - _cloneInto(to) { - if (!to) { - to = Object.create(Object.getPrototypeOf(this), {}); - to.state = this.state.slice(); - to.blockLen = this.blockLen; - to.state32 = u32(to.state); - } - return super._cloneInto(to); - } - clone() { - return this._cloneInto(); - } - }; - function genKmac(blockLen, outputLen, xof = false) { - const kmac = (key, message, opts) => kmac.create(key, opts).update(message).digest(); - kmac.create = (key, opts = {}) => new KMAC(blockLen, chooseLen(opts, outputLen), xof, key, opts); - return kmac; - } - var kmac128 = /* @__PURE__ */ (() => genKmac(168, 128 / 8))(); - var kmac256 = /* @__PURE__ */ (() => genKmac(136, 256 / 8))(); - var genTurboshake = (blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => { - const D = opts.D === void 0 ? 31 : opts.D; - if (!Number.isSafeInteger(D) || D < 1 || D > 127) - throw new Error(`turboshake: wrong domain separation byte: ${D}, should be 0x01..0x7f`); - return new Keccak(blockLen, D, opts.dkLen === void 0 ? outputLen : opts.dkLen, true, 12); - }); - var turboshake128 = /* @__PURE__ */ genTurboshake(168, 256 / 8); - var turboshake256 = /* @__PURE__ */ genTurboshake(136, 512 / 8); - function rightEncodeK12(n) { - const res = []; - for (; n > 0; n >>= 8) - res.unshift(n & 255); - res.push(res.length); - return new Uint8Array(res); - } - var EMPTY = new Uint8Array([]); - var KangarooTwelve = class _KangarooTwelve extends Keccak { - constructor(blockLen, leafLen, outputLen, rounds, opts) { - super(blockLen, 7, outputLen, true, rounds); - this.leafLen = leafLen; - this.chunkLen = 8192; - this.chunkPos = 0; - this.chunksDone = 0; - const { personalization } = opts; - this.personalization = toBytesOptional(personalization); - } - update(data) { - data = toBytes(data); - const { chunkLen, blockLen, leafLen, rounds } = this; - for (let pos = 0, len = data.length; pos < len; ) { - if (this.chunkPos == chunkLen) { - if (this.leafHash) - super.update(this.leafHash.digest()); - else { - this.suffix = 6; - super.update(new Uint8Array([3, 0, 0, 0, 0, 0, 0, 0])); - } - this.leafHash = new Keccak(blockLen, 11, leafLen, false, rounds); - this.chunksDone++; - this.chunkPos = 0; - } - const take = Math.min(chunkLen - this.chunkPos, len - pos); - const chunk = data.subarray(pos, pos + take); - if (this.leafHash) - this.leafHash.update(chunk); - else - super.update(chunk); - this.chunkPos += take; - pos += take; - } - return this; - } - finish() { - if (this.finished) - return; - const { personalization } = this; - this.update(personalization).update(rightEncodeK12(personalization.length)); - if (this.leafHash) { - super.update(this.leafHash.digest()); - super.update(rightEncodeK12(this.chunksDone)); - super.update(new Uint8Array([255, 255])); - } - super.finish.call(this); - } - destroy() { - super.destroy.call(this); - if (this.leafHash) - this.leafHash.destroy(); - this.personalization = EMPTY; - } - _cloneInto(to) { - const { blockLen, leafLen, leafHash, outputLen, rounds } = this; - to || (to = new _KangarooTwelve(blockLen, leafLen, outputLen, rounds, {})); - super._cloneInto(to); - if (leafHash) - to.leafHash = leafHash._cloneInto(to.leafHash); - to.personalization.set(this.personalization); - to.leafLen = this.leafLen; - to.chunkPos = this.chunkPos; - to.chunksDone = this.chunksDone; - return to; - } - clone() { - return this._cloneInto(); - } - }; - var k12 = /* @__PURE__ */ (() => wrapConstructorWithOpts((opts = {}) => new KangarooTwelve(168, 32, chooseLen(opts, 32), 12, opts)))(); - var m14 = /* @__PURE__ */ (() => wrapConstructorWithOpts((opts = {}) => new KangarooTwelve(136, 64, chooseLen(opts, 64), 14, opts)))(); - - // ../esm/sha1.js - var SHA1_IV = /* @__PURE__ */ new Uint32Array([ - 1732584193, - 4023233417, - 2562383102, - 271733878, - 3285377520 - ]); - var SHA1_W = /* @__PURE__ */ new Uint32Array(80); - var SHA1 = class extends HashMD { - constructor() { - super(64, 20, 8, false); - this.A = SHA1_IV[0] | 0; - this.B = SHA1_IV[1] | 0; - this.C = SHA1_IV[2] | 0; - this.D = SHA1_IV[3] | 0; - this.E = SHA1_IV[4] | 0; - } - get() { - const { A, B, C, D, E } = this; - return [A, B, C, D, E]; - } - set(A, B, C, D, E) { - this.A = A | 0; - this.B = B | 0; - this.C = C | 0; - this.D = D | 0; - this.E = E | 0; - } - process(view, offset) { - for (let i = 0; i < 16; i++, offset += 4) - SHA1_W[i] = view.getUint32(offset, false); - for (let i = 16; i < 80; i++) - SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1); - let { A, B, C, D, E } = this; - for (let i = 0; i < 80; i++) { - let F, K; - if (i < 20) { - F = Chi(B, C, D); - K = 1518500249; - } else if (i < 40) { - F = B ^ C ^ D; - K = 1859775393; - } else if (i < 60) { - F = Maj(B, C, D); - K = 2400959708; - } else { - F = B ^ C ^ D; - K = 3395469782; - } - const T = rotl(A, 5) + F + E + K + SHA1_W[i] | 0; - E = D; - D = C; - C = rotl(B, 30); - B = A; - A = T; - } - A = A + this.A | 0; - B = B + this.B | 0; - C = C + this.C | 0; - D = D + this.D | 0; - E = E + this.E | 0; - this.set(A, B, C, D, E); - } - roundClean() { - SHA1_W.fill(0); - } - destroy() { - this.set(0, 0, 0, 0, 0); - this.buffer.fill(0); - } - }; - var sha1 = /* @__PURE__ */ wrapConstructor(() => new SHA1()); - - // ../esm/argon2.js - var ARGON2_SYNC_POINTS = 4; - var toBytesOptional2 = (buf) => buf !== void 0 ? toBytes(buf) : new Uint8Array([]); - function mul(a, b) { - const aL = a & 65535; - const aH = a >>> 16; - const bL = b & 65535; - const bH = b >>> 16; - const ll = Math.imul(aL, bL); - const hl = Math.imul(aH, bL); - const lh = Math.imul(aL, bH); - const hh = Math.imul(aH, bH); - const BUF = (ll >>> 16) + (hl & 65535) + lh | 0; - const h = (hl >>> 16) + (BUF >>> 16) + hh | 0; - return { h, l: BUF << 16 | ll & 65535 }; - } - function relPos(areaSize, relativePos) { - return areaSize - 1 - mul(areaSize, mul(relativePos, relativePos).h).h; - } - function mul2(a, b) { - const { h, l } = mul(a, b); - return { h: (h << 1 | l >>> 31) & 4294967295, l: l << 1 & 4294967295 }; - } - function blamka(Ah, Al, Bh, Bl) { - const { h: Ch, l: Cl } = mul2(Al, Bl); - const Rll = add3L(Al, Bl, Cl); - return { h: add3H(Rll, Ah, Bh, Ch), l: Rll | 0 }; - } - var A2_BUF = new Uint32Array(256); - function G(a, b, c, d) { - let Al = A2_BUF[2 * a], Ah = A2_BUF[2 * a + 1]; - let Bl = A2_BUF[2 * b], Bh = A2_BUF[2 * b + 1]; - let Cl = A2_BUF[2 * c], Ch = A2_BUF[2 * c + 1]; - let Dl = A2_BUF[2 * d], Dh = A2_BUF[2 * d + 1]; - ({ h: Ah, l: Al } = blamka(Ah, Al, Bh, Bl)); - ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al }); - ({ Dh, Dl } = { Dh: rotr32H(Dh, Dl), Dl: rotr32L(Dh, Dl) }); - ({ h: Ch, l: Cl } = blamka(Ch, Cl, Dh, Dl)); - ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl }); - ({ Bh, Bl } = { Bh: rotrSH(Bh, Bl, 24), Bl: rotrSL(Bh, Bl, 24) }); - ({ h: Ah, l: Al } = blamka(Ah, Al, Bh, Bl)); - ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al }); - ({ Dh, Dl } = { Dh: rotrSH(Dh, Dl, 16), Dl: rotrSL(Dh, Dl, 16) }); - ({ h: Ch, l: Cl } = blamka(Ch, Cl, Dh, Dl)); - ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl }); - ({ Bh, Bl } = { Bh: rotrBH(Bh, Bl, 63), Bl: rotrBL(Bh, Bl, 63) }); - A2_BUF[2 * a] = Al, A2_BUF[2 * a + 1] = Ah; - A2_BUF[2 * b] = Bl, A2_BUF[2 * b + 1] = Bh; - A2_BUF[2 * c] = Cl, A2_BUF[2 * c + 1] = Ch; - A2_BUF[2 * d] = Dl, A2_BUF[2 * d + 1] = Dh; - } - function P(v00, v01, v02, v03, v04, v05, v06, v07, v08, v09, v10, v11, v12, v13, v14, v15) { - G(v00, v04, v08, v12); - G(v01, v05, v09, v13); - G(v02, v06, v10, v14); - G(v03, v07, v11, v15); - G(v00, v05, v10, v15); - G(v01, v06, v11, v12); - G(v02, v07, v08, v13); - G(v03, v04, v09, v14); - } - function block(x, xPos, yPos, outPos, needXor) { - for (let i = 0; i < 256; i++) - A2_BUF[i] = x[xPos + i] ^ x[yPos + i]; - for (let i = 0; i < 128; i += 16) { - P(i, i + 1, i + 2, i + 3, i + 4, i + 5, i + 6, i + 7, i + 8, i + 9, i + 10, i + 11, i + 12, i + 13, i + 14, i + 15); - } - for (let i = 0; i < 16; i += 2) { - P(i, i + 1, i + 16, i + 17, i + 32, i + 33, i + 48, i + 49, i + 64, i + 65, i + 80, i + 81, i + 96, i + 97, i + 112, i + 113); - } - if (needXor) - for (let i = 0; i < 256; i++) - x[outPos + i] ^= A2_BUF[i] ^ x[xPos + i] ^ x[yPos + i]; - else - for (let i = 0; i < 256; i++) - x[outPos + i] = A2_BUF[i] ^ x[xPos + i] ^ x[yPos + i]; - } - function Hp(A, dkLen) { - const A8 = u8(A); - const T = new Uint32Array(1); - const T8 = u8(T); - T[0] = dkLen; - if (dkLen <= 64) - return blake2b.create({ dkLen }).update(T8).update(A8).digest(); - const out = new Uint8Array(dkLen); - let V = blake2b.create({}).update(T8).update(A8).digest(); - let pos = 0; - out.set(V.subarray(0, 32)); - pos += 32; - for (; dkLen - pos > 64; pos += 32) - out.set((V = blake2b(V)).subarray(0, 32), pos); - out.set(blake2b(V, { dkLen: dkLen - pos }), pos); - return u32(out); - } - function indexAlpha(r, s, laneLen, segmentLen, index, randL, sameLane = false) { - let area; - if (0 == r) { - if (0 == s) - area = index - 1; - else if (sameLane) - area = s * segmentLen + index - 1; - else - area = s * segmentLen + (index == 0 ? -1 : 0); - } else if (sameLane) - area = laneLen - segmentLen + index - 1; - else - area = laneLen - segmentLen + (index == 0 ? -1 : 0); - const startPos = r !== 0 && s !== ARGON2_SYNC_POINTS - 1 ? (s + 1) * segmentLen : 0; - const rel = relPos(area, randL); - return (startPos + rel) % laneLen; - } - function argon2Init(type, password, salt, opts) { - password = toBytes(password); - salt = toBytes(salt); - let { p, dkLen, m, t, version, key, personalization, maxmem, onProgress } = { - ...opts, - version: opts.version || 19, - dkLen: opts.dkLen || 32, - maxmem: 2 ** 32 - }; - number(p); - number(dkLen); - number(m); - number(t); - number(version); - if (dkLen < 4 || dkLen >= 2 ** 32) - throw new Error("Argon2: dkLen should be at least 4 bytes"); - if (p < 1 || p >= 2 ** 32) - throw new Error("Argon2: p (parallelism) should be at least 1"); - if (t < 1 || t >= 2 ** 32) - throw new Error("Argon2: t (iterations) should be at least 1"); - if (m < 8 * p) - throw new Error(`Argon2: memory should be at least 8*p bytes`); - if (version !== 16 && version !== 19) - throw new Error(`Argon2: unknown version=${version}`); - password = toBytes(password); - if (password.length < 0 || password.length >= 2 ** 32) - throw new Error("Argon2: password should be less than 4 GB"); - salt = toBytes(salt); - if (salt.length < 8) - throw new Error("Argon2: salt should be at least 8 bytes"); - key = toBytesOptional2(key); - personalization = toBytesOptional2(personalization); - if (onProgress !== void 0 && typeof onProgress !== "function") - throw new Error("progressCb should be function"); - const lanes = p; - const mP = 4 * p * Math.floor(m / (ARGON2_SYNC_POINTS * p)); - const laneLen = Math.floor(mP / p); - const segmentLen = Math.floor(laneLen / ARGON2_SYNC_POINTS); - const h = blake2b.create({}); - const BUF = new Uint32Array(1); - const BUF8 = u8(BUF); - for (const i of [p, dkLen, m, t, version, type]) { - if (i < 0 || i >= 2 ** 32) - throw new Error(`Argon2: wrong parameter=${i}, expected uint32`); - BUF[0] = i; - h.update(BUF8); - } - for (let i of [password, salt, key, personalization]) { - BUF[0] = i.length; - h.update(BUF8).update(i); - } - const H0 = new Uint32Array(18); - const H0_8 = u8(H0); - h.digestInto(H0_8); - const memUsed = mP * 256; - if (memUsed < 0 || memUsed >= 2 ** 32 || memUsed > maxmem) { - throw new Error(`Argon2: wrong params (memUsed=${memUsed} maxmem=${maxmem}), should be less than 2**32`); - } - const B = new Uint32Array(memUsed); - for (let l = 0; l < p; l++) { - const i = 256 * laneLen * l; - H0[17] = l; - H0[16] = 0; - B.set(Hp(H0, 1024), i); - H0[16] = 1; - B.set(Hp(H0, 1024), i + 256); - } - let perBlock = () => { - }; - if (onProgress) { - const totalBlock = t * ARGON2_SYNC_POINTS * p * segmentLen; - const callbackPer = Math.max(Math.floor(totalBlock / 1e4), 1); - let blockCnt = 0; - perBlock = () => { - blockCnt++; - if (onProgress && (!(blockCnt % callbackPer) || blockCnt === totalBlock)) - onProgress(blockCnt / totalBlock); - }; - } - return { type, mP, p, t, version, B, laneLen, lanes, segmentLen, dkLen, perBlock }; - } - function argon2Output(B, p, laneLen, dkLen) { - const B_final = new Uint32Array(256); - for (let l = 0; l < p; l++) - for (let j = 0; j < 256; j++) - B_final[j] ^= B[256 * (laneLen * l + laneLen - 1) + j]; - return u8(Hp(B_final, dkLen)); - } - function processBlock(B, address, l, r, s, index, laneLen, segmentLen, lanes, offset, prev, dataIndependent, needXor) { - if (offset % laneLen) - prev = offset - 1; - let randL, randH; - if (dataIndependent) { - if (index % 128 === 0) { - address[256 + 12]++; - block(address, 256, 2 * 256, 0, false); - block(address, 0, 2 * 256, 0, false); - } - randL = address[2 * (index % 128)]; - randH = address[2 * (index % 128) + 1]; - } else { - const T = 256 * prev; - randL = B[T]; - randH = B[T + 1]; - } - const refLane = r === 0 && s === 0 ? l : randH % lanes; - const refPos = indexAlpha(r, s, laneLen, segmentLen, index, randL, refLane == l); - const refBlock = laneLen * refLane + refPos; - block(B, 256 * prev, 256 * refBlock, offset * 256, needXor); - } - function argon2(type, password, salt, opts) { - const { mP, p, t, version, B, laneLen, lanes, segmentLen, dkLen, perBlock } = argon2Init(type, password, salt, opts); - const address = new Uint32Array(3 * 256); - address[256 + 6] = mP; - address[256 + 8] = t; - address[256 + 10] = type; - for (let r = 0; r < t; r++) { - const needXor = r !== 0 && version === 19; - address[256 + 0] = r; - for (let s = 0; s < ARGON2_SYNC_POINTS; s++) { - address[256 + 4] = s; - const dataIndependent = type == 1 || type == 2 && r === 0 && s < 2; - for (let l = 0; l < p; l++) { - address[256 + 2] = l; - address[256 + 12] = 0; - let startPos = 0; - if (r === 0 && s === 0) { - startPos = 2; - if (dataIndependent) { - address[256 + 12]++; - block(address, 256, 2 * 256, 0, false); - block(address, 0, 2 * 256, 0, false); - } - } - let offset = l * laneLen + s * segmentLen + startPos; - let prev = offset % laneLen ? offset - 1 : offset + laneLen - 1; - for (let index = startPos; index < segmentLen; index++, offset++, prev++) { - perBlock(); - processBlock(B, address, l, r, s, index, laneLen, segmentLen, lanes, offset, prev, dataIndependent, needXor); - } - } - } - } - return argon2Output(B, p, laneLen, dkLen); - } - var argon2id = (password, salt, opts) => argon2(2, password, salt, opts); - - // ../esm/eskdf.js - var SCRYPT_FACTOR = 2 ** 19; - var PBKDF2_FACTOR = 2 ** 17; - function scrypt2(password, salt) { - return scrypt(password, salt, { N: SCRYPT_FACTOR, r: 8, p: 1, dkLen: 32 }); - } - function pbkdf22(password, salt) { - return pbkdf2(sha256, password, salt, { c: PBKDF2_FACTOR, dkLen: 32 }); - } - function xor32(a, b) { - bytes(a, 32); - bytes(b, 32); - const arr = new Uint8Array(32); - for (let i = 0; i < 32; i++) { - arr[i] = a[i] ^ b[i]; - } - return arr; - } - function strHasLength(str, min, max) { - return typeof str === "string" && str.length >= min && str.length <= max; - } - function deriveMainSeed(username, password) { - if (!strHasLength(username, 8, 255)) - throw new Error("invalid username"); - if (!strHasLength(password, 8, 255)) - throw new Error("invalid password"); - const scr = scrypt2(password + "", username + ""); - const pbk = pbkdf22(password + "", username + ""); - const res = xor32(scr, pbk); - scr.fill(0); - pbk.fill(0); - return res; - } - function getSaltInfo(protocol, accountId = 0) { - if (!(strHasLength(protocol, 3, 15) && /^[a-z0-9]{3,15}$/.test(protocol))) { - throw new Error("invalid protocol"); - } - const allowsStr = /^password\d{0,3}|ssh|tor|file$/.test(protocol); - let salt; - if (typeof accountId === "string") { - if (!allowsStr) - throw new Error("accountId must be a number"); - if (!strHasLength(accountId, 1, 255)) - throw new Error("accountId must be valid string"); - salt = toBytes(accountId); - } else if (Number.isSafeInteger(accountId)) { - if (accountId < 0 || accountId > 2 ** 32 - 1) - throw new Error("invalid accountId"); - salt = new Uint8Array(4); - createView(salt).setUint32(0, accountId, false); - } else { - throw new Error(`accountId must be a number${allowsStr ? " or string" : ""}`); - } - const info = toBytes(protocol); - return { salt, info }; - } - function countBytes(num) { - if (typeof num !== "bigint" || num <= BigInt(128)) - throw new Error("invalid number"); - return Math.ceil(num.toString(2).length / 8); - } - function getKeyLength(options) { - if (!options || typeof options !== "object") - return 32; - const hasLen = "keyLength" in options; - const hasMod = "modulus" in options; - if (hasLen && hasMod) - throw new Error("cannot combine keyLength and modulus options"); - if (!hasLen && !hasMod) - throw new Error("must have either keyLength or modulus option"); - const l = hasMod ? countBytes(options.modulus) + 8 : options.keyLength; - if (!(typeof l === "number" && l >= 16 && l <= 8192)) - throw new Error("invalid keyLength"); - return l; - } - function modReduceKey(key, modulus) { - const _1 = BigInt(1); - const num = BigInt("0x" + bytesToHex(key)); - const res = num % (modulus - _1) + _1; - if (res < _1) - throw new Error("expected positive number"); - const len = key.length - 8; - const hex = res.toString(16).padStart(len * 2, "0"); - const bytes2 = hexToBytes(hex); - if (bytes2.length !== len) - throw new Error("invalid length of result key"); - return bytes2; - } - async function eskdf(username, password) { - let seed = deriveMainSeed(username, password); - function deriveCK(protocol, accountId = 0, options) { - bytes(seed, 32); - const { salt, info } = getSaltInfo(protocol, accountId); - const keyLength = getKeyLength(options); - const key = hkdf(sha256, seed, salt, info, keyLength); - return options && "modulus" in options ? modReduceKey(key, options.modulus) : key; - } - function expire() { - if (seed) - seed.fill(1); - seed = void 0; - } - const fingerprint = Array.from(deriveCK("fingerprint", 0)).slice(0, 6).map((char) => char.toString(16).padStart(2, "0").toUpperCase()).join(":"); - return Object.freeze({ deriveChildKey: deriveCK, expire, fingerprint }); - } - - // input.js - var utils = { bytesToHex, hexToBytes, concatBytes, utf8ToBytes, randomBytes }; - return __toCommonJS(input_exports); -})(); -/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ \ No newline at end of file diff --git a/export/package-lock.json b/export/package-lock.json index 782df70..61ebd6c 100644 --- a/export/package-lock.json +++ b/export/package-lock.json @@ -8,19 +8,34 @@ "name": "export-tests", "version": "1.0.0", "license": "MIT", + "dependencies": { + "@hpke/core": "^1.7.5", + "@noble/ed25519": "^3.0.0", + "@noble/hashes": "^2.0.1", + "bech32": "2.0.0" + }, "devDependencies": { "@babel/core": "^7.23.0", "@babel/preset-env": "^7.22.20", "@testing-library/dom": "^9.3.3", "@testing-library/jest-dom": "^6.1.3", "babel-jest": "^29.7.0", + "babel-loader": "9.1.3", + "copy-webpack-plugin": "11.0.0", + "css-loader": "6.8.1", "eslint": "^8.57.0", + "html-webpack-plugin": "5.5.3", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "jsdom": "^22.1.0", + "mini-css-extract-plugin": "2.9.4", "prettier": "^2.8.4", "regenerator-runtime": "^0.14.1", - "serve": "^14.2.1" + "serve": "^14.2.1", + "style-loader": "3.3.3", + "webpack": "5.102.1", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.2" } }, "node_modules/@adobe/css-tools": { @@ -1722,6 +1737,15 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -1858,6 +1882,25 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@hpke/common": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@hpke/common/-/common-1.8.1.tgz", + "integrity": "sha512-PSI4QSxH8XDli0TqAsWycVfrLLCM/bBe+hVlJwtuJJiKIvCaFS3CXX/WtRfJceLJye9NHc2J7GvHVCY9B1BEbA==", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@hpke/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@hpke/core/-/core-1.7.5.tgz", + "integrity": "sha512-4xfckZuPaIodeu0HpuTRIdtmajhRHXM/6rjS2N62Ns9aOCkGbbeYRwktqR3bUScuhCwyEBsEQqtIh9f0iLP3WQ==", + "dependencies": { + "@hpke/common": "^1.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -2281,17 +2324,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, "node_modules/@jridgewell/resolve-uri": { @@ -2303,233 +2342,777 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.65.0.tgz", + "integrity": "sha512-eBrIXd0/Ld3p9lpDDlMaMn6IEfWqtHMD+z61u0JrIiPzsV1r7m6xDZFRxJyvIFTEO+SWdYF9EiQbXZGd8BzPfA==", + "dev": true, "engines": { - "node": ">= 8" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz", + "integrity": "sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==", "dev": true, - "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "thingies": "^2.5.0" }, "engines": { - "node": ">= 8" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz", + "integrity": "sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==", "dev": true, "dependencies": { - "type-detect": "4.0.8" + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz", + "integrity": "sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==", "dev": true, "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/fs-print": "4.56.10", + "@jsonjoy.com/fs-snapshot": "4.56.10", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@testing-library/dom": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", - "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz", + "integrity": "sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, "engines": { - "node": ">=14" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@testing-library/jest-dom": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.4.tgz", - "integrity": "sha512-wpoYrCYwSZ5/AxcrjLxJmCU6I5QAJXslEeSiMQqaWmP2Kzpd1LvF/qxmAIW2qposULGWq2gw30GgVNFLSc2Jnw==", + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz", + "integrity": "sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==", "dev": true, "dependencies": { - "@adobe/css-tools": "^4.3.1", - "@babel/runtime": "^7.9.2", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" + "@jsonjoy.com/fs-fsa": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10" }, "engines": { - "node": ">=14", - "npm": ">=6", - "yarn": ">=1" + "node": ">=10.0" }, - "peerDependencies": { - "@jest/globals": ">= 28", - "@types/jest": ">= 28", - "jest": ">= 28", - "vitest": ">= 0.32" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "peerDependenciesMeta": { - "@jest/globals": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "jest": { - "optional": true - }, - "vitest": { - "optional": true - } + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz", + "integrity": "sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jsonjoy.com/fs-node-builtins": "4.56.10" }, "engines": { - "node": ">=8" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz", + "integrity": "sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==", "dev": true, + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.56.10", + "tree-dump": "^1.1.0" + }, "engines": { - "node": ">= 10" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@types/aria-query": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.3.tgz", - "integrity": "sha512-0Z6Tr7wjKJIk4OUEjVUQMtyunLDy339vcMaj38Kpj6jM2OE1p3S4kXExKZ7a3uXQAPCoy3sbrP1wibDKaf39oA==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", - "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz", + "integrity": "sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==", "dev": true, "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", - "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.65.0.tgz", + "integrity": "sha512-Xrh7Fm/M0QAYpekSgmskdZYnFdSGnsxJ/tHaolA4bNwWdG9i65S8m83Meh7FOxyJyQAdo4d4J97NOomBLEfkDQ==", "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@types/babel__template": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", - "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.65.0.tgz", + "integrity": "sha512-7MXcRYe7n3BG+fo3jicvjB0+6ypl2Y/bQp79Sp7KeSiiCgLqw4Oled6chVv07/xLVTdo3qa1CD0VCCnPaw+RGA==", "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@types/babel__traverse": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", - "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.65.0.tgz", + "integrity": "sha512-e0SG/6qUCnVhHa0rjDJHgnXnbsacooHVqQHxspjvlYQSkHm+66wkHw6Gql+3u/WxI/b1VsOdUi0M+fOtkgKGdQ==", "dev": true, "dependencies": { - "@babel/types": "^7.20.7" + "@jsonjoy.com/base64": "17.65.0", + "@jsonjoy.com/buffers": "17.65.0", + "@jsonjoy.com/codegen": "17.65.0", + "@jsonjoy.com/json-pointer": "17.65.0", + "@jsonjoy.com/util": "17.65.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz", - "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.65.0.tgz", + "integrity": "sha512-uhTe+XhlIZpWOxgPcnO+iSCDgKKBpwkDVTyYiXX9VayGV8HSFVJM67M6pUE71zdnXF1W0Da21AvnhlmdwYPpow==", "dev": true, "dependencies": { - "@types/node": "*" + "@jsonjoy.com/util": "17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.5", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.65.0.tgz", + "integrity": "sha512-cWiEHZccQORf96q2y6zU3wDeIVPeidmGqd9cNKJRYoVHTV0S1eHPy5JTbHpMnGfDvtvujQwQozOqgO9ABu6h0w==", + "dev": true, + "dependencies": { + "@jsonjoy.com/buffers": "17.65.0", + "@jsonjoy.com/codegen": "17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dev": true, + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "node_modules/@noble/ed25519": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-3.0.0.tgz", + "integrity": "sha512-QyteqMNm0GLqfa5SoYbSC3+Pvykwpn95Zgth4MFVSMKBB75ELl9tX1LAVsN4c3HXOrakHsF2gL4zWDAYCcsnzg==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@testing-library/dom": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", + "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.4.tgz", + "integrity": "sha512-wpoYrCYwSZ5/AxcrjLxJmCU6I5QAJXslEeSiMQqaWmP2Kzpd1LvF/qxmAIW2qposULGWq2gw30GgVNFLSc2Jnw==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.3.1", + "@babel/runtime": "^7.9.2", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + }, + "peerDependencies": { + "@jest/globals": ">= 28", + "@types/jest": ">= 28", + "jest": ">= 28", + "vitest": ">= 0.32" + }, + "peerDependenciesMeta": { + "@jest/globals": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "jest": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.3.tgz", + "integrity": "sha512-0Z6Tr7wjKJIk4OUEjVUQMtyunLDy339vcMaj38Kpj6jM2OE1p3S4kXExKZ7a3uXQAPCoy3sbrP1wibDKaf39oA==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", + "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.6", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", + "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", + "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", + "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz", + "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==", "dev": true @@ -2563,6 +3146,18 @@ "parse5": "^7.0.0" } }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, "node_modules/@types/node": { "version": "20.8.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", @@ -2572,6 +3167,81 @@ "undici-types": "~5.25.1" } }, + "node_modules/@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", @@ -2584,6 +3254,15 @@ "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==", "dev": true }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yargs": { "version": "17.0.29", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz", @@ -2606,6 +3285,208 @@ "dev": true, "license": "ISC" }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "node_modules/@zeit/schemas": { "version": "2.36.0", "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz", @@ -2619,10 +3500,32 @@ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2641,6 +3544,18 @@ "acorn-walk": "^8.0.2" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -2689,6 +3604,35 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -2733,6 +3677,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -2828,6 +3784,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2867,6 +3829,23 @@ "@babel/core": "^7.8.0" } }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -2976,10 +3955,109 @@ "@babel/core": "^7.0.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "dev": true, + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "node_modules/boxen": { @@ -3065,9 +4143,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -3084,10 +4162,11 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -3111,6 +4190,21 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -3149,6 +4243,22 @@ "node": ">= 0.4" } }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3158,6 +4268,16 @@ "node": ">=6" } }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -3168,9 +4288,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001553", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001553.tgz", - "integrity": "sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==", + "version": "1.0.30001768", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001768.tgz", + "integrity": "sha512-qY3aDRZC5nWPgHUgIB84WL+nySuo19wk0VJpp/XI9T34lrvkyhRvNVOFJOp2kxClQhiFBu+TaUSudf6oa3vkSA==", "dev": true, "funding": [ { @@ -3228,6 +4348,51 @@ "node": ">=10" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -3249,6 +4414,18 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, "node_modules/cli-boxes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", @@ -3329,6 +4506,20 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -3365,6 +4556,12 @@ "dev": true, "license": "MIT" }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3377,6 +4574,18 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -3432,6 +4641,15 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -3442,12 +4660,60 @@ "node": ">= 0.6" } }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, "node_modules/core-js-compat": { "version": "3.33.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.1.tgz", @@ -3461,6 +4727,12 @@ "url": "https://opencollective.com/core-js" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -3497,12 +4769,90 @@ "node": ">= 8" } }, + "node_modules/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", "dev": true }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -3626,6 +4976,34 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", @@ -3640,6 +5018,18 @@ "node": ">= 0.4" } }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -3666,6 +5056,25 @@ "node": ">=0.4.0" } }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -3675,6 +5084,12 @@ "node": ">=8" } }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -3684,6 +5099,30 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3703,16 +5142,99 @@ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "dependencies": { - "webidl-conversions": "^7.0.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, - "engines": { - "node": ">=12" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, "node_modules/dunder-proto": { @@ -3736,10 +5258,16 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, "node_modules/electron-to-chromium": { - "version": "1.4.564", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.564.tgz", - "integrity": "sha512-bGAx9+teIzL5I4esQwCMtiXtb78Ysc8xOKTPOvmafbJZ4SQ40kDO1ym3yRcGSkfaBtV81fGgHOgPoe6DsmpmkA==", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true }, "node_modules/emittery": { @@ -3760,6 +5288,28 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -3772,6 +5322,18 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/envinfo": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3821,6 +5383,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true + }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -3851,14 +5419,20 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "engines": { "node": ">=6" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -4177,6 +5751,30 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -4200,94 +5798,377 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, "engines": { - "node": ">= 0.8.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, - "license": "ISC", "dependencies": { - "reusify": "^1.0.4" + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, - "dependencies": { - "bser": "2.1.1" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "dev": true, - "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "find-up": "^6.3.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/find-cache-dir/node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/find-up": { @@ -4303,6 +6184,15 @@ "node": ">=8" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -4325,6 +6215,26 @@ "dev": true, "license": "ISC" }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -4351,6 +6261,24 @@ "node": ">= 6" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4500,6 +6428,28 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -4509,6 +6459,37 @@ "node": ">=4" } }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -4535,6 +6516,12 @@ "dev": true, "license": "MIT" }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -4592,40 +6579,224 @@ "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", + "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "dependencies": { - "whatwg-encoding": "^2.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -4640,6 +6811,30 @@ "node": ">= 6" } }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -4662,6 +6857,15 @@ "node": ">=10.17.0" } }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "engines": { + "node": ">=10.18" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -4674,6 +6878,18 @@ "node": ">=0.10.0" } }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -4784,6 +7000,24 @@ "node": ">= 0.4" } }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -4832,6 +7066,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -4943,6 +7189,39 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -4952,6 +7231,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-network-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4987,6 +7278,30 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-port-reachable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", @@ -5145,6 +7460,15 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -6339,6 +8663,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -6348,6 +8681,16 @@ "node": ">=6" } }, + "node_modules/launch-editor": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "dev": true, + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -6377,6 +8720,19 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "dev": true, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -6408,6 +8764,15 @@ "dev": true, "license": "MIT" }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -6493,12 +8858,77 @@ "node": ">= 0.4" } }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.10.tgz", + "integrity": "sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==", + "dev": true, + "dependencies": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-fsa": "4.56.10", + "@jsonjoy.com/fs-node": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-to-fsa": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/fs-print": "4.56.10", + "@jsonjoy.com/fs-snapshot": "4.56.10", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -6513,6 +8943,18 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -6552,6 +8994,32 @@ "node": ">=4" } }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6579,6 +9047,37 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6595,6 +9094,31 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -6602,9 +9126,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true }, "node_modules/normalize-path": { @@ -6628,6 +9152,18 @@ "node": ">=8" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/nwsapi": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", @@ -6635,10 +9171,13 @@ "dev": true }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6680,10 +9219,28 @@ "object-keys": "^1.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/on-headers": { @@ -6720,6 +9277,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -6780,6 +9355,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -6789,6 +9381,16 @@ "node": ">=6" } }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6832,6 +9434,25 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6879,6 +9500,15 @@ "dev": true, "license": "MIT" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -6919,6 +9549,112 @@ "node": ">=8" } }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6944,6 +9680,16 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -6970,6 +9716,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -6983,6 +9735,28 @@ "node": ">= 6" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -7015,6 +9789,21 @@ } ] }, + "node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -7042,6 +9831,15 @@ ], "license": "MIT" }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -7052,6 +9850,33 @@ "node": ">= 0.6" } }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -7082,6 +9907,44 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -7206,6 +10069,28 @@ "jsesc": "bin/jsesc" } }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7278,6 +10163,15 @@ "node": ">=10" } }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -7312,6 +10206,18 @@ "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", "dev": true }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7368,20 +10274,121 @@ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, "engines": { - "node": ">=v12.22.7" + "node": ">= 0.6" } }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "randombytes": "^2.1.0" } }, "node_modules/serve": { @@ -7459,6 +10466,92 @@ "node": ">= 0.6" } }, + "node_modules/serve-index": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" + }, + "engines": { + "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "dev": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/serve/node_modules/chalk": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", @@ -7500,6 +10593,24 @@ "node": ">= 0.4" } }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7521,15 +10632,85 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7556,6 +10737,17 @@ "node": ">=8" } }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7565,6 +10757,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -7575,6 +10776,36 @@ "source-map": "^0.6.0" } }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -7602,6 +10833,15 @@ "node": ">=8" } }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -7614,6 +10854,15 @@ "node": ">= 0.4" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -7725,6 +10974,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-loader": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", + "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7756,6 +11021,110 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -7770,12 +11139,34 @@ "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/thingies": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "dev": true, + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true }, "node_modules/tmpl": { "version": "1.0.5", @@ -7796,6 +11187,15 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", @@ -7823,6 +11223,28 @@ "node": ">=14" } }, + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7857,6 +11279,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/undici-types": { "version": "5.25.3", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", @@ -7894,136 +11329,487 @@ "node": ">=4" } }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-check": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", + "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", + "dev": true, + "dependencies": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.102.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz", + "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.26.3", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.3", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "dev": true, + "dependencies": { + "mime-db": "^1.54.0" + }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">= 0.6" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "node_modules/webpack-dev-server": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.21.2", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" }, "bin": { - "update-browserslist-db": "cli.js" + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-check": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", - "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", - "dev": true, - "dependencies": { - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0" + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "punycode": "^2.1.0" + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/v8-to-istanbul": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=10.12.0" + "node": ">=8.0.0" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=4.0" } }, - "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "dependencies": { - "xml-name-validator": "^4.0.0" + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" }, "engines": { - "node": ">=14" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" + "node": ">=0.8.0" } }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, "engines": { - "node": ">=12" + "node": ">=0.8.0" } }, "node_modules/whatwg-encoding": { @@ -8140,6 +11926,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -8247,6 +12039,36 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", @@ -9503,6 +13325,12 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, "@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -9591,6 +13419,19 @@ "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true }, + "@hpke/common": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@hpke/common/-/common-1.8.1.tgz", + "integrity": "sha512-PSI4QSxH8XDli0TqAsWycVfrLLCM/bBe+hVlJwtuJJiKIvCaFS3CXX/WtRfJceLJye9NHc2J7GvHVCY9B1BEbA==" + }, + "@hpke/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@hpke/core/-/core-1.7.5.tgz", + "integrity": "sha512-4xfckZuPaIodeu0HpuTRIdtmajhRHXM/6rjS2N62Ns9aOCkGbbeYRwktqR3bUScuhCwyEBsEQqtIh9f0iLP3WQ==", + "requires": { + "@hpke/common": "^1.8.1" + } + }, "@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -9882,81 +13723,313 @@ "slash": "^3.0.0" } }, - "@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/buffers": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.65.0.tgz", + "integrity": "sha512-eBrIXd0/Ld3p9lpDDlMaMn6IEfWqtHMD+z61u0JrIiPzsV1r7m6xDZFRxJyvIFTEO+SWdYF9EiQbXZGd8BzPfA==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/fs-core": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz", + "integrity": "sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "thingies": "^2.5.0" + } + }, + "@jsonjoy.com/fs-fsa": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz", + "integrity": "sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "thingies": "^2.5.0" + } + }, + "@jsonjoy.com/fs-node": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz", + "integrity": "sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/fs-print": "4.56.10", + "@jsonjoy.com/fs-snapshot": "4.56.10", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + } + }, + "@jsonjoy.com/fs-node-builtins": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz", + "integrity": "sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/fs-node-to-fsa": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz", + "integrity": "sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-fsa": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10" + } + }, + "@jsonjoy.com/fs-node-utils": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz", + "integrity": "sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-node-builtins": "4.56.10" + } + }, + "@jsonjoy.com/fs-print": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz", + "integrity": "sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-node-utils": "4.56.10", + "tree-dump": "^1.1.0" + } + }, + "@jsonjoy.com/fs-snapshot": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz", + "integrity": "sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==", + "dev": true, + "requires": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "dependencies": { + "@jsonjoy.com/base64": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.65.0.tgz", + "integrity": "sha512-Xrh7Fm/M0QAYpekSgmskdZYnFdSGnsxJ/tHaolA4bNwWdG9i65S8m83Meh7FOxyJyQAdo4d4J97NOomBLEfkDQ==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/codegen": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.65.0.tgz", + "integrity": "sha512-7MXcRYe7n3BG+fo3jicvjB0+6ypl2Y/bQp79Sp7KeSiiCgLqw4Oled6chVv07/xLVTdo3qa1CD0VCCnPaw+RGA==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/json-pack": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.65.0.tgz", + "integrity": "sha512-e0SG/6qUCnVhHa0rjDJHgnXnbsacooHVqQHxspjvlYQSkHm+66wkHw6Gql+3u/WxI/b1VsOdUi0M+fOtkgKGdQ==", + "dev": true, + "requires": { + "@jsonjoy.com/base64": "17.65.0", + "@jsonjoy.com/buffers": "17.65.0", + "@jsonjoy.com/codegen": "17.65.0", + "@jsonjoy.com/json-pointer": "17.65.0", + "@jsonjoy.com/util": "17.65.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + } + }, + "@jsonjoy.com/json-pointer": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.65.0.tgz", + "integrity": "sha512-uhTe+XhlIZpWOxgPcnO+iSCDgKKBpwkDVTyYiXX9VayGV8HSFVJM67M6pUE71zdnXF1W0Da21AvnhlmdwYPpow==", + "dev": true, + "requires": { + "@jsonjoy.com/util": "17.65.0" + } + }, + "@jsonjoy.com/util": { + "version": "17.65.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.65.0.tgz", + "integrity": "sha512-cWiEHZccQORf96q2y6zU3wDeIVPeidmGqd9cNKJRYoVHTV0S1eHPy5JTbHpMnGfDvtvujQwQozOqgO9ABu6h0w==", + "dev": true, + "requires": { + "@jsonjoy.com/buffers": "17.65.0", + "@jsonjoy.com/codegen": "17.65.0" + } + } + } + }, + "@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", "dev": true, "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "dependencies": { + "@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "requires": {} + } } }, - "@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", "dev": true, "requires": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" } }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "dependencies": { + "@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "requires": {} + } } }, - "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "@noble/ed25519": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-3.0.0.tgz", + "integrity": "sha512-QyteqMNm0GLqfa5SoYbSC3+Pvykwpn95Zgth4MFVSMKBB75ELl9tX1LAVsN4c3HXOrakHsF2gL4zWDAYCcsnzg==" }, - "@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } + "@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==" }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -10105,6 +14178,94 @@ "@babel/types": "^7.20.7" } }, + "@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "@types/graceful-fs": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz", @@ -10114,6 +14275,27 @@ "@types/node": "*" } }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/istanbul-lib-coverage": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", @@ -10149,46 +14331,323 @@ "parse5": "^7.0.0" } }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, "@types/node": { "version": "20.8.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", "dev": true, "requires": { - "undici-types": "~5.25.1" + "undici-types": "~5.25.1" + } + }, + "@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true + }, + "@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + }, + "dependencies": { + "@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + } + } + }, + "@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", + "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==", + "dev": true + }, + "@types/tough-cookie": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.4.tgz", + "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==", + "dev": true + }, + "@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "17.0.29", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz", + "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz", + "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==", + "dev": true + }, + "@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" } }, - "@types/stack-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", - "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==", - "dev": true + "@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "requires": {} }, - "@types/tough-cookie": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.4.tgz", - "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==", - "dev": true + "@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "requires": {} }, - "@types/yargs": { - "version": "17.0.29", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz", - "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==", + "@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, - "requires": { - "@types/yargs-parser": "*" - } + "requires": {} }, - "@types/yargs-parser": { - "version": "21.0.2", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz", - "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==", + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, "@zeit/schemas": { @@ -10203,10 +14662,28 @@ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "dependencies": { + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + } + } + }, "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true }, "acorn-globals": { @@ -10219,6 +14696,13 @@ "acorn-walk": "^8.0.2" } }, + "acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "requires": {} + }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -10253,6 +14737,24 @@ "uri-js": "^4.2.2" } }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, "ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -10290,6 +14792,12 @@ "type-fest": "^0.21.3" } }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -10355,6 +14863,12 @@ "is-array-buffer": "^3.0.1" } }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -10382,6 +14896,16 @@ "slash": "^3.0.0" } }, + "babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "requires": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + } + }, "babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -10473,6 +14997,91 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "dev": true, + "requires": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "boxen": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", @@ -10529,15 +15138,16 @@ } }, "browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" } }, "bser": { @@ -10555,6 +15165,15 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "requires": { + "run-applescript": "^7.0.0" + } + }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -10582,12 +15201,32 @@ "function-bind": "^1.1.2" } }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -10595,9 +15234,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001553", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001553.tgz", - "integrity": "sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==", + "version": "1.0.30001768", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001768.tgz", + "integrity": "sha512-qY3aDRZC5nWPgHUgIB84WL+nySuo19wk0VJpp/XI9T34lrvkyhRvNVOFJOp2kxClQhiFBu+TaUSudf6oa3vkSA==", "dev": true }, "chalk": { @@ -10625,6 +15264,39 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true + }, "ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -10637,6 +15309,15 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, + "clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, "cli-boxes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", @@ -10695,6 +15376,17 @@ } } }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -10722,6 +15414,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -10731,6 +15429,18 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -10778,18 +15488,56 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", "dev": true }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, "convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + } + }, "core-js-compat": { "version": "3.33.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.1.tgz", @@ -10799,6 +15547,12 @@ "browserslist": "^4.22.1" } }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, "create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -10825,12 +15579,61 @@ "which": "^2.0.1" } }, + "css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "dependencies": { + "semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true + } + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true + }, "css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", "dev": true }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, "cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -10923,6 +15726,22 @@ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true }, + "default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "requires": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + } + }, + "default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true + }, "define-data-property": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", @@ -10934,6 +15753,12 @@ "has-property-descriptors": "^1.0.0" } }, + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true + }, "define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -10951,18 +15776,54 @@ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, "diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -10978,6 +15839,40 @@ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, "domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -10987,6 +15882,36 @@ "webidl-conversions": "^7.0.0" } }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -11004,10 +15929,16 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, "electron-to-chromium": { - "version": "1.4.564", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.564.tgz", - "integrity": "sha512-bGAx9+teIzL5I4esQwCMtiXtb78Ysc8xOKTPOvmafbJZ4SQ40kDO1ym3yRcGSkfaBtV81fGgHOgPoe6DsmpmkA==", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true }, "emittery": { @@ -11022,12 +15953,34 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + } + }, "entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true }, + "envinfo": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -11066,6 +16019,12 @@ "stop-iteration-iterator": "^1.0.0" } }, + "es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true + }, "es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -11088,9 +16047,15 @@ } }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, "escape-string-regexp": { @@ -11298,6 +16263,24 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -11334,12 +16317,113 @@ "jest-util": "^29.7.0" } }, + "express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + } + } + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -11352,6 +16436,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, "fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", @@ -11361,6 +16451,15 @@ "reusify": "^1.0.4" } }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, "fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -11388,6 +16487,108 @@ "to-regex-range": "^5.0.1" } }, + "finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "requires": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "requires": { + "find-up": "^6.3.0" + } + }, + "yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "dev": true + } + } + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -11398,6 +16599,12 @@ "path-exists": "^4.0.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -11415,6 +16622,12 @@ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true }, + "follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true + }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -11437,6 +16650,18 @@ "mime-types": "^2.1.12" } }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -11537,12 +16762,46 @@ "is-glob": "^4.0.3" } }, + "glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "requires": {} + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "dependencies": { + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } + } + }, "gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -11561,6 +16820,12 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -11606,6 +16871,62 @@ "function-bind": "^1.1.2" } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -11621,6 +16942,98 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + } + } + }, + "html-webpack-plugin": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", + "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "requires": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, "http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -11632,6 +17045,19 @@ "debug": "4" } }, + "http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -11648,6 +17074,12 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true + }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -11657,6 +17089,13 @@ "safer-buffer": ">= 2.1.2 < 3.0.0" } }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, "ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -11736,6 +17175,18 @@ "side-channel": "^1.0.4" } }, + "interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true + }, + "ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "dev": true + }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -11772,6 +17223,15 @@ "has-bigints": "^1.0.1" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -11839,12 +17299,35 @@ "is-extglob": "^2.1.1" } }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "requires": { + "is-docker": "^3.0.0" + }, + "dependencies": { + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true + } + } + }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true }, + "is-network-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -11866,6 +17349,21 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, "is-port-reachable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", @@ -11973,6 +17471,12 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -12904,12 +18408,28 @@ "json-buffer": "3.0.1" } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, + "launch-editor": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "dev": true, + "requires": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -12932,6 +18452,12 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "dev": true + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -12959,6 +18485,15 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -13024,12 +18559,58 @@ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memfs": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.10.tgz", + "integrity": "sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-fsa": "4.56.10", + "@jsonjoy.com/fs-node": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-to-fsa": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/fs-print": "4.56.10", + "@jsonjoy.com/fs-snapshot": "4.56.10", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + } + }, + "merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, "micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -13040,6 +18621,12 @@ "picomatch": "^2.3.1" } }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -13067,6 +18654,22 @@ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, + "mini-css-extract-plugin": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -13088,6 +18691,22 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -13100,6 +18719,28 @@ "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "dev": true + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -13107,9 +18748,9 @@ "dev": true }, "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true }, "normalize-path": { @@ -13127,6 +18768,15 @@ "path-key": "^3.0.0" } }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, "nwsapi": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", @@ -13134,9 +18784,9 @@ "dev": true }, "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true }, "object-is": { @@ -13167,6 +18817,21 @@ "object-keys": "^1.1.1" } }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, "on-headers": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", @@ -13191,6 +18856,18 @@ "mimic-fn": "^2.1.0" } }, + "open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "requires": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + } + }, "optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -13234,12 +18911,33 @@ } } }, + "p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -13270,6 +18968,22 @@ "entities": "^4.4.0" } }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -13306,6 +19020,12 @@ "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -13333,6 +19053,69 @@ "find-up": "^4.0.0" } }, + "postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "requires": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, + "postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^7.0.0" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -13345,6 +19128,16 @@ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, "pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -13364,6 +19157,12 @@ } } }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -13374,6 +19173,24 @@ "sisteransi": "^1.0.5" } }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -13392,6 +19209,15 @@ "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true }, + "qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "dev": true, + "requires": { + "side-channel": "^1.1.0" + } + }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -13404,12 +19230,44 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", "dev": true }, + "raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "requires": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -13436,6 +19294,35 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "requires": { + "resolve": "^1.20.0" + } + }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -13537,6 +19424,25 @@ } } }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -13587,6 +19493,12 @@ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, "reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -13608,6 +19520,12 @@ "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", "dev": true }, + "run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -13617,33 +19535,122 @@ "queue-microtask": "^1.2.2" } }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "requires": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "requires": { - "xmlchars": "^2.2.0" + "randombytes": "^2.1.0" } }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, "serve": { "version": "14.2.5", "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.5.tgz", @@ -13709,6 +19716,75 @@ } } }, + "serve-index": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "dev": true, + "requires": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + } + }, "set-function-length": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", @@ -13732,6 +19808,21 @@ "has-property-descriptors": "^1.0.0" } }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -13747,15 +19838,58 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true + }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, "signal-exit": { @@ -13776,12 +19910,29 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true + }, "source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -13792,6 +19943,33 @@ "source-map": "^0.6.0" } }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -13815,6 +19993,12 @@ } } }, + "statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true + }, "stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -13824,6 +20008,15 @@ "internal-slot": "^1.0.4" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -13898,6 +20091,13 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "style-loader": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", + "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", + "dev": true, + "requires": {} + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13919,6 +20119,71 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true + }, + "terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "dependencies": { + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -13936,6 +20201,19 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "thingies": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "dev": true, + "requires": {} + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -13951,6 +20229,12 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, "tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", @@ -13972,6 +20256,19 @@ "punycode": "^2.3.0" } }, + "tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "dev": true, + "requires": {} + }, + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -13993,6 +20290,16 @@ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, "undici-types": { "version": "5.25.3", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", @@ -14033,14 +20340,20 @@ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" } }, "update-check": { @@ -14072,6 +20385,30 @@ "requires-port": "^1.0.0" } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, "v8-to-istanbul": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", @@ -14107,12 +20444,218 @@ "makeerror": "1.0.12" } }, + "watchpack": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true }, + "webpack": { + "version": "5.102.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz", + "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.26.3", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.3", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true + }, + "mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "requires": { + "mime-db": "^1.54.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.21.2", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + } + }, + "webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, "whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -14194,6 +20737,12 @@ "string-width": "^5.0.1" } }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -14257,6 +20806,26 @@ "dev": true, "requires": {} }, + "wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "requires": { + "is-wsl": "^3.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "requires": { + "is-inside-container": "^1.0.0" + } + } + } + }, "xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", diff --git a/export/package.json b/export/package.json index 41d2d95..8ef4cea 100644 --- a/export/package.json +++ b/export/package.json @@ -3,9 +3,12 @@ "version": "1.0.0", "main": "index.test.js", "scripts": { - "start": "serve", + "build": "webpack --mode=production", + "build:dev": "webpack --mode=development", + "start": "serve dist", + "dev": "webpack serve --mode=development --open", "test": "jest", - "lint": "eslint \"**/*.js\"", + "lint": "eslint \"src/**/*.js\"", "prettier:check": "prettier --check \"**/*.{css,html,js,json,md,ts,tsx,yaml,yml}\" --ignore-path ../.prettierignore", "prettier:write": "prettier --write \"**/*.{css,html,js,json,md,ts,tsx,yaml,yml}\" --ignore-path ../.prettierignore" }, @@ -19,12 +22,27 @@ "@testing-library/dom": "^9.3.3", "@testing-library/jest-dom": "^6.1.3", "babel-jest": "^29.7.0", + "babel-loader": "9.1.3", + "eslint": "^8.57.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "eslint": "^8.57.0", "jsdom": "^22.1.0", "prettier": "^2.8.4", "regenerator-runtime": "^0.14.1", - "serve": "^14.2.1" + "mini-css-extract-plugin": "2.9.4", + "serve": "^14.2.1", + "style-loader": "3.3.3", + "webpack": "5.102.1", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.2", + "copy-webpack-plugin": "11.0.0", + "html-webpack-plugin": "5.5.3", + "css-loader": "6.8.1" + }, + "dependencies": { + "@hpke/core": "^1.7.5", + "@noble/ed25519": "^3.0.0", + "@noble/hashes": "^2.0.1", + "bech32": "2.0.0" } } diff --git a/export/src/index.js b/export/src/index.js new file mode 100644 index 0000000..97c4a26 --- /dev/null +++ b/export/src/index.js @@ -0,0 +1,363 @@ +// Vendor @hpke/core from https://esm.sh/@hpke/core@1.2.7 + +import * as TKHQ from "./turnkey-core.js"; +import { HpkeDecrypt } from "@shared/crypto-utils.js"; +import * as hpke from "@hpke/core"; + +window.TKHQ = TKHQ; + +// persist the MessageChannel object so we can use it to communicate with the parent window +var iframeMessagePort = null; + +// controllers to remove event listeners +const messageListenerController = new AbortController(); +const turnkeyInitController = new AbortController(); + +/** + * DOM Event handlers to power the export flow in standalone mode + * Instead of receiving events from the parent page, forms trigger them. + * This is useful for debugging as well. + */ +var addDOMEventListeners = function () { + document.getElementById("inject-key").addEventListener( + "click", + async (e) => { + e.preventDefault(); + window.postMessage({ + type: "INJECT_KEY_EXPORT_BUNDLE", + value: document.getElementById("key-export-bundle").value, + keyFormat: document.getElementById("key-export-format").value, + organizationId: document.getElementById("key-organization-id").value, + }); + }, + false + ); + document.getElementById("inject-wallet").addEventListener( + "click", + async (e) => { + e.preventDefault(); + window.postMessage({ + type: "INJECT_WALLET_EXPORT_BUNDLE", + value: document.getElementById("wallet-export-bundle").value, + organizationId: document.getElementById("wallet-organization-id").value, + }); + }, + false + ); + document.getElementById("reset").addEventListener( + "click", + async (e) => { + e.preventDefault(); + window.postMessage({ type: "RESET_EMBEDDED_KEY" }); + }, + false + ); +}; + +/** + * Message Event Handlers to process messages from the parent frame + */ +var messageEventListener = async function (event) { + if (event.data && event.data["type"] == "INJECT_KEY_EXPORT_BUNDLE") { + TKHQ.logMessage( + `⬇️ Received message ${event.data["type"]}: ${event.data["value"]}, ${event.data["keyFormat"]}, ${event.data["organizationId"]}` + ); + try { + await onInjectKeyBundle( + event.data["value"], + event.data["keyFormat"], + event.data["organizationId"], + event.data["requestId"] + ); + } catch (e) { + TKHQ.sendMessageUp("ERROR", e.toString(), event.data["requestId"]); + } + } + if (event.data && event.data["type"] == "INJECT_WALLET_EXPORT_BUNDLE") { + TKHQ.logMessage( + `⬇️ Received message ${event.data["type"]}: ${event.data["value"]}, ${event.data["organizationId"]}` + ); + try { + await onInjectWalletBundle( + event.data["value"], + event.data["organizationId"], + event.data["requestId"] + ); + } catch (e) { + TKHQ.sendMessageUp("ERROR", e.toString(), event.data["requestId"]); + } + } + if (event.data && event.data["type"] == "APPLY_SETTINGS") { + try { + await onApplySettings(event.data["value"], event.data["requestId"]); + } catch (e) { + TKHQ.sendMessageUp("ERROR", e.toString(), event.data["requestId"]); + } + } + if (event.data && event.data["type"] == "RESET_EMBEDDED_KEY") { + TKHQ.logMessage(`⬇️ Received message ${event.data["type"]}`); + try { + TKHQ.onResetEmbeddedKey(); + } catch (e) { + TKHQ.sendMessageUp("ERROR", e.toString()); + } + } +}; + +/** + * Initialize the embedded key and set up the DOM and message event listeners + */ +document.addEventListener( + "DOMContentLoaded", + async function () { + await TKHQ.initEmbeddedKey(); + const embeddedKeyJwk = await TKHQ.getEmbeddedKey(); + const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk); + const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf); + document.getElementById("embedded-key").value = targetPubHex; + + window.addEventListener("message", messageEventListener, { + capture: false, + signal: messageListenerController.signal, + }); + + addDOMEventListeners(); + + if (!messageListenerController.signal.aborted) { + // If styles are saved in local storage, sanitize and apply them. + const styleSettings = TKHQ.getSettings(); + if (styleSettings) { + TKHQ.applySettings(styleSettings); + } + TKHQ.sendMessageUp("PUBLIC_KEY_READY", targetPubHex); + } + }, + false +); + +window.addEventListener( + "message", + async function (event) { + /** + * @turnkey/iframe-stamper >= v2.1.0 is using a MessageChannel to communicate with the parent frame. + * The parent frame sends a TURNKEY_INIT_MESSAGE_CHANNEL event with the MessagePort. + * 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. + * We persist the MessagePort so we can use it to communicate with the parent window in subsequent calls to TKHQ.sendMessageUp + */ + if ( + event.data && + event.data["type"] == "TURNKEY_INIT_MESSAGE_CHANNEL" && + event.ports?.[0] + ) { + // remove the message event listener that was added in the DOMContentLoaded event + messageListenerController.abort(); + + iframeMessagePort = event.ports[0]; + iframeMessagePort.onmessage = messageEventListener; + + TKHQ.setParentFrameMessageChannelPort(iframeMessagePort); + + await TKHQ.initEmbeddedKey(); + var embeddedKeyJwk = await TKHQ.getEmbeddedKey(); + var targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk); + var targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf); + document.getElementById("embedded-key").value = targetPubHex; + + TKHQ.sendMessageUp("PUBLIC_KEY_READY", targetPubHex); + + // remove the listener for TURNKEY_INIT_MESSAGE_CHANNEL after it's been processed + turnkeyInitController.abort(); + } + }, + { signal: turnkeyInitController.signal } +); + +/** + * Hide every HTML element in except any \ 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).




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/dist/vendors.bundle.69b30d3a54b567a97bee.js b/export/dist/vendors.bundle.69b30d3a54b567a97bee.js new file mode 100644 index 0000000..694a2ee --- /dev/null +++ b/export/dist/vendors.bundle.69b30d3a54b567a97bee.js @@ -0,0 +1,3 @@ +/*! For license information please see vendors.bundle.69b30d3a54b567a97bee.js.LICENSE.txt */ +"use strict";(self.webpackChunkexport_tests=self.webpackChunkexport_tests||[]).push([[96],{255:(e,t,r)=>{r.d(t,{ws:()=>Z,GR:()=>ye,RG:()=>we,v7:()=>pe});class i extends Error{constructor(e){let t;t=e instanceof Error?e.message:"string"==typeof e?e:"",super(t),this.name=this.constructor.name}}class n extends i{}class a extends i{}class s extends i{}class o extends i{}class c extends i{}class h extends i{}class l extends i{}class f extends i{}class d extends i{}class u extends i{}class b extends i{}const y=(w=globalThis,p={},new Proxy(w,{get:(e,t,r)=>t in p?p[t]:w[t],set:(e,t,r)=>(t in p&&delete p[t],w[t]=r,!0),deleteProperty(e,t){let r=!1;return t in p&&(delete p[t],r=!0),t in w&&(delete w[t],r=!0),r},ownKeys(e){const t=Reflect.ownKeys(w),r=Reflect.ownKeys(p),i=new Set(r);return[...t.filter(e=>!i.has(e)),...r]},defineProperty:(e,t,r)=>(t in p&&delete p[t],Reflect.defineProperty(w,t,r),!0),getOwnPropertyDescriptor:(e,t)=>t in p?Reflect.getOwnPropertyDescriptor(p,t):Reflect.getOwnPropertyDescriptor(w,t),has:(e,t)=>t in p||t in w}));var w,p;class g{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){void 0===this._api&&(this._api=await async function(){if(void 0!==y&&void 0!==globalThis.crypto)return globalThis.crypto.subtle;try{const{webcrypto:e}=await r.e(825).then(r.t.bind(r,825,19));return e.subtle}catch(e){throw new b(e)}}())}}const _=8192,m=new Uint8Array(0),v=new Uint8Array([75,69,77,0,0]),x=e=>"object"==typeof e&&null!==e&&"object"==typeof e.privateKey&&"object"==typeof e.publicKey;function k(e,t){if(t<=0)throw new Error("i2Osp: too small size");if(e>=256**t)throw new Error("i2Osp: too large integer");const r=new Uint8Array(t);for(let i=0;i>=8;return r}function A(e,t){const r=new Uint8Array(e.length+t.length);return r.set(e,0),r.set(t,e.length),r}const P=new Uint8Array([101,97,101,95,112,114,107]),K=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);class E{constructor(e,t,r){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=t,this._kdf=r;const i=new Uint8Array(v);i.set(k(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,t,r=!0){return await this._prim.importKey(e,t,r)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>_)throw new n("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;t=void 0===e.ekm?await this.generateKeyPair():x(e.ekm)?e.ekm:await this.deriveKeyPair(e.ekm);const r=await this._prim.serializePublicKey(t.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let n,a;if(void 0===e.senderKey)n=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{const r=x(e.senderKey)?e.senderKey.privateKey:e.senderKey;n=A(new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),new Uint8Array(await this._prim.dh(r,e.recipientPublicKey)))}if(void 0===e.senderKey)a=A(new Uint8Array(r),new Uint8Array(i));else{const t=x(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),n=await this._prim.serializePublicKey(t);a=function(e,t,r){const i=new Uint8Array(e.length+t.length+r.length);return i.set(e,0),i.set(t,e.length),i.set(r,e.length+t.length),i}(new Uint8Array(r),new Uint8Array(i),new Uint8Array(n))}return{enc:r,sharedSecret:await this._generateSharedSecret(n,a)}}catch(e){throw new o(e)}}async decap(e){const t=await this._prim.deserializePublicKey(e.enc),r=x(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=x(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),n=await this._prim.serializePublicKey(i);try{let i,a;if(void 0===e.senderPublicKey)i=new Uint8Array(await this._prim.dh(r,t));else{i=A(new Uint8Array(await this._prim.dh(r,t)),new Uint8Array(await this._prim.dh(r,e.senderPublicKey)))}if(void 0===e.senderPublicKey)a=A(new Uint8Array(e.enc),new Uint8Array(n));else{const t=await this._prim.serializePublicKey(e.senderPublicKey);a=new Uint8Array(e.enc.byteLength+n.byteLength+t.byteLength),a.set(new Uint8Array(e.enc),0),a.set(new Uint8Array(n),e.enc.byteLength),a.set(new Uint8Array(t),e.enc.byteLength+n.byteLength)}return await this._generateSharedSecret(i,a)}catch(e){throw new c(e)}}async _generateSharedSecret(e,t){const r=this._kdf.buildLabeledIkm(P,e),i=this._kdf.buildLabeledInfo(K,t,this.secretSize);return await this._kdf.extractAndExpand(m.buffer,r.buffer,i.buffer,this.secretSize)}}const U=["deriveBits"],S=new Uint8Array([100,107,112,95,112,114,107]);new Uint8Array([115,107]);class j{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}}const L=new Uint8Array([99,97,110,100,105,100,97,116,101]),O=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),I=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),z=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),C=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),T=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),B=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);class H extends g{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case 16:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=O,this._bitmask=255,this._pkcs8AlgId=C;break;case 17:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=I,this._bitmask=255,this._pkcs8AlgId=T;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=z,this._bitmask=1,this._pkcs8AlgId=B}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(e){throw new a(e)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(e){throw new s(e)}}async serializePrivateKey(e){await this._setup();try{const t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return function(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),r=atob(t),i=new Uint8Array(r.length);for(let e=0;e255)throw new Error("Faild to derive a key pair");const i=new Uint8Array(await this._hkdf.labeledExpand(t,L,k(e,1),this._nSk));i[0]=i[0]&this._bitmask,r.set(i)}const i=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:i,publicKey:await this.derivePublicKey(i)}}catch(e){throw new u(e)}}async derivePublicKey(e){await this._setup();try{const t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(e){throw new s(e)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,8*this._nDh)}catch(e){throw new a(e)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(void 0===e.crv||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(void 0!==e.d)throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(void 0===e.d)throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,U)}async _deserializePkcs8Key(e){const t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,U)}}const D=new Uint8Array([72,80,75,69,45,118,49]);class N extends g{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:m}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();const r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(D,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();const i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return i.set(new Uint8Array([0,r]),0),i.set(D,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(t,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,t){if(await this._setup(),0===e.byteLength&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new n("The salt length must be the same as the hashSize");const r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();const i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),n=new ArrayBuffer(r),a=new Uint8Array(n);let s=m;const o=new Uint8Array(t),c=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");const h=new Uint8Array(this.hashSize+o.length+1);for(let e=1,t=0;t=s.length?(a.set(s,t),t+=s.length):(a.set(s.slice(0,a.length-t),t),t+=a.length-t);return n}async extractAndExpand(e,t,r,i){await this._setup();const n=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},n,8*i)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r).buffer)}async labeledExpand(e,t,r,i){return await this.expand(e,this.buildLabeledInfo(t,r,i).buffer,i)}_checkInit(){if(this._suiteId===m)throw new Error("Not initialized. Call init()")}}class R extends N{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}}const G=["encrypt","decrypt"];BigInt(0),BigInt(1),BigInt(2);class q extends g{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();const i={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(i,this._key,t)}async open(e,t,r){await this._setupKey();const i={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(i,this._key,t)}async _setupKey(){if(void 0!==this._key)return;await this._setup();const e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,G)}}class M{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new q(e)}}class Z extends M{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:2}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}}function F(){return new Promise((e,t)=>{t(new b("Not supported"))})}const X=new Uint8Array([115,101,99]);class Y{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await F()}async open(e,t){return await F()}async export(e,t){if(e.byteLength>_)throw new n("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,X,new Uint8Array(e),t)}catch(e){throw new h(e)}}}class V extends Y{}class W extends Y{constructor(e,t,r,i){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=i}}class $ extends Y{constructor(e,t,r){if(super(e,t,r.exporterSecret),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nK",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nN",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_ctx",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),void 0===r.key||void 0===r.baseNonce||void 0===r.seq)throw new Error("Required parameters are missing");this._aead=r.aead,this._nK=this._aead.keySize,this._nN=this._aead.nonceSize,this._nT=this._aead.tagSize;const i=this._aead.createEncryptionContext(r.key);this._ctx={key:i,baseNonce:r.baseNonce,seq:r.seq}}computeNonce(e){const t=k(e.seq,e.baseNonce.byteLength);return function(e,t){if(e.byteLength!==t.byteLength)throw new Error("xor: different length inputs");const r=new Uint8Array(e.byteLength);for(let i=0;iNumber.MAX_SAFE_INTEGER)throw new d("Message limit reached");e.seq+=1}}var J;class Q{constructor(){J.set(this,Promise.resolve())}async lock(){let e;const t=new Promise(t=>{e=t}),r=function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)}(this,J,"f");return function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===i?n.call(e,r):n?n.value=r:t.set(e,r)}(this,J,t,"f"),await r,e}}J=new WeakMap;var ee,te=function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};class re extends ${constructor(){super(...arguments),ee.set(this,void 0)}async open(e,t=m.buffer){!function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===i?n.call(e,r):n?n.value=r:t.set(e,r)}(this,ee,te(this,ee,"f")??new Q,"f");const r=await te(this,ee,"f").lock();let i;try{i=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(e){throw new f(e)}finally{r()}return this.incrementSeq(this._ctx),i}}ee=new WeakMap;var ie,ne=function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};class ae extends ${constructor(e,t,r,i){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),ie.set(this,void 0),this.enc=i}async seal(e,t=m.buffer){!function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===i?n.call(e,r):n?n.value=r:t.set(e,r)}(this,ie,ne(this,ie,"f")??new Q,"f");const r=await ne(this,ie,"f").lock();let i;try{i=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(e){throw new l(e)}finally{r()}return this.incrementSeq(this._ctx),i}}ie=new WeakMap;const se=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),oe=new Uint8Array([101,120,112]),ce=new Uint8Array([105,110,102,111,95,104,97,115,104]),he=new Uint8Array([107,101,121]),le=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),fe=new Uint8Array([115,101,99,114,101,116]),de=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);class ue extends g{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),"number"==typeof e.kem)throw new n("KemId cannot be used");if(this._kem=e.kem,"number"==typeof e.kdf)throw new n("KdfId cannot be used");if(this._kdf=e.kdf,"number"==typeof e.aead)throw new n("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(de),this._suiteId.set(k(this._kem.id,2),4),this._suiteId.set(k(this._kdf.id,2),6),this._suiteId.set(k(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();const t=await this._kem.encap(e);let r;return r=void 0!==e.psk?void 0!==e.senderKey?3:1:void 0!==e.senderKey?2:0,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();const t=await this._kem.decap(e);let r;return r=void 0!==e.psk?void 0!==e.senderPublicKey?3:1:void 0!==e.senderPublicKey?2:0,await this._keyScheduleR(r,t,e)}async seal(e,t,r=m.buffer){const i=await this.createSenderContext(e);return{ct:await i.seal(t,r),enc:i.enc}}async open(e,t,r=m.buffer){const i=await this.createRecipientContext(e);return await i.open(t,r)}async _keySchedule(e,t,r){const i=void 0===r.psk?m:new Uint8Array(r.psk.id),n=await this._kdf.labeledExtract(m.buffer,le,i),a=void 0===r.info?m:new Uint8Array(r.info),s=await this._kdf.labeledExtract(m.buffer,ce,a),o=new Uint8Array(1+n.byteLength+s.byteLength);o.set(new Uint8Array([e]),0),o.set(new Uint8Array(n),1),o.set(new Uint8Array(s),1+n.byteLength);const c=void 0===r.psk?m:new Uint8Array(r.psk.key),h=this._kdf.buildLabeledIkm(fe,c).buffer,l=this._kdf.buildLabeledInfo(oe,o,this._kdf.hashSize).buffer,f=await this._kdf.extractAndExpand(t,h,l,this._kdf.hashSize);if(65535===this._aead.id)return{aead:this._aead,exporterSecret:f};const d=this._kdf.buildLabeledInfo(he,o,this._aead.keySize).buffer,u=await this._kdf.extractAndExpand(t,h,d,this._aead.keySize),b=this._kdf.buildLabeledInfo(se,o,this._aead.nonceSize).buffer,y=await this._kdf.extractAndExpand(t,h,b,this._aead.nonceSize);return{aead:this._aead,exporterSecret:f,key:u,baseNonce:new Uint8Array(y),seq:0}}async _keyScheduleS(e,t,r,i){const n=await this._keySchedule(e,t,i);return void 0===n.key?new W(this._api,this._kdf,n.exporterSecret,r):new ae(this._api,this._kdf,n,r)}async _keyScheduleR(e,t,r){const i=await this._keySchedule(e,t,r);return void 0===i.key?new V(this._api,this._kdf,i.exporterSecret):new re(this._api,this._kdf,i)}_validateInputLength(e){if(void 0!==e.info&&e.info.byteLength>65536)throw new n("Too long info");if(void 0!==e.psk){if(e.psk.key.byteLength<32)throw new n("PSK must have at least 32 bytes");if(e.psk.key.byteLength>_)throw new n("Too long psk.key");if(e.psk.id.byteLength>_)throw new n("Too long psk.id")}}}class be extends E{constructor(){const e=new R;super(16,new H(16,e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}}class ye extends ue{}class we extends be{}class pe extends R{}new Uint8Array([48,46,2,1,0,48,5,6,3,43,101,110,4,34,4,32]),new Uint8Array([48,70,2,1,0,48,5,6,3,43,101,111,4,58,4,56])},343:(e,t)=>{t.I=void 0;const r="qpzry9x8gf2tvdw0s3jn54khce6mua7l",i={};for(let e=0;e<32;e++){const t=r.charAt(e);i[t]=e}function n(e){const t=e>>25;return(33554431&e)<<5^996825010&-(1&t)^642813549&-(t>>1&1)^513874426&-(t>>2&1)^1027748829&-(t>>3&1)^705979059&-(t>>4&1)}function a(e){let t=1;for(let r=0;r126)return"Invalid prefix ("+e+")";t=n(t)^i>>5}t=n(t);for(let r=0;r=r;)a-=r,o.push(n>>a&s);if(i)a>0&&o.push(n<=t)return"Excess padding";if(n<r)return"Exceeds length limit";const s=e.toLowerCase(),o=e.toUpperCase();if(e!==s&&e!==o)return"Mixed-case string "+e;const c=(e=s).lastIndexOf("1");if(-1===c)return"No separator character for "+e;if(0===c)return"Missing prefix for "+e;const h=e.slice(0,c),l=e.slice(c+1);if(l.length<6)return"Data too short";let f=a(h);if("string"==typeof f)return f;const d=[];for(let e=0;e=l.length||d.push(r)}return f!==t?"Invalid checksum for "+e:{prefix:h,words:d}}return t="bech32"===e?1:734539939,{decodeUnsafe:function(e,t){const r=s(e,t);if("object"==typeof r)return r},decode:function(e,t){const r=s(e,t);if("object"==typeof r)return r;throw new Error(r)},encode:function(e,i,s){if(s=s||90,e.length+7+i.length>s)throw new TypeError("Exceeds length limit");let o=a(e=e.toLowerCase());if("string"==typeof o)throw new Error(o);let c=e+"1";for(let e=0;e>5)throw new Error("Non 5-bit word");o=n(o)^t,c+=r.charAt(t)}for(let e=0;e<6;++e)o=n(o);o^=t;for(let e=0;e<6;++e)c+=r.charAt(o>>5*(5-e)&31);return c},toWords:o,fromWordsUnsafe:c,fromWords:h}}t.I=l("bech32"),l("bech32m")},348:(e,t,r)=>{function i(e,t,r=""){const i=(n=e)instanceof Uint8Array||ArrayBuffer.isView(n)&&"Uint8Array"===n.constructor.name;var n;const a=e?.length,s=void 0!==t;if(!i||s&&a!==t)throw new Error((r&&`"${r}" `)+"expected Uint8Array"+(s?` of length ${t}`:"")+", got "+(i?`length=${a}`:"type="+typeof e));return e}function n(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function a(...e){for(let t=0;te(r).update(t).digest(),i=e(void 0);return r.outputLen=i.outputLen,r.blockLen=i.blockLen,r.create=t=>e(t),Object.assign(r,t),Object.freeze(r)}r.d(t,{Zf:()=>z});const c=e=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,e])});class h{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,r,i){this.blockLen=e,this.outputLen=t,this.padOffset=r,this.isLE=i,this.buffer=new Uint8Array(e),this.view=s(this.buffer)}update(e){n(this),i(e);const{view:t,buffer:r,blockLen:a}=this,o=e.length;for(let i=0;i='+r)}(e,this),this.finished=!0;const{buffer:t,view:r,blockLen:o,isLE:c}=this;let{pos:h}=this;t[h++]=128,a(this.buffer.subarray(h)),this.padOffset>o-h&&(this.process(r,0),h=0);for(let e=h;eu.length)throw new Error("_sha2: outputLen bigger than state");for(let e=0;e>d&f)}:{h:0|Number(e>>d&f),l:0|Number(e&f)}}const b=(e,t,r)=>e>>>r,y=(e,t,r)=>e<<32-r|t>>>r,w=(e,t,r)=>e>>>r|t<<32-r,p=(e,t,r)=>e<<32-r|t>>>r,g=(e,t,r)=>e<<64-r|t>>>r-32,_=(e,t,r)=>e>>>r-32|t<<64-r;function m(e,t,r,i){const n=(t>>>0)+(i>>>0);return{h:e+r+(n/2**32|0)|0,l:0|n}}const v=(e,t,r)=>(e>>>0)+(t>>>0)+(r>>>0),x=(e,t,r,i)=>t+r+i+(e/2**32|0)|0,k=(e,t,r,i)=>(e>>>0)+(t>>>0)+(r>>>0)+(i>>>0),A=(e,t,r,i,n)=>t+r+i+n+(e/2**32|0)|0,P=(e,t,r,i,n)=>(e>>>0)+(t>>>0)+(r>>>0)+(i>>>0)+(n>>>0),K=(e,t,r,i,n,a)=>t+r+i+n+a+(e/2**32|0)|0,E=(()=>function(e,t=!1){const r=e.length;let i=new Uint32Array(r),n=new Uint32Array(r);for(let a=0;aBigInt(e))))(),U=(()=>E[0])(),S=(()=>E[1])(),j=new Uint32Array(80),L=new Uint32Array(80);class O extends h{constructor(e){super(128,e,16,!1)}get(){const{Ah:e,Al:t,Bh:r,Bl:i,Ch:n,Cl:a,Dh:s,Dl:o,Eh:c,El:h,Fh:l,Fl:f,Gh:d,Gl:u,Hh:b,Hl:y}=this;return[e,t,r,i,n,a,s,o,c,h,l,f,d,u,b,y]}set(e,t,r,i,n,a,s,o,c,h,l,f,d,u,b,y){this.Ah=0|e,this.Al=0|t,this.Bh=0|r,this.Bl=0|i,this.Ch=0|n,this.Cl=0|a,this.Dh=0|s,this.Dl=0|o,this.Eh=0|c,this.El=0|h,this.Fh=0|l,this.Fl=0|f,this.Gh=0|d,this.Gl=0|u,this.Hh=0|b,this.Hl=0|y}process(e,t){for(let r=0;r<16;r++,t+=4)j[r]=e.getUint32(t),L[r]=e.getUint32(t+=4);for(let e=16;e<80;e++){const t=0|j[e-15],r=0|L[e-15],i=w(t,r,1)^w(t,r,8)^b(t,0,7),n=p(t,r,1)^p(t,r,8)^y(t,r,7),a=0|j[e-2],s=0|L[e-2],o=w(a,s,19)^g(a,s,61)^b(a,0,6),c=p(a,s,19)^_(a,s,61)^y(a,s,6),h=k(n,c,L[e-7],L[e-16]),l=A(h,i,o,j[e-7],j[e-16]);j[e]=0|l,L[e]=0|h}let{Ah:r,Al:i,Bh:n,Bl:a,Ch:s,Cl:o,Dh:c,Dl:h,Eh:l,El:f,Fh:d,Fl:u,Gh:E,Gl:O,Hh:I,Hl:z}=this;for(let e=0;e<80;e++){const t=w(l,f,14)^w(l,f,18)^g(l,f,41),b=p(l,f,14)^p(l,f,18)^_(l,f,41),y=l&d^~l&E,k=P(z,b,f&u^~f&O,S[e],L[e]),A=K(k,I,t,y,U[e],j[e]),C=0|k,T=w(r,i,28)^g(r,i,34)^g(r,i,39),B=p(r,i,28)^_(r,i,34)^_(r,i,39),H=r&n^r&s^n&s,D=i&a^i&o^a&o;I=0|E,z=0|O,E=0|d,O=0|u,d=0|l,u=0|f,({h:l,l:f}=m(0|c,0|h,0|A,0|C)),c=0|s,h=0|o,s=0|n,o=0|a,n=0|r,a=0|i;const N=v(C,B,D);r=x(N,A,T,H),i=0|N}({h:r,l:i}=m(0|this.Ah,0|this.Al,0|r,0|i)),({h:n,l:a}=m(0|this.Bh,0|this.Bl,0|n,0|a)),({h:s,l:o}=m(0|this.Ch,0|this.Cl,0|s,0|o)),({h:c,l:h}=m(0|this.Dh,0|this.Dl,0|c,0|h)),({h:l,l:f}=m(0|this.Eh,0|this.El,0|l,0|f)),({h:d,l:u}=m(0|this.Fh,0|this.Fl,0|d,0|u)),({h:E,l:O}=m(0|this.Gh,0|this.Gl,0|E,0|O)),({h:I,l:z}=m(0|this.Hh,0|this.Hl,0|I,0|z)),this.set(r,i,n,a,s,o,c,h,l,f,d,u,E,O,I,z)}roundClean(){a(j,L)}destroy(){a(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}class I extends O{Ah=0|l[0];Al=0|l[1];Bh=0|l[2];Bl=0|l[3];Ch=0|l[4];Cl=0|l[5];Dh=0|l[6];Dl=0|l[7];Eh=0|l[8];El=0|l[9];Fh=0|l[10];Fl=0|l[11];Gh=0|l[12];Gl=0|l[13];Hh=0|l[14];Hl=0|l[15];constructor(){super(64)}}const z=o(()=>new I,c(3))},598:(e,t,r)=>{r.d(t,{jn:()=>D,lG:()=>H});const i={p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n},{p:n,n:a,Gx:s,Gy:o,a:c,d:h,h:l}=i,f=(e="")=>{const t=new Error(e);throw((...e)=>{"captureStackTrace"in Error&&"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(...e)})(t,f),t},d=(e,t,r="")=>{const i=(n=e)instanceof Uint8Array||ArrayBuffer.isView(n)&&"Uint8Array"===n.constructor.name;var n;const a=e?.length,s=void 0!==t;return(!i||s&&a!==t)&&f((r&&`"${r}" `)+"expected Uint8Array"+(s?` of length ${t}`:"")+", got "+(i?`length=${a}`:"type="+typeof e)),e},u=e=>new Uint8Array(e),b=e=>Uint8Array.from(e),y=(e,t)=>e.toString(16).padStart(t,"0"),w=e=>Array.from(d(e)).map(e=>y(e,2)).join(""),p=e=>e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:void 0,g=e=>{const t="hex invalid";if("string"!=typeof e)return f(t);const r=e.length,i=r/2;if(r%2)return f(t);const n=u(i);for(let r=0,a=0;rglobalThis?.crypto,m=(...e)=>{const t=u(e.reduce((e,t)=>e+d(t).length,0));let r=0;return e.forEach(e=>{t.set(e,r),r+=e.length}),t},v=BigInt,x=(e,t,r,i="bad number: out of range")=>(e=>"bigint"==typeof e)(e)&&t<=e&&e{const r=e%t;return r>=0n?r:t+r},A=(e,t)=>{(0n===e||t<=0n)&&f("no inverse n="+e+" mod="+t);let r=k(e,t),i=t,n=0n,a=1n,s=1n,o=0n;for(;0n!==r;){const e=i/r,t=i%r,c=n-s*e,h=a-o*e;i=r,r=t,n=s,a=o,s=c,o=h}return 1n===i?k(n,t):f("no inverse")},P=e=>e instanceof E?e:f("Point expected"),K=2n**256n;class E{static BASE;static ZERO;X;Y;Z;T;constructor(e,t,r,i){const n=K;this.X=x(e,0n,n),this.Y=x(t,0n,n),this.Z=x(r,1n,n),this.T=x(i,0n,n),Object.freeze(this)}static CURVE(){return i}static fromAffine(e){return new E(e.x,e.y,1n,k(e.x*e.y))}static fromBytes(e,t=!1){const r=h,i=b(d(e,32)),a=e[31];i[31]=-129&a;const s=L(i);x(s,0n,t?K:n);const o=k(s*s),c=k(o-1n),l=k(r*o+1n);let{isValid:u,value:y}=z(c,l);u||f("bad point: y not sqrt");const w=1n==(1n&y),p=!!(128&a);return!t&&0n===y&&p&&f("bad point: x==0, isLastByteOdd"),p!==w&&(y=k(-y)),new E(y,s,1n,k(y*s))}static fromHex(e,t){return E.fromBytes(g(e),t)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){const e=c,t=h;if(this.is0())return f("bad point: ZERO");const{X:r,Y:i,Z:n,T:a}=this,s=k(r*r),o=k(i*i),l=k(n*n),d=k(l*l),u=k(s*e);return k(l*k(u+o))!==k(d+k(t*k(s*o)))?f("bad point: equation left != right (1)"):k(r*i)!==k(n*a)?f("bad point: equation left != right (2)"):this}equals(e){const{X:t,Y:r,Z:i}=this,{X:n,Y:a,Z:s}=P(e),o=k(t*s),c=k(n*i),h=k(r*s),l=k(a*i);return o===c&&h===l}is0(){return this.equals(S)}negate(){return new E(k(-this.X),this.Y,this.Z,k(-this.T))}double(){const{X:e,Y:t,Z:r}=this,i=c,n=k(e*e),a=k(t*t),s=k(2n*k(r*r)),o=k(i*n),h=e+t,l=k(k(h*h)-n-a),f=o+a,d=f-s,u=o-a,b=k(l*d),y=k(f*u),w=k(l*u),p=k(d*f);return new E(b,y,p,w)}add(e){const{X:t,Y:r,Z:i,T:n}=this,{X:a,Y:s,Z:o,T:l}=P(e),f=c,d=h,u=k(t*a),b=k(r*s),y=k(n*d*l),w=k(i*o),p=k((t+r)*(a+s)-u-b),g=k(w-y),_=k(w+y),m=k(b-f*u),v=k(p*g),x=k(_*m),A=k(p*m),K=k(g*_);return new E(v,x,K,A)}subtract(e){return this.add(P(e).negate())}multiply(e,t=!0){if(!t&&(0n===e||this.is0()))return S;if(x(e,1n,a),1n===e)return this;if(this.equals(U))return M(e).p;let r=S,i=U;for(let n=this;e>0n;n=n.double(),e>>=1n)1n&e?r=r.add(n):t&&(i=i.add(n));return r}multiplyUnsafe(e){return this.multiply(e,!1)}toAffine(){const{X:e,Y:t,Z:r}=this;if(this.equals(S))return{x:0n,y:1n};const i=A(r,n);return 1n!==k(r*i)&&f("invalid inverse"),{x:k(e*i),y:k(t*i)}}toBytes(){const{x:e,y:t}=this.assertValidity().toAffine(),r=j(t);return r[31]|=1n&e?128:0,r}toHex(){return w(this.toBytes())}clearCofactor(){return this.multiply(v(l),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let e=this.multiply(a/2n,!1).double();return a%2n&&(e=e.add(this)),e.is0()}}const U=new E(s,o,1n,k(s*o)),S=new E(0n,1n,1n,0n);E.BASE=U,E.ZERO=S;const j=e=>g(y(x(e,0n,K),64)).reverse(),L=e=>v("0x"+w(b(d(e)).reverse())),O=(e,t)=>{let r=e;for(;t-- >0n;)r*=r,r%=n;return r},I=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,z=(e,t)=>{const r=k(t*t*t),i=(e=>{const t=e*e%n*e%n,r=O(t,2n)*t%n,i=O(r,1n)*e%n,a=O(i,5n)*i%n,s=O(a,10n)*a%n,o=O(s,20n)*s%n,c=O(o,40n)*o%n,h=O(c,80n)*c%n,l=O(h,80n)*c%n,f=O(l,10n)*a%n;return{pow_p_5_8:O(f,2n)*e%n,b2:t}})(e*k(r*r*t)).pow_p_5_8;let a=k(e*r*i);const s=k(t*a*a),o=a,c=k(a*I),h=s===e,l=s===k(-e),f=s===k(-e*I);return h&&(a=o),(l||f)&&(a=c),1n==(1n&k(a))&&(a=k(-a)),{isValid:h||l,value:a}},C=e=>{return t=L(e),k(t,a);var t},T=(...e)=>(e=>{const t=N[e];return"function"!=typeof t&&f("hashes."+e+" not set"),t})("sha512")(m(...e)),B=e=>(e=>{const t=e.slice(0,32);t[0]&=248,t[31]&=127,t[31]|=64;const r=e.slice(32,64),i=C(t),n=U.multiply(i),a=n.toBytes();return{head:t,prefix:r,scalar:i,point:n,pointBytes:a}})(T(d(e,32))),H=e=>B(e).pointBytes,D={bytesToHex:w,hexToBytes:g,concatBytes:m,mod:k,invert:A,randomBytes:(e=32)=>_().getRandomValues(u(e))},N={sha512Async:async e=>{const t=_()?.subtle??f("crypto.subtle must be defined, consider polyfill"),r=m(e);return u(await t.digest("SHA-512",r.buffer))},sha512:void 0},R=Math.ceil(32)+1;let G;const q=(e,t)=>{const r=t.negate();return e?r:t},M=e=>{const t=G||(G=(()=>{const e=[];let t=U,r=t;for(let i=0;i>=a,o>128&&(o-=256,e+=1n);const c=128*s,h=c,l=c+Math.abs(o)-1,f=s%2!=0,d=o<0;0===o?i=i.add(q(f,t[h])):r=r.add(q(d,t[l]))}return 0n!==e&&f("invalid wnaf"),{p:r,f:i}}}}]); +//# sourceMappingURL=vendors.bundle.69b30d3a54b567a97bee.js.map \ No newline at end of file diff --git a/export/dist/vendors.bundle.8059a8388a5808663419.js.LICENSE.txt b/export/dist/vendors.bundle.69b30d3a54b567a97bee.js.LICENSE.txt similarity index 50% rename from export/dist/vendors.bundle.8059a8388a5808663419.js.LICENSE.txt rename to export/dist/vendors.bundle.69b30d3a54b567a97bee.js.LICENSE.txt index b989cb5..eb64353 100644 --- a/export/dist/vendors.bundle.8059a8388a5808663419.js.LICENSE.txt +++ b/export/dist/vendors.bundle.69b30d3a54b567a97bee.js.LICENSE.txt @@ -1 +1,3 @@ /*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */ + +/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ diff --git a/export/dist/vendors.bundle.69b30d3a54b567a97bee.js.map b/export/dist/vendors.bundle.69b30d3a54b567a97bee.js.map new file mode 100644 index 0000000..6ec11ee --- /dev/null +++ b/export/dist/vendors.bundle.69b30d3a54b567a97bee.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vendors.bundle.69b30d3a54b567a97bee.js","mappings":"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","sources":["webpack://export-tests/./node_modules/@hpke/common/esm/src/errors.js","webpack://export-tests/./node_modules/@hpke/common/esm/_dnt.shims.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/algorithm.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/identifiers.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/consts.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/interfaces/kemInterface.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/utils/misc.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/kems/dhkem.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/interfaces/dhkemPrimitives.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/utils/bignum.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/kems/dhkemPrimitives/ec.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/kdfs/hkdf.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/interfaces/aeadEncryptionContext.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/curve/montgomery.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/aeads/aesGcm.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/utils/emitNotSupported.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/exporterContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/encryptionContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/mutex.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/recipientContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/senderContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/cipherSuiteNative.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/kems/dhkemNative.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/native.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.js","webpack://export-tests/./node_modules/bech32/dist/index.js","webpack://export-tests/./node_modules/@noble/hashes/utils.js","webpack://export-tests/./node_modules/@noble/hashes/_md.js","webpack://export-tests/./node_modules/@noble/hashes/_u64.js","webpack://export-tests/./node_modules/@noble/hashes/sha2.js","webpack://export-tests/./node_modules/@noble/ed25519/index.js"],"sourcesContent":["/**\n * The base error class of hpke-js.\n * @group Errors\n */\nexport class HpkeError extends Error {\n constructor(e) {\n let message;\n if (e instanceof Error) {\n message = e.message;\n }\n else if (typeof e === \"string\") {\n message = e;\n }\n else {\n message = \"\";\n }\n super(message);\n this.name = this.constructor.name;\n }\n}\n/**\n * Invalid parameter.\n * @group Errors\n */\nexport class InvalidParamError extends HpkeError {\n}\n/**\n * KEM input or output validation failure.\n * @group Errors\n */\nexport class ValidationError extends HpkeError {\n}\n/**\n * Public or private key serialization failure.\n * @group Errors\n */\nexport class SerializeError extends HpkeError {\n}\n/**\n * Public or private key deserialization failure.\n * @group Errors\n */\nexport class DeserializeError extends HpkeError {\n}\n/**\n * encap() failure.\n * @group Errors\n */\nexport class EncapError extends HpkeError {\n}\n/**\n * decap() failure.\n * @group Errors\n */\nexport class DecapError extends HpkeError {\n}\n/**\n * Secret export failure.\n * @group Errors\n */\nexport class ExportError extends HpkeError {\n}\n/**\n * seal() failure.\n * @group Errors\n */\nexport class SealError extends HpkeError {\n}\n/**\n * open() failure.\n * @group Errors\n */\nexport class OpenError extends HpkeError {\n}\n/**\n * Sequence number overflow on the encryption context.\n * @group Errors\n */\nexport class MessageLimitReachedError extends HpkeError {\n}\n/**\n * Key pair derivation failure.\n * @group Errors\n */\nexport class DeriveKeyPairError extends HpkeError {\n}\n/**\n * Not supported failure.\n * @group Errors\n */\nexport class NotSupportedError extends HpkeError {\n}\n","const dntGlobals = {};\nexport const dntGlobalThis = createMergeProxy(globalThis, dntGlobals);\nfunction createMergeProxy(baseObj, extObj) {\n return new Proxy(baseObj, {\n get(_target, prop, _receiver) {\n if (prop in extObj) {\n return extObj[prop];\n }\n else {\n return baseObj[prop];\n }\n },\n set(_target, prop, value) {\n if (prop in extObj) {\n delete extObj[prop];\n }\n baseObj[prop] = value;\n return true;\n },\n deleteProperty(_target, prop) {\n let success = false;\n if (prop in extObj) {\n delete extObj[prop];\n success = true;\n }\n if (prop in baseObj) {\n delete baseObj[prop];\n success = true;\n }\n return success;\n },\n ownKeys(_target) {\n const baseKeys = Reflect.ownKeys(baseObj);\n const extKeys = Reflect.ownKeys(extObj);\n const extKeysSet = new Set(extKeys);\n return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];\n },\n defineProperty(_target, prop, desc) {\n if (prop in extObj) {\n delete extObj[prop];\n }\n Reflect.defineProperty(baseObj, prop, desc);\n return true;\n },\n getOwnPropertyDescriptor(_target, prop) {\n if (prop in extObj) {\n return Reflect.getOwnPropertyDescriptor(extObj, prop);\n }\n else {\n return Reflect.getOwnPropertyDescriptor(baseObj, prop);\n }\n },\n has(_target, prop) {\n return prop in extObj || prop in baseObj;\n },\n });\n}\n","import * as dntShim from \"../_dnt.shims.js\";\nimport { NotSupportedError } from \"./errors.js\";\nasync function loadSubtleCrypto() {\n if (dntShim.dntGlobalThis !== undefined && globalThis.crypto !== undefined) {\n // Browsers, Node.js >= v19, Cloudflare Workers, Bun, etc.\n return globalThis.crypto.subtle;\n }\n // Node.js <= v18\n try {\n // @ts-ignore: to ignore \"crypto\"\n const { webcrypto } = await import(\"crypto\"); // node:crypto\n return webcrypto.subtle;\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n}\nexport class NativeAlgorithm {\n constructor() {\n Object.defineProperty(this, \"_api\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: undefined\n });\n }\n async _setup() {\n if (this._api !== undefined) {\n return;\n }\n this._api = await loadSubtleCrypto();\n }\n}\n","/**\n * The supported HPKE modes.\n */\nexport const Mode = {\n Base: 0x00,\n Psk: 0x01,\n Auth: 0x02,\n AuthPsk: 0x03,\n};\n/**\n * The supported Key Encapsulation Mechanism (KEM) identifiers.\n */\nexport const KemId = {\n NotAssigned: 0x0000,\n DhkemP256HkdfSha256: 0x0010,\n DhkemP384HkdfSha384: 0x0011,\n DhkemP521HkdfSha512: 0x0012,\n DhkemSecp256k1HkdfSha256: 0x0013,\n DhkemX25519HkdfSha256: 0x0020,\n DhkemX448HkdfSha512: 0x0021,\n HybridkemX25519Kyber768: 0x0030,\n MlKem512: 0x0040,\n MlKem768: 0x0041,\n MlKem1024: 0x0042,\n XWing: 0x647a,\n};\n/**\n * The supported Key Derivation Function (KDF) identifiers.\n */\nexport const KdfId = {\n HkdfSha256: 0x0001,\n HkdfSha384: 0x0002,\n HkdfSha512: 0x0003,\n};\n/**\n * The supported Authenticated Encryption with Associated Data (AEAD) identifiers.\n */\nexport const AeadId = {\n Aes128Gcm: 0x0001,\n Aes256Gcm: 0x0002,\n Chacha20Poly1305: 0x0003,\n ExportOnly: 0xFFFF,\n};\n","// The input length limit (psk, psk_id, info, exporter_context, ikm).\nexport const INPUT_LENGTH_LIMIT = 8192;\nexport const INFO_LENGTH_LIMIT = 65536;\n// The minimum length of a PSK.\nexport const MINIMUM_PSK_LENGTH = 32;\n// b\"\"\nexport const EMPTY = new Uint8Array(0);\n","// b\"KEM\"\nexport const SUITE_ID_HEADER_KEM = new Uint8Array([\n 75,\n 69,\n 77,\n 0,\n 0,\n]);\n","import * as dntShim from \"../../_dnt.shims.js\";\nimport { KemId } from \"../identifiers.js\";\nexport const isDenoV1 = () => \n// deno-lint-ignore no-explicit-any\ndntShim.dntGlobalThis.process === undefined;\n/**\n * Checks whether the runtime is Deno or not (Node.js).\n * @returns boolean - true if the runtime is Deno, false Node.js.\n */\nexport function isDeno() {\n // deno-lint-ignore no-explicit-any\n if (dntShim.dntGlobalThis.process === undefined) {\n return true;\n }\n // deno-lint-ignore no-explicit-any\n return dntShim.dntGlobalThis.process?.versions?.deno !== undefined;\n}\n/**\n * Checks whetehr the type of input is CryptoKeyPair or not.\n */\nexport const isCryptoKeyPair = (x) => typeof x === \"object\" &&\n x !== null &&\n typeof x.privateKey === \"object\" &&\n typeof x.publicKey === \"object\";\n/**\n * Converts integer to octet string. I2OSP implementation.\n */\nexport function i2Osp(n, w) {\n if (w <= 0) {\n throw new Error(\"i2Osp: too small size\");\n }\n if (n >= 256 ** w) {\n throw new Error(\"i2Osp: too large integer\");\n }\n const ret = new Uint8Array(w);\n for (let i = 0; i < w && n; i++) {\n ret[w - (i + 1)] = n % 256;\n n = n >> 8;\n }\n return ret;\n}\n/**\n * Concatenates two Uint8Arrays.\n * @param a Uint8Array\n * @param b Uint8Array\n * @returns Concatenated Uint8Array\n */\nexport function concat(a, b) {\n const ret = new Uint8Array(a.length + b.length);\n ret.set(a, 0);\n ret.set(b, a.length);\n return ret;\n}\n/**\n * Decodes Base64Url-encoded data.\n * @param v Base64Url-encoded string\n * @returns Uint8Array\n */\nexport function base64UrlToBytes(v) {\n const base64 = v.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const byteString = atob(base64);\n const ret = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n ret[i] = byteString.charCodeAt(i);\n }\n return ret;\n}\n/**\n * Encodes Uint8Array to Base64Url.\n * @param v Uint8Array\n * @returns Base64Url-encoded string\n */\nexport function bytesToBase64Url(v) {\n return btoa(String.fromCharCode(...v))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=*$/g, \"\");\n}\n/**\n * Decodes hex string to Uint8Array.\n * @param v Hex string\n * @returns Uint8Array\n * @throws Error if the input is not a hex string.\n */\nexport function hexToBytes(v) {\n if (v.length === 0) {\n return new Uint8Array([]);\n }\n const res = v.match(/[\\da-f]{2}/gi);\n if (res == null) {\n throw new Error(\"Not hex string.\");\n }\n return new Uint8Array(res.map(function (h) {\n return parseInt(h, 16);\n }));\n}\n/**\n * Encodes Uint8Array to hex string.\n * @param v Uint8Array\n * @returns Hex string\n */\nexport function bytesToHex(v) {\n return [...v].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n/**\n * Converts KemId to KeyAlgorithm.\n * @param kem KemId\n * @returns KeyAlgorithm\n */\nexport function kemToKeyGenAlgorithm(kem) {\n switch (kem) {\n case KemId.DhkemP256HkdfSha256:\n return {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n };\n case KemId.DhkemP384HkdfSha384:\n return {\n name: \"ECDH\",\n namedCurve: \"P-384\",\n };\n case KemId.DhkemP521HkdfSha512:\n return {\n name: \"ECDH\",\n namedCurve: \"P-521\",\n };\n default:\n // case KemId.DhkemX25519HkdfSha256\n return {\n name: \"X25519\",\n };\n }\n}\nexport async function loadSubtleCrypto() {\n if (dntShim.dntGlobalThis !== undefined && globalThis.crypto !== undefined) {\n // Browsers, Node.js >= v19, Cloudflare Workers, Bun, etc.\n return globalThis.crypto.subtle;\n }\n // Node.js <= v18\n try {\n // @ts-ignore: to ignore \"crypto\"\n const { webcrypto } = await import(\"crypto\"); // node:crypto\n return webcrypto.subtle;\n }\n catch (_e) {\n throw new Error(\"Failed to load SubtleCrypto\");\n }\n}\nexport async function loadCrypto() {\n if (dntShim.dntGlobalThis !== undefined && globalThis.crypto !== undefined) {\n // Browsers, Node.js >= v19, Cloudflare Workers, Bun, etc.\n return globalThis.crypto;\n }\n // Node.js <= v18\n try {\n // @ts-ignore: to ignore \"crypto\"\n const { webcrypto } = await import(\"crypto\"); // node:crypto\n return webcrypto;\n }\n catch (_e) {\n throw new Error(\"Web Cryptograph API not supported\");\n }\n}\n/**\n * XOR for Uint8Array.\n */\nexport function xor(a, b) {\n if (a.byteLength !== b.byteLength) {\n throw new Error(\"xor: different length inputs\");\n }\n const buf = new Uint8Array(a.byteLength);\n for (let i = 0; i < a.byteLength; i++) {\n buf[i] = a[i] ^ b[i];\n }\n return buf;\n}\n","import { EMPTY, INPUT_LENGTH_LIMIT } from \"../consts.js\";\nimport { DecapError, EncapError, InvalidParamError } from \"../errors.js\";\nimport { SUITE_ID_HEADER_KEM } from \"../interfaces/kemInterface.js\";\nimport { concat, i2Osp, isCryptoKeyPair } from \"../utils/misc.js\";\n// b\"eae_prk\"\nconst LABEL_EAE_PRK = new Uint8Array([101, 97, 101, 95, 112, 114, 107]);\n// b\"shared_secret\"\n// deno-fmt-ignore\nconst LABEL_SHARED_SECRET = new Uint8Array([\n 115, 104, 97, 114, 101, 100, 95, 115, 101, 99,\n 114, 101, 116,\n]);\nfunction concat3(a, b, c) {\n const ret = new Uint8Array(a.length + b.length + c.length);\n ret.set(a, 0);\n ret.set(b, a.length);\n ret.set(c, a.length + b.length);\n return ret;\n}\nexport class Dhkem {\n constructor(id, prim, kdf) {\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"_prim\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_kdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.id = id;\n this._prim = prim;\n this._kdf = kdf;\n const suiteId = new Uint8Array(SUITE_ID_HEADER_KEM);\n suiteId.set(i2Osp(this.id, 2), 3);\n this._kdf.init(suiteId);\n }\n async serializePublicKey(key) {\n return await this._prim.serializePublicKey(key);\n }\n async deserializePublicKey(key) {\n return await this._prim.deserializePublicKey(key);\n }\n async serializePrivateKey(key) {\n return await this._prim.serializePrivateKey(key);\n }\n async deserializePrivateKey(key) {\n return await this._prim.deserializePrivateKey(key);\n }\n async importKey(format, key, isPublic = true) {\n return await this._prim.importKey(format, key, isPublic);\n }\n async generateKeyPair() {\n return await this._prim.generateKeyPair();\n }\n async deriveKeyPair(ikm) {\n if (ikm.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long ikm\");\n }\n return await this._prim.deriveKeyPair(ikm);\n }\n async encap(params) {\n let ke;\n if (params.ekm === undefined) {\n ke = await this.generateKeyPair();\n }\n else if (isCryptoKeyPair(params.ekm)) {\n // params.ekm is only used for testing.\n ke = params.ekm;\n }\n else {\n // params.ekm is only used for testing.\n ke = await this.deriveKeyPair(params.ekm);\n }\n const enc = await this._prim.serializePublicKey(ke.publicKey);\n const pkrm = await this._prim.serializePublicKey(params.recipientPublicKey);\n try {\n let dh;\n if (params.senderKey === undefined) {\n dh = new Uint8Array(await this._prim.dh(ke.privateKey, params.recipientPublicKey));\n }\n else {\n const sks = isCryptoKeyPair(params.senderKey)\n ? params.senderKey.privateKey\n : params.senderKey;\n const dh1 = new Uint8Array(await this._prim.dh(ke.privateKey, params.recipientPublicKey));\n const dh2 = new Uint8Array(await this._prim.dh(sks, params.recipientPublicKey));\n dh = concat(dh1, dh2);\n }\n let kemContext;\n if (params.senderKey === undefined) {\n kemContext = concat(new Uint8Array(enc), new Uint8Array(pkrm));\n }\n else {\n const pks = isCryptoKeyPair(params.senderKey)\n ? params.senderKey.publicKey\n : await this._prim.derivePublicKey(params.senderKey);\n const pksm = await this._prim.serializePublicKey(pks);\n kemContext = concat3(new Uint8Array(enc), new Uint8Array(pkrm), new Uint8Array(pksm));\n }\n const sharedSecret = await this._generateSharedSecret(dh, kemContext);\n return {\n enc: enc,\n sharedSecret: sharedSecret,\n };\n }\n catch (e) {\n throw new EncapError(e);\n }\n }\n async decap(params) {\n const pke = await this._prim.deserializePublicKey(params.enc);\n const skr = isCryptoKeyPair(params.recipientKey)\n ? params.recipientKey.privateKey\n : params.recipientKey;\n const pkr = isCryptoKeyPair(params.recipientKey)\n ? params.recipientKey.publicKey\n : await this._prim.derivePublicKey(params.recipientKey);\n const pkrm = await this._prim.serializePublicKey(pkr);\n try {\n let dh;\n if (params.senderPublicKey === undefined) {\n dh = new Uint8Array(await this._prim.dh(skr, pke));\n }\n else {\n const dh1 = new Uint8Array(await this._prim.dh(skr, pke));\n const dh2 = new Uint8Array(await this._prim.dh(skr, params.senderPublicKey));\n dh = concat(dh1, dh2);\n }\n let kemContext;\n if (params.senderPublicKey === undefined) {\n kemContext = concat(new Uint8Array(params.enc), new Uint8Array(pkrm));\n }\n else {\n const pksm = await this._prim.serializePublicKey(params.senderPublicKey);\n kemContext = new Uint8Array(params.enc.byteLength + pkrm.byteLength + pksm.byteLength);\n kemContext.set(new Uint8Array(params.enc), 0);\n kemContext.set(new Uint8Array(pkrm), params.enc.byteLength);\n kemContext.set(new Uint8Array(pksm), params.enc.byteLength + pkrm.byteLength);\n }\n return await this._generateSharedSecret(dh, kemContext);\n }\n catch (e) {\n throw new DecapError(e);\n }\n }\n async _generateSharedSecret(dh, kemContext) {\n const labeledIkm = this._kdf.buildLabeledIkm(LABEL_EAE_PRK, dh);\n const labeledInfo = this._kdf.buildLabeledInfo(LABEL_SHARED_SECRET, kemContext, this.secretSize);\n return await this._kdf.extractAndExpand(EMPTY.buffer, labeledIkm.buffer, labeledInfo.buffer, this.secretSize);\n }\n}\n","// The key usages for KEM.\nexport const KEM_USAGES = [\"deriveBits\"];\n// b\"dkp_prk\"\nexport const LABEL_DKP_PRK = new Uint8Array([\n 100,\n 107,\n 112,\n 95,\n 112,\n 114,\n 107,\n]);\n// b\"sk\"\nexport const LABEL_SK = new Uint8Array([115, 107]);\n","/**\n * The minimum inplementation of bignum to derive an EC key pair.\n */\nexport class Bignum {\n constructor(size) {\n Object.defineProperty(this, \"_num\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._num = new Uint8Array(size);\n }\n val() {\n return this._num;\n }\n reset() {\n this._num.fill(0);\n }\n set(src) {\n if (src.length !== this._num.length) {\n throw new Error(\"Bignum.set: invalid argument\");\n }\n this._num.set(src);\n }\n isZero() {\n for (let i = 0; i < this._num.length; i++) {\n if (this._num[i] !== 0) {\n return false;\n }\n }\n return true;\n }\n lessThan(v) {\n if (v.length !== this._num.length) {\n throw new Error(\"Bignum.lessThan: invalid argument\");\n }\n for (let i = 0; i < this._num.length; i++) {\n if (this._num[i] < v[i]) {\n return true;\n }\n if (this._num[i] > v[i]) {\n return false;\n }\n }\n return false;\n }\n}\n","import { NativeAlgorithm } from \"../../algorithm.js\";\nimport { EMPTY } from \"../../consts.js\";\nimport { DeriveKeyPairError, DeserializeError, NotSupportedError, SerializeError, } from \"../../errors.js\";\nimport { KemId } from \"../../identifiers.js\";\nimport { KEM_USAGES, LABEL_DKP_PRK } from \"../../interfaces/dhkemPrimitives.js\";\nimport { Bignum } from \"../../utils/bignum.js\";\nimport { base64UrlToBytes, i2Osp } from \"../../utils/misc.js\";\n// b\"candidate\"\n// deno-fmt-ignore\nconst LABEL_CANDIDATE = new Uint8Array([\n 99, 97, 110, 100, 105, 100, 97, 116, 101,\n]);\n// the order of the curve being used.\n// deno-fmt-ignore\nconst ORDER_P_256 = new Uint8Array([\n 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xbc, 0xe6, 0xfa, 0xad, 0xa7, 0x17, 0x9e, 0x84,\n 0xf3, 0xb9, 0xca, 0xc2, 0xfc, 0x63, 0x25, 0x51,\n]);\n// deno-fmt-ignore\nconst ORDER_P_384 = new Uint8Array([\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xc7, 0x63, 0x4d, 0x81, 0xf4, 0x37, 0x2d, 0xdf,\n 0x58, 0x1a, 0x0d, 0xb2, 0x48, 0xb0, 0xa7, 0x7a,\n 0xec, 0xec, 0x19, 0x6a, 0xcc, 0xc5, 0x29, 0x73,\n]);\n// deno-fmt-ignore\nconst ORDER_P_521 = new Uint8Array([\n 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xfa, 0x51, 0x86, 0x87, 0x83, 0xbf, 0x2f,\n 0x96, 0x6b, 0x7f, 0xcc, 0x01, 0x48, 0xf7, 0x09,\n 0xa5, 0xd0, 0x3b, 0xb5, 0xc9, 0xb8, 0x89, 0x9c,\n 0x47, 0xae, 0xbb, 0x6f, 0xb7, 0x1e, 0x91, 0x38,\n 0x64, 0x09,\n]);\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_P_256 = new Uint8Array([\n 48, 65, 2, 1, 0, 48, 19, 6, 7, 42,\n 134, 72, 206, 61, 2, 1, 6, 8, 42, 134,\n 72, 206, 61, 3, 1, 7, 4, 39, 48, 37,\n 2, 1, 1, 4, 32,\n]);\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_P_384 = new Uint8Array([\n 48, 78, 2, 1, 0, 48, 16, 6, 7, 42,\n 134, 72, 206, 61, 2, 1, 6, 5, 43, 129,\n 4, 0, 34, 4, 55, 48, 53, 2, 1, 1,\n 4, 48,\n]);\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_P_521 = new Uint8Array([\n 48, 96, 2, 1, 0, 48, 16, 6, 7, 42,\n 134, 72, 206, 61, 2, 1, 6, 5, 43, 129,\n 4, 0, 35, 4, 73, 48, 71, 2, 1, 1,\n 4, 66,\n]);\nexport class Ec extends NativeAlgorithm {\n constructor(kem, hkdf) {\n super();\n Object.defineProperty(this, \"_hkdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_alg\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nPk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nSk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nDh\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // EC specific arguments for deriving key pair.\n Object.defineProperty(this, \"_order\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_bitmask\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_pkcs8AlgId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._hkdf = hkdf;\n switch (kem) {\n case KemId.DhkemP256HkdfSha256:\n this._alg = { name: \"ECDH\", namedCurve: \"P-256\" };\n this._nPk = 65;\n this._nSk = 32;\n this._nDh = 32;\n this._order = ORDER_P_256;\n this._bitmask = 0xFF;\n this._pkcs8AlgId = PKCS8_ALG_ID_P_256;\n break;\n case KemId.DhkemP384HkdfSha384:\n this._alg = { name: \"ECDH\", namedCurve: \"P-384\" };\n this._nPk = 97;\n this._nSk = 48;\n this._nDh = 48;\n this._order = ORDER_P_384;\n this._bitmask = 0xFF;\n this._pkcs8AlgId = PKCS8_ALG_ID_P_384;\n break;\n default:\n // case KemId.DhkemP521HkdfSha512:\n this._alg = { name: \"ECDH\", namedCurve: \"P-521\" };\n this._nPk = 133;\n this._nSk = 66;\n this._nDh = 66;\n this._order = ORDER_P_521;\n this._bitmask = 0x01;\n this._pkcs8AlgId = PKCS8_ALG_ID_P_521;\n break;\n }\n }\n async serializePublicKey(key) {\n await this._setup();\n try {\n return await this._api.exportKey(\"raw\", key);\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePublicKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, true);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async serializePrivateKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n if (!(\"d\" in jwk)) {\n throw new Error(\"Not private key\");\n }\n return base64UrlToBytes(jwk[\"d\"]).buffer;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePrivateKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, false);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async importKey(format, key, isPublic) {\n await this._setup();\n try {\n if (format === \"raw\") {\n return await this._importRawKey(key, isPublic);\n }\n // jwk\n if (key instanceof ArrayBuffer) {\n throw new Error(\"Invalid jwk key format\");\n }\n return await this._importJWK(key, isPublic);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async generateKeyPair() {\n await this._setup();\n try {\n return await this._api.generateKey(this._alg, true, KEM_USAGES);\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n }\n async deriveKeyPair(ikm) {\n await this._setup();\n try {\n const dkpPrk = await this._hkdf.labeledExtract(EMPTY.buffer, LABEL_DKP_PRK, new Uint8Array(ikm));\n const bn = new Bignum(this._nSk);\n for (let counter = 0; bn.isZero() || !bn.lessThan(this._order); counter++) {\n if (counter > 255) {\n throw new Error(\"Faild to derive a key pair\");\n }\n const bytes = new Uint8Array(await this._hkdf.labeledExpand(dkpPrk, LABEL_CANDIDATE, i2Osp(counter, 1), this._nSk));\n bytes[0] = bytes[0] & this._bitmask;\n bn.set(bytes);\n }\n const sk = await this._deserializePkcs8Key(bn.val());\n bn.reset();\n return {\n privateKey: sk,\n publicKey: await this.derivePublicKey(sk),\n };\n }\n catch (e) {\n throw new DeriveKeyPairError(e);\n }\n }\n async derivePublicKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n delete jwk[\"d\"];\n delete jwk[\"key_ops\"];\n return await this._api.importKey(\"jwk\", jwk, this._alg, true, []);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async dh(sk, pk) {\n try {\n await this._setup();\n const bits = await this._api.deriveBits({\n name: \"ECDH\",\n public: pk,\n }, sk, this._nDh * 8);\n return bits;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async _importRawKey(key, isPublic) {\n if (isPublic && key.byteLength !== this._nPk) {\n throw new Error(\"Invalid public key for the ciphersuite\");\n }\n if (!isPublic && key.byteLength !== this._nSk) {\n throw new Error(\"Invalid private key for the ciphersuite\");\n }\n if (isPublic) {\n return await this._api.importKey(\"raw\", key, this._alg, true, []);\n }\n return await this._deserializePkcs8Key(new Uint8Array(key));\n }\n async _importJWK(key, isPublic) {\n if (typeof key.crv === \"undefined\" || key.crv !== this._alg.namedCurve) {\n throw new Error(`Invalid crv: ${key.crv}`);\n }\n if (isPublic) {\n if (typeof key.d !== \"undefined\") {\n throw new Error(\"Invalid key: `d` should not be set\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, []);\n }\n if (typeof key.d === \"undefined\") {\n throw new Error(\"Invalid key: `d` not found\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, KEM_USAGES);\n }\n async _deserializePkcs8Key(k) {\n const pkcs8Key = new Uint8Array(this._pkcs8AlgId.length + k.length);\n pkcs8Key.set(this._pkcs8AlgId, 0);\n pkcs8Key.set(k, this._pkcs8AlgId.length);\n return await this._api.importKey(\"pkcs8\", pkcs8Key, this._alg, true, KEM_USAGES);\n }\n}\n","import { EMPTY } from \"../consts.js\";\nimport { InvalidParamError } from \"../errors.js\";\nimport { KdfId } from \"../identifiers.js\";\nimport { NativeAlgorithm } from \"../algorithm.js\";\n// b\"HPKE-v1\"\nconst HPKE_VERSION = new Uint8Array([72, 80, 75, 69, 45, 118, 49]);\nexport class HkdfNative extends NativeAlgorithm {\n constructor() {\n super();\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha256\n });\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"_suiteId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: EMPTY\n });\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-256\",\n length: 256,\n }\n });\n }\n init(suiteId) {\n this._suiteId = suiteId;\n }\n buildLabeledIkm(label, ikm) {\n this._checkInit();\n const ret = new Uint8Array(7 + this._suiteId.byteLength + label.byteLength + ikm.byteLength);\n ret.set(HPKE_VERSION, 0);\n ret.set(this._suiteId, 7);\n ret.set(label, 7 + this._suiteId.byteLength);\n ret.set(ikm, 7 + this._suiteId.byteLength + label.byteLength);\n return ret;\n }\n buildLabeledInfo(label, info, len) {\n this._checkInit();\n const ret = new Uint8Array(9 + this._suiteId.byteLength + label.byteLength + info.byteLength);\n ret.set(new Uint8Array([0, len]), 0);\n ret.set(HPKE_VERSION, 2);\n ret.set(this._suiteId, 9);\n ret.set(label, 9 + this._suiteId.byteLength);\n ret.set(info, 9 + this._suiteId.byteLength + label.byteLength);\n return ret;\n }\n async extract(salt, ikm) {\n await this._setup();\n if (salt.byteLength === 0) {\n salt = new ArrayBuffer(this.hashSize);\n }\n if (salt.byteLength !== this.hashSize) {\n throw new InvalidParamError(\"The salt length must be the same as the hashSize\");\n }\n const key = await this._api.importKey(\"raw\", salt, this.algHash, false, [\n \"sign\",\n ]);\n return await this._api.sign(\"HMAC\", key, ikm);\n }\n async expand(prk, info, len) {\n await this._setup();\n const key = await this._api.importKey(\"raw\", prk, this.algHash, false, [\n \"sign\",\n ]);\n const okm = new ArrayBuffer(len);\n const p = new Uint8Array(okm);\n let prev = EMPTY;\n const mid = new Uint8Array(info);\n const tail = new Uint8Array(1);\n if (len > 255 * this.hashSize) {\n throw new Error(\"Entropy limit reached\");\n }\n const tmp = new Uint8Array(this.hashSize + mid.length + 1);\n for (let i = 1, cur = 0; cur < p.length; i++) {\n tail[0] = i;\n tmp.set(prev, 0);\n tmp.set(mid, prev.length);\n tmp.set(tail, prev.length + mid.length);\n prev = new Uint8Array(await this._api.sign(\"HMAC\", key, tmp.slice(0, prev.length + mid.length + 1)));\n if (p.length - cur >= prev.length) {\n p.set(prev, cur);\n cur += prev.length;\n }\n else {\n p.set(prev.slice(0, p.length - cur), cur);\n cur += p.length - cur;\n }\n }\n return okm;\n }\n async extractAndExpand(salt, ikm, info, len) {\n await this._setup();\n const baseKey = await this._api.importKey(\"raw\", ikm, \"HKDF\", false, [\"deriveBits\"]);\n return await this._api.deriveBits({\n name: \"HKDF\",\n hash: this.algHash.hash,\n salt: salt,\n info: info,\n }, baseKey, len * 8);\n }\n async labeledExtract(salt, label, ikm) {\n return await this.extract(salt, this.buildLabeledIkm(label, ikm).buffer);\n }\n async labeledExpand(prk, label, info, len) {\n return await this.expand(prk, this.buildLabeledInfo(label, info, len).buffer, len);\n }\n _checkInit() {\n if (this._suiteId === EMPTY) {\n throw new Error(\"Not initialized. Call init()\");\n }\n }\n}\nexport class HkdfSha256Native extends HkdfNative {\n constructor() {\n super(...arguments);\n /** KdfId.HkdfSha256 (0x0001) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha256\n });\n /** 32 */\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n /** The parameters for Web Cryptography API */\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-256\",\n length: 256,\n }\n });\n }\n}\nexport class HkdfSha384Native extends HkdfNative {\n constructor() {\n super(...arguments);\n /** KdfId.HkdfSha384 (0x0002) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha384\n });\n /** 48 */\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 48\n });\n /** The parameters for Web Cryptography API */\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-384\",\n length: 384,\n }\n });\n }\n}\nexport class HkdfSha512Native extends HkdfNative {\n constructor() {\n super(...arguments);\n /** KdfId.HkdfSha512 (0x0003) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha512\n });\n /** 64 */\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 64\n });\n /** The parameters for Web Cryptography API */\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-512\",\n length: 512,\n }\n });\n }\n}\n","// The key usages for AEAD.\nexport const AEAD_USAGES = [\"encrypt\", \"decrypt\"];\n","/**\n * This file is based on noble-curves (https://github.com/paulmillr/noble-curves).\n *\n * noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com)\n *\n * The original file is located at:\n * https://github.com/paulmillr/noble-curves/blob/b9d49d2b41d550571a0c5be443ecb62109fa3373/src/abstract/montgomery.ts\n */\n/**\n * Montgomery curve methods. It's not really whole montgomery curve,\n * just bunch of very specific methods for X25519 / X448 from\n * [RFC 7748](https://www.rfc-editor.org/rfc/rfc7748)\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { abytes, aInRange, bytesToNumberLE, copyBytes, numberToBytesLE, randomBytesAsync, validateObject, } from \"../utils/noble.js\";\nimport { createKeygen } from \"./curve.js\";\nimport { mod } from \"./modular.js\";\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nfunction validateOpts(curve) {\n validateObject(curve, {\n adjustScalarBytes: \"function\",\n powPminus2: \"function\",\n });\n return Object.freeze({ ...curve });\n}\nexport function montgomery(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { P, type, adjustScalarBytes, powPminus2, randomBytes: rand } = CURVE;\n const is25519 = type === \"x25519\";\n if (!is25519 && type !== \"x448\")\n throw new Error(\"invalid type\");\n const randomBytes_ = rand || randomBytesAsync;\n const montgomeryBits = is25519 ? 255 : 448;\n const fieldLen = is25519 ? 32 : 56;\n const Gu = is25519 ? BigInt(9) : BigInt(5);\n // RFC 7748 #5:\n // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and\n // (156326 - 2) / 4 = 39081 for curve448/X448\n // const a = is25519 ? 156326n : 486662n;\n const a24 = is25519 ? BigInt(121665) : BigInt(39081);\n // RFC: x25519 \"the resulting integer is of the form 2^254 plus\n // eight times a value between 0 and 2^251 - 1 (inclusive)\"\n // x448: \"2^447 plus four times a value between 0 and 2^445 - 1 (inclusive)\"\n const minScalar = is25519 ? _2n ** BigInt(254) : _2n ** BigInt(447);\n const maxAdded = is25519\n ? BigInt(8) * _2n ** BigInt(251) - _1n\n : BigInt(4) * _2n ** BigInt(445) - _1n;\n const maxScalar = minScalar + maxAdded + _1n; // (inclusive)\n const modP = (n) => mod(n, P);\n const GuBytes = encodeU(Gu);\n function encodeU(u) {\n return numberToBytesLE(modP(u), fieldLen);\n }\n function decodeU(u) {\n const _u = copyBytes(abytes(u, fieldLen, \"uCoordinate\"));\n // RFC: When receiving such an array, implementations of X25519\n // (but not X448) MUST mask the most significant bit in the final byte.\n if (is25519)\n _u[31] &= 127; // 0b0111_1111\n // RFC: Implementations MUST accept non-canonical values and process them as\n // if they had been reduced modulo the field prime. The non-canonical\n // values are 2^255 - 19 through 2^255 - 1 for X25519 and 2^448 - 2^224\n // - 1 through 2^448 - 1 for X448.\n return modP(bytesToNumberLE(_u));\n }\n function decodeScalar(scalar) {\n return bytesToNumberLE(adjustScalarBytes(copyBytes(abytes(scalar, fieldLen, \"scalar\"))));\n }\n function scalarMult(scalar, u) {\n const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar));\n // Some public keys are useless, of low-order. Curve author doesn't think\n // it needs to be validated, but we do it nonetheless.\n // https://cr.yp.to/ecdh.html#validate\n if (pu === _0n)\n throw new Error(\"invalid private or public key received\");\n return encodeU(pu);\n }\n // Computes public key from private. By doing scalar multiplication of base point.\n function scalarMultBase(scalar) {\n return scalarMult(scalar, GuBytes);\n }\n const getPublicKey = scalarMultBase;\n const getSharedSecret = scalarMult;\n // cswap from RFC7748 \"example code\"\n function cswap(swap, x_2, x_3) {\n // dummy = mask(swap) AND (x_2 XOR x_3)\n // Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n // and x_3, computed, e.g., as mask(swap) = 0 - swap.\n const dummy = modP(swap * (x_2 - x_3));\n x_2 = modP(x_2 - dummy); // x_2 = x_2 XOR dummy\n x_3 = modP(x_3 + dummy); // x_3 = x_3 XOR dummy\n return { x_2, x_3 };\n }\n /**\n * Montgomery x-only multiplication ladder.\n * @param pointU u coordinate (x) on Montgomery Curve 25519\n * @param scalar by which the point would be multiplied\n * @returns new Point on Montgomery curve\n */\n function montgomeryLadder(u, scalar) {\n aInRange(\"u\", u, _0n, P);\n aInRange(\"scalar\", scalar, minScalar, maxScalar);\n const k = scalar;\n const x_1 = u;\n let x_2 = _1n;\n let z_2 = _0n;\n let x_3 = u;\n let z_3 = _1n;\n let swap = _0n;\n for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n const k_t = (k >> t) & _1n;\n swap ^= k_t;\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n swap = k_t;\n const A = x_2 + z_2;\n const AA = modP(A * A);\n const B = x_2 - z_2;\n const BB = modP(B * B);\n const E = AA - BB;\n const C = x_3 + z_3;\n const D = x_3 - z_3;\n const DA = modP(D * A);\n const CB = modP(C * B);\n const dacb = DA + CB;\n const da_cb = DA - CB;\n x_3 = modP(dacb * dacb);\n z_3 = modP(x_1 * modP(da_cb * da_cb));\n x_2 = modP(AA * BB);\n z_2 = modP(E * (AA + modP(a24 * E)));\n }\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n const z2 = powPminus2(z_2); // `Fp.pow(x, P - _2n)` is much slower equivalent\n return modP(x_2 * z2); // Return x_2 * (z_2^(p - 2))\n }\n const lengths = {\n secretKey: fieldLen,\n publicKey: fieldLen,\n seed: fieldLen,\n };\n const randomSecretKey = async (seed) => {\n if (seed === undefined) {\n seed = await randomBytes_(fieldLen);\n }\n abytes(seed, lengths.seed, \"seed\");\n return seed;\n };\n const utils = { randomSecretKey };\n return Object.freeze({\n keygen: createKeygen(randomSecretKey, getPublicKey),\n getSharedSecret,\n getPublicKey,\n scalarMult,\n scalarMultBase,\n utils,\n GuBytes: GuBytes.slice(),\n lengths,\n });\n}\n","import { AEAD_USAGES, AeadId, NativeAlgorithm } from \"@hpke/common\";\nexport class AesGcmContext extends NativeAlgorithm {\n constructor(key) {\n super();\n Object.defineProperty(this, \"_rawKey\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_key\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: undefined\n });\n this._rawKey = key;\n }\n async seal(iv, data, aad) {\n await this._setupKey();\n const alg = {\n name: \"AES-GCM\",\n iv: iv,\n additionalData: aad,\n };\n const ct = await this._api.encrypt(alg, this._key, data);\n return ct;\n }\n async open(iv, data, aad) {\n await this._setupKey();\n const alg = {\n name: \"AES-GCM\",\n iv: iv,\n additionalData: aad,\n };\n const pt = await this._api.decrypt(alg, this._key, data);\n return pt;\n }\n async _setupKey() {\n if (this._key !== undefined) {\n return;\n }\n await this._setup();\n const key = await this._importKey(this._rawKey);\n (new Uint8Array(this._rawKey)).fill(0);\n this._key = key;\n return;\n }\n async _importKey(key) {\n return await this._api.importKey(\"raw\", key, { name: \"AES-GCM\" }, true, AEAD_USAGES);\n }\n}\n/**\n * The AES-128-GCM for HPKE AEAD implementing {@link AeadInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `aead` parameter of {@link CipherSuiteParams} instead of `AeadId.Aes128Gcm`.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class Aes128Gcm {\n constructor() {\n /** AeadId.Aes128Gcm (0x0001) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: AeadId.Aes128Gcm\n });\n /** 16 */\n Object.defineProperty(this, \"keySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 16\n });\n /** 12 */\n Object.defineProperty(this, \"nonceSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 12\n });\n /** 16 */\n Object.defineProperty(this, \"tagSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 16\n });\n }\n createEncryptionContext(key) {\n return new AesGcmContext(key);\n }\n}\n/**\n * The AES-256-GCM for HPKE AEAD implementing {@link AeadInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `aead` parameter of {@link CipherSuiteParams} instead of `AeadId.Aes256Gcm`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes256Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes256Gcm(),\n * });\n * ```\n */\nexport class Aes256Gcm extends Aes128Gcm {\n constructor() {\n super(...arguments);\n /** AeadId.Aes256Gcm (0x0002) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: AeadId.Aes256Gcm\n });\n /** 32 */\n Object.defineProperty(this, \"keySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n /** 12 */\n Object.defineProperty(this, \"nonceSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 12\n });\n /** 16 */\n Object.defineProperty(this, \"tagSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 16\n });\n }\n}\n","import { NotSupportedError } from \"@hpke/common\";\nexport function emitNotSupported() {\n return new Promise((_resolve, reject) => {\n reject(new NotSupportedError(\"Not supported\"));\n });\n}\n","import { ExportError, INPUT_LENGTH_LIMIT, InvalidParamError, } from \"@hpke/common\";\nimport { emitNotSupported } from \"./utils/emitNotSupported.js\";\n// b\"sec\"\nconst LABEL_SEC = new Uint8Array([115, 101, 99]);\nexport class ExporterContextImpl {\n constructor(api, kdf, exporterSecret) {\n Object.defineProperty(this, \"_api\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"exporterSecret\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_kdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._api = api;\n this._kdf = kdf;\n this.exporterSecret = exporterSecret;\n }\n async seal(_data, _aad) {\n return await emitNotSupported();\n }\n async open(_data, _aad) {\n return await emitNotSupported();\n }\n async export(exporterContext, len) {\n if (exporterContext.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long exporter context\");\n }\n try {\n return await this._kdf.labeledExpand(this.exporterSecret, LABEL_SEC, new Uint8Array(exporterContext), len);\n }\n catch (e) {\n throw new ExportError(e);\n }\n }\n}\nexport class RecipientExporterContextImpl extends ExporterContextImpl {\n}\nexport class SenderExporterContextImpl extends ExporterContextImpl {\n constructor(api, kdf, exporterSecret, enc) {\n super(api, kdf, exporterSecret);\n Object.defineProperty(this, \"enc\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.enc = enc;\n return;\n }\n}\n","import { i2Osp, MessageLimitReachedError, xor } from \"@hpke/common\";\nimport { ExporterContextImpl } from \"./exporterContext.js\";\nexport class EncryptionContextImpl extends ExporterContextImpl {\n constructor(api, kdf, params) {\n super(api, kdf, params.exporterSecret);\n // AEAD id.\n Object.defineProperty(this, \"_aead\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The length in bytes of a key for the algorithm.\n Object.defineProperty(this, \"_nK\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The length in bytes of a nonce for the algorithm.\n Object.defineProperty(this, \"_nN\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The length in bytes of an authentication tag for the algorithm.\n Object.defineProperty(this, \"_nT\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The end-to-end encryption key information.\n Object.defineProperty(this, \"_ctx\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n if (params.key === undefined || params.baseNonce === undefined ||\n params.seq === undefined) {\n throw new Error(\"Required parameters are missing\");\n }\n this._aead = params.aead;\n this._nK = this._aead.keySize;\n this._nN = this._aead.nonceSize;\n this._nT = this._aead.tagSize;\n const key = this._aead.createEncryptionContext(params.key);\n this._ctx = {\n key: key,\n baseNonce: params.baseNonce,\n seq: params.seq,\n };\n }\n computeNonce(k) {\n const seqBytes = i2Osp(k.seq, k.baseNonce.byteLength);\n return xor(k.baseNonce, seqBytes).buffer;\n }\n incrementSeq(k) {\n // if (this.seq >= (1 << (8 * this.baseNonce.byteLength)) - 1) {\n if (k.seq > Number.MAX_SAFE_INTEGER) {\n throw new MessageLimitReachedError(\"Message limit reached\");\n }\n k.seq += 1;\n return;\n }\n}\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _Mutex_locked;\nexport class Mutex {\n constructor() {\n _Mutex_locked.set(this, Promise.resolve());\n }\n async lock() {\n let releaseLock;\n const nextLock = new Promise((resolve) => {\n releaseLock = resolve;\n });\n const previousLock = __classPrivateFieldGet(this, _Mutex_locked, \"f\");\n __classPrivateFieldSet(this, _Mutex_locked, nextLock, \"f\");\n await previousLock;\n return releaseLock;\n }\n}\n_Mutex_locked = new WeakMap();\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _RecipientContextImpl_mutex;\nimport { EMPTY, OpenError } from \"@hpke/common\";\nimport { EncryptionContextImpl } from \"./encryptionContext.js\";\nimport { Mutex } from \"./mutex.js\";\nexport class RecipientContextImpl extends EncryptionContextImpl {\n constructor() {\n super(...arguments);\n _RecipientContextImpl_mutex.set(this, void 0);\n }\n async open(data, aad = EMPTY.buffer) {\n __classPrivateFieldSet(this, _RecipientContextImpl_mutex, __classPrivateFieldGet(this, _RecipientContextImpl_mutex, \"f\") ?? new Mutex(), \"f\");\n const release = await __classPrivateFieldGet(this, _RecipientContextImpl_mutex, \"f\").lock();\n let pt;\n try {\n pt = await this._ctx.key.open(this.computeNonce(this._ctx), data, aad);\n }\n catch (e) {\n throw new OpenError(e);\n }\n finally {\n release();\n }\n this.incrementSeq(this._ctx);\n return pt;\n }\n}\n_RecipientContextImpl_mutex = new WeakMap();\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _SenderContextImpl_mutex;\nimport { EMPTY, SealError } from \"@hpke/common\";\nimport { EncryptionContextImpl } from \"./encryptionContext.js\";\nimport { Mutex } from \"./mutex.js\";\nexport class SenderContextImpl extends EncryptionContextImpl {\n constructor(api, kdf, params, enc) {\n super(api, kdf, params);\n Object.defineProperty(this, \"enc\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n _SenderContextImpl_mutex.set(this, void 0);\n this.enc = enc;\n }\n async seal(data, aad = EMPTY.buffer) {\n __classPrivateFieldSet(this, _SenderContextImpl_mutex, __classPrivateFieldGet(this, _SenderContextImpl_mutex, \"f\") ?? new Mutex(), \"f\");\n const release = await __classPrivateFieldGet(this, _SenderContextImpl_mutex, \"f\").lock();\n let ct;\n try {\n ct = await this._ctx.key.seal(this.computeNonce(this._ctx), data, aad);\n }\n catch (e) {\n throw new SealError(e);\n }\n finally {\n release();\n }\n this.incrementSeq(this._ctx);\n return ct;\n }\n}\n_SenderContextImpl_mutex = new WeakMap();\n","import { AeadId, EMPTY, i2Osp, INFO_LENGTH_LIMIT, INPUT_LENGTH_LIMIT, InvalidParamError, MINIMUM_PSK_LENGTH, Mode, NativeAlgorithm, } from \"@hpke/common\";\nimport { RecipientExporterContextImpl, SenderExporterContextImpl, } from \"./exporterContext.js\";\nimport { RecipientContextImpl } from \"./recipientContext.js\";\nimport { SenderContextImpl } from \"./senderContext.js\";\n// b\"base_nonce\"\n// deno-fmt-ignore\nconst LABEL_BASE_NONCE = new Uint8Array([\n 98, 97, 115, 101, 95, 110, 111, 110, 99, 101,\n]);\n// b\"exp\"\nconst LABEL_EXP = new Uint8Array([101, 120, 112]);\n// b\"info_hash\"\n// deno-fmt-ignore\nconst LABEL_INFO_HASH = new Uint8Array([\n 105, 110, 102, 111, 95, 104, 97, 115, 104,\n]);\n// b\"key\"\nconst LABEL_KEY = new Uint8Array([107, 101, 121]);\n// b\"psk_id_hash\"\n// deno-fmt-ignore\nconst LABEL_PSK_ID_HASH = new Uint8Array([\n 112, 115, 107, 95, 105, 100, 95, 104, 97, 115, 104,\n]);\n// b\"secret\"\nconst LABEL_SECRET = new Uint8Array([115, 101, 99, 114, 101, 116]);\n// b\"HPKE\"\n// deno-fmt-ignore\nconst SUITE_ID_HEADER_HPKE = new Uint8Array([\n 72, 80, 75, 69, 0, 0, 0, 0, 0, 0,\n]);\n/**\n * The Hybrid Public Key Encryption (HPKE) ciphersuite,\n * which is implemented using only\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n *\n * This is the super class of {@link CipherSuite} and the same as\n * {@link https://jsr.io/@hpke/core/doc/~/CipherSuite | @hpke/core#CipherSuite} as follows:\n * which supports only the ciphersuites that can be implemented on the native\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n * Therefore, the following cryptographic algorithms are not supported for now:\n * - DHKEM(X25519, HKDF-SHA256)\n * - DHKEM(X448, HKDF-SHA512)\n * - ChaCha20Poly1305\n *\n * In addtion, the HKDF functions contained in this class can only derive\n * keys of the same length as the `hashSize`.\n *\n * If you want to use the unsupported cryptographic algorithms\n * above or derive keys longer than the `hashSize`,\n * please use {@link CipherSuite}.\n *\n * This class provides following functions:\n *\n * - Creates encryption contexts both for senders and recipients.\n * - {@link createSenderContext}\n * - {@link createRecipientContext}\n * - Provides single-shot encryption API.\n * - {@link seal}\n * - {@link open}\n *\n * The calling of the constructor of this class is the starting\n * point for HPKE operations for both senders and recipients.\n *\n * @example Use only ciphersuites supported by Web Cryptography API.\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * CipherSuite,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n *\n * @example Use a ciphersuite which is currently not supported by Web Cryptography API.\n *\n * ```ts\n * import { Aes128Gcm, HkdfSha256, CipherSuite } from \"@hpke/core\";\n * // Use an extension module.\n * import { DhkemX25519HkdfSha256 } from \"@hpke/dhkem-x25519\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemX25519HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class CipherSuiteNative extends NativeAlgorithm {\n /**\n * @param params A set of parameters for building a cipher suite.\n *\n * If the error occurred, throws {@link InvalidParamError}.\n *\n * @throws {@link InvalidParamError}\n */\n constructor(params) {\n super();\n Object.defineProperty(this, \"_kem\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_kdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_aead\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_suiteId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // KEM\n if (typeof params.kem === \"number\") {\n throw new InvalidParamError(\"KemId cannot be used\");\n }\n this._kem = params.kem;\n // KDF\n if (typeof params.kdf === \"number\") {\n throw new InvalidParamError(\"KdfId cannot be used\");\n }\n this._kdf = params.kdf;\n // AEAD\n if (typeof params.aead === \"number\") {\n throw new InvalidParamError(\"AeadId cannot be used\");\n }\n this._aead = params.aead;\n this._suiteId = new Uint8Array(SUITE_ID_HEADER_HPKE);\n this._suiteId.set(i2Osp(this._kem.id, 2), 4);\n this._suiteId.set(i2Osp(this._kdf.id, 2), 6);\n this._suiteId.set(i2Osp(this._aead.id, 2), 8);\n this._kdf.init(this._suiteId);\n }\n /**\n * Gets the KEM context of the ciphersuite.\n */\n get kem() {\n return this._kem;\n }\n /**\n * Gets the KDF context of the ciphersuite.\n */\n get kdf() {\n return this._kdf;\n }\n /**\n * Gets the AEAD context of the ciphersuite.\n */\n get aead() {\n return this._aead;\n }\n /**\n * Creates an encryption context for a sender.\n *\n * If the error occurred, throws {@link DecapError} | {@link ValidationError}.\n *\n * @param params A set of parameters for the sender encryption context.\n * @returns A sender encryption context.\n * @throws {@link EncapError}, {@link ValidationError}\n */\n async createSenderContext(params) {\n this._validateInputLength(params);\n await this._setup();\n const dh = await this._kem.encap(params);\n let mode;\n if (params.psk !== undefined) {\n mode = params.senderKey !== undefined ? Mode.AuthPsk : Mode.Psk;\n }\n else {\n mode = params.senderKey !== undefined ? Mode.Auth : Mode.Base;\n }\n return await this._keyScheduleS(mode, dh.sharedSecret, dh.enc, params);\n }\n /**\n * Creates an encryption context for a recipient.\n *\n * If the error occurred, throws {@link DecapError}\n * | {@link DeserializeError} | {@link ValidationError}.\n *\n * @param params A set of parameters for the recipient encryption context.\n * @returns A recipient encryption context.\n * @throws {@link DecapError}, {@link DeserializeError}, {@link ValidationError}\n */\n async createRecipientContext(params) {\n this._validateInputLength(params);\n await this._setup();\n const sharedSecret = await this._kem.decap(params);\n let mode;\n if (params.psk !== undefined) {\n mode = params.senderPublicKey !== undefined ? Mode.AuthPsk : Mode.Psk;\n }\n else {\n mode = params.senderPublicKey !== undefined ? Mode.Auth : Mode.Base;\n }\n return await this._keyScheduleR(mode, sharedSecret, params);\n }\n /**\n * Encrypts a message to a recipient.\n *\n * If the error occurred, throws `EncapError` | `MessageLimitReachedError` | `SealError` | `ValidationError`.\n *\n * @param params A set of parameters for building a sender encryption context.\n * @param pt A plain text as bytes to be encrypted.\n * @param aad Additional authenticated data as bytes fed by an application.\n * @returns A cipher text and an encapsulated key as bytes.\n * @throws {@link EncapError}, {@link MessageLimitReachedError}, {@link SealError}, {@link ValidationError}\n */\n async seal(params, pt, aad = EMPTY.buffer) {\n const ctx = await this.createSenderContext(params);\n return {\n ct: await ctx.seal(pt, aad),\n enc: ctx.enc,\n };\n }\n /**\n * Decrypts a message from a sender.\n *\n * If the error occurred, throws `DecapError` | `DeserializeError` | `OpenError` | `ValidationError`.\n *\n * @param params A set of parameters for building a recipient encryption context.\n * @param ct An encrypted text as bytes to be decrypted.\n * @param aad Additional authenticated data as bytes fed by an application.\n * @returns A decrypted plain text as bytes.\n * @throws {@link DecapError}, {@link DeserializeError}, {@link OpenError}, {@link ValidationError}\n */\n async open(params, ct, aad = EMPTY.buffer) {\n const ctx = await this.createRecipientContext(params);\n return await ctx.open(ct, aad);\n }\n // private verifyPskInputs(mode: Mode, params: KeyScheduleParams) {\n // const gotPsk = (params.psk !== undefined);\n // const gotPskId = (params.psk !== undefined && params.psk.id.byteLength > 0);\n // if (gotPsk !== gotPskId) {\n // throw new Error('Inconsistent PSK inputs');\n // }\n // if (gotPsk && (mode === Mode.Base || mode === Mode.Auth)) {\n // throw new Error('PSK input provided when not needed');\n // }\n // if (!gotPsk && (mode === Mode.Psk || mode === Mode.AuthPsk)) {\n // throw new Error('Missing required PSK input');\n // }\n // return;\n // }\n async _keySchedule(mode, sharedSecret, params) {\n // Currently, there is no point in executing this function\n // because this hpke library does not allow users to explicitly specify the mode.\n //\n // this.verifyPskInputs(mode, params);\n const pskId = params.psk === undefined\n ? EMPTY\n : new Uint8Array(params.psk.id);\n const pskIdHash = await this._kdf.labeledExtract(EMPTY.buffer, LABEL_PSK_ID_HASH, pskId);\n const info = params.info === undefined\n ? EMPTY\n : new Uint8Array(params.info);\n const infoHash = await this._kdf.labeledExtract(EMPTY.buffer, LABEL_INFO_HASH, info);\n const keyScheduleContext = new Uint8Array(1 + pskIdHash.byteLength + infoHash.byteLength);\n keyScheduleContext.set(new Uint8Array([mode]), 0);\n keyScheduleContext.set(new Uint8Array(pskIdHash), 1);\n keyScheduleContext.set(new Uint8Array(infoHash), 1 + pskIdHash.byteLength);\n const psk = params.psk === undefined\n ? EMPTY\n : new Uint8Array(params.psk.key);\n const ikm = this._kdf.buildLabeledIkm(LABEL_SECRET, psk)\n .buffer;\n const exporterSecretInfo = this._kdf.buildLabeledInfo(LABEL_EXP, keyScheduleContext, this._kdf.hashSize).buffer;\n const exporterSecret = await this._kdf.extractAndExpand(sharedSecret, ikm, exporterSecretInfo, this._kdf.hashSize);\n if (this._aead.id === AeadId.ExportOnly) {\n return { aead: this._aead, exporterSecret: exporterSecret };\n }\n const keyInfo = this._kdf.buildLabeledInfo(LABEL_KEY, keyScheduleContext, this._aead.keySize).buffer;\n const key = await this._kdf.extractAndExpand(sharedSecret, ikm, keyInfo, this._aead.keySize);\n const baseNonceInfo = this._kdf.buildLabeledInfo(LABEL_BASE_NONCE, keyScheduleContext, this._aead.nonceSize).buffer;\n const baseNonce = await this._kdf.extractAndExpand(sharedSecret, ikm, baseNonceInfo, this._aead.nonceSize);\n return {\n aead: this._aead,\n exporterSecret: exporterSecret,\n key: key,\n baseNonce: new Uint8Array(baseNonce),\n seq: 0,\n };\n }\n async _keyScheduleS(mode, sharedSecret, enc, params) {\n const res = await this._keySchedule(mode, sharedSecret, params);\n if (res.key === undefined) {\n return new SenderExporterContextImpl(this._api, this._kdf, res.exporterSecret, enc);\n }\n return new SenderContextImpl(this._api, this._kdf, res, enc);\n }\n async _keyScheduleR(mode, sharedSecret, params) {\n const res = await this._keySchedule(mode, sharedSecret, params);\n if (res.key === undefined) {\n return new RecipientExporterContextImpl(this._api, this._kdf, res.exporterSecret);\n }\n return new RecipientContextImpl(this._api, this._kdf, res);\n }\n _validateInputLength(params) {\n if (params.info !== undefined &&\n params.info.byteLength > INFO_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long info\");\n }\n if (params.psk !== undefined) {\n if (params.psk.key.byteLength < MINIMUM_PSK_LENGTH) {\n throw new InvalidParamError(`PSK must have at least ${MINIMUM_PSK_LENGTH} bytes`);\n }\n if (params.psk.key.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long psk.key\");\n }\n if (params.psk.id.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long psk.id\");\n }\n }\n return;\n }\n}\n","import { Dhkem, Ec, HkdfSha256Native, HkdfSha384Native, HkdfSha512Native, KemId, } from \"@hpke/common\";\nexport class DhkemP256HkdfSha256Native extends Dhkem {\n constructor() {\n const kdf = new HkdfSha256Native();\n const prim = new Ec(KemId.DhkemP256HkdfSha256, kdf);\n super(KemId.DhkemP256HkdfSha256, prim, kdf);\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KemId.DhkemP256HkdfSha256\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 65\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 65\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n }\n}\nexport class DhkemP384HkdfSha384Native extends Dhkem {\n constructor() {\n const kdf = new HkdfSha384Native();\n const prim = new Ec(KemId.DhkemP384HkdfSha384, kdf);\n super(KemId.DhkemP384HkdfSha384, prim, kdf);\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KemId.DhkemP384HkdfSha384\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 48\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 97\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 97\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 48\n });\n }\n}\nexport class DhkemP521HkdfSha512Native extends Dhkem {\n constructor() {\n const kdf = new HkdfSha512Native();\n const prim = new Ec(KemId.DhkemP521HkdfSha512, kdf);\n super(KemId.DhkemP521HkdfSha512, prim, kdf);\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KemId.DhkemP521HkdfSha512\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 64\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 133\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 133\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 64\n });\n }\n}\n","import { HkdfSha256Native, HkdfSha384Native, HkdfSha512Native, } from \"@hpke/common\";\nimport { CipherSuiteNative } from \"./cipherSuiteNative.js\";\nimport { DhkemP256HkdfSha256Native, DhkemP384HkdfSha384Native, DhkemP521HkdfSha512Native, } from \"./kems/dhkemNative.js\";\n/**\n * The Hybrid Public Key Encryption (HPKE) ciphersuite,\n * which is implemented using only\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n *\n * This class is the same as\n * {@link https://jsr.io/@hpke/core/doc/~/CipherSuiteNative | @hpke/core#CipherSuiteNative} as follows:\n * which supports only the ciphersuites that can be implemented on the native\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n * Therefore, the following cryptographic algorithms are not supported for now:\n * - `DHKEM(X25519, HKDF-SHA256)`\n * - `DHKEM(X448, HKDF-SHA512)`\n * - `ChaCha20Poly1305`\n *\n * In addtion, the HKDF functions contained in this `CipherSuiteNative`\n * class can only derive keys of the same length as the `hashSize`.\n *\n * If you want to use the unsupported cryptographic algorithms\n * above or derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * This class provides following functions:\n *\n * - Creates encryption contexts both for senders and recipients.\n * - {@link createSenderContext}\n * - {@link createRecipientContext}\n * - Provides single-shot encryption API.\n * - {@link seal}\n * - {@link open}\n *\n * The calling of the constructor of this class is the starting\n * point for HPKE operations for both senders and recipients.\n *\n * @example Use only ciphersuites supported by Web Cryptography API.\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * CipherSuite,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n *\n * @example Use a ciphersuite which is currently not supported by Web Cryptography API.\n *\n * ```ts\n * import { Aes128Gcm, HkdfSha256, CipherSuite } from \"@hpke/core\";\n * import { DhkemX25519HkdfSha256 } from \"@hpke/dhkem-x25519\";\n * const suite = new CipherSuite({\n * kem: new DhkemX25519HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class CipherSuite extends CipherSuiteNative {\n}\n/**\n * The DHKEM(P-256, HKDF-SHA256) for HPKE KEM implementing {@link KemInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KemId.DhkemP256HkdfSha256`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class DhkemP256HkdfSha256 extends DhkemP256HkdfSha256Native {\n}\n/**\n * The DHKEM(P-384, HKDF-SHA384) for HPKE KEM implementing {@link KemInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KemId.DhkemP384HkdfSha384`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP384HkdfSha384,\n * HkdfSha384,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP384HkdfSha384(),\n * kdf: new HkdfSha384(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class DhkemP384HkdfSha384 extends DhkemP384HkdfSha384Native {\n}\n/**\n * The DHKEM(P-521, HKDF-SHA512) for HPKE KEM implementing {@link KemInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KemId.DhkemP521HkdfSha512`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes256Gcm,\n * CipherSuite,\n * DhkemP521HkdfSha512,\n * HkdfSha512,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP521HkdfSha512(),\n * kdf: new HkdfSha512(),\n * aead: new Aes256Gcm(),\n * });\n * ```\n */\nexport class DhkemP521HkdfSha512 extends DhkemP521HkdfSha512Native {\n}\n/**\n * The HKDF-SHA256 for HPKE KDF implementing {@link KdfInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KdfId.HkdfSha256`.\n *\n * The KDF class can only derive keys of the same length as the `hashSize`.\n * If you want to derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class HkdfSha256 extends HkdfSha256Native {\n}\n/**\n * The HKDF-SHA384 for HPKE KDF implementing {@link KdfInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KdfId.HkdfSha384`.\n *\n * The KDF class can only derive keys of the same length as the `hashSize`.\n * If you want to derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP384HkdfSha384,\n * HkdfSha384,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP384HkdfSha384(),\n * kdf: new HkdfSha384(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class HkdfSha384 extends HkdfSha384Native {\n}\n/**\n * The HKDF-SHA512 for HPKE KDF implementing {@link KdfInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KdfId.HkdfSha512`.\n *\n * The KDF class can only derive keys of the same length as the `hashSize`.\n * If you want to derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes256Gcm,\n * CipherSuite,\n * DhkemP521HkdfSha512,\n * HkdfSha512,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP521HkdfSha512(),\n * kdf: new HkdfSha512(),\n * aead: new Aes256Gcm(),\n * });\n * ```\n */\nexport class HkdfSha512 extends HkdfSha512Native {\n}\n","import { base64UrlToBytes, DeriveKeyPairError, DeserializeError, EMPTY, KEM_USAGES, LABEL_DKP_PRK, LABEL_SK, NativeAlgorithm, NotSupportedError, SerializeError, } from \"@hpke/common\";\nconst ALG_NAME = \"X25519\";\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_X25519 = new Uint8Array([\n 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06,\n 0x03, 0x2b, 0x65, 0x6e, 0x04, 0x22, 0x04, 0x20,\n]);\nexport class X25519 extends NativeAlgorithm {\n constructor(hkdf) {\n super();\n Object.defineProperty(this, \"_hkdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_alg\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nPk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nSk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nDh\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_pkcs8AlgId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._alg = { name: ALG_NAME };\n this._hkdf = hkdf;\n this._nPk = 32;\n this._nSk = 32;\n this._nDh = 32;\n this._pkcs8AlgId = PKCS8_ALG_ID_X25519;\n }\n async serializePublicKey(key) {\n await this._setup();\n try {\n return await this._api.exportKey(\"raw\", key);\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePublicKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, true);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async serializePrivateKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n if (!(\"d\" in jwk)) {\n throw new Error(\"Not private key\");\n }\n return base64UrlToBytes(jwk[\"d\"]).buffer;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePrivateKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, false);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async importKey(format, key, isPublic) {\n await this._setup();\n try {\n if (format === \"raw\") {\n return await this._importRawKey(key, isPublic);\n }\n // jwk\n if (key instanceof ArrayBuffer) {\n throw new Error(\"Invalid jwk key format\");\n }\n return await this._importJWK(key, isPublic);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async generateKeyPair() {\n await this._setup();\n try {\n return await this._api.generateKey(ALG_NAME, true, KEM_USAGES);\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n }\n async deriveKeyPair(ikm) {\n await this._setup();\n try {\n const dkpPrk = await this._hkdf.labeledExtract(EMPTY.buffer, LABEL_DKP_PRK, new Uint8Array(ikm));\n const rawSk = await this._hkdf.labeledExpand(dkpPrk, LABEL_SK, EMPTY, this._nSk);\n const rawSkBytes = new Uint8Array(rawSk);\n const sk = await this._deserializePkcs8Key(rawSkBytes);\n rawSkBytes.fill(0);\n return {\n privateKey: sk,\n publicKey: await this.derivePublicKey(sk),\n };\n }\n catch (e) {\n throw new DeriveKeyPairError(e);\n }\n }\n async derivePublicKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n delete jwk[\"d\"];\n delete jwk[\"key_ops\"];\n return await this._api.importKey(\"jwk\", jwk, this._alg, true, []);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async dh(sk, pk) {\n await this._setup();\n try {\n const bits = await this._api.deriveBits({\n name: ALG_NAME,\n public: pk,\n }, sk, this._nDh * 8);\n return bits;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async _importRawKey(key, isPublic) {\n if (isPublic && key.byteLength !== this._nPk) {\n throw new Error(\"Invalid public key for the ciphersuite\");\n }\n if (!isPublic && key.byteLength !== this._nSk) {\n throw new Error(\"Invalid private key for the ciphersuite\");\n }\n if (isPublic) {\n return await this._api.importKey(\"raw\", key, this._alg, true, []);\n }\n return await this._deserializePkcs8Key(new Uint8Array(key));\n }\n async _importJWK(key, isPublic) {\n if (typeof key.kty === \"undefined\" || key.kty !== \"OKP\") {\n throw new Error(`Invalid kty: ${key.crv}`);\n }\n if (typeof key.crv === \"undefined\" || key.crv !== ALG_NAME) {\n throw new Error(`Invalid crv: ${key.crv}`);\n }\n if (isPublic) {\n if (typeof key.d !== \"undefined\") {\n throw new Error(\"Invalid key: `d` should not be set\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, []);\n }\n if (typeof key.d === \"undefined\") {\n throw new Error(\"Invalid key: `d` not found\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, KEM_USAGES);\n }\n async _deserializePkcs8Key(k) {\n const pkcs8Key = new Uint8Array(this._pkcs8AlgId.length + k.length);\n pkcs8Key.set(this._pkcs8AlgId, 0);\n pkcs8Key.set(k, this._pkcs8AlgId.length);\n return await this._api.importKey(\"pkcs8\", pkcs8Key, this._alg, true, KEM_USAGES);\n }\n}\n","import { base64UrlToBytes, DeriveKeyPairError, DeserializeError, EMPTY, KEM_USAGES, LABEL_DKP_PRK, LABEL_SK, NativeAlgorithm, NotSupportedError, SerializeError, } from \"@hpke/common\";\nconst ALG_NAME = \"X448\";\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_X448 = new Uint8Array([\n 0x30, 0x46, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06,\n 0x03, 0x2b, 0x65, 0x6f, 0x04, 0x3a, 0x04, 0x38,\n]);\nexport class X448 extends NativeAlgorithm {\n constructor(hkdf) {\n super();\n Object.defineProperty(this, \"_hkdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_alg\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nPk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nSk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nDh\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_pkcs8AlgId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._alg = { name: ALG_NAME };\n this._hkdf = hkdf;\n this._nPk = 56;\n this._nSk = 56;\n this._nDh = 56;\n this._pkcs8AlgId = PKCS8_ALG_ID_X448;\n }\n async serializePublicKey(key) {\n await this._setup();\n try {\n return await this._api.exportKey(\"raw\", key);\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePublicKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, true);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async serializePrivateKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n if (!(\"d\" in jwk)) {\n throw new Error(\"Not private key\");\n }\n return base64UrlToBytes(jwk[\"d\"]).buffer;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePrivateKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, false);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async importKey(format, key, isPublic) {\n await this._setup();\n try {\n if (format === \"raw\") {\n return await this._importRawKey(key, isPublic);\n }\n // jwk\n if (key instanceof ArrayBuffer) {\n throw new Error(\"Invalid jwk key format\");\n }\n return await this._importJWK(key, isPublic);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async generateKeyPair() {\n await this._setup();\n try {\n return await this._api.generateKey(ALG_NAME, true, KEM_USAGES);\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n }\n async deriveKeyPair(ikm) {\n await this._setup();\n try {\n const dkpPrk = await this._hkdf.labeledExtract(EMPTY.buffer, LABEL_DKP_PRK, new Uint8Array(ikm));\n const rawSk = await this._hkdf.labeledExpand(dkpPrk, LABEL_SK, EMPTY, this._nSk);\n const rawSkBytes = new Uint8Array(rawSk);\n const sk = await this._deserializePkcs8Key(rawSkBytes);\n rawSkBytes.fill(0);\n return {\n privateKey: sk,\n publicKey: await this.derivePublicKey(sk),\n };\n }\n catch (e) {\n throw new DeriveKeyPairError(e);\n }\n }\n async derivePublicKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n delete jwk[\"d\"];\n delete jwk[\"key_ops\"];\n return await this._api.importKey(\"jwk\", jwk, this._alg, true, []);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async dh(sk, pk) {\n await this._setup();\n try {\n const bits = await this._api.deriveBits({\n name: ALG_NAME,\n public: pk,\n }, sk, this._nDh * 8);\n return bits;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async _importRawKey(key, isPublic) {\n if (isPublic && key.byteLength !== this._nPk) {\n throw new Error(\"Invalid public key for the ciphersuite\");\n }\n if (!isPublic && key.byteLength !== this._nSk) {\n throw new Error(\"Invalid private key for the ciphersuite\");\n }\n if (isPublic) {\n return await this._api.importKey(\"raw\", key, this._alg, true, []);\n }\n return await this._deserializePkcs8Key(new Uint8Array(key));\n }\n async _importJWK(key, isPublic) {\n if (typeof key.kty === \"undefined\" || key.kty !== \"OKP\") {\n throw new Error(`Invalid kty: ${key.crv}`);\n }\n if (typeof key.crv === \"undefined\" || key.crv !== ALG_NAME) {\n throw new Error(`Invalid crv: ${key.crv}`);\n }\n if (isPublic) {\n if (typeof key.d !== \"undefined\") {\n throw new Error(\"Invalid key: `d` should not be set\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, []);\n }\n if (typeof key.d === \"undefined\") {\n throw new Error(\"Invalid key: `d` not found\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, KEM_USAGES);\n }\n async _deserializePkcs8Key(k) {\n const pkcs8Key = new Uint8Array(this._pkcs8AlgId.length + k.length);\n pkcs8Key.set(this._pkcs8AlgId, 0);\n pkcs8Key.set(k, this._pkcs8AlgId.length);\n return await this._api.importKey(\"pkcs8\", pkcs8Key, this._alg, true, KEM_USAGES);\n }\n}\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bech32m = exports.bech32 = void 0;\nconst ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\nconst ALPHABET_MAP = {};\nfor (let z = 0; z < ALPHABET.length; z++) {\n const x = ALPHABET.charAt(z);\n ALPHABET_MAP[x] = z;\n}\nfunction polymodStep(pre) {\n const b = pre >> 25;\n return (((pre & 0x1ffffff) << 5) ^\n (-((b >> 0) & 1) & 0x3b6a57b2) ^\n (-((b >> 1) & 1) & 0x26508e6d) ^\n (-((b >> 2) & 1) & 0x1ea119fa) ^\n (-((b >> 3) & 1) & 0x3d4233dd) ^\n (-((b >> 4) & 1) & 0x2a1462b3));\n}\nfunction prefixChk(prefix) {\n let chk = 1;\n for (let i = 0; i < prefix.length; ++i) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n return 'Invalid prefix (' + prefix + ')';\n chk = polymodStep(chk) ^ (c >> 5);\n }\n chk = polymodStep(chk);\n for (let i = 0; i < prefix.length; ++i) {\n const v = prefix.charCodeAt(i);\n chk = polymodStep(chk) ^ (v & 0x1f);\n }\n return chk;\n}\nfunction convert(data, inBits, outBits, pad) {\n let value = 0;\n let bits = 0;\n const maxV = (1 << outBits) - 1;\n const result = [];\n for (let i = 0; i < data.length; ++i) {\n value = (value << inBits) | data[i];\n bits += inBits;\n while (bits >= outBits) {\n bits -= outBits;\n result.push((value >> bits) & maxV);\n }\n }\n if (pad) {\n if (bits > 0) {\n result.push((value << (outBits - bits)) & maxV);\n }\n }\n else {\n if (bits >= inBits)\n return 'Excess padding';\n if ((value << (outBits - bits)) & maxV)\n return 'Non-zero padding';\n }\n return result;\n}\nfunction toWords(bytes) {\n return convert(bytes, 8, 5, true);\n}\nfunction fromWordsUnsafe(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n}\nfunction fromWords(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n throw new Error(res);\n}\nfunction getLibraryFromEncoding(encoding) {\n let ENCODING_CONST;\n if (encoding === 'bech32') {\n ENCODING_CONST = 1;\n }\n else {\n ENCODING_CONST = 0x2bc830a3;\n }\n function encode(prefix, words, LIMIT) {\n LIMIT = LIMIT || 90;\n if (prefix.length + 7 + words.length > LIMIT)\n throw new TypeError('Exceeds length limit');\n prefix = prefix.toLowerCase();\n // determine chk mod\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n throw new Error(chk);\n let result = prefix + '1';\n for (let i = 0; i < words.length; ++i) {\n const x = words[i];\n if (x >> 5 !== 0)\n throw new Error('Non 5-bit word');\n chk = polymodStep(chk) ^ x;\n result += ALPHABET.charAt(x);\n }\n for (let i = 0; i < 6; ++i) {\n chk = polymodStep(chk);\n }\n chk ^= ENCODING_CONST;\n for (let i = 0; i < 6; ++i) {\n const v = (chk >> ((5 - i) * 5)) & 0x1f;\n result += ALPHABET.charAt(v);\n }\n return result;\n }\n function __decode(str, LIMIT) {\n LIMIT = LIMIT || 90;\n if (str.length < 8)\n return str + ' too short';\n if (str.length > LIMIT)\n return 'Exceeds length limit';\n // don't allow mixed case\n const lowered = str.toLowerCase();\n const uppered = str.toUpperCase();\n if (str !== lowered && str !== uppered)\n return 'Mixed-case string ' + str;\n str = lowered;\n const split = str.lastIndexOf('1');\n if (split === -1)\n return 'No separator character for ' + str;\n if (split === 0)\n return 'Missing prefix for ' + str;\n const prefix = str.slice(0, split);\n const wordChars = str.slice(split + 1);\n if (wordChars.length < 6)\n return 'Data too short';\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n return chk;\n const words = [];\n for (let i = 0; i < wordChars.length; ++i) {\n const c = wordChars.charAt(i);\n const v = ALPHABET_MAP[c];\n if (v === undefined)\n return 'Unknown character ' + c;\n chk = polymodStep(chk) ^ v;\n // not in the checksum?\n if (i + 6 >= wordChars.length)\n continue;\n words.push(v);\n }\n if (chk !== ENCODING_CONST)\n return 'Invalid checksum for ' + str;\n return { prefix, words };\n }\n function decodeUnsafe(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n }\n function decode(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n throw new Error(res);\n }\n return {\n decodeUnsafe,\n decode,\n encode,\n toWords,\n fromWordsUnsafe,\n fromWords,\n };\n}\nexports.bech32 = getLibraryFromEncoding('bech32');\nexports.bech32m = getLibraryFromEncoding('bech32m');\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nexport function anumber(n, title = '') {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new Error(`${prefix}expected integer >= 0, got ${n}`);\n }\n}\n/** Asserts something is Uint8Array. */\nexport function abytes(value, length, title = '') {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n/** Asserts something is hash */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out, instance) {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async () => { };\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data, errorTitle = '') {\n if (typeof data === 'string')\n return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n/** Merges default options and passed options. */\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher(hashCons, info = {}) {\n const hashC = (msg, opts) => hashCons(opts).update(msg).digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32) {\n const cr = typeof globalThis === 'object' ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix) => ({\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n//# sourceMappingURL=utils.js.map","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView } from \"./utils.js\";\n/** Choice: a ? b : c */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD {\n blockLen;\n outputLen;\n padOffset;\n isLE;\n // For partial updates less than block size\n buffer;\n view;\n finished = false;\n length = 0;\n pos = 0;\n destroyed = false;\n constructor(blockLen, outputLen, padOffset, isLE) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen must be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to ||= new this.constructor();\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://www.rfc-editor.org/rfc/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\nimport { clean, createHasher, oidNist, rotr } from \"./utils.js\";\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n/** Internal 32-byte base SHA2 hash class. */\nclass SHA2_32B extends HashMD {\n constructor(outputLen) {\n super(64, outputLen, 8, false);\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n clean(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n/** Internal SHA2-256 hash class. */\nexport class _SHA256 extends SHA2_32B {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n A = SHA256_IV[0] | 0;\n B = SHA256_IV[1] | 0;\n C = SHA256_IV[2] | 0;\n D = SHA256_IV[3] | 0;\n E = SHA256_IV[4] | 0;\n F = SHA256_IV[5] | 0;\n G = SHA256_IV[6] | 0;\n H = SHA256_IV[7] | 0;\n constructor() {\n super(32);\n }\n}\n/** Internal SHA2-224 hash class. */\nexport class _SHA224 extends SHA2_32B {\n A = SHA224_IV[0] | 0;\n B = SHA224_IV[1] | 0;\n C = SHA224_IV[2] | 0;\n D = SHA224_IV[3] | 0;\n E = SHA224_IV[4] | 0;\n F = SHA224_IV[5] | 0;\n G = SHA224_IV[6] | 0;\n H = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n/** Internal 64-byte base SHA2 hash class. */\nclass SHA2_64B extends HashMD {\n constructor(outputLen) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n/** Internal SHA2-512 hash class. */\nexport class _SHA512 extends SHA2_64B {\n Ah = SHA512_IV[0] | 0;\n Al = SHA512_IV[1] | 0;\n Bh = SHA512_IV[2] | 0;\n Bl = SHA512_IV[3] | 0;\n Ch = SHA512_IV[4] | 0;\n Cl = SHA512_IV[5] | 0;\n Dh = SHA512_IV[6] | 0;\n Dl = SHA512_IV[7] | 0;\n Eh = SHA512_IV[8] | 0;\n El = SHA512_IV[9] | 0;\n Fh = SHA512_IV[10] | 0;\n Fl = SHA512_IV[11] | 0;\n Gh = SHA512_IV[12] | 0;\n Gl = SHA512_IV[13] | 0;\n Hh = SHA512_IV[14] | 0;\n Hl = SHA512_IV[15] | 0;\n constructor() {\n super(64);\n }\n}\n/** Internal SHA2-384 hash class. */\nexport class _SHA384 extends SHA2_64B {\n Ah = SHA384_IV[0] | 0;\n Al = SHA384_IV[1] | 0;\n Bh = SHA384_IV[2] | 0;\n Bl = SHA384_IV[3] | 0;\n Ch = SHA384_IV[4] | 0;\n Cl = SHA384_IV[5] | 0;\n Dh = SHA384_IV[6] | 0;\n Dl = SHA384_IV[7] | 0;\n Eh = SHA384_IV[8] | 0;\n El = SHA384_IV[9] | 0;\n Fh = SHA384_IV[10] | 0;\n Fl = SHA384_IV[11] | 0;\n Gh = SHA384_IV[12] | 0;\n Gl = SHA384_IV[13] | 0;\n Hh = SHA384_IV[14] | 0;\n Hl = SHA384_IV[15] | 0;\n constructor() {\n super(48);\n }\n}\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n/** Internal SHA2-512/224 hash class. */\nexport class _SHA512_224 extends SHA2_64B {\n Ah = T224_IV[0] | 0;\n Al = T224_IV[1] | 0;\n Bh = T224_IV[2] | 0;\n Bl = T224_IV[3] | 0;\n Ch = T224_IV[4] | 0;\n Cl = T224_IV[5] | 0;\n Dh = T224_IV[6] | 0;\n Dl = T224_IV[7] | 0;\n Eh = T224_IV[8] | 0;\n El = T224_IV[9] | 0;\n Fh = T224_IV[10] | 0;\n Fl = T224_IV[11] | 0;\n Gh = T224_IV[12] | 0;\n Gl = T224_IV[13] | 0;\n Hh = T224_IV[14] | 0;\n Hl = T224_IV[15] | 0;\n constructor() {\n super(28);\n }\n}\n/** Internal SHA2-512/256 hash class. */\nexport class _SHA512_256 extends SHA2_64B {\n Ah = T256_IV[0] | 0;\n Al = T256_IV[1] | 0;\n Bh = T256_IV[2] | 0;\n Bl = T256_IV[3] | 0;\n Ch = T256_IV[4] | 0;\n Cl = T256_IV[5] | 0;\n Dh = T256_IV[6] | 0;\n Dl = T256_IV[7] | 0;\n Eh = T256_IV[8] | 0;\n El = T256_IV[9] | 0;\n Fh = T256_IV[10] | 0;\n Fl = T256_IV[11] | 0;\n Gh = T256_IV[12] | 0;\n Gl = T256_IV[13] | 0;\n Hh = T256_IV[14] | 0;\n Hl = T256_IV[15] | 0;\n constructor() {\n super(32);\n }\n}\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n */\nexport const sha256 = /* @__PURE__ */ createHasher(() => new _SHA256(), \n/* @__PURE__ */ oidNist(0x01));\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224 = /* @__PURE__ */ createHasher(() => new _SHA224(), \n/* @__PURE__ */ oidNist(0x04));\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512 = /* @__PURE__ */ createHasher(() => new _SHA512(), \n/* @__PURE__ */ oidNist(0x03));\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384 = /* @__PURE__ */ createHasher(() => new _SHA384(), \n/* @__PURE__ */ oidNist(0x02));\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256 = /* @__PURE__ */ createHasher(() => new _SHA512_256(), \n/* @__PURE__ */ oidNist(0x06));\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224 = /* @__PURE__ */ createHasher(() => new _SHA512_224(), \n/* @__PURE__ */ oidNist(0x05));\n//# sourceMappingURL=sha2.js.map","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 5KB JS implementation of ed25519 EdDSA signatures.\n * Compliant with RFC8032, FIPS 186-5 & ZIP215.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const secretKey = ed.utils.randomSecretKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(secretKey); // Sync methods are also present\n const signature = await ed.signAsync(message, secretKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. ed25519 is twisted edwards curve. Equation is −x² + y² = -a + dx²y².\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // group order, amount of curve points\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n */\nconst ed25519_CURVE = {\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n};\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d, h } = ed25519_CURVE;\nconst L = 32; // field / group byte length\nconst L2 = 64;\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\nconst captureTrace = (...args) => {\n if ('captureStackTrace' in Error && typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(...args);\n }\n};\nconst err = (message = '') => {\n const e = new Error(message);\n captureTrace(e, err);\n throw e;\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\nconst isBytes = (a) => a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n/** Asserts something is Uint8Array. */\nconst abytes = (value, length, title = '') => {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n err(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n};\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\nconst u8fr = (buf) => Uint8Array.from(buf);\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\nconst cr = () => globalThis?.crypto; // WebCrypto is available in all modern environments\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined, consider polyfill');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0)); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Will throw when not available. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\nconst assertRange = (n, min, max, msg = 'bad number: out of range') => (isBig(n) && min <= n && n < max ? n : err(msg));\n/** modular division */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\nconst modN = (a) => M(a, N);\n/** Modular inversion using euclidean GCD (non-CT). No negative exponent for now. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst callHash = (name) => {\n // @ts-ignore\n const fn = hashes[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\nconst hash = (msg) => callHash('sha512')(msg);\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\nconst B256 = 2n ** 256n;\n/** Point in XYZT extended coordinates. */\nclass Point {\n static BASE;\n static ZERO;\n X;\n Y;\n Z;\n T;\n constructor(X, Y, Z, T) {\n const max = B256;\n this.X = assertRange(X, 0n, max);\n this.Y = assertRange(Y, 0n, max);\n this.Z = assertRange(Z, 1n, max);\n this.T = assertRange(T, 0n, max);\n Object.freeze(this);\n }\n static CURVE() {\n return ed25519_CURVE;\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, M(p.x * p.y));\n }\n /** RFC8032 5.1.3: Uint8Array to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumLE(normed);\n // zip215=true: 0 <= y < 2^256\n // zip215=false, RFC8032: 0 <= y < 2^255-19\n const max = zip215 ? B256 : P;\n assertRange(y, 0n, max);\n const y2 = M(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = M(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, M(x * y)); // Z=1, T=xy\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(hexToBytes(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n if (p.is0())\n return err('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = M(X * X); // X²\n const Y2 = M(Y * Y); // Y²\n const Z2 = M(Z * Z); // Z²\n const Z4 = M(Z2 * Z2); // Z⁴\n const aX2 = M(X2 * a); // aX²\n const left = M(Z2 * M(aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + M(d * M(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n return err('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = M(X * Y);\n const ZT = M(Z * T);\n if (XY !== ZT)\n return err('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = apoint(other); // checks class equality\n const X1Z2 = M(X1 * Z2);\n const X2Z1 = M(X2 * Z1);\n const Y1Z2 = M(Y1 * Z2);\n const Y2Z1 = M(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.X), this.Y, this.Z, M(-this.T));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(apoint(other).negate());\n }\n /**\n * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n scalar by which point is multiplied\n * @param safe safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n if (!safe && (n === 0n || this.is0()))\n return I;\n assertRange(n, 1n, N);\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n multiplyUnsafe(scalar) {\n return this.multiply(scalar, false);\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { X, Y, Z } = this;\n // fast-paths for ZERO point OR Z=1\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(Z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (M(Z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n const x = M(X * iz);\n const y = M(Y * iz);\n return { x, y };\n }\n toBytes() {\n const { x, y } = this.assertValidity().toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n }\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // Multiply by big number N. We can't `mul(N)` because of checks. Instead, we `mul(N/2)*2+1`\n let p = this.multiply(N / 2n, false).double();\n if (N % 2n)\n p = p.add(this);\n return p.is0();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(assertRange(num, 0n, B256), L2)).reverse();\nconst bytesToNumLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n let r = x;\n while (power-- > 0n) {\n r *= r;\n r %= P;\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = (x * x) % P; // x^2, bits 1\n const b2 = (x2 * x) % P; // x^3, bits 11\n const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // √-1\n// for sqrt comp\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = M(v * v * v); // v³\n const v7 = M(v3 * v3 * v); // v⁷\n const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = M(u * v3 * pow); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = M(v * x * x); // vx²\n const root1 = x; // First root candidate\n const root2 = M(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// N == L, just weird naming\nconst modL_LE = (hash) => modN(bytesToNumLE(hash)); // modulo L; but little-endian\n/** hashes.sha512 should conform to the interface. */\n// TODO: rename\nconst sha512a = (...m) => hashes.sha512Async(concatBytes(...m)); // Async SHA512\nconst sha512s = (...m) => callHash('sha512')(concatBytes(...m));\n// RFC8032 5.1.5\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const head = hashed.slice(0, L);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = hashed.slice(L, L2); // secret key \"prefix\"\n const scalar = modL_LE(head); // modular division over curve order\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (secretKey) => sha512a(abytes(secretKey, L)).then(hash2extK);\nconst getExtendedPublicKey = (secretKey) => hash2extK(sha512s(abytes(secretKey, L)));\n/** Creates 32-byte ed25519 public key from 32-byte secret key. Async. */\nconst getPublicKeyAsync = (secretKey) => getExtendedPublicKeyAsync(secretKey).then((p) => p.pointBytes);\n/** Creates 32-byte ed25519 public key from 32-byte secret key. To use, set `hashes.sha512` first. */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\n// Code, shared between sync & async sign\nconst _sign = (e, rBytes, msg) => {\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), L2); // 64-byte sig: 32b R.x + 32b LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message using secret key. Async.\n * Follows RFC8032 5.1.6.\n */\nconst signAsync = async (message, secretKey) => {\n const m = abytes(message);\n const e = await getExtendedPublicKeyAsync(secretKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message using secret key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n */\nconst sign = (message, secretKey) => {\n const m = abytes(message);\n const e = getExtendedPublicKey(secretKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst defaultVerifyOpts = { zip215: true };\nconst _verify = (sig, msg, pub, opts = defaultVerifyOpts) => {\n sig = abytes(sig, L2); // Signature hex str/Bytes, must be 64 bytes\n msg = abytes(msg); // Message hex str/Bytes\n pub = abytes(pub, L);\n const { zip215 } = opts; // switch between zip215 and rfc8032 verif\n let A;\n let R;\n let s;\n let SB;\n let hashable = Uint8Array.of();\n try {\n A = Point.fromBytes(pub, zip215); // public key A decoded\n R = Point.fromBytes(sig.slice(0, L), zip215); // 0 <= R < 2^256: ZIP215 R can be >= P\n s = bytesToNumLE(sig.slice(L, L2)); // Decode second half as an integer S\n SB = G.multiply(s, false); // in the range 0 <= s < L\n hashable = concatBytes(R.toBytes(), A.toBytes(), msg); // dom2(F, C) || R || A || PH(M)\n }\n catch (error) { }\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n if (SB == null)\n return false; // false if try-catch catched an error\n if (!zip215 && A.isSmallOrder())\n return false; // false for SBS: Strongly Binding Signature\n const k = modL_LE(hashed); // decode in little-endian, modulo L\n const RkA = R.add(A.multiply(k, false)); // [8]R + [8][k]A'\n return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n };\n return { hashable, finish };\n};\n/** Verifies signature on message and public key. Async. Follows RFC8032 5.1.7. */\nconst verifyAsync = async (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishA(_verify(signature, message, publicKey, opts));\n/** Verifies signature on message and public key. To use, set `hashes.sha512` first. Follows RFC8032 5.1.7. */\nconst verify = (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishS(_verify(signature, message, publicKey, opts));\n/** Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves. */\nconst etc = {\n bytesToHex: bytesToHex,\n hexToBytes: hexToBytes,\n concatBytes: concatBytes,\n mod: M,\n invert: invert,\n randomBytes: randomBytes,\n};\nconst hashes = {\n sha512Async: async (message) => {\n const s = subtle();\n const m = concatBytes(message);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512: undefined,\n};\n// FIPS 186 B.4.1 compliant key generation produces private keys\n// with modulo bias being neglible. takes >N+16 bytes, returns (hash mod n-1)+1\nconst randomSecretKey = (seed = randomBytes(L)) => seed;\nconst keygen = (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = getPublicKey(secretKey);\n return { secretKey, publicKey };\n};\nconst keygenAsync = async (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = await getPublicKeyAsync(secretKey);\n return { secretKey, publicKey };\n};\n/** ed25519-specific key utilities. */\nconst utils = {\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomSecretKey: randomSecretKey,\n};\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8, NOT 32 - see wNAF loop\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // precomputes for base point G\n// const-time negate\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n // We use negative indexes to reduce size of precomputed table by 2x.\n // Instead of needing precomputes 0..256, we only calculate them for 0..128.\n // If an index > 128 is found, we do (256-index) - where 256 is next window.\n // Naive: index +127 => 127, +224 => 224\n // Optimized: index +127 => 127, +224 => 256-32\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n }\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n if (n !== 0n)\n err('invalid wnaf');\n return { p, f }; // return both real and fake points for JIT\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { etc, getPublicKey, getPublicKeyAsync, hash, hashes, keygen, keygenAsync, Point, sign, signAsync, utils, verify, verifyAsync, };\n"],"names":["HpkeError","Error","constructor","e","message","super","this","name","EncapError","DecapError","ExportError","SealError","OpenError","MessageLimitReachedError","DeriveKeyPairError","dntGlobalThis","baseObj","globalThis","extObj","Proxy","get","_target","prop","_receiver","set","value","deleteProperty","success","ownKeys","baseKeys","Reflect","extKeys","extKeysSet","Set","filter","k","has","defineProperty","desc","getOwnPropertyDescriptor","NativeAlgorithm","Object","enumerable","configurable","writable","undefined","_setup","_api","async","crypto","subtle","webcrypto","loadSubtleCrypto","INPUT_LENGTH_LIMIT","Uint8Array","x","privateKey","publicKey","n","w","ret","i","a","b","length","LABEL_EAE_PRK","LABEL_SHARED_SECRET","Dhkem","id","prim","kdf","_prim","_kdf","suiteId","init","serializePublicKey","key","deserializePublicKey","serializePrivateKey","deserializePrivateKey","importKey","format","isPublic","generateKeyPair","deriveKeyPair","ikm","byteLength","encap","params","ke","ekm","enc","pkrm","recipientPublicKey","dh","kemContext","senderKey","sks","pks","derivePublicKey","pksm","c","concat3","sharedSecret","_generateSharedSecret","decap","pke","skr","recipientKey","pkr","senderPublicKey","labeledIkm","buildLabeledIkm","labeledInfo","buildLabeledInfo","secretSize","extractAndExpand","buffer","KEM_USAGES","Bignum","size","_num","val","reset","fill","src","isZero","lessThan","v","LABEL_CANDIDATE","ORDER_P_256","ORDER_P_384","ORDER_P_521","PKCS8_ALG_ID_P_256","PKCS8_ALG_ID_P_384","PKCS8_ALG_ID_P_521","Ec","kem","hkdf","_hkdf","_alg","namedCurve","_nPk","_nSk","_nDh","_order","_bitmask","_pkcs8AlgId","exportKey","_importRawKey","jwk","base64","replace","byteString","atob","charCodeAt","base64UrlToBytes","ArrayBuffer","_importJWK","generateKey","dkpPrk","labeledExtract","bn","counter","bytes","labeledExpand","sk","_deserializePkcs8Key","pk","deriveBits","public","crv","d","pkcs8Key","HPKE_VERSION","HkdfNative","hash","_suiteId","label","_checkInit","info","len","extract","salt","hashSize","algHash","sign","expand","prk","okm","p","prev","mid","tail","tmp","cur","slice","baseKey","HkdfSha256Native","arguments","AEAD_USAGES","BigInt","AesGcmContext","_rawKey","seal","iv","data","aad","_setupKey","alg","additionalData","encrypt","_key","open","decrypt","_importKey","Aes128Gcm","createEncryptionContext","Aes256Gcm","emitNotSupported","Promise","_resolve","reject","LABEL_SEC","ExporterContextImpl","api","exporterSecret","_data","_aad","exporterContext","RecipientExporterContextImpl","SenderExporterContextImpl","EncryptionContextImpl","baseNonce","seq","_aead","aead","_nK","keySize","_nN","nonceSize","_nT","tagSize","_ctx","computeNonce","seqBytes","buf","xor","incrementSeq","Number","MAX_SAFE_INTEGER","_Mutex_locked","Mutex","resolve","lock","releaseLock","nextLock","previousLock","receiver","state","kind","f","TypeError","call","__classPrivateFieldGet","__classPrivateFieldSet","WeakMap","_RecipientContextImpl_mutex","RecipientContextImpl","release","pt","_SenderContextImpl_mutex","SenderContextImpl","ct","LABEL_BASE_NONCE","LABEL_EXP","LABEL_INFO_HASH","LABEL_KEY","LABEL_PSK_ID_HASH","LABEL_SECRET","SUITE_ID_HEADER_HPKE","CipherSuiteNative","_kem","createSenderContext","_validateInputLength","mode","psk","_keyScheduleS","createRecipientContext","_keyScheduleR","ctx","_keySchedule","pskId","pskIdHash","infoHash","keyScheduleContext","exporterSecretInfo","keyInfo","baseNonceInfo","res","DhkemP256HkdfSha256Native","CipherSuite","DhkemP256HkdfSha256","HkdfSha256","exports","ALPHABET","ALPHABET_MAP","z","charAt","polymodStep","pre","prefixChk","prefix","chk","convert","inBits","outBits","pad","bits","maxV","result","push","toWords","fromWordsUnsafe","words","Array","isArray","fromWords","getLibraryFromEncoding","encoding","ENCODING_CONST","__decode","str","LIMIT","lowered","toLowerCase","uppered","toUpperCase","split","lastIndexOf","wordChars","decodeUnsafe","decode","encode","abytes","title","isView","needsLen","aexists","instance","checkFinished","destroyed","finished","clean","arrays","createView","arr","DataView","byteOffset","hashCons","hashC","msg","opts","update","digest","outputLen","blockLen","create","assign","freeze","suffix","oid","from","HashMD","padOffset","isLE","view","pos","take","Math","min","dataView","process","subarray","roundClean","digestInto","out","aoutput","setBigUint64","oview","outLen","setUint32","destroy","_cloneInto","to","clone","SHA512_IV","Uint32Array","U32_MASK64","_32n","fromBig","le","h","l","shrSH","_l","s","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","add","Ah","Al","Bh","Bl","add3L","Cl","add3H","low","Ch","add4L","Dl","add4H","Dh","add5L","El","add5H","Eh","K512","lst","map","SHA512_Kh","SHA512_Kl","SHA512_W_H","SHA512_W_L","SHA2_64B","Fh","Fl","Gh","Gl","Hh","Hl","offset","getUint32","W15h","W15l","s0h","s0l","W2h","W2l","s1h","s1l","SUMl","SUMh","sigma1h","sigma1l","CHIh","T1ll","T1h","T1l","sigma0h","sigma0l","MAJh","MAJl","All","_SHA512","sha512","ed25519_CURVE","Gx","Gy","P","N","_a","_d","err","args","captureStackTrace","captureTrace","u8n","u8fr","padh","toString","padStart","bytesToHex","join","_ch","ch","hexToBytes","hex","hl","al","array","ai","hi","n1","n2","cr","concatBytes","arrs","r","reduce","sum","forEach","big","assertRange","max","isBig","M","invert","num","md","y","u","q","m","apoint","Point","B256","static","X","Y","Z","T","CURVE","fromAffine","fromBytes","zip215","normed","lastByte","bytesToNumLE","y2","isValid","uvRatio","isXOdd","isLastByteOdd","fromHex","toAffine","assertValidity","is0","X2","Y2","Z2","Z4","aX2","equals","other","X1","Y1","Z1","X1Z2","X2Z1","Y1Z2","Y2Z1","I","negate","double","A","B","C","D","x1y1","E","G","F","H","X3","Y3","T3","Z3","T1","T2","subtract","multiply","safe","wNAF","multiplyUnsafe","scalar","iz","toBytes","numTo32bLE","toHex","clearCofactor","isSmallOrder","isTorsionFree","BASE","ZERO","reverse","pow2","power","RM1","v3","pow","b2","b4","b5","b10","b20","b40","b80","b160","b240","b250","pow_p_5_8","pow_2_252_3","vx2","root1","root2","useRoot1","useRoot2","noRoot","modL_LE","modN","sha512s","fn","hashes","callHash","getExtendedPublicKey","secretKey","hashed","head","point","pointBytes","hash2extK","getPublicKey","priv","etc","mod","randomBytes","getRandomValues","sha512Async","pwindows","ceil","scalarBits","Gpows","ctneg","cnd","comp","points","precompute","mask","pow_2_w","shiftBy","wbits","off","offF","offP","abs","isEven","isNeg"],"sourceRoot":""} \ No newline at end of file diff --git a/export/dist/vendors.bundle.8059a8388a5808663419.js b/export/dist/vendors.bundle.8059a8388a5808663419.js deleted file mode 100644 index 2c3a635..0000000 --- a/export/dist/vendors.bundle.8059a8388a5808663419.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see vendors.bundle.8059a8388a5808663419.js.LICENSE.txt */ -"use strict";(self.webpackChunkexport_tests=self.webpackChunkexport_tests||[]).push([[96],{255:(e,t,r)=>{r.d(t,{ws:()=>G,GR:()=>we,RG:()=>be,v7:()=>pe});class i extends Error{constructor(e){let t;t=e instanceof Error?e.message:"string"==typeof e?e:"",super(t),this.name=this.constructor.name}}class n extends i{}class a extends i{}class s extends i{}class o extends i{}class c extends i{}class h extends i{}class l extends i{}class f extends i{}class u extends i{}class d extends i{}class y extends i{}const w=(b=globalThis,p={},new Proxy(b,{get:(e,t,r)=>t in p?p[t]:b[t],set:(e,t,r)=>(t in p&&delete p[t],b[t]=r,!0),deleteProperty(e,t){let r=!1;return t in p&&(delete p[t],r=!0),t in b&&(delete b[t],r=!0),r},ownKeys(e){const t=Reflect.ownKeys(b),r=Reflect.ownKeys(p),i=new Set(r);return[...t.filter(e=>!i.has(e)),...r]},defineProperty:(e,t,r)=>(t in p&&delete p[t],Reflect.defineProperty(b,t,r),!0),getOwnPropertyDescriptor:(e,t)=>t in p?Reflect.getOwnPropertyDescriptor(p,t):Reflect.getOwnPropertyDescriptor(b,t),has:(e,t)=>t in p||t in b}));var b,p;class _{constructor(){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _setup(){void 0===this._api&&(this._api=await async function(){if(void 0!==w&&void 0!==globalThis.crypto)return globalThis.crypto.subtle;try{const{webcrypto:e}=await r.e(825).then(r.t.bind(r,825,19));return e.subtle}catch(e){throw new y(e)}}())}}const g=8192,m=new Uint8Array(0),v=new Uint8Array([75,69,77,0,0]),k=e=>"object"==typeof e&&null!==e&&"object"==typeof e.privateKey&&"object"==typeof e.publicKey;function A(e,t){if(t<=0)throw new Error("i2Osp: too small size");if(e>=256**t)throw new Error("i2Osp: too large integer");const r=new Uint8Array(t);for(let i=0;i>=8;return r}function P(e,t){const r=new Uint8Array(e.length+t.length);return r.set(e,0),r.set(t,e.length),r}const x=new Uint8Array([101,97,101,95,112,114,107]),K=new Uint8Array([115,104,97,114,101,100,95,115,101,99,114,101,116]);class S{constructor(e,t,r){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_prim",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.id=e,this._prim=t,this._kdf=r;const i=new Uint8Array(v);i.set(A(this.id,2),3),this._kdf.init(i)}async serializePublicKey(e){return await this._prim.serializePublicKey(e)}async deserializePublicKey(e){return await this._prim.deserializePublicKey(e)}async serializePrivateKey(e){return await this._prim.serializePrivateKey(e)}async deserializePrivateKey(e){return await this._prim.deserializePrivateKey(e)}async importKey(e,t,r=!0){return await this._prim.importKey(e,t,r)}async generateKeyPair(){return await this._prim.generateKeyPair()}async deriveKeyPair(e){if(e.byteLength>g)throw new n("Too long ikm");return await this._prim.deriveKeyPair(e)}async encap(e){let t;t=void 0===e.ekm?await this.generateKeyPair():k(e.ekm)?e.ekm:await this.deriveKeyPair(e.ekm);const r=await this._prim.serializePublicKey(t.publicKey),i=await this._prim.serializePublicKey(e.recipientPublicKey);try{let n,a;if(void 0===e.senderKey)n=new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey));else{const r=k(e.senderKey)?e.senderKey.privateKey:e.senderKey;n=P(new Uint8Array(await this._prim.dh(t.privateKey,e.recipientPublicKey)),new Uint8Array(await this._prim.dh(r,e.recipientPublicKey)))}if(void 0===e.senderKey)a=P(new Uint8Array(r),new Uint8Array(i));else{const t=k(e.senderKey)?e.senderKey.publicKey:await this._prim.derivePublicKey(e.senderKey),n=await this._prim.serializePublicKey(t);a=function(e,t,r){const i=new Uint8Array(e.length+t.length+r.length);return i.set(e,0),i.set(t,e.length),i.set(r,e.length+t.length),i}(new Uint8Array(r),new Uint8Array(i),new Uint8Array(n))}return{enc:r,sharedSecret:await this._generateSharedSecret(n,a)}}catch(e){throw new o(e)}}async decap(e){const t=await this._prim.deserializePublicKey(e.enc),r=k(e.recipientKey)?e.recipientKey.privateKey:e.recipientKey,i=k(e.recipientKey)?e.recipientKey.publicKey:await this._prim.derivePublicKey(e.recipientKey),n=await this._prim.serializePublicKey(i);try{let i,a;if(void 0===e.senderPublicKey)i=new Uint8Array(await this._prim.dh(r,t));else{i=P(new Uint8Array(await this._prim.dh(r,t)),new Uint8Array(await this._prim.dh(r,e.senderPublicKey)))}if(void 0===e.senderPublicKey)a=P(new Uint8Array(e.enc),new Uint8Array(n));else{const t=await this._prim.serializePublicKey(e.senderPublicKey);a=new Uint8Array(e.enc.byteLength+n.byteLength+t.byteLength),a.set(new Uint8Array(e.enc),0),a.set(new Uint8Array(n),e.enc.byteLength),a.set(new Uint8Array(t),e.enc.byteLength+n.byteLength)}return await this._generateSharedSecret(i,a)}catch(e){throw new c(e)}}async _generateSharedSecret(e,t){const r=this._kdf.buildLabeledIkm(x,e),i=this._kdf.buildLabeledInfo(K,t,this.secretSize);return await this._kdf.extractAndExpand(m.buffer,r.buffer,i.buffer,this.secretSize)}}const U=["deriveBits"],E=new Uint8Array([100,107,112,95,112,114,107]);new Uint8Array([115,107]);class j{constructor(e){Object.defineProperty(this,"_num",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._num=new Uint8Array(e)}val(){return this._num}reset(){this._num.fill(0)}set(e){if(e.length!==this._num.length)throw new Error("Bignum.set: invalid argument");this._num.set(e)}isZero(){for(let e=0;ee[t])return!1}return!1}}const O=new Uint8Array([99,97,110,100,105,100,97,116,101]),z=new Uint8Array([255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,188,230,250,173,167,23,158,132,243,185,202,194,252,99,37,81]),I=new Uint8Array([255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,99,77,129,244,55,45,223,88,26,13,178,72,176,167,122,236,236,25,106,204,197,41,115]),L=new Uint8Array([1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,81,134,135,131,191,47,150,107,127,204,1,72,247,9,165,208,59,181,201,184,137,156,71,174,187,111,183,30,145,56,100,9]),T=new Uint8Array([48,65,2,1,0,48,19,6,7,42,134,72,206,61,2,1,6,8,42,134,72,206,61,3,1,7,4,39,48,37,2,1,1,4,32]),C=new Uint8Array([48,78,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,34,4,55,48,53,2,1,1,4,48]),B=new Uint8Array([48,96,2,1,0,48,16,6,7,42,134,72,206,61,2,1,6,5,43,129,4,0,35,4,73,48,71,2,1,1,4,66]);class R extends _{constructor(e,t){switch(super(),Object.defineProperty(this,"_hkdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_alg",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nPk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nSk",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nDh",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_bitmask",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_pkcs8AlgId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._hkdf=t,e){case 16:this._alg={name:"ECDH",namedCurve:"P-256"},this._nPk=65,this._nSk=32,this._nDh=32,this._order=z,this._bitmask=255,this._pkcs8AlgId=T;break;case 17:this._alg={name:"ECDH",namedCurve:"P-384"},this._nPk=97,this._nSk=48,this._nDh=48,this._order=I,this._bitmask=255,this._pkcs8AlgId=C;break;default:this._alg={name:"ECDH",namedCurve:"P-521"},this._nPk=133,this._nSk=66,this._nDh=66,this._order=L,this._bitmask=1,this._pkcs8AlgId=B}}async serializePublicKey(e){await this._setup();try{return await this._api.exportKey("raw",e)}catch(e){throw new a(e)}}async deserializePublicKey(e){await this._setup();try{return await this._importRawKey(e,!0)}catch(e){throw new s(e)}}async serializePrivateKey(e){await this._setup();try{const t=await this._api.exportKey("jwk",e);if(!("d"in t))throw new Error("Not private key");return function(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),r=atob(t),i=new Uint8Array(r.length);for(let e=0;e255)throw new Error("Faild to derive a key pair");const i=new Uint8Array(await this._hkdf.labeledExpand(t,O,A(e,1),this._nSk));i[0]=i[0]&this._bitmask,r.set(i)}const i=await this._deserializePkcs8Key(r.val());return r.reset(),{privateKey:i,publicKey:await this.derivePublicKey(i)}}catch(e){throw new d(e)}}async derivePublicKey(e){await this._setup();try{const t=await this._api.exportKey("jwk",e);return delete t.d,delete t.key_ops,await this._api.importKey("jwk",t,this._alg,!0,[])}catch(e){throw new s(e)}}async dh(e,t){try{return await this._setup(),await this._api.deriveBits({name:"ECDH",public:t},e,8*this._nDh)}catch(e){throw new a(e)}}async _importRawKey(e,t){if(t&&e.byteLength!==this._nPk)throw new Error("Invalid public key for the ciphersuite");if(!t&&e.byteLength!==this._nSk)throw new Error("Invalid private key for the ciphersuite");return t?await this._api.importKey("raw",e,this._alg,!0,[]):await this._deserializePkcs8Key(new Uint8Array(e))}async _importJWK(e,t){if(void 0===e.crv||e.crv!==this._alg.namedCurve)throw new Error(`Invalid crv: ${e.crv}`);if(t){if(void 0!==e.d)throw new Error("Invalid key: `d` should not be set");return await this._api.importKey("jwk",e,this._alg,!0,[])}if(void 0===e.d)throw new Error("Invalid key: `d` not found");return await this._api.importKey("jwk",e,this._alg,!0,U)}async _deserializePkcs8Key(e){const t=new Uint8Array(this._pkcs8AlgId.length+e.length);return t.set(this._pkcs8AlgId,0),t.set(e,this._pkcs8AlgId.length),await this._api.importKey("pkcs8",t,this._alg,!0,U)}}const H=new Uint8Array([72,80,75,69,45,118,49]);class N extends _{constructor(){super(),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:m}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}init(e){this._suiteId=e}buildLabeledIkm(e,t){this._checkInit();const r=new Uint8Array(7+this._suiteId.byteLength+e.byteLength+t.byteLength);return r.set(H,0),r.set(this._suiteId,7),r.set(e,7+this._suiteId.byteLength),r.set(t,7+this._suiteId.byteLength+e.byteLength),r}buildLabeledInfo(e,t,r){this._checkInit();const i=new Uint8Array(9+this._suiteId.byteLength+e.byteLength+t.byteLength);return i.set(new Uint8Array([0,r]),0),i.set(H,2),i.set(this._suiteId,9),i.set(e,9+this._suiteId.byteLength),i.set(t,9+this._suiteId.byteLength+e.byteLength),i}async extract(e,t){if(await this._setup(),0===e.byteLength&&(e=new ArrayBuffer(this.hashSize)),e.byteLength!==this.hashSize)throw new n("The salt length must be the same as the hashSize");const r=await this._api.importKey("raw",e,this.algHash,!1,["sign"]);return await this._api.sign("HMAC",r,t)}async expand(e,t,r){await this._setup();const i=await this._api.importKey("raw",e,this.algHash,!1,["sign"]),n=new ArrayBuffer(r),a=new Uint8Array(n);let s=m;const o=new Uint8Array(t),c=new Uint8Array(1);if(r>255*this.hashSize)throw new Error("Entropy limit reached");const h=new Uint8Array(this.hashSize+o.length+1);for(let e=1,t=0;t=s.length?(a.set(s,t),t+=s.length):(a.set(s.slice(0,a.length-t),t),t+=a.length-t);return n}async extractAndExpand(e,t,r,i){await this._setup();const n=await this._api.importKey("raw",t,"HKDF",!1,["deriveBits"]);return await this._api.deriveBits({name:"HKDF",hash:this.algHash.hash,salt:e,info:r},n,8*i)}async labeledExtract(e,t,r){return await this.extract(e,this.buildLabeledIkm(t,r).buffer)}async labeledExpand(e,t,r,i){return await this.expand(e,this.buildLabeledInfo(t,r,i).buffer,i)}_checkInit(){if(this._suiteId===m)throw new Error("Not initialized. Call init()")}}class q extends N{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"hashSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"algHash",{enumerable:!0,configurable:!0,writable:!0,value:{name:"HMAC",hash:"SHA-256",length:256}})}}const D=["encrypt","decrypt"];BigInt(0),BigInt(1),BigInt(2);class M extends _{constructor(e){super(),Object.defineProperty(this,"_rawKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._rawKey=e}async seal(e,t,r){await this._setupKey();const i={name:"AES-GCM",iv:e,additionalData:r};return await this._api.encrypt(i,this._key,t)}async open(e,t,r){await this._setupKey();const i={name:"AES-GCM",iv:e,additionalData:r};return await this._api.decrypt(i,this._key,t)}async _setupKey(){if(void 0!==this._key)return;await this._setup();const e=await this._importKey(this._rawKey);new Uint8Array(this._rawKey).fill(0),this._key=e}async _importKey(e){return await this._api.importKey("raw",e,{name:"AES-GCM"},!0,D)}}class Z{constructor(){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}createEncryptionContext(e){return new M(e)}}class G extends Z{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:2}),Object.defineProperty(this,"keySize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"nonceSize",{enumerable:!0,configurable:!0,writable:!0,value:12}),Object.defineProperty(this,"tagSize",{enumerable:!0,configurable:!0,writable:!0,value:16})}}function X(){return new Promise((e,t)=>{t(new y("Not supported"))})}const Y=new Uint8Array([115,101,99]);class W{constructor(e,t,r){Object.defineProperty(this,"_api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"exporterSecret",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._api=e,this._kdf=t,this.exporterSecret=r}async seal(e,t){return await X()}async open(e,t){return await X()}async export(e,t){if(e.byteLength>g)throw new n("Too long exporter context");try{return await this._kdf.labeledExpand(this.exporterSecret,Y,new Uint8Array(e),t)}catch(e){throw new h(e)}}}class V extends W{}class F extends W{constructor(e,t,r,i){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.enc=i}}class $ extends W{constructor(e,t,r){if(super(e,t,r.exporterSecret),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nK",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nN",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_nT",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_ctx",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),void 0===r.key||void 0===r.baseNonce||void 0===r.seq)throw new Error("Required parameters are missing");this._aead=r.aead,this._nK=this._aead.keySize,this._nN=this._aead.nonceSize,this._nT=this._aead.tagSize;const i=this._aead.createEncryptionContext(r.key);this._ctx={key:i,baseNonce:r.baseNonce,seq:r.seq}}computeNonce(e){const t=A(e.seq,e.baseNonce.byteLength);return function(e,t){if(e.byteLength!==t.byteLength)throw new Error("xor: different length inputs");const r=new Uint8Array(e.byteLength);for(let i=0;iNumber.MAX_SAFE_INTEGER)throw new u("Message limit reached");e.seq+=1}}var J;class Q{constructor(){J.set(this,Promise.resolve())}async lock(){let e;const t=new Promise(t=>{e=t}),r=function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)}(this,J,"f");return function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===i?n.call(e,r):n?n.value=r:t.set(e,r)}(this,J,t,"f"),await r,e}}J=new WeakMap;var ee,te=function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};class re extends ${constructor(){super(...arguments),ee.set(this,void 0)}async open(e,t=m.buffer){!function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===i?n.call(e,r):n?n.value=r:t.set(e,r)}(this,ee,te(this,ee,"f")??new Q,"f");const r=await te(this,ee,"f").lock();let i;try{i=await this._ctx.key.open(this.computeNonce(this._ctx),e,t)}catch(e){throw new f(e)}finally{r()}return this.incrementSeq(this._ctx),i}}ee=new WeakMap;var ie,ne=function(e,t,r,i){if("a"===r&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};class ae extends ${constructor(e,t,r,i){super(e,t,r),Object.defineProperty(this,"enc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),ie.set(this,void 0),this.enc=i}async seal(e,t=m.buffer){!function(e,t,r,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===i?n.call(e,r):n?n.value=r:t.set(e,r)}(this,ie,ne(this,ie,"f")??new Q,"f");const r=await ne(this,ie,"f").lock();let i;try{i=await this._ctx.key.seal(this.computeNonce(this._ctx),e,t)}catch(e){throw new l(e)}finally{r()}return this.incrementSeq(this._ctx),i}}ie=new WeakMap;const se=new Uint8Array([98,97,115,101,95,110,111,110,99,101]),oe=new Uint8Array([101,120,112]),ce=new Uint8Array([105,110,102,111,95,104,97,115,104]),he=new Uint8Array([107,101,121]),le=new Uint8Array([112,115,107,95,105,100,95,104,97,115,104]),fe=new Uint8Array([115,101,99,114,101,116]),ue=new Uint8Array([72,80,75,69,0,0,0,0,0,0]);class de extends _{constructor(e){if(super(),Object.defineProperty(this,"_kem",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_kdf",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_aead",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_suiteId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),"number"==typeof e.kem)throw new n("KemId cannot be used");if(this._kem=e.kem,"number"==typeof e.kdf)throw new n("KdfId cannot be used");if(this._kdf=e.kdf,"number"==typeof e.aead)throw new n("AeadId cannot be used");this._aead=e.aead,this._suiteId=new Uint8Array(ue),this._suiteId.set(A(this._kem.id,2),4),this._suiteId.set(A(this._kdf.id,2),6),this._suiteId.set(A(this._aead.id,2),8),this._kdf.init(this._suiteId)}get kem(){return this._kem}get kdf(){return this._kdf}get aead(){return this._aead}async createSenderContext(e){this._validateInputLength(e),await this._setup();const t=await this._kem.encap(e);let r;return r=void 0!==e.psk?void 0!==e.senderKey?3:1:void 0!==e.senderKey?2:0,await this._keyScheduleS(r,t.sharedSecret,t.enc,e)}async createRecipientContext(e){this._validateInputLength(e),await this._setup();const t=await this._kem.decap(e);let r;return r=void 0!==e.psk?void 0!==e.senderPublicKey?3:1:void 0!==e.senderPublicKey?2:0,await this._keyScheduleR(r,t,e)}async seal(e,t,r=m.buffer){const i=await this.createSenderContext(e);return{ct:await i.seal(t,r),enc:i.enc}}async open(e,t,r=m.buffer){const i=await this.createRecipientContext(e);return await i.open(t,r)}async _keySchedule(e,t,r){const i=void 0===r.psk?m:new Uint8Array(r.psk.id),n=await this._kdf.labeledExtract(m.buffer,le,i),a=void 0===r.info?m:new Uint8Array(r.info),s=await this._kdf.labeledExtract(m.buffer,ce,a),o=new Uint8Array(1+n.byteLength+s.byteLength);o.set(new Uint8Array([e]),0),o.set(new Uint8Array(n),1),o.set(new Uint8Array(s),1+n.byteLength);const c=void 0===r.psk?m:new Uint8Array(r.psk.key),h=this._kdf.buildLabeledIkm(fe,c).buffer,l=this._kdf.buildLabeledInfo(oe,o,this._kdf.hashSize).buffer,f=await this._kdf.extractAndExpand(t,h,l,this._kdf.hashSize);if(65535===this._aead.id)return{aead:this._aead,exporterSecret:f};const u=this._kdf.buildLabeledInfo(he,o,this._aead.keySize).buffer,d=await this._kdf.extractAndExpand(t,h,u,this._aead.keySize),y=this._kdf.buildLabeledInfo(se,o,this._aead.nonceSize).buffer,w=await this._kdf.extractAndExpand(t,h,y,this._aead.nonceSize);return{aead:this._aead,exporterSecret:f,key:d,baseNonce:new Uint8Array(w),seq:0}}async _keyScheduleS(e,t,r,i){const n=await this._keySchedule(e,t,i);return void 0===n.key?new F(this._api,this._kdf,n.exporterSecret,r):new ae(this._api,this._kdf,n,r)}async _keyScheduleR(e,t,r){const i=await this._keySchedule(e,t,r);return void 0===i.key?new V(this._api,this._kdf,i.exporterSecret):new re(this._api,this._kdf,i)}_validateInputLength(e){if(void 0!==e.info&&e.info.byteLength>65536)throw new n("Too long info");if(void 0!==e.psk){if(e.psk.key.byteLength<32)throw new n("PSK must have at least 32 bytes");if(e.psk.key.byteLength>g)throw new n("Too long psk.key");if(e.psk.id.byteLength>g)throw new n("Too long psk.id")}}}class ye extends S{constructor(){const e=new q;super(16,new R(16,e),e),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:16}),Object.defineProperty(this,"secretSize",{enumerable:!0,configurable:!0,writable:!0,value:32}),Object.defineProperty(this,"encSize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"publicKeySize",{enumerable:!0,configurable:!0,writable:!0,value:65}),Object.defineProperty(this,"privateKeySize",{enumerable:!0,configurable:!0,writable:!0,value:32})}}class we extends de{}class be extends ye{}class pe extends q{}new Uint8Array([48,46,2,1,0,48,5,6,3,43,101,110,4,34,4,32]),new Uint8Array([48,70,2,1,0,48,5,6,3,43,101,111,4,58,4,56])},343:(e,t)=>{const r="qpzry9x8gf2tvdw0s3jn54khce6mua7l",i={};for(let e=0;e<32;e++){const t=r.charAt(e);i[t]=e}function n(e){const t=e>>25;return(33554431&e)<<5^996825010&-(1&t)^642813549&-(t>>1&1)^513874426&-(t>>2&1)^1027748829&-(t>>3&1)^705979059&-(t>>4&1)}function a(e){let t=1;for(let r=0;r126)return"Invalid prefix ("+e+")";t=n(t)^i>>5}t=n(t);for(let r=0;r=r;)a-=r,o.push(n>>a&s);if(i)a>0&&o.push(n<=t)return"Excess padding";if(n<r)return"Exceeds length limit";const s=e.toLowerCase(),o=e.toUpperCase();if(e!==s&&e!==o)return"Mixed-case string "+e;const c=(e=s).lastIndexOf("1");if(-1===c)return"No separator character for "+e;if(0===c)return"Missing prefix for "+e;const h=e.slice(0,c),l=e.slice(c+1);if(l.length<6)return"Data too short";let f=a(h);if("string"==typeof f)return f;const u=[];for(let e=0;e=l.length||u.push(r)}return f!==t?"Invalid checksum for "+e:{prefix:h,words:u}}return t="bech32"===e?1:734539939,{decodeUnsafe:function(e,t){const r=s(e,t);if("object"==typeof r)return r},decode:function(e,t){const r=s(e,t);if("object"==typeof r)return r;throw new Error(r)},encode:function(e,i,s){if(s=s||90,e.length+7+i.length>s)throw new TypeError("Exceeds length limit");let o=a(e=e.toLowerCase());if("string"==typeof o)throw new Error(o);let c=e+"1";for(let e=0;e>5)throw new Error("Non 5-bit word");o=n(o)^t,c+=r.charAt(t)}for(let e=0;e<6;++e)o=n(o);o^=t;for(let e=0;e<6;++e)c+=r.charAt(o>>5*(5-e)&31);return c},toWords:o,fromWordsUnsafe:c,fromWords:h}}l("bech32"),l("bech32m")},561:()=>{throw new Error("root module cannot be imported: import submodules instead. Check out README")},598:(e,t,r)=>{r.d(t,{jn:()=>H,lG:()=>R});const i={p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n},{p:n,n:a,Gx:s,Gy:o,a:c,d:h,h:l}=i,f=(e="")=>{const t=new Error(e);throw((...e)=>{"captureStackTrace"in Error&&"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(...e)})(t,f),t},u=(e,t,r="")=>{const i=(n=e)instanceof Uint8Array||ArrayBuffer.isView(n)&&"Uint8Array"===n.constructor.name;var n;const a=e?.length,s=void 0!==t;return(!i||s&&a!==t)&&f((r&&`"${r}" `)+"expected Uint8Array"+(s?` of length ${t}`:"")+", got "+(i?`length=${a}`:"type="+typeof e)),e},d=e=>new Uint8Array(e),y=e=>Uint8Array.from(e),w=(e,t)=>e.toString(16).padStart(t,"0"),b=e=>Array.from(u(e)).map(e=>w(e,2)).join(""),p=e=>e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:void 0,_=e=>{const t="hex invalid";if("string"!=typeof e)return f(t);const r=e.length,i=r/2;if(r%2)return f(t);const n=d(i);for(let r=0,a=0;rglobalThis?.crypto,m=(...e)=>{const t=d(e.reduce((e,t)=>e+u(t).length,0));let r=0;return e.forEach(e=>{t.set(e,r),r+=e.length}),t},v=BigInt,k=(e,t,r,i="bad number: out of range")=>(e=>"bigint"==typeof e)(e)&&t<=e&&e{const r=e%t;return r>=0n?r:t+r},P=(e,t)=>{(0n===e||t<=0n)&&f("no inverse n="+e+" mod="+t);let r=A(e,t),i=t,n=0n,a=1n,s=1n,o=0n;for(;0n!==r;){const e=i/r,t=i%r,c=n-s*e,h=a-o*e;i=r,r=t,n=s,a=o,s=c,o=h}return 1n===i?A(n,t):f("no inverse")},x=e=>e instanceof S?e:f("Point expected"),K=2n**256n;class S{static BASE;static ZERO;X;Y;Z;T;constructor(e,t,r,i){const n=K;this.X=k(e,0n,n),this.Y=k(t,0n,n),this.Z=k(r,1n,n),this.T=k(i,0n,n),Object.freeze(this)}static CURVE(){return i}static fromAffine(e){return new S(e.x,e.y,1n,A(e.x*e.y))}static fromBytes(e,t=!1){const r=h,i=y(u(e,32)),a=e[31];i[31]=-129&a;const s=O(i);k(s,0n,t?K:n);const o=A(s*s),c=A(o-1n),l=A(r*o+1n);let{isValid:d,value:w}=L(c,l);d||f("bad point: y not sqrt");const b=1n==(1n&w),p=!!(128&a);return!t&&0n===w&&p&&f("bad point: x==0, isLastByteOdd"),p!==b&&(w=A(-w)),new S(w,s,1n,A(w*s))}static fromHex(e,t){return S.fromBytes(_(e),t)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){const e=c,t=h;if(this.is0())return f("bad point: ZERO");const{X:r,Y:i,Z:n,T:a}=this,s=A(r*r),o=A(i*i),l=A(n*n),u=A(l*l),d=A(s*e);return A(l*A(d+o))!==A(u+A(t*A(s*o)))?f("bad point: equation left != right (1)"):A(r*i)!==A(n*a)?f("bad point: equation left != right (2)"):this}equals(e){const{X:t,Y:r,Z:i}=this,{X:n,Y:a,Z:s}=x(e),o=A(t*s),c=A(n*i),h=A(r*s),l=A(a*i);return o===c&&h===l}is0(){return this.equals(E)}negate(){return new S(A(-this.X),this.Y,this.Z,A(-this.T))}double(){const{X:e,Y:t,Z:r}=this,i=c,n=A(e*e),a=A(t*t),s=A(2n*A(r*r)),o=A(i*n),h=e+t,l=A(A(h*h)-n-a),f=o+a,u=f-s,d=o-a,y=A(l*u),w=A(f*d),b=A(l*d),p=A(u*f);return new S(y,w,p,b)}add(e){const{X:t,Y:r,Z:i,T:n}=this,{X:a,Y:s,Z:o,T:l}=x(e),f=c,u=h,d=A(t*a),y=A(r*s),w=A(n*u*l),b=A(i*o),p=A((t+r)*(a+s)-d-y),_=A(b-w),g=A(b+w),m=A(y-f*d),v=A(p*_),k=A(g*m),P=A(p*m),K=A(_*g);return new S(v,k,K,P)}subtract(e){return this.add(x(e).negate())}multiply(e,t=!0){if(!t&&(0n===e||this.is0()))return E;if(k(e,1n,a),1n===e)return this;if(this.equals(U))return Z(e).p;let r=E,i=U;for(let n=this;e>0n;n=n.double(),e>>=1n)1n&e?r=r.add(n):t&&(i=i.add(n));return r}multiplyUnsafe(e){return this.multiply(e,!1)}toAffine(){const{X:e,Y:t,Z:r}=this;if(this.equals(E))return{x:0n,y:1n};const i=P(r,n);return 1n!==A(r*i)&&f("invalid inverse"),{x:A(e*i),y:A(t*i)}}toBytes(){const{x:e,y:t}=this.assertValidity().toAffine(),r=j(t);return r[31]|=1n&e?128:0,r}toHex(){return b(this.toBytes())}clearCofactor(){return this.multiply(v(l),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let e=this.multiply(a/2n,!1).double();return a%2n&&(e=e.add(this)),e.is0()}}const U=new S(s,o,1n,A(s*o)),E=new S(0n,1n,1n,0n);S.BASE=U,S.ZERO=E;const j=e=>_(w(k(e,0n,K),64)).reverse(),O=e=>v("0x"+b(y(u(e)).reverse())),z=(e,t)=>{let r=e;for(;t-- >0n;)r*=r,r%=n;return r},I=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,L=(e,t)=>{const r=A(t*t*t),i=(e=>{const t=e*e%n*e%n,r=z(t,2n)*t%n,i=z(r,1n)*e%n,a=z(i,5n)*i%n,s=z(a,10n)*a%n,o=z(s,20n)*s%n,c=z(o,40n)*o%n,h=z(c,80n)*c%n,l=z(h,80n)*c%n,f=z(l,10n)*a%n;return{pow_p_5_8:z(f,2n)*e%n,b2:t}})(e*A(r*r*t)).pow_p_5_8;let a=A(e*r*i);const s=A(t*a*a),o=a,c=A(a*I),h=s===e,l=s===A(-e),f=s===A(-e*I);return h&&(a=o),(l||f)&&(a=c),1n==(1n&A(a))&&(a=A(-a)),{isValid:h||l,value:a}},T=e=>{return t=O(e),A(t,a);var t},C=(...e)=>(e=>{const t=N[e];return"function"!=typeof t&&f("hashes."+e+" not set"),t})("sha512")(m(...e)),B=e=>(e=>{const t=e.slice(0,32);t[0]&=248,t[31]&=127,t[31]|=64;const r=e.slice(32,64),i=T(t),n=U.multiply(i),a=n.toBytes();return{head:t,prefix:r,scalar:i,point:n,pointBytes:a}})(C(u(e,32))),R=e=>B(e).pointBytes,H={bytesToHex:b,hexToBytes:_,concatBytes:m,mod:A,invert:P,randomBytes:(e=32)=>g().getRandomValues(d(e))},N={sha512Async:async e=>{const t=g()?.subtle??f("crypto.subtle must be defined, consider polyfill"),r=m(e);return d(await t.digest("SHA-512",r.buffer))},sha512:void 0},q=Math.ceil(32)+1;let D;const M=(e,t)=>{const r=t.negate();return e?r:t},Z=e=>{const t=D||(D=(()=>{const e=[];let t=U,r=t;for(let i=0;i>=a,o>128&&(o-=256,e+=1n);const c=128*s,h=c,l=c+Math.abs(o)-1,f=s%2!=0,u=o<0;0===o?i=i.add(M(f,t[h])):r=r.add(M(u,t[l]))}return 0n!==e&&f("invalid wnaf"),{p:r,f:i}}}}]); -//# sourceMappingURL=vendors.bundle.8059a8388a5808663419.js.map \ No newline at end of file diff --git a/export/dist/vendors.bundle.8059a8388a5808663419.js.map b/export/dist/vendors.bundle.8059a8388a5808663419.js.map deleted file mode 100644 index 921a0d7..0000000 --- a/export/dist/vendors.bundle.8059a8388a5808663419.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vendors.bundle.8059a8388a5808663419.js","mappings":"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","sources":["webpack://export-tests/./node_modules/@hpke/common/esm/src/errors.js","webpack://export-tests/./node_modules/@hpke/common/esm/_dnt.shims.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/algorithm.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/identifiers.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/consts.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/interfaces/kemInterface.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/utils/misc.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/kems/dhkem.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/interfaces/dhkemPrimitives.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/utils/bignum.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/kems/dhkemPrimitives/ec.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/kdfs/hkdf.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/interfaces/aeadEncryptionContext.js","webpack://export-tests/./node_modules/@hpke/common/esm/src/curve/montgomery.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/aeads/aesGcm.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/utils/emitNotSupported.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/exporterContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/encryptionContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/mutex.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/recipientContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/senderContext.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/cipherSuiteNative.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/kems/dhkemNative.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/native.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.js","webpack://export-tests/./node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.js","webpack://export-tests/./node_modules/bech32/dist/index.js","webpack://export-tests/./node_modules/@noble/hashes/index.js","webpack://export-tests/./node_modules/@noble/ed25519/index.js"],"sourcesContent":["/**\n * The base error class of hpke-js.\n * @group Errors\n */\nexport class HpkeError extends Error {\n constructor(e) {\n let message;\n if (e instanceof Error) {\n message = e.message;\n }\n else if (typeof e === \"string\") {\n message = e;\n }\n else {\n message = \"\";\n }\n super(message);\n this.name = this.constructor.name;\n }\n}\n/**\n * Invalid parameter.\n * @group Errors\n */\nexport class InvalidParamError extends HpkeError {\n}\n/**\n * KEM input or output validation failure.\n * @group Errors\n */\nexport class ValidationError extends HpkeError {\n}\n/**\n * Public or private key serialization failure.\n * @group Errors\n */\nexport class SerializeError extends HpkeError {\n}\n/**\n * Public or private key deserialization failure.\n * @group Errors\n */\nexport class DeserializeError extends HpkeError {\n}\n/**\n * encap() failure.\n * @group Errors\n */\nexport class EncapError extends HpkeError {\n}\n/**\n * decap() failure.\n * @group Errors\n */\nexport class DecapError extends HpkeError {\n}\n/**\n * Secret export failure.\n * @group Errors\n */\nexport class ExportError extends HpkeError {\n}\n/**\n * seal() failure.\n * @group Errors\n */\nexport class SealError extends HpkeError {\n}\n/**\n * open() failure.\n * @group Errors\n */\nexport class OpenError extends HpkeError {\n}\n/**\n * Sequence number overflow on the encryption context.\n * @group Errors\n */\nexport class MessageLimitReachedError extends HpkeError {\n}\n/**\n * Key pair derivation failure.\n * @group Errors\n */\nexport class DeriveKeyPairError extends HpkeError {\n}\n/**\n * Not supported failure.\n * @group Errors\n */\nexport class NotSupportedError extends HpkeError {\n}\n","const dntGlobals = {};\nexport const dntGlobalThis = createMergeProxy(globalThis, dntGlobals);\nfunction createMergeProxy(baseObj, extObj) {\n return new Proxy(baseObj, {\n get(_target, prop, _receiver) {\n if (prop in extObj) {\n return extObj[prop];\n }\n else {\n return baseObj[prop];\n }\n },\n set(_target, prop, value) {\n if (prop in extObj) {\n delete extObj[prop];\n }\n baseObj[prop] = value;\n return true;\n },\n deleteProperty(_target, prop) {\n let success = false;\n if (prop in extObj) {\n delete extObj[prop];\n success = true;\n }\n if (prop in baseObj) {\n delete baseObj[prop];\n success = true;\n }\n return success;\n },\n ownKeys(_target) {\n const baseKeys = Reflect.ownKeys(baseObj);\n const extKeys = Reflect.ownKeys(extObj);\n const extKeysSet = new Set(extKeys);\n return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];\n },\n defineProperty(_target, prop, desc) {\n if (prop in extObj) {\n delete extObj[prop];\n }\n Reflect.defineProperty(baseObj, prop, desc);\n return true;\n },\n getOwnPropertyDescriptor(_target, prop) {\n if (prop in extObj) {\n return Reflect.getOwnPropertyDescriptor(extObj, prop);\n }\n else {\n return Reflect.getOwnPropertyDescriptor(baseObj, prop);\n }\n },\n has(_target, prop) {\n return prop in extObj || prop in baseObj;\n },\n });\n}\n","import * as dntShim from \"../_dnt.shims.js\";\nimport { NotSupportedError } from \"./errors.js\";\nasync function loadSubtleCrypto() {\n if (dntShim.dntGlobalThis !== undefined && globalThis.crypto !== undefined) {\n // Browsers, Node.js >= v19, Cloudflare Workers, Bun, etc.\n return globalThis.crypto.subtle;\n }\n // Node.js <= v18\n try {\n // @ts-ignore: to ignore \"crypto\"\n const { webcrypto } = await import(\"crypto\"); // node:crypto\n return webcrypto.subtle;\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n}\nexport class NativeAlgorithm {\n constructor() {\n Object.defineProperty(this, \"_api\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: undefined\n });\n }\n async _setup() {\n if (this._api !== undefined) {\n return;\n }\n this._api = await loadSubtleCrypto();\n }\n}\n","/**\n * The supported HPKE modes.\n */\nexport const Mode = {\n Base: 0x00,\n Psk: 0x01,\n Auth: 0x02,\n AuthPsk: 0x03,\n};\n/**\n * The supported Key Encapsulation Mechanism (KEM) identifiers.\n */\nexport const KemId = {\n NotAssigned: 0x0000,\n DhkemP256HkdfSha256: 0x0010,\n DhkemP384HkdfSha384: 0x0011,\n DhkemP521HkdfSha512: 0x0012,\n DhkemSecp256k1HkdfSha256: 0x0013,\n DhkemX25519HkdfSha256: 0x0020,\n DhkemX448HkdfSha512: 0x0021,\n HybridkemX25519Kyber768: 0x0030,\n MlKem512: 0x0040,\n MlKem768: 0x0041,\n MlKem1024: 0x0042,\n XWing: 0x647a,\n};\n/**\n * The supported Key Derivation Function (KDF) identifiers.\n */\nexport const KdfId = {\n HkdfSha256: 0x0001,\n HkdfSha384: 0x0002,\n HkdfSha512: 0x0003,\n};\n/**\n * The supported Authenticated Encryption with Associated Data (AEAD) identifiers.\n */\nexport const AeadId = {\n Aes128Gcm: 0x0001,\n Aes256Gcm: 0x0002,\n Chacha20Poly1305: 0x0003,\n ExportOnly: 0xFFFF,\n};\n","// The input length limit (psk, psk_id, info, exporter_context, ikm).\nexport const INPUT_LENGTH_LIMIT = 8192;\nexport const INFO_LENGTH_LIMIT = 65536;\n// The minimum length of a PSK.\nexport const MINIMUM_PSK_LENGTH = 32;\n// b\"\"\nexport const EMPTY = new Uint8Array(0);\n","// b\"KEM\"\nexport const SUITE_ID_HEADER_KEM = new Uint8Array([\n 75,\n 69,\n 77,\n 0,\n 0,\n]);\n","import * as dntShim from \"../../_dnt.shims.js\";\nimport { KemId } from \"../identifiers.js\";\nexport const isDenoV1 = () => \n// deno-lint-ignore no-explicit-any\ndntShim.dntGlobalThis.process === undefined;\n/**\n * Checks whether the runtime is Deno or not (Node.js).\n * @returns boolean - true if the runtime is Deno, false Node.js.\n */\nexport function isDeno() {\n // deno-lint-ignore no-explicit-any\n if (dntShim.dntGlobalThis.process === undefined) {\n return true;\n }\n // deno-lint-ignore no-explicit-any\n return dntShim.dntGlobalThis.process?.versions?.deno !== undefined;\n}\n/**\n * Checks whetehr the type of input is CryptoKeyPair or not.\n */\nexport const isCryptoKeyPair = (x) => typeof x === \"object\" &&\n x !== null &&\n typeof x.privateKey === \"object\" &&\n typeof x.publicKey === \"object\";\n/**\n * Converts integer to octet string. I2OSP implementation.\n */\nexport function i2Osp(n, w) {\n if (w <= 0) {\n throw new Error(\"i2Osp: too small size\");\n }\n if (n >= 256 ** w) {\n throw new Error(\"i2Osp: too large integer\");\n }\n const ret = new Uint8Array(w);\n for (let i = 0; i < w && n; i++) {\n ret[w - (i + 1)] = n % 256;\n n = n >> 8;\n }\n return ret;\n}\n/**\n * Concatenates two Uint8Arrays.\n * @param a Uint8Array\n * @param b Uint8Array\n * @returns Concatenated Uint8Array\n */\nexport function concat(a, b) {\n const ret = new Uint8Array(a.length + b.length);\n ret.set(a, 0);\n ret.set(b, a.length);\n return ret;\n}\n/**\n * Decodes Base64Url-encoded data.\n * @param v Base64Url-encoded string\n * @returns Uint8Array\n */\nexport function base64UrlToBytes(v) {\n const base64 = v.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const byteString = atob(base64);\n const ret = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n ret[i] = byteString.charCodeAt(i);\n }\n return ret;\n}\n/**\n * Encodes Uint8Array to Base64Url.\n * @param v Uint8Array\n * @returns Base64Url-encoded string\n */\nexport function bytesToBase64Url(v) {\n return btoa(String.fromCharCode(...v))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=*$/g, \"\");\n}\n/**\n * Decodes hex string to Uint8Array.\n * @param v Hex string\n * @returns Uint8Array\n * @throws Error if the input is not a hex string.\n */\nexport function hexToBytes(v) {\n if (v.length === 0) {\n return new Uint8Array([]);\n }\n const res = v.match(/[\\da-f]{2}/gi);\n if (res == null) {\n throw new Error(\"Not hex string.\");\n }\n return new Uint8Array(res.map(function (h) {\n return parseInt(h, 16);\n }));\n}\n/**\n * Encodes Uint8Array to hex string.\n * @param v Uint8Array\n * @returns Hex string\n */\nexport function bytesToHex(v) {\n return [...v].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n/**\n * Converts KemId to KeyAlgorithm.\n * @param kem KemId\n * @returns KeyAlgorithm\n */\nexport function kemToKeyGenAlgorithm(kem) {\n switch (kem) {\n case KemId.DhkemP256HkdfSha256:\n return {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n };\n case KemId.DhkemP384HkdfSha384:\n return {\n name: \"ECDH\",\n namedCurve: \"P-384\",\n };\n case KemId.DhkemP521HkdfSha512:\n return {\n name: \"ECDH\",\n namedCurve: \"P-521\",\n };\n default:\n // case KemId.DhkemX25519HkdfSha256\n return {\n name: \"X25519\",\n };\n }\n}\nexport async function loadSubtleCrypto() {\n if (dntShim.dntGlobalThis !== undefined && globalThis.crypto !== undefined) {\n // Browsers, Node.js >= v19, Cloudflare Workers, Bun, etc.\n return globalThis.crypto.subtle;\n }\n // Node.js <= v18\n try {\n // @ts-ignore: to ignore \"crypto\"\n const { webcrypto } = await import(\"crypto\"); // node:crypto\n return webcrypto.subtle;\n }\n catch (_e) {\n throw new Error(\"Failed to load SubtleCrypto\");\n }\n}\nexport async function loadCrypto() {\n if (dntShim.dntGlobalThis !== undefined && globalThis.crypto !== undefined) {\n // Browsers, Node.js >= v19, Cloudflare Workers, Bun, etc.\n return globalThis.crypto;\n }\n // Node.js <= v18\n try {\n // @ts-ignore: to ignore \"crypto\"\n const { webcrypto } = await import(\"crypto\"); // node:crypto\n return webcrypto;\n }\n catch (_e) {\n throw new Error(\"Web Cryptograph API not supported\");\n }\n}\n/**\n * XOR for Uint8Array.\n */\nexport function xor(a, b) {\n if (a.byteLength !== b.byteLength) {\n throw new Error(\"xor: different length inputs\");\n }\n const buf = new Uint8Array(a.byteLength);\n for (let i = 0; i < a.byteLength; i++) {\n buf[i] = a[i] ^ b[i];\n }\n return buf;\n}\n","import { EMPTY, INPUT_LENGTH_LIMIT } from \"../consts.js\";\nimport { DecapError, EncapError, InvalidParamError } from \"../errors.js\";\nimport { SUITE_ID_HEADER_KEM } from \"../interfaces/kemInterface.js\";\nimport { concat, i2Osp, isCryptoKeyPair } from \"../utils/misc.js\";\n// b\"eae_prk\"\nconst LABEL_EAE_PRK = new Uint8Array([101, 97, 101, 95, 112, 114, 107]);\n// b\"shared_secret\"\n// deno-fmt-ignore\nconst LABEL_SHARED_SECRET = new Uint8Array([\n 115, 104, 97, 114, 101, 100, 95, 115, 101, 99,\n 114, 101, 116,\n]);\nfunction concat3(a, b, c) {\n const ret = new Uint8Array(a.length + b.length + c.length);\n ret.set(a, 0);\n ret.set(b, a.length);\n ret.set(c, a.length + b.length);\n return ret;\n}\nexport class Dhkem {\n constructor(id, prim, kdf) {\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"_prim\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_kdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.id = id;\n this._prim = prim;\n this._kdf = kdf;\n const suiteId = new Uint8Array(SUITE_ID_HEADER_KEM);\n suiteId.set(i2Osp(this.id, 2), 3);\n this._kdf.init(suiteId);\n }\n async serializePublicKey(key) {\n return await this._prim.serializePublicKey(key);\n }\n async deserializePublicKey(key) {\n return await this._prim.deserializePublicKey(key);\n }\n async serializePrivateKey(key) {\n return await this._prim.serializePrivateKey(key);\n }\n async deserializePrivateKey(key) {\n return await this._prim.deserializePrivateKey(key);\n }\n async importKey(format, key, isPublic = true) {\n return await this._prim.importKey(format, key, isPublic);\n }\n async generateKeyPair() {\n return await this._prim.generateKeyPair();\n }\n async deriveKeyPair(ikm) {\n if (ikm.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long ikm\");\n }\n return await this._prim.deriveKeyPair(ikm);\n }\n async encap(params) {\n let ke;\n if (params.ekm === undefined) {\n ke = await this.generateKeyPair();\n }\n else if (isCryptoKeyPair(params.ekm)) {\n // params.ekm is only used for testing.\n ke = params.ekm;\n }\n else {\n // params.ekm is only used for testing.\n ke = await this.deriveKeyPair(params.ekm);\n }\n const enc = await this._prim.serializePublicKey(ke.publicKey);\n const pkrm = await this._prim.serializePublicKey(params.recipientPublicKey);\n try {\n let dh;\n if (params.senderKey === undefined) {\n dh = new Uint8Array(await this._prim.dh(ke.privateKey, params.recipientPublicKey));\n }\n else {\n const sks = isCryptoKeyPair(params.senderKey)\n ? params.senderKey.privateKey\n : params.senderKey;\n const dh1 = new Uint8Array(await this._prim.dh(ke.privateKey, params.recipientPublicKey));\n const dh2 = new Uint8Array(await this._prim.dh(sks, params.recipientPublicKey));\n dh = concat(dh1, dh2);\n }\n let kemContext;\n if (params.senderKey === undefined) {\n kemContext = concat(new Uint8Array(enc), new Uint8Array(pkrm));\n }\n else {\n const pks = isCryptoKeyPair(params.senderKey)\n ? params.senderKey.publicKey\n : await this._prim.derivePublicKey(params.senderKey);\n const pksm = await this._prim.serializePublicKey(pks);\n kemContext = concat3(new Uint8Array(enc), new Uint8Array(pkrm), new Uint8Array(pksm));\n }\n const sharedSecret = await this._generateSharedSecret(dh, kemContext);\n return {\n enc: enc,\n sharedSecret: sharedSecret,\n };\n }\n catch (e) {\n throw new EncapError(e);\n }\n }\n async decap(params) {\n const pke = await this._prim.deserializePublicKey(params.enc);\n const skr = isCryptoKeyPair(params.recipientKey)\n ? params.recipientKey.privateKey\n : params.recipientKey;\n const pkr = isCryptoKeyPair(params.recipientKey)\n ? params.recipientKey.publicKey\n : await this._prim.derivePublicKey(params.recipientKey);\n const pkrm = await this._prim.serializePublicKey(pkr);\n try {\n let dh;\n if (params.senderPublicKey === undefined) {\n dh = new Uint8Array(await this._prim.dh(skr, pke));\n }\n else {\n const dh1 = new Uint8Array(await this._prim.dh(skr, pke));\n const dh2 = new Uint8Array(await this._prim.dh(skr, params.senderPublicKey));\n dh = concat(dh1, dh2);\n }\n let kemContext;\n if (params.senderPublicKey === undefined) {\n kemContext = concat(new Uint8Array(params.enc), new Uint8Array(pkrm));\n }\n else {\n const pksm = await this._prim.serializePublicKey(params.senderPublicKey);\n kemContext = new Uint8Array(params.enc.byteLength + pkrm.byteLength + pksm.byteLength);\n kemContext.set(new Uint8Array(params.enc), 0);\n kemContext.set(new Uint8Array(pkrm), params.enc.byteLength);\n kemContext.set(new Uint8Array(pksm), params.enc.byteLength + pkrm.byteLength);\n }\n return await this._generateSharedSecret(dh, kemContext);\n }\n catch (e) {\n throw new DecapError(e);\n }\n }\n async _generateSharedSecret(dh, kemContext) {\n const labeledIkm = this._kdf.buildLabeledIkm(LABEL_EAE_PRK, dh);\n const labeledInfo = this._kdf.buildLabeledInfo(LABEL_SHARED_SECRET, kemContext, this.secretSize);\n return await this._kdf.extractAndExpand(EMPTY.buffer, labeledIkm.buffer, labeledInfo.buffer, this.secretSize);\n }\n}\n","// The key usages for KEM.\nexport const KEM_USAGES = [\"deriveBits\"];\n// b\"dkp_prk\"\nexport const LABEL_DKP_PRK = new Uint8Array([\n 100,\n 107,\n 112,\n 95,\n 112,\n 114,\n 107,\n]);\n// b\"sk\"\nexport const LABEL_SK = new Uint8Array([115, 107]);\n","/**\n * The minimum inplementation of bignum to derive an EC key pair.\n */\nexport class Bignum {\n constructor(size) {\n Object.defineProperty(this, \"_num\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._num = new Uint8Array(size);\n }\n val() {\n return this._num;\n }\n reset() {\n this._num.fill(0);\n }\n set(src) {\n if (src.length !== this._num.length) {\n throw new Error(\"Bignum.set: invalid argument\");\n }\n this._num.set(src);\n }\n isZero() {\n for (let i = 0; i < this._num.length; i++) {\n if (this._num[i] !== 0) {\n return false;\n }\n }\n return true;\n }\n lessThan(v) {\n if (v.length !== this._num.length) {\n throw new Error(\"Bignum.lessThan: invalid argument\");\n }\n for (let i = 0; i < this._num.length; i++) {\n if (this._num[i] < v[i]) {\n return true;\n }\n if (this._num[i] > v[i]) {\n return false;\n }\n }\n return false;\n }\n}\n","import { NativeAlgorithm } from \"../../algorithm.js\";\nimport { EMPTY } from \"../../consts.js\";\nimport { DeriveKeyPairError, DeserializeError, NotSupportedError, SerializeError, } from \"../../errors.js\";\nimport { KemId } from \"../../identifiers.js\";\nimport { KEM_USAGES, LABEL_DKP_PRK } from \"../../interfaces/dhkemPrimitives.js\";\nimport { Bignum } from \"../../utils/bignum.js\";\nimport { base64UrlToBytes, i2Osp } from \"../../utils/misc.js\";\n// b\"candidate\"\n// deno-fmt-ignore\nconst LABEL_CANDIDATE = new Uint8Array([\n 99, 97, 110, 100, 105, 100, 97, 116, 101,\n]);\n// the order of the curve being used.\n// deno-fmt-ignore\nconst ORDER_P_256 = new Uint8Array([\n 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xbc, 0xe6, 0xfa, 0xad, 0xa7, 0x17, 0x9e, 0x84,\n 0xf3, 0xb9, 0xca, 0xc2, 0xfc, 0x63, 0x25, 0x51,\n]);\n// deno-fmt-ignore\nconst ORDER_P_384 = new Uint8Array([\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xc7, 0x63, 0x4d, 0x81, 0xf4, 0x37, 0x2d, 0xdf,\n 0x58, 0x1a, 0x0d, 0xb2, 0x48, 0xb0, 0xa7, 0x7a,\n 0xec, 0xec, 0x19, 0x6a, 0xcc, 0xc5, 0x29, 0x73,\n]);\n// deno-fmt-ignore\nconst ORDER_P_521 = new Uint8Array([\n 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xfa, 0x51, 0x86, 0x87, 0x83, 0xbf, 0x2f,\n 0x96, 0x6b, 0x7f, 0xcc, 0x01, 0x48, 0xf7, 0x09,\n 0xa5, 0xd0, 0x3b, 0xb5, 0xc9, 0xb8, 0x89, 0x9c,\n 0x47, 0xae, 0xbb, 0x6f, 0xb7, 0x1e, 0x91, 0x38,\n 0x64, 0x09,\n]);\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_P_256 = new Uint8Array([\n 48, 65, 2, 1, 0, 48, 19, 6, 7, 42,\n 134, 72, 206, 61, 2, 1, 6, 8, 42, 134,\n 72, 206, 61, 3, 1, 7, 4, 39, 48, 37,\n 2, 1, 1, 4, 32,\n]);\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_P_384 = new Uint8Array([\n 48, 78, 2, 1, 0, 48, 16, 6, 7, 42,\n 134, 72, 206, 61, 2, 1, 6, 5, 43, 129,\n 4, 0, 34, 4, 55, 48, 53, 2, 1, 1,\n 4, 48,\n]);\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_P_521 = new Uint8Array([\n 48, 96, 2, 1, 0, 48, 16, 6, 7, 42,\n 134, 72, 206, 61, 2, 1, 6, 5, 43, 129,\n 4, 0, 35, 4, 73, 48, 71, 2, 1, 1,\n 4, 66,\n]);\nexport class Ec extends NativeAlgorithm {\n constructor(kem, hkdf) {\n super();\n Object.defineProperty(this, \"_hkdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_alg\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nPk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nSk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nDh\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // EC specific arguments for deriving key pair.\n Object.defineProperty(this, \"_order\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_bitmask\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_pkcs8AlgId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._hkdf = hkdf;\n switch (kem) {\n case KemId.DhkemP256HkdfSha256:\n this._alg = { name: \"ECDH\", namedCurve: \"P-256\" };\n this._nPk = 65;\n this._nSk = 32;\n this._nDh = 32;\n this._order = ORDER_P_256;\n this._bitmask = 0xFF;\n this._pkcs8AlgId = PKCS8_ALG_ID_P_256;\n break;\n case KemId.DhkemP384HkdfSha384:\n this._alg = { name: \"ECDH\", namedCurve: \"P-384\" };\n this._nPk = 97;\n this._nSk = 48;\n this._nDh = 48;\n this._order = ORDER_P_384;\n this._bitmask = 0xFF;\n this._pkcs8AlgId = PKCS8_ALG_ID_P_384;\n break;\n default:\n // case KemId.DhkemP521HkdfSha512:\n this._alg = { name: \"ECDH\", namedCurve: \"P-521\" };\n this._nPk = 133;\n this._nSk = 66;\n this._nDh = 66;\n this._order = ORDER_P_521;\n this._bitmask = 0x01;\n this._pkcs8AlgId = PKCS8_ALG_ID_P_521;\n break;\n }\n }\n async serializePublicKey(key) {\n await this._setup();\n try {\n return await this._api.exportKey(\"raw\", key);\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePublicKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, true);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async serializePrivateKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n if (!(\"d\" in jwk)) {\n throw new Error(\"Not private key\");\n }\n return base64UrlToBytes(jwk[\"d\"]).buffer;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePrivateKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, false);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async importKey(format, key, isPublic) {\n await this._setup();\n try {\n if (format === \"raw\") {\n return await this._importRawKey(key, isPublic);\n }\n // jwk\n if (key instanceof ArrayBuffer) {\n throw new Error(\"Invalid jwk key format\");\n }\n return await this._importJWK(key, isPublic);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async generateKeyPair() {\n await this._setup();\n try {\n return await this._api.generateKey(this._alg, true, KEM_USAGES);\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n }\n async deriveKeyPair(ikm) {\n await this._setup();\n try {\n const dkpPrk = await this._hkdf.labeledExtract(EMPTY.buffer, LABEL_DKP_PRK, new Uint8Array(ikm));\n const bn = new Bignum(this._nSk);\n for (let counter = 0; bn.isZero() || !bn.lessThan(this._order); counter++) {\n if (counter > 255) {\n throw new Error(\"Faild to derive a key pair\");\n }\n const bytes = new Uint8Array(await this._hkdf.labeledExpand(dkpPrk, LABEL_CANDIDATE, i2Osp(counter, 1), this._nSk));\n bytes[0] = bytes[0] & this._bitmask;\n bn.set(bytes);\n }\n const sk = await this._deserializePkcs8Key(bn.val());\n bn.reset();\n return {\n privateKey: sk,\n publicKey: await this.derivePublicKey(sk),\n };\n }\n catch (e) {\n throw new DeriveKeyPairError(e);\n }\n }\n async derivePublicKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n delete jwk[\"d\"];\n delete jwk[\"key_ops\"];\n return await this._api.importKey(\"jwk\", jwk, this._alg, true, []);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async dh(sk, pk) {\n try {\n await this._setup();\n const bits = await this._api.deriveBits({\n name: \"ECDH\",\n public: pk,\n }, sk, this._nDh * 8);\n return bits;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async _importRawKey(key, isPublic) {\n if (isPublic && key.byteLength !== this._nPk) {\n throw new Error(\"Invalid public key for the ciphersuite\");\n }\n if (!isPublic && key.byteLength !== this._nSk) {\n throw new Error(\"Invalid private key for the ciphersuite\");\n }\n if (isPublic) {\n return await this._api.importKey(\"raw\", key, this._alg, true, []);\n }\n return await this._deserializePkcs8Key(new Uint8Array(key));\n }\n async _importJWK(key, isPublic) {\n if (typeof key.crv === \"undefined\" || key.crv !== this._alg.namedCurve) {\n throw new Error(`Invalid crv: ${key.crv}`);\n }\n if (isPublic) {\n if (typeof key.d !== \"undefined\") {\n throw new Error(\"Invalid key: `d` should not be set\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, []);\n }\n if (typeof key.d === \"undefined\") {\n throw new Error(\"Invalid key: `d` not found\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, KEM_USAGES);\n }\n async _deserializePkcs8Key(k) {\n const pkcs8Key = new Uint8Array(this._pkcs8AlgId.length + k.length);\n pkcs8Key.set(this._pkcs8AlgId, 0);\n pkcs8Key.set(k, this._pkcs8AlgId.length);\n return await this._api.importKey(\"pkcs8\", pkcs8Key, this._alg, true, KEM_USAGES);\n }\n}\n","import { EMPTY } from \"../consts.js\";\nimport { InvalidParamError } from \"../errors.js\";\nimport { KdfId } from \"../identifiers.js\";\nimport { NativeAlgorithm } from \"../algorithm.js\";\n// b\"HPKE-v1\"\nconst HPKE_VERSION = new Uint8Array([72, 80, 75, 69, 45, 118, 49]);\nexport class HkdfNative extends NativeAlgorithm {\n constructor() {\n super();\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha256\n });\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"_suiteId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: EMPTY\n });\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-256\",\n length: 256,\n }\n });\n }\n init(suiteId) {\n this._suiteId = suiteId;\n }\n buildLabeledIkm(label, ikm) {\n this._checkInit();\n const ret = new Uint8Array(7 + this._suiteId.byteLength + label.byteLength + ikm.byteLength);\n ret.set(HPKE_VERSION, 0);\n ret.set(this._suiteId, 7);\n ret.set(label, 7 + this._suiteId.byteLength);\n ret.set(ikm, 7 + this._suiteId.byteLength + label.byteLength);\n return ret;\n }\n buildLabeledInfo(label, info, len) {\n this._checkInit();\n const ret = new Uint8Array(9 + this._suiteId.byteLength + label.byteLength + info.byteLength);\n ret.set(new Uint8Array([0, len]), 0);\n ret.set(HPKE_VERSION, 2);\n ret.set(this._suiteId, 9);\n ret.set(label, 9 + this._suiteId.byteLength);\n ret.set(info, 9 + this._suiteId.byteLength + label.byteLength);\n return ret;\n }\n async extract(salt, ikm) {\n await this._setup();\n if (salt.byteLength === 0) {\n salt = new ArrayBuffer(this.hashSize);\n }\n if (salt.byteLength !== this.hashSize) {\n throw new InvalidParamError(\"The salt length must be the same as the hashSize\");\n }\n const key = await this._api.importKey(\"raw\", salt, this.algHash, false, [\n \"sign\",\n ]);\n return await this._api.sign(\"HMAC\", key, ikm);\n }\n async expand(prk, info, len) {\n await this._setup();\n const key = await this._api.importKey(\"raw\", prk, this.algHash, false, [\n \"sign\",\n ]);\n const okm = new ArrayBuffer(len);\n const p = new Uint8Array(okm);\n let prev = EMPTY;\n const mid = new Uint8Array(info);\n const tail = new Uint8Array(1);\n if (len > 255 * this.hashSize) {\n throw new Error(\"Entropy limit reached\");\n }\n const tmp = new Uint8Array(this.hashSize + mid.length + 1);\n for (let i = 1, cur = 0; cur < p.length; i++) {\n tail[0] = i;\n tmp.set(prev, 0);\n tmp.set(mid, prev.length);\n tmp.set(tail, prev.length + mid.length);\n prev = new Uint8Array(await this._api.sign(\"HMAC\", key, tmp.slice(0, prev.length + mid.length + 1)));\n if (p.length - cur >= prev.length) {\n p.set(prev, cur);\n cur += prev.length;\n }\n else {\n p.set(prev.slice(0, p.length - cur), cur);\n cur += p.length - cur;\n }\n }\n return okm;\n }\n async extractAndExpand(salt, ikm, info, len) {\n await this._setup();\n const baseKey = await this._api.importKey(\"raw\", ikm, \"HKDF\", false, [\"deriveBits\"]);\n return await this._api.deriveBits({\n name: \"HKDF\",\n hash: this.algHash.hash,\n salt: salt,\n info: info,\n }, baseKey, len * 8);\n }\n async labeledExtract(salt, label, ikm) {\n return await this.extract(salt, this.buildLabeledIkm(label, ikm).buffer);\n }\n async labeledExpand(prk, label, info, len) {\n return await this.expand(prk, this.buildLabeledInfo(label, info, len).buffer, len);\n }\n _checkInit() {\n if (this._suiteId === EMPTY) {\n throw new Error(\"Not initialized. Call init()\");\n }\n }\n}\nexport class HkdfSha256Native extends HkdfNative {\n constructor() {\n super(...arguments);\n /** KdfId.HkdfSha256 (0x0001) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha256\n });\n /** 32 */\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n /** The parameters for Web Cryptography API */\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-256\",\n length: 256,\n }\n });\n }\n}\nexport class HkdfSha384Native extends HkdfNative {\n constructor() {\n super(...arguments);\n /** KdfId.HkdfSha384 (0x0002) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha384\n });\n /** 48 */\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 48\n });\n /** The parameters for Web Cryptography API */\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-384\",\n length: 384,\n }\n });\n }\n}\nexport class HkdfSha512Native extends HkdfNative {\n constructor() {\n super(...arguments);\n /** KdfId.HkdfSha512 (0x0003) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KdfId.HkdfSha512\n });\n /** 64 */\n Object.defineProperty(this, \"hashSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 64\n });\n /** The parameters for Web Cryptography API */\n Object.defineProperty(this, \"algHash\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {\n name: \"HMAC\",\n hash: \"SHA-512\",\n length: 512,\n }\n });\n }\n}\n","// The key usages for AEAD.\nexport const AEAD_USAGES = [\"encrypt\", \"decrypt\"];\n","/**\n * This file is based on noble-curves (https://github.com/paulmillr/noble-curves).\n *\n * noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com)\n *\n * The original file is located at:\n * https://github.com/paulmillr/noble-curves/blob/b9d49d2b41d550571a0c5be443ecb62109fa3373/src/abstract/montgomery.ts\n */\n/**\n * Montgomery curve methods. It's not really whole montgomery curve,\n * just bunch of very specific methods for X25519 / X448 from\n * [RFC 7748](https://www.rfc-editor.org/rfc/rfc7748)\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { abytes, aInRange, bytesToNumberLE, copyBytes, numberToBytesLE, randomBytesAsync, validateObject, } from \"../utils/noble.js\";\nimport { createKeygen } from \"./curve.js\";\nimport { mod } from \"./modular.js\";\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nfunction validateOpts(curve) {\n validateObject(curve, {\n adjustScalarBytes: \"function\",\n powPminus2: \"function\",\n });\n return Object.freeze({ ...curve });\n}\nexport function montgomery(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { P, type, adjustScalarBytes, powPminus2, randomBytes: rand } = CURVE;\n const is25519 = type === \"x25519\";\n if (!is25519 && type !== \"x448\")\n throw new Error(\"invalid type\");\n const randomBytes_ = rand || randomBytesAsync;\n const montgomeryBits = is25519 ? 255 : 448;\n const fieldLen = is25519 ? 32 : 56;\n const Gu = is25519 ? BigInt(9) : BigInt(5);\n // RFC 7748 #5:\n // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and\n // (156326 - 2) / 4 = 39081 for curve448/X448\n // const a = is25519 ? 156326n : 486662n;\n const a24 = is25519 ? BigInt(121665) : BigInt(39081);\n // RFC: x25519 \"the resulting integer is of the form 2^254 plus\n // eight times a value between 0 and 2^251 - 1 (inclusive)\"\n // x448: \"2^447 plus four times a value between 0 and 2^445 - 1 (inclusive)\"\n const minScalar = is25519 ? _2n ** BigInt(254) : _2n ** BigInt(447);\n const maxAdded = is25519\n ? BigInt(8) * _2n ** BigInt(251) - _1n\n : BigInt(4) * _2n ** BigInt(445) - _1n;\n const maxScalar = minScalar + maxAdded + _1n; // (inclusive)\n const modP = (n) => mod(n, P);\n const GuBytes = encodeU(Gu);\n function encodeU(u) {\n return numberToBytesLE(modP(u), fieldLen);\n }\n function decodeU(u) {\n const _u = copyBytes(abytes(u, fieldLen, \"uCoordinate\"));\n // RFC: When receiving such an array, implementations of X25519\n // (but not X448) MUST mask the most significant bit in the final byte.\n if (is25519)\n _u[31] &= 127; // 0b0111_1111\n // RFC: Implementations MUST accept non-canonical values and process them as\n // if they had been reduced modulo the field prime. The non-canonical\n // values are 2^255 - 19 through 2^255 - 1 for X25519 and 2^448 - 2^224\n // - 1 through 2^448 - 1 for X448.\n return modP(bytesToNumberLE(_u));\n }\n function decodeScalar(scalar) {\n return bytesToNumberLE(adjustScalarBytes(copyBytes(abytes(scalar, fieldLen, \"scalar\"))));\n }\n function scalarMult(scalar, u) {\n const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar));\n // Some public keys are useless, of low-order. Curve author doesn't think\n // it needs to be validated, but we do it nonetheless.\n // https://cr.yp.to/ecdh.html#validate\n if (pu === _0n)\n throw new Error(\"invalid private or public key received\");\n return encodeU(pu);\n }\n // Computes public key from private. By doing scalar multiplication of base point.\n function scalarMultBase(scalar) {\n return scalarMult(scalar, GuBytes);\n }\n const getPublicKey = scalarMultBase;\n const getSharedSecret = scalarMult;\n // cswap from RFC7748 \"example code\"\n function cswap(swap, x_2, x_3) {\n // dummy = mask(swap) AND (x_2 XOR x_3)\n // Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n // and x_3, computed, e.g., as mask(swap) = 0 - swap.\n const dummy = modP(swap * (x_2 - x_3));\n x_2 = modP(x_2 - dummy); // x_2 = x_2 XOR dummy\n x_3 = modP(x_3 + dummy); // x_3 = x_3 XOR dummy\n return { x_2, x_3 };\n }\n /**\n * Montgomery x-only multiplication ladder.\n * @param pointU u coordinate (x) on Montgomery Curve 25519\n * @param scalar by which the point would be multiplied\n * @returns new Point on Montgomery curve\n */\n function montgomeryLadder(u, scalar) {\n aInRange(\"u\", u, _0n, P);\n aInRange(\"scalar\", scalar, minScalar, maxScalar);\n const k = scalar;\n const x_1 = u;\n let x_2 = _1n;\n let z_2 = _0n;\n let x_3 = u;\n let z_3 = _1n;\n let swap = _0n;\n for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n const k_t = (k >> t) & _1n;\n swap ^= k_t;\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n swap = k_t;\n const A = x_2 + z_2;\n const AA = modP(A * A);\n const B = x_2 - z_2;\n const BB = modP(B * B);\n const E = AA - BB;\n const C = x_3 + z_3;\n const D = x_3 - z_3;\n const DA = modP(D * A);\n const CB = modP(C * B);\n const dacb = DA + CB;\n const da_cb = DA - CB;\n x_3 = modP(dacb * dacb);\n z_3 = modP(x_1 * modP(da_cb * da_cb));\n x_2 = modP(AA * BB);\n z_2 = modP(E * (AA + modP(a24 * E)));\n }\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n const z2 = powPminus2(z_2); // `Fp.pow(x, P - _2n)` is much slower equivalent\n return modP(x_2 * z2); // Return x_2 * (z_2^(p - 2))\n }\n const lengths = {\n secretKey: fieldLen,\n publicKey: fieldLen,\n seed: fieldLen,\n };\n const randomSecretKey = async (seed) => {\n if (seed === undefined) {\n seed = await randomBytes_(fieldLen);\n }\n abytes(seed, lengths.seed, \"seed\");\n return seed;\n };\n const utils = { randomSecretKey };\n return Object.freeze({\n keygen: createKeygen(randomSecretKey, getPublicKey),\n getSharedSecret,\n getPublicKey,\n scalarMult,\n scalarMultBase,\n utils,\n GuBytes: GuBytes.slice(),\n lengths,\n });\n}\n","import { AEAD_USAGES, AeadId, NativeAlgorithm } from \"@hpke/common\";\nexport class AesGcmContext extends NativeAlgorithm {\n constructor(key) {\n super();\n Object.defineProperty(this, \"_rawKey\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_key\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: undefined\n });\n this._rawKey = key;\n }\n async seal(iv, data, aad) {\n await this._setupKey();\n const alg = {\n name: \"AES-GCM\",\n iv: iv,\n additionalData: aad,\n };\n const ct = await this._api.encrypt(alg, this._key, data);\n return ct;\n }\n async open(iv, data, aad) {\n await this._setupKey();\n const alg = {\n name: \"AES-GCM\",\n iv: iv,\n additionalData: aad,\n };\n const pt = await this._api.decrypt(alg, this._key, data);\n return pt;\n }\n async _setupKey() {\n if (this._key !== undefined) {\n return;\n }\n await this._setup();\n const key = await this._importKey(this._rawKey);\n (new Uint8Array(this._rawKey)).fill(0);\n this._key = key;\n return;\n }\n async _importKey(key) {\n return await this._api.importKey(\"raw\", key, { name: \"AES-GCM\" }, true, AEAD_USAGES);\n }\n}\n/**\n * The AES-128-GCM for HPKE AEAD implementing {@link AeadInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `aead` parameter of {@link CipherSuiteParams} instead of `AeadId.Aes128Gcm`.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class Aes128Gcm {\n constructor() {\n /** AeadId.Aes128Gcm (0x0001) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: AeadId.Aes128Gcm\n });\n /** 16 */\n Object.defineProperty(this, \"keySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 16\n });\n /** 12 */\n Object.defineProperty(this, \"nonceSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 12\n });\n /** 16 */\n Object.defineProperty(this, \"tagSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 16\n });\n }\n createEncryptionContext(key) {\n return new AesGcmContext(key);\n }\n}\n/**\n * The AES-256-GCM for HPKE AEAD implementing {@link AeadInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `aead` parameter of {@link CipherSuiteParams} instead of `AeadId.Aes256Gcm`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes256Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes256Gcm(),\n * });\n * ```\n */\nexport class Aes256Gcm extends Aes128Gcm {\n constructor() {\n super(...arguments);\n /** AeadId.Aes256Gcm (0x0002) */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: AeadId.Aes256Gcm\n });\n /** 32 */\n Object.defineProperty(this, \"keySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n /** 12 */\n Object.defineProperty(this, \"nonceSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 12\n });\n /** 16 */\n Object.defineProperty(this, \"tagSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 16\n });\n }\n}\n","import { NotSupportedError } from \"@hpke/common\";\nexport function emitNotSupported() {\n return new Promise((_resolve, reject) => {\n reject(new NotSupportedError(\"Not supported\"));\n });\n}\n","import { ExportError, INPUT_LENGTH_LIMIT, InvalidParamError, } from \"@hpke/common\";\nimport { emitNotSupported } from \"./utils/emitNotSupported.js\";\n// b\"sec\"\nconst LABEL_SEC = new Uint8Array([115, 101, 99]);\nexport class ExporterContextImpl {\n constructor(api, kdf, exporterSecret) {\n Object.defineProperty(this, \"_api\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"exporterSecret\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_kdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._api = api;\n this._kdf = kdf;\n this.exporterSecret = exporterSecret;\n }\n async seal(_data, _aad) {\n return await emitNotSupported();\n }\n async open(_data, _aad) {\n return await emitNotSupported();\n }\n async export(exporterContext, len) {\n if (exporterContext.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long exporter context\");\n }\n try {\n return await this._kdf.labeledExpand(this.exporterSecret, LABEL_SEC, new Uint8Array(exporterContext), len);\n }\n catch (e) {\n throw new ExportError(e);\n }\n }\n}\nexport class RecipientExporterContextImpl extends ExporterContextImpl {\n}\nexport class SenderExporterContextImpl extends ExporterContextImpl {\n constructor(api, kdf, exporterSecret, enc) {\n super(api, kdf, exporterSecret);\n Object.defineProperty(this, \"enc\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.enc = enc;\n return;\n }\n}\n","import { i2Osp, MessageLimitReachedError, xor } from \"@hpke/common\";\nimport { ExporterContextImpl } from \"./exporterContext.js\";\nexport class EncryptionContextImpl extends ExporterContextImpl {\n constructor(api, kdf, params) {\n super(api, kdf, params.exporterSecret);\n // AEAD id.\n Object.defineProperty(this, \"_aead\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The length in bytes of a key for the algorithm.\n Object.defineProperty(this, \"_nK\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The length in bytes of a nonce for the algorithm.\n Object.defineProperty(this, \"_nN\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The length in bytes of an authentication tag for the algorithm.\n Object.defineProperty(this, \"_nT\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // The end-to-end encryption key information.\n Object.defineProperty(this, \"_ctx\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n if (params.key === undefined || params.baseNonce === undefined ||\n params.seq === undefined) {\n throw new Error(\"Required parameters are missing\");\n }\n this._aead = params.aead;\n this._nK = this._aead.keySize;\n this._nN = this._aead.nonceSize;\n this._nT = this._aead.tagSize;\n const key = this._aead.createEncryptionContext(params.key);\n this._ctx = {\n key: key,\n baseNonce: params.baseNonce,\n seq: params.seq,\n };\n }\n computeNonce(k) {\n const seqBytes = i2Osp(k.seq, k.baseNonce.byteLength);\n return xor(k.baseNonce, seqBytes).buffer;\n }\n incrementSeq(k) {\n // if (this.seq >= (1 << (8 * this.baseNonce.byteLength)) - 1) {\n if (k.seq > Number.MAX_SAFE_INTEGER) {\n throw new MessageLimitReachedError(\"Message limit reached\");\n }\n k.seq += 1;\n return;\n }\n}\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _Mutex_locked;\nexport class Mutex {\n constructor() {\n _Mutex_locked.set(this, Promise.resolve());\n }\n async lock() {\n let releaseLock;\n const nextLock = new Promise((resolve) => {\n releaseLock = resolve;\n });\n const previousLock = __classPrivateFieldGet(this, _Mutex_locked, \"f\");\n __classPrivateFieldSet(this, _Mutex_locked, nextLock, \"f\");\n await previousLock;\n return releaseLock;\n }\n}\n_Mutex_locked = new WeakMap();\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _RecipientContextImpl_mutex;\nimport { EMPTY, OpenError } from \"@hpke/common\";\nimport { EncryptionContextImpl } from \"./encryptionContext.js\";\nimport { Mutex } from \"./mutex.js\";\nexport class RecipientContextImpl extends EncryptionContextImpl {\n constructor() {\n super(...arguments);\n _RecipientContextImpl_mutex.set(this, void 0);\n }\n async open(data, aad = EMPTY.buffer) {\n __classPrivateFieldSet(this, _RecipientContextImpl_mutex, __classPrivateFieldGet(this, _RecipientContextImpl_mutex, \"f\") ?? new Mutex(), \"f\");\n const release = await __classPrivateFieldGet(this, _RecipientContextImpl_mutex, \"f\").lock();\n let pt;\n try {\n pt = await this._ctx.key.open(this.computeNonce(this._ctx), data, aad);\n }\n catch (e) {\n throw new OpenError(e);\n }\n finally {\n release();\n }\n this.incrementSeq(this._ctx);\n return pt;\n }\n}\n_RecipientContextImpl_mutex = new WeakMap();\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _SenderContextImpl_mutex;\nimport { EMPTY, SealError } from \"@hpke/common\";\nimport { EncryptionContextImpl } from \"./encryptionContext.js\";\nimport { Mutex } from \"./mutex.js\";\nexport class SenderContextImpl extends EncryptionContextImpl {\n constructor(api, kdf, params, enc) {\n super(api, kdf, params);\n Object.defineProperty(this, \"enc\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n _SenderContextImpl_mutex.set(this, void 0);\n this.enc = enc;\n }\n async seal(data, aad = EMPTY.buffer) {\n __classPrivateFieldSet(this, _SenderContextImpl_mutex, __classPrivateFieldGet(this, _SenderContextImpl_mutex, \"f\") ?? new Mutex(), \"f\");\n const release = await __classPrivateFieldGet(this, _SenderContextImpl_mutex, \"f\").lock();\n let ct;\n try {\n ct = await this._ctx.key.seal(this.computeNonce(this._ctx), data, aad);\n }\n catch (e) {\n throw new SealError(e);\n }\n finally {\n release();\n }\n this.incrementSeq(this._ctx);\n return ct;\n }\n}\n_SenderContextImpl_mutex = new WeakMap();\n","import { AeadId, EMPTY, i2Osp, INFO_LENGTH_LIMIT, INPUT_LENGTH_LIMIT, InvalidParamError, MINIMUM_PSK_LENGTH, Mode, NativeAlgorithm, } from \"@hpke/common\";\nimport { RecipientExporterContextImpl, SenderExporterContextImpl, } from \"./exporterContext.js\";\nimport { RecipientContextImpl } from \"./recipientContext.js\";\nimport { SenderContextImpl } from \"./senderContext.js\";\n// b\"base_nonce\"\n// deno-fmt-ignore\nconst LABEL_BASE_NONCE = new Uint8Array([\n 98, 97, 115, 101, 95, 110, 111, 110, 99, 101,\n]);\n// b\"exp\"\nconst LABEL_EXP = new Uint8Array([101, 120, 112]);\n// b\"info_hash\"\n// deno-fmt-ignore\nconst LABEL_INFO_HASH = new Uint8Array([\n 105, 110, 102, 111, 95, 104, 97, 115, 104,\n]);\n// b\"key\"\nconst LABEL_KEY = new Uint8Array([107, 101, 121]);\n// b\"psk_id_hash\"\n// deno-fmt-ignore\nconst LABEL_PSK_ID_HASH = new Uint8Array([\n 112, 115, 107, 95, 105, 100, 95, 104, 97, 115, 104,\n]);\n// b\"secret\"\nconst LABEL_SECRET = new Uint8Array([115, 101, 99, 114, 101, 116]);\n// b\"HPKE\"\n// deno-fmt-ignore\nconst SUITE_ID_HEADER_HPKE = new Uint8Array([\n 72, 80, 75, 69, 0, 0, 0, 0, 0, 0,\n]);\n/**\n * The Hybrid Public Key Encryption (HPKE) ciphersuite,\n * which is implemented using only\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n *\n * This is the super class of {@link CipherSuite} and the same as\n * {@link https://jsr.io/@hpke/core/doc/~/CipherSuite | @hpke/core#CipherSuite} as follows:\n * which supports only the ciphersuites that can be implemented on the native\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n * Therefore, the following cryptographic algorithms are not supported for now:\n * - DHKEM(X25519, HKDF-SHA256)\n * - DHKEM(X448, HKDF-SHA512)\n * - ChaCha20Poly1305\n *\n * In addtion, the HKDF functions contained in this class can only derive\n * keys of the same length as the `hashSize`.\n *\n * If you want to use the unsupported cryptographic algorithms\n * above or derive keys longer than the `hashSize`,\n * please use {@link CipherSuite}.\n *\n * This class provides following functions:\n *\n * - Creates encryption contexts both for senders and recipients.\n * - {@link createSenderContext}\n * - {@link createRecipientContext}\n * - Provides single-shot encryption API.\n * - {@link seal}\n * - {@link open}\n *\n * The calling of the constructor of this class is the starting\n * point for HPKE operations for both senders and recipients.\n *\n * @example Use only ciphersuites supported by Web Cryptography API.\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * CipherSuite,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n *\n * @example Use a ciphersuite which is currently not supported by Web Cryptography API.\n *\n * ```ts\n * import { Aes128Gcm, HkdfSha256, CipherSuite } from \"@hpke/core\";\n * // Use an extension module.\n * import { DhkemX25519HkdfSha256 } from \"@hpke/dhkem-x25519\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemX25519HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class CipherSuiteNative extends NativeAlgorithm {\n /**\n * @param params A set of parameters for building a cipher suite.\n *\n * If the error occurred, throws {@link InvalidParamError}.\n *\n * @throws {@link InvalidParamError}\n */\n constructor(params) {\n super();\n Object.defineProperty(this, \"_kem\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_kdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_aead\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_suiteId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n // KEM\n if (typeof params.kem === \"number\") {\n throw new InvalidParamError(\"KemId cannot be used\");\n }\n this._kem = params.kem;\n // KDF\n if (typeof params.kdf === \"number\") {\n throw new InvalidParamError(\"KdfId cannot be used\");\n }\n this._kdf = params.kdf;\n // AEAD\n if (typeof params.aead === \"number\") {\n throw new InvalidParamError(\"AeadId cannot be used\");\n }\n this._aead = params.aead;\n this._suiteId = new Uint8Array(SUITE_ID_HEADER_HPKE);\n this._suiteId.set(i2Osp(this._kem.id, 2), 4);\n this._suiteId.set(i2Osp(this._kdf.id, 2), 6);\n this._suiteId.set(i2Osp(this._aead.id, 2), 8);\n this._kdf.init(this._suiteId);\n }\n /**\n * Gets the KEM context of the ciphersuite.\n */\n get kem() {\n return this._kem;\n }\n /**\n * Gets the KDF context of the ciphersuite.\n */\n get kdf() {\n return this._kdf;\n }\n /**\n * Gets the AEAD context of the ciphersuite.\n */\n get aead() {\n return this._aead;\n }\n /**\n * Creates an encryption context for a sender.\n *\n * If the error occurred, throws {@link DecapError} | {@link ValidationError}.\n *\n * @param params A set of parameters for the sender encryption context.\n * @returns A sender encryption context.\n * @throws {@link EncapError}, {@link ValidationError}\n */\n async createSenderContext(params) {\n this._validateInputLength(params);\n await this._setup();\n const dh = await this._kem.encap(params);\n let mode;\n if (params.psk !== undefined) {\n mode = params.senderKey !== undefined ? Mode.AuthPsk : Mode.Psk;\n }\n else {\n mode = params.senderKey !== undefined ? Mode.Auth : Mode.Base;\n }\n return await this._keyScheduleS(mode, dh.sharedSecret, dh.enc, params);\n }\n /**\n * Creates an encryption context for a recipient.\n *\n * If the error occurred, throws {@link DecapError}\n * | {@link DeserializeError} | {@link ValidationError}.\n *\n * @param params A set of parameters for the recipient encryption context.\n * @returns A recipient encryption context.\n * @throws {@link DecapError}, {@link DeserializeError}, {@link ValidationError}\n */\n async createRecipientContext(params) {\n this._validateInputLength(params);\n await this._setup();\n const sharedSecret = await this._kem.decap(params);\n let mode;\n if (params.psk !== undefined) {\n mode = params.senderPublicKey !== undefined ? Mode.AuthPsk : Mode.Psk;\n }\n else {\n mode = params.senderPublicKey !== undefined ? Mode.Auth : Mode.Base;\n }\n return await this._keyScheduleR(mode, sharedSecret, params);\n }\n /**\n * Encrypts a message to a recipient.\n *\n * If the error occurred, throws `EncapError` | `MessageLimitReachedError` | `SealError` | `ValidationError`.\n *\n * @param params A set of parameters for building a sender encryption context.\n * @param pt A plain text as bytes to be encrypted.\n * @param aad Additional authenticated data as bytes fed by an application.\n * @returns A cipher text and an encapsulated key as bytes.\n * @throws {@link EncapError}, {@link MessageLimitReachedError}, {@link SealError}, {@link ValidationError}\n */\n async seal(params, pt, aad = EMPTY.buffer) {\n const ctx = await this.createSenderContext(params);\n return {\n ct: await ctx.seal(pt, aad),\n enc: ctx.enc,\n };\n }\n /**\n * Decrypts a message from a sender.\n *\n * If the error occurred, throws `DecapError` | `DeserializeError` | `OpenError` | `ValidationError`.\n *\n * @param params A set of parameters for building a recipient encryption context.\n * @param ct An encrypted text as bytes to be decrypted.\n * @param aad Additional authenticated data as bytes fed by an application.\n * @returns A decrypted plain text as bytes.\n * @throws {@link DecapError}, {@link DeserializeError}, {@link OpenError}, {@link ValidationError}\n */\n async open(params, ct, aad = EMPTY.buffer) {\n const ctx = await this.createRecipientContext(params);\n return await ctx.open(ct, aad);\n }\n // private verifyPskInputs(mode: Mode, params: KeyScheduleParams) {\n // const gotPsk = (params.psk !== undefined);\n // const gotPskId = (params.psk !== undefined && params.psk.id.byteLength > 0);\n // if (gotPsk !== gotPskId) {\n // throw new Error('Inconsistent PSK inputs');\n // }\n // if (gotPsk && (mode === Mode.Base || mode === Mode.Auth)) {\n // throw new Error('PSK input provided when not needed');\n // }\n // if (!gotPsk && (mode === Mode.Psk || mode === Mode.AuthPsk)) {\n // throw new Error('Missing required PSK input');\n // }\n // return;\n // }\n async _keySchedule(mode, sharedSecret, params) {\n // Currently, there is no point in executing this function\n // because this hpke library does not allow users to explicitly specify the mode.\n //\n // this.verifyPskInputs(mode, params);\n const pskId = params.psk === undefined\n ? EMPTY\n : new Uint8Array(params.psk.id);\n const pskIdHash = await this._kdf.labeledExtract(EMPTY.buffer, LABEL_PSK_ID_HASH, pskId);\n const info = params.info === undefined\n ? EMPTY\n : new Uint8Array(params.info);\n const infoHash = await this._kdf.labeledExtract(EMPTY.buffer, LABEL_INFO_HASH, info);\n const keyScheduleContext = new Uint8Array(1 + pskIdHash.byteLength + infoHash.byteLength);\n keyScheduleContext.set(new Uint8Array([mode]), 0);\n keyScheduleContext.set(new Uint8Array(pskIdHash), 1);\n keyScheduleContext.set(new Uint8Array(infoHash), 1 + pskIdHash.byteLength);\n const psk = params.psk === undefined\n ? EMPTY\n : new Uint8Array(params.psk.key);\n const ikm = this._kdf.buildLabeledIkm(LABEL_SECRET, psk)\n .buffer;\n const exporterSecretInfo = this._kdf.buildLabeledInfo(LABEL_EXP, keyScheduleContext, this._kdf.hashSize).buffer;\n const exporterSecret = await this._kdf.extractAndExpand(sharedSecret, ikm, exporterSecretInfo, this._kdf.hashSize);\n if (this._aead.id === AeadId.ExportOnly) {\n return { aead: this._aead, exporterSecret: exporterSecret };\n }\n const keyInfo = this._kdf.buildLabeledInfo(LABEL_KEY, keyScheduleContext, this._aead.keySize).buffer;\n const key = await this._kdf.extractAndExpand(sharedSecret, ikm, keyInfo, this._aead.keySize);\n const baseNonceInfo = this._kdf.buildLabeledInfo(LABEL_BASE_NONCE, keyScheduleContext, this._aead.nonceSize).buffer;\n const baseNonce = await this._kdf.extractAndExpand(sharedSecret, ikm, baseNonceInfo, this._aead.nonceSize);\n return {\n aead: this._aead,\n exporterSecret: exporterSecret,\n key: key,\n baseNonce: new Uint8Array(baseNonce),\n seq: 0,\n };\n }\n async _keyScheduleS(mode, sharedSecret, enc, params) {\n const res = await this._keySchedule(mode, sharedSecret, params);\n if (res.key === undefined) {\n return new SenderExporterContextImpl(this._api, this._kdf, res.exporterSecret, enc);\n }\n return new SenderContextImpl(this._api, this._kdf, res, enc);\n }\n async _keyScheduleR(mode, sharedSecret, params) {\n const res = await this._keySchedule(mode, sharedSecret, params);\n if (res.key === undefined) {\n return new RecipientExporterContextImpl(this._api, this._kdf, res.exporterSecret);\n }\n return new RecipientContextImpl(this._api, this._kdf, res);\n }\n _validateInputLength(params) {\n if (params.info !== undefined &&\n params.info.byteLength > INFO_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long info\");\n }\n if (params.psk !== undefined) {\n if (params.psk.key.byteLength < MINIMUM_PSK_LENGTH) {\n throw new InvalidParamError(`PSK must have at least ${MINIMUM_PSK_LENGTH} bytes`);\n }\n if (params.psk.key.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long psk.key\");\n }\n if (params.psk.id.byteLength > INPUT_LENGTH_LIMIT) {\n throw new InvalidParamError(\"Too long psk.id\");\n }\n }\n return;\n }\n}\n","import { Dhkem, Ec, HkdfSha256Native, HkdfSha384Native, HkdfSha512Native, KemId, } from \"@hpke/common\";\nexport class DhkemP256HkdfSha256Native extends Dhkem {\n constructor() {\n const kdf = new HkdfSha256Native();\n const prim = new Ec(KemId.DhkemP256HkdfSha256, kdf);\n super(KemId.DhkemP256HkdfSha256, prim, kdf);\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KemId.DhkemP256HkdfSha256\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 65\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 65\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 32\n });\n }\n}\nexport class DhkemP384HkdfSha384Native extends Dhkem {\n constructor() {\n const kdf = new HkdfSha384Native();\n const prim = new Ec(KemId.DhkemP384HkdfSha384, kdf);\n super(KemId.DhkemP384HkdfSha384, prim, kdf);\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KemId.DhkemP384HkdfSha384\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 48\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 97\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 97\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 48\n });\n }\n}\nexport class DhkemP521HkdfSha512Native extends Dhkem {\n constructor() {\n const kdf = new HkdfSha512Native();\n const prim = new Ec(KemId.DhkemP521HkdfSha512, kdf);\n super(KemId.DhkemP521HkdfSha512, prim, kdf);\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: KemId.DhkemP521HkdfSha512\n });\n Object.defineProperty(this, \"secretSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 64\n });\n Object.defineProperty(this, \"encSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 133\n });\n Object.defineProperty(this, \"publicKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 133\n });\n Object.defineProperty(this, \"privateKeySize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 64\n });\n }\n}\n","import { HkdfSha256Native, HkdfSha384Native, HkdfSha512Native, } from \"@hpke/common\";\nimport { CipherSuiteNative } from \"./cipherSuiteNative.js\";\nimport { DhkemP256HkdfSha256Native, DhkemP384HkdfSha384Native, DhkemP521HkdfSha512Native, } from \"./kems/dhkemNative.js\";\n/**\n * The Hybrid Public Key Encryption (HPKE) ciphersuite,\n * which is implemented using only\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n *\n * This class is the same as\n * {@link https://jsr.io/@hpke/core/doc/~/CipherSuiteNative | @hpke/core#CipherSuiteNative} as follows:\n * which supports only the ciphersuites that can be implemented on the native\n * {@link https://www.w3.org/TR/WebCryptoAPI/ | Web Cryptography API}.\n * Therefore, the following cryptographic algorithms are not supported for now:\n * - `DHKEM(X25519, HKDF-SHA256)`\n * - `DHKEM(X448, HKDF-SHA512)`\n * - `ChaCha20Poly1305`\n *\n * In addtion, the HKDF functions contained in this `CipherSuiteNative`\n * class can only derive keys of the same length as the `hashSize`.\n *\n * If you want to use the unsupported cryptographic algorithms\n * above or derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * This class provides following functions:\n *\n * - Creates encryption contexts both for senders and recipients.\n * - {@link createSenderContext}\n * - {@link createRecipientContext}\n * - Provides single-shot encryption API.\n * - {@link seal}\n * - {@link open}\n *\n * The calling of the constructor of this class is the starting\n * point for HPKE operations for both senders and recipients.\n *\n * @example Use only ciphersuites supported by Web Cryptography API.\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * CipherSuite,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n *\n * @example Use a ciphersuite which is currently not supported by Web Cryptography API.\n *\n * ```ts\n * import { Aes128Gcm, HkdfSha256, CipherSuite } from \"@hpke/core\";\n * import { DhkemX25519HkdfSha256 } from \"@hpke/dhkem-x25519\";\n * const suite = new CipherSuite({\n * kem: new DhkemX25519HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class CipherSuite extends CipherSuiteNative {\n}\n/**\n * The DHKEM(P-256, HKDF-SHA256) for HPKE KEM implementing {@link KemInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KemId.DhkemP256HkdfSha256`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class DhkemP256HkdfSha256 extends DhkemP256HkdfSha256Native {\n}\n/**\n * The DHKEM(P-384, HKDF-SHA384) for HPKE KEM implementing {@link KemInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KemId.DhkemP384HkdfSha384`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP384HkdfSha384,\n * HkdfSha384,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP384HkdfSha384(),\n * kdf: new HkdfSha384(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class DhkemP384HkdfSha384 extends DhkemP384HkdfSha384Native {\n}\n/**\n * The DHKEM(P-521, HKDF-SHA512) for HPKE KEM implementing {@link KemInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KemId.DhkemP521HkdfSha512`\n * as follows:\n *\n * @example\n *\n * ```ts\n * import {\n * Aes256Gcm,\n * CipherSuite,\n * DhkemP521HkdfSha512,\n * HkdfSha512,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP521HkdfSha512(),\n * kdf: new HkdfSha512(),\n * aead: new Aes256Gcm(),\n * });\n * ```\n */\nexport class DhkemP521HkdfSha512 extends DhkemP521HkdfSha512Native {\n}\n/**\n * The HKDF-SHA256 for HPKE KDF implementing {@link KdfInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KdfId.HkdfSha256`.\n *\n * The KDF class can only derive keys of the same length as the `hashSize`.\n * If you want to derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP256HkdfSha256,\n * HkdfSha256,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP256HkdfSha256(),\n * kdf: new HkdfSha256(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class HkdfSha256 extends HkdfSha256Native {\n}\n/**\n * The HKDF-SHA384 for HPKE KDF implementing {@link KdfInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KdfId.HkdfSha384`.\n *\n * The KDF class can only derive keys of the same length as the `hashSize`.\n * If you want to derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes128Gcm,\n * CipherSuite,\n * DhkemP384HkdfSha384,\n * HkdfSha384,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP384HkdfSha384(),\n * kdf: new HkdfSha384(),\n * aead: new Aes128Gcm(),\n * });\n * ```\n */\nexport class HkdfSha384 extends HkdfSha384Native {\n}\n/**\n * The HKDF-SHA512 for HPKE KDF implementing {@link KdfInterface}.\n *\n * When using `@hpke/core`, the instance of this class must be specified\n * to the `kem` parameter of {@link CipherSuiteParams} instead of `KdfId.HkdfSha512`.\n *\n * The KDF class can only derive keys of the same length as the `hashSize`.\n * If you want to derive keys longer than the `hashSize`,\n * please use {@link https://jsr.io/@hpke/hpke-js/doc/~/CipherSuite | hpke-js#CipherSuite}.\n *\n * @example\n *\n * ```ts\n * import {\n * Aes256Gcm,\n * CipherSuite,\n * DhkemP521HkdfSha512,\n * HkdfSha512,\n * } from \"@hpke/core\";\n *\n * const suite = new CipherSuite({\n * kem: new DhkemP521HkdfSha512(),\n * kdf: new HkdfSha512(),\n * aead: new Aes256Gcm(),\n * });\n * ```\n */\nexport class HkdfSha512 extends HkdfSha512Native {\n}\n","import { base64UrlToBytes, DeriveKeyPairError, DeserializeError, EMPTY, KEM_USAGES, LABEL_DKP_PRK, LABEL_SK, NativeAlgorithm, NotSupportedError, SerializeError, } from \"@hpke/common\";\nconst ALG_NAME = \"X25519\";\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_X25519 = new Uint8Array([\n 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06,\n 0x03, 0x2b, 0x65, 0x6e, 0x04, 0x22, 0x04, 0x20,\n]);\nexport class X25519 extends NativeAlgorithm {\n constructor(hkdf) {\n super();\n Object.defineProperty(this, \"_hkdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_alg\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nPk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nSk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nDh\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_pkcs8AlgId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._alg = { name: ALG_NAME };\n this._hkdf = hkdf;\n this._nPk = 32;\n this._nSk = 32;\n this._nDh = 32;\n this._pkcs8AlgId = PKCS8_ALG_ID_X25519;\n }\n async serializePublicKey(key) {\n await this._setup();\n try {\n return await this._api.exportKey(\"raw\", key);\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePublicKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, true);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async serializePrivateKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n if (!(\"d\" in jwk)) {\n throw new Error(\"Not private key\");\n }\n return base64UrlToBytes(jwk[\"d\"]).buffer;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePrivateKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, false);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async importKey(format, key, isPublic) {\n await this._setup();\n try {\n if (format === \"raw\") {\n return await this._importRawKey(key, isPublic);\n }\n // jwk\n if (key instanceof ArrayBuffer) {\n throw new Error(\"Invalid jwk key format\");\n }\n return await this._importJWK(key, isPublic);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async generateKeyPair() {\n await this._setup();\n try {\n return await this._api.generateKey(ALG_NAME, true, KEM_USAGES);\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n }\n async deriveKeyPair(ikm) {\n await this._setup();\n try {\n const dkpPrk = await this._hkdf.labeledExtract(EMPTY.buffer, LABEL_DKP_PRK, new Uint8Array(ikm));\n const rawSk = await this._hkdf.labeledExpand(dkpPrk, LABEL_SK, EMPTY, this._nSk);\n const rawSkBytes = new Uint8Array(rawSk);\n const sk = await this._deserializePkcs8Key(rawSkBytes);\n rawSkBytes.fill(0);\n return {\n privateKey: sk,\n publicKey: await this.derivePublicKey(sk),\n };\n }\n catch (e) {\n throw new DeriveKeyPairError(e);\n }\n }\n async derivePublicKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n delete jwk[\"d\"];\n delete jwk[\"key_ops\"];\n return await this._api.importKey(\"jwk\", jwk, this._alg, true, []);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async dh(sk, pk) {\n await this._setup();\n try {\n const bits = await this._api.deriveBits({\n name: ALG_NAME,\n public: pk,\n }, sk, this._nDh * 8);\n return bits;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async _importRawKey(key, isPublic) {\n if (isPublic && key.byteLength !== this._nPk) {\n throw new Error(\"Invalid public key for the ciphersuite\");\n }\n if (!isPublic && key.byteLength !== this._nSk) {\n throw new Error(\"Invalid private key for the ciphersuite\");\n }\n if (isPublic) {\n return await this._api.importKey(\"raw\", key, this._alg, true, []);\n }\n return await this._deserializePkcs8Key(new Uint8Array(key));\n }\n async _importJWK(key, isPublic) {\n if (typeof key.kty === \"undefined\" || key.kty !== \"OKP\") {\n throw new Error(`Invalid kty: ${key.crv}`);\n }\n if (typeof key.crv === \"undefined\" || key.crv !== ALG_NAME) {\n throw new Error(`Invalid crv: ${key.crv}`);\n }\n if (isPublic) {\n if (typeof key.d !== \"undefined\") {\n throw new Error(\"Invalid key: `d` should not be set\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, []);\n }\n if (typeof key.d === \"undefined\") {\n throw new Error(\"Invalid key: `d` not found\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, KEM_USAGES);\n }\n async _deserializePkcs8Key(k) {\n const pkcs8Key = new Uint8Array(this._pkcs8AlgId.length + k.length);\n pkcs8Key.set(this._pkcs8AlgId, 0);\n pkcs8Key.set(k, this._pkcs8AlgId.length);\n return await this._api.importKey(\"pkcs8\", pkcs8Key, this._alg, true, KEM_USAGES);\n }\n}\n","import { base64UrlToBytes, DeriveKeyPairError, DeserializeError, EMPTY, KEM_USAGES, LABEL_DKP_PRK, LABEL_SK, NativeAlgorithm, NotSupportedError, SerializeError, } from \"@hpke/common\";\nconst ALG_NAME = \"X448\";\n// deno-fmt-ignore\nconst PKCS8_ALG_ID_X448 = new Uint8Array([\n 0x30, 0x46, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06,\n 0x03, 0x2b, 0x65, 0x6f, 0x04, 0x3a, 0x04, 0x38,\n]);\nexport class X448 extends NativeAlgorithm {\n constructor(hkdf) {\n super();\n Object.defineProperty(this, \"_hkdf\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_alg\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nPk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nSk\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_nDh\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_pkcs8AlgId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._alg = { name: ALG_NAME };\n this._hkdf = hkdf;\n this._nPk = 56;\n this._nSk = 56;\n this._nDh = 56;\n this._pkcs8AlgId = PKCS8_ALG_ID_X448;\n }\n async serializePublicKey(key) {\n await this._setup();\n try {\n return await this._api.exportKey(\"raw\", key);\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePublicKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, true);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async serializePrivateKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n if (!(\"d\" in jwk)) {\n throw new Error(\"Not private key\");\n }\n return base64UrlToBytes(jwk[\"d\"]).buffer;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async deserializePrivateKey(key) {\n await this._setup();\n try {\n return await this._importRawKey(key, false);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async importKey(format, key, isPublic) {\n await this._setup();\n try {\n if (format === \"raw\") {\n return await this._importRawKey(key, isPublic);\n }\n // jwk\n if (key instanceof ArrayBuffer) {\n throw new Error(\"Invalid jwk key format\");\n }\n return await this._importJWK(key, isPublic);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async generateKeyPair() {\n await this._setup();\n try {\n return await this._api.generateKey(ALG_NAME, true, KEM_USAGES);\n }\n catch (e) {\n throw new NotSupportedError(e);\n }\n }\n async deriveKeyPair(ikm) {\n await this._setup();\n try {\n const dkpPrk = await this._hkdf.labeledExtract(EMPTY.buffer, LABEL_DKP_PRK, new Uint8Array(ikm));\n const rawSk = await this._hkdf.labeledExpand(dkpPrk, LABEL_SK, EMPTY, this._nSk);\n const rawSkBytes = new Uint8Array(rawSk);\n const sk = await this._deserializePkcs8Key(rawSkBytes);\n rawSkBytes.fill(0);\n return {\n privateKey: sk,\n publicKey: await this.derivePublicKey(sk),\n };\n }\n catch (e) {\n throw new DeriveKeyPairError(e);\n }\n }\n async derivePublicKey(key) {\n await this._setup();\n try {\n const jwk = await this._api.exportKey(\"jwk\", key);\n delete jwk[\"d\"];\n delete jwk[\"key_ops\"];\n return await this._api.importKey(\"jwk\", jwk, this._alg, true, []);\n }\n catch (e) {\n throw new DeserializeError(e);\n }\n }\n async dh(sk, pk) {\n await this._setup();\n try {\n const bits = await this._api.deriveBits({\n name: ALG_NAME,\n public: pk,\n }, sk, this._nDh * 8);\n return bits;\n }\n catch (e) {\n throw new SerializeError(e);\n }\n }\n async _importRawKey(key, isPublic) {\n if (isPublic && key.byteLength !== this._nPk) {\n throw new Error(\"Invalid public key for the ciphersuite\");\n }\n if (!isPublic && key.byteLength !== this._nSk) {\n throw new Error(\"Invalid private key for the ciphersuite\");\n }\n if (isPublic) {\n return await this._api.importKey(\"raw\", key, this._alg, true, []);\n }\n return await this._deserializePkcs8Key(new Uint8Array(key));\n }\n async _importJWK(key, isPublic) {\n if (typeof key.kty === \"undefined\" || key.kty !== \"OKP\") {\n throw new Error(`Invalid kty: ${key.crv}`);\n }\n if (typeof key.crv === \"undefined\" || key.crv !== ALG_NAME) {\n throw new Error(`Invalid crv: ${key.crv}`);\n }\n if (isPublic) {\n if (typeof key.d !== \"undefined\") {\n throw new Error(\"Invalid key: `d` should not be set\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, []);\n }\n if (typeof key.d === \"undefined\") {\n throw new Error(\"Invalid key: `d` not found\");\n }\n return await this._api.importKey(\"jwk\", key, this._alg, true, KEM_USAGES);\n }\n async _deserializePkcs8Key(k) {\n const pkcs8Key = new Uint8Array(this._pkcs8AlgId.length + k.length);\n pkcs8Key.set(this._pkcs8AlgId, 0);\n pkcs8Key.set(k, this._pkcs8AlgId.length);\n return await this._api.importKey(\"pkcs8\", pkcs8Key, this._alg, true, KEM_USAGES);\n }\n}\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bech32m = exports.bech32 = void 0;\nconst ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\nconst ALPHABET_MAP = {};\nfor (let z = 0; z < ALPHABET.length; z++) {\n const x = ALPHABET.charAt(z);\n ALPHABET_MAP[x] = z;\n}\nfunction polymodStep(pre) {\n const b = pre >> 25;\n return (((pre & 0x1ffffff) << 5) ^\n (-((b >> 0) & 1) & 0x3b6a57b2) ^\n (-((b >> 1) & 1) & 0x26508e6d) ^\n (-((b >> 2) & 1) & 0x1ea119fa) ^\n (-((b >> 3) & 1) & 0x3d4233dd) ^\n (-((b >> 4) & 1) & 0x2a1462b3));\n}\nfunction prefixChk(prefix) {\n let chk = 1;\n for (let i = 0; i < prefix.length; ++i) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n return 'Invalid prefix (' + prefix + ')';\n chk = polymodStep(chk) ^ (c >> 5);\n }\n chk = polymodStep(chk);\n for (let i = 0; i < prefix.length; ++i) {\n const v = prefix.charCodeAt(i);\n chk = polymodStep(chk) ^ (v & 0x1f);\n }\n return chk;\n}\nfunction convert(data, inBits, outBits, pad) {\n let value = 0;\n let bits = 0;\n const maxV = (1 << outBits) - 1;\n const result = [];\n for (let i = 0; i < data.length; ++i) {\n value = (value << inBits) | data[i];\n bits += inBits;\n while (bits >= outBits) {\n bits -= outBits;\n result.push((value >> bits) & maxV);\n }\n }\n if (pad) {\n if (bits > 0) {\n result.push((value << (outBits - bits)) & maxV);\n }\n }\n else {\n if (bits >= inBits)\n return 'Excess padding';\n if ((value << (outBits - bits)) & maxV)\n return 'Non-zero padding';\n }\n return result;\n}\nfunction toWords(bytes) {\n return convert(bytes, 8, 5, true);\n}\nfunction fromWordsUnsafe(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n}\nfunction fromWords(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n throw new Error(res);\n}\nfunction getLibraryFromEncoding(encoding) {\n let ENCODING_CONST;\n if (encoding === 'bech32') {\n ENCODING_CONST = 1;\n }\n else {\n ENCODING_CONST = 0x2bc830a3;\n }\n function encode(prefix, words, LIMIT) {\n LIMIT = LIMIT || 90;\n if (prefix.length + 7 + words.length > LIMIT)\n throw new TypeError('Exceeds length limit');\n prefix = prefix.toLowerCase();\n // determine chk mod\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n throw new Error(chk);\n let result = prefix + '1';\n for (let i = 0; i < words.length; ++i) {\n const x = words[i];\n if (x >> 5 !== 0)\n throw new Error('Non 5-bit word');\n chk = polymodStep(chk) ^ x;\n result += ALPHABET.charAt(x);\n }\n for (let i = 0; i < 6; ++i) {\n chk = polymodStep(chk);\n }\n chk ^= ENCODING_CONST;\n for (let i = 0; i < 6; ++i) {\n const v = (chk >> ((5 - i) * 5)) & 0x1f;\n result += ALPHABET.charAt(v);\n }\n return result;\n }\n function __decode(str, LIMIT) {\n LIMIT = LIMIT || 90;\n if (str.length < 8)\n return str + ' too short';\n if (str.length > LIMIT)\n return 'Exceeds length limit';\n // don't allow mixed case\n const lowered = str.toLowerCase();\n const uppered = str.toUpperCase();\n if (str !== lowered && str !== uppered)\n return 'Mixed-case string ' + str;\n str = lowered;\n const split = str.lastIndexOf('1');\n if (split === -1)\n return 'No separator character for ' + str;\n if (split === 0)\n return 'Missing prefix for ' + str;\n const prefix = str.slice(0, split);\n const wordChars = str.slice(split + 1);\n if (wordChars.length < 6)\n return 'Data too short';\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n return chk;\n const words = [];\n for (let i = 0; i < wordChars.length; ++i) {\n const c = wordChars.charAt(i);\n const v = ALPHABET_MAP[c];\n if (v === undefined)\n return 'Unknown character ' + c;\n chk = polymodStep(chk) ^ v;\n // not in the checksum?\n if (i + 6 >= wordChars.length)\n continue;\n words.push(v);\n }\n if (chk !== ENCODING_CONST)\n return 'Invalid checksum for ' + str;\n return { prefix, words };\n }\n function decodeUnsafe(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n }\n function decode(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n throw new Error(res);\n }\n return {\n decodeUnsafe,\n decode,\n encode,\n toWords,\n fromWordsUnsafe,\n fromWords,\n };\n}\nexports.bech32 = getLibraryFromEncoding('bech32');\nexports.bech32m = getLibraryFromEncoding('bech32m');\n","/**\n * Audited & minimal JS implementation of hash functions, MACs and KDFs. Check out individual modules.\n * @module\n * @example\n```js\nimport {\n sha256, sha384, sha512, sha224, sha512_224, sha512_256\n} from '@noble/hashes/sha2.js';\nimport {\n sha3_224, sha3_256, sha3_384, sha3_512,\n keccak_224, keccak_256, keccak_384, keccak_512,\n shake128, shake256\n} from '@noble/hashes/sha3.js';\nimport {\n cshake128, cshake256,\n turboshake128, turboshake256,\n kt128, kt256,\n kmac128, kmac256,\n tuplehash256, parallelhash256,\n keccakprg\n} from '@noble/hashes/sha3-addons.js';\nimport { blake3 } from '@noble/hashes/blake3.js';\nimport { blake2b, blake2s } from '@noble/hashes/blake2.js';\nimport { hmac } from '@noble/hashes/hmac.js';\nimport { hkdf } from '@noble/hashes/hkdf.js';\nimport { pbkdf2, pbkdf2Async } from '@noble/hashes/pbkdf2.js';\nimport { scrypt, scryptAsync } from '@noble/hashes/scrypt.js';\nimport { md5, ripemd160, sha1 } from '@noble/hashes/legacy.js';\nimport * as utils from '@noble/hashes/utils.js';\n```\n */\nthrow new Error('root module cannot be imported: import submodules instead. Check out README');\nexport {};\n//# sourceMappingURL=index.js.map","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 5KB JS implementation of ed25519 EdDSA signatures.\n * Compliant with RFC8032, FIPS 186-5 & ZIP215.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const secretKey = ed.utils.randomSecretKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(secretKey); // Sync methods are also present\n const signature = await ed.signAsync(message, secretKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. ed25519 is twisted edwards curve. Equation is −x² + y² = -a + dx²y².\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // group order, amount of curve points\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n */\nconst ed25519_CURVE = {\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n};\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d, h } = ed25519_CURVE;\nconst L = 32; // field / group byte length\nconst L2 = 64;\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\nconst captureTrace = (...args) => {\n if ('captureStackTrace' in Error && typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(...args);\n }\n};\nconst err = (message = '') => {\n const e = new Error(message);\n captureTrace(e, err);\n throw e;\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\nconst isBytes = (a) => a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n/** Asserts something is Uint8Array. */\nconst abytes = (value, length, title = '') => {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n err(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n};\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\nconst u8fr = (buf) => Uint8Array.from(buf);\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\nconst cr = () => globalThis?.crypto; // WebCrypto is available in all modern environments\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined, consider polyfill');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0)); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Will throw when not available. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\nconst assertRange = (n, min, max, msg = 'bad number: out of range') => (isBig(n) && min <= n && n < max ? n : err(msg));\n/** modular division */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\nconst modN = (a) => M(a, N);\n/** Modular inversion using euclidean GCD (non-CT). No negative exponent for now. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst callHash = (name) => {\n // @ts-ignore\n const fn = hashes[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\nconst hash = (msg) => callHash('sha512')(msg);\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\nconst B256 = 2n ** 256n;\n/** Point in XYZT extended coordinates. */\nclass Point {\n static BASE;\n static ZERO;\n X;\n Y;\n Z;\n T;\n constructor(X, Y, Z, T) {\n const max = B256;\n this.X = assertRange(X, 0n, max);\n this.Y = assertRange(Y, 0n, max);\n this.Z = assertRange(Z, 1n, max);\n this.T = assertRange(T, 0n, max);\n Object.freeze(this);\n }\n static CURVE() {\n return ed25519_CURVE;\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, M(p.x * p.y));\n }\n /** RFC8032 5.1.3: Uint8Array to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumLE(normed);\n // zip215=true: 0 <= y < 2^256\n // zip215=false, RFC8032: 0 <= y < 2^255-19\n const max = zip215 ? B256 : P;\n assertRange(y, 0n, max);\n const y2 = M(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = M(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, M(x * y)); // Z=1, T=xy\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(hexToBytes(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n if (p.is0())\n return err('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = M(X * X); // X²\n const Y2 = M(Y * Y); // Y²\n const Z2 = M(Z * Z); // Z²\n const Z4 = M(Z2 * Z2); // Z⁴\n const aX2 = M(X2 * a); // aX²\n const left = M(Z2 * M(aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + M(d * M(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n return err('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = M(X * Y);\n const ZT = M(Z * T);\n if (XY !== ZT)\n return err('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = apoint(other); // checks class equality\n const X1Z2 = M(X1 * Z2);\n const X2Z1 = M(X2 * Z1);\n const Y1Z2 = M(Y1 * Z2);\n const Y2Z1 = M(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.X), this.Y, this.Z, M(-this.T));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(apoint(other).negate());\n }\n /**\n * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n scalar by which point is multiplied\n * @param safe safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n if (!safe && (n === 0n || this.is0()))\n return I;\n assertRange(n, 1n, N);\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n multiplyUnsafe(scalar) {\n return this.multiply(scalar, false);\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { X, Y, Z } = this;\n // fast-paths for ZERO point OR Z=1\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(Z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (M(Z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n const x = M(X * iz);\n const y = M(Y * iz);\n return { x, y };\n }\n toBytes() {\n const { x, y } = this.assertValidity().toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n }\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // Multiply by big number N. We can't `mul(N)` because of checks. Instead, we `mul(N/2)*2+1`\n let p = this.multiply(N / 2n, false).double();\n if (N % 2n)\n p = p.add(this);\n return p.is0();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(assertRange(num, 0n, B256), L2)).reverse();\nconst bytesToNumLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n let r = x;\n while (power-- > 0n) {\n r *= r;\n r %= P;\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = (x * x) % P; // x^2, bits 1\n const b2 = (x2 * x) % P; // x^3, bits 11\n const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // √-1\n// for sqrt comp\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = M(v * v * v); // v³\n const v7 = M(v3 * v3 * v); // v⁷\n const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = M(u * v3 * pow); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = M(v * x * x); // vx²\n const root1 = x; // First root candidate\n const root2 = M(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// N == L, just weird naming\nconst modL_LE = (hash) => modN(bytesToNumLE(hash)); // modulo L; but little-endian\n/** hashes.sha512 should conform to the interface. */\n// TODO: rename\nconst sha512a = (...m) => hashes.sha512Async(concatBytes(...m)); // Async SHA512\nconst sha512s = (...m) => callHash('sha512')(concatBytes(...m));\n// RFC8032 5.1.5\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const head = hashed.slice(0, L);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = hashed.slice(L, L2); // secret key \"prefix\"\n const scalar = modL_LE(head); // modular division over curve order\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (secretKey) => sha512a(abytes(secretKey, L)).then(hash2extK);\nconst getExtendedPublicKey = (secretKey) => hash2extK(sha512s(abytes(secretKey, L)));\n/** Creates 32-byte ed25519 public key from 32-byte secret key. Async. */\nconst getPublicKeyAsync = (secretKey) => getExtendedPublicKeyAsync(secretKey).then((p) => p.pointBytes);\n/** Creates 32-byte ed25519 public key from 32-byte secret key. To use, set `hashes.sha512` first. */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\n// Code, shared between sync & async sign\nconst _sign = (e, rBytes, msg) => {\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), L2); // 64-byte sig: 32b R.x + 32b LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message using secret key. Async.\n * Follows RFC8032 5.1.6.\n */\nconst signAsync = async (message, secretKey) => {\n const m = abytes(message);\n const e = await getExtendedPublicKeyAsync(secretKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message using secret key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n */\nconst sign = (message, secretKey) => {\n const m = abytes(message);\n const e = getExtendedPublicKey(secretKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst defaultVerifyOpts = { zip215: true };\nconst _verify = (sig, msg, pub, opts = defaultVerifyOpts) => {\n sig = abytes(sig, L2); // Signature hex str/Bytes, must be 64 bytes\n msg = abytes(msg); // Message hex str/Bytes\n pub = abytes(pub, L);\n const { zip215 } = opts; // switch between zip215 and rfc8032 verif\n let A;\n let R;\n let s;\n let SB;\n let hashable = Uint8Array.of();\n try {\n A = Point.fromBytes(pub, zip215); // public key A decoded\n R = Point.fromBytes(sig.slice(0, L), zip215); // 0 <= R < 2^256: ZIP215 R can be >= P\n s = bytesToNumLE(sig.slice(L, L2)); // Decode second half as an integer S\n SB = G.multiply(s, false); // in the range 0 <= s < L\n hashable = concatBytes(R.toBytes(), A.toBytes(), msg); // dom2(F, C) || R || A || PH(M)\n }\n catch (error) { }\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n if (SB == null)\n return false; // false if try-catch catched an error\n if (!zip215 && A.isSmallOrder())\n return false; // false for SBS: Strongly Binding Signature\n const k = modL_LE(hashed); // decode in little-endian, modulo L\n const RkA = R.add(A.multiply(k, false)); // [8]R + [8][k]A'\n return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n };\n return { hashable, finish };\n};\n/** Verifies signature on message and public key. Async. Follows RFC8032 5.1.7. */\nconst verifyAsync = async (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishA(_verify(signature, message, publicKey, opts));\n/** Verifies signature on message and public key. To use, set `hashes.sha512` first. Follows RFC8032 5.1.7. */\nconst verify = (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishS(_verify(signature, message, publicKey, opts));\n/** Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves. */\nconst etc = {\n bytesToHex: bytesToHex,\n hexToBytes: hexToBytes,\n concatBytes: concatBytes,\n mod: M,\n invert: invert,\n randomBytes: randomBytes,\n};\nconst hashes = {\n sha512Async: async (message) => {\n const s = subtle();\n const m = concatBytes(message);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512: undefined,\n};\n// FIPS 186 B.4.1 compliant key generation produces private keys\n// with modulo bias being neglible. takes >N+16 bytes, returns (hash mod n-1)+1\nconst randomSecretKey = (seed = randomBytes(L)) => seed;\nconst keygen = (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = getPublicKey(secretKey);\n return { secretKey, publicKey };\n};\nconst keygenAsync = async (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = await getPublicKeyAsync(secretKey);\n return { secretKey, publicKey };\n};\n/** ed25519-specific key utilities. */\nconst utils = {\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomSecretKey: randomSecretKey,\n};\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8, NOT 32 - see wNAF loop\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // precomputes for base point G\n// const-time negate\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n // We use negative indexes to reduce size of precomputed table by 2x.\n // Instead of needing precomputes 0..256, we only calculate them for 0..128.\n // If an index > 128 is found, we do (256-index) - where 256 is next window.\n // Naive: index +127 => 127, +224 => 224\n // Optimized: index +127 => 127, +224 => 256-32\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n }\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n if (n !== 0n)\n err('invalid wnaf');\n return { p, f }; // return both real and fake points for JIT\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { etc, getPublicKey, getPublicKeyAsync, hash, hashes, keygen, keygenAsync, Point, sign, signAsync, utils, verify, verifyAsync, };\n"],"names":["HpkeError","Error","constructor","e","message","super","this","name","EncapError","DecapError","ExportError","SealError","OpenError","MessageLimitReachedError","DeriveKeyPairError","dntGlobalThis","baseObj","globalThis","extObj","Proxy","get","_target","prop","_receiver","set","value","deleteProperty","success","ownKeys","baseKeys","Reflect","extKeys","extKeysSet","Set","filter","k","has","defineProperty","desc","getOwnPropertyDescriptor","NativeAlgorithm","Object","enumerable","configurable","writable","undefined","_setup","_api","async","crypto","subtle","webcrypto","loadSubtleCrypto","INPUT_LENGTH_LIMIT","Uint8Array","x","privateKey","publicKey","n","w","ret","i","a","b","length","LABEL_EAE_PRK","LABEL_SHARED_SECRET","Dhkem","id","prim","kdf","_prim","_kdf","suiteId","init","serializePublicKey","key","deserializePublicKey","serializePrivateKey","deserializePrivateKey","importKey","format","isPublic","generateKeyPair","deriveKeyPair","ikm","byteLength","encap","params","ke","ekm","enc","pkrm","recipientPublicKey","dh","kemContext","senderKey","sks","pks","derivePublicKey","pksm","c","concat3","sharedSecret","_generateSharedSecret","decap","pke","skr","recipientKey","pkr","senderPublicKey","labeledIkm","buildLabeledIkm","labeledInfo","buildLabeledInfo","secretSize","extractAndExpand","buffer","KEM_USAGES","Bignum","size","_num","val","reset","fill","src","isZero","lessThan","v","LABEL_CANDIDATE","ORDER_P_256","ORDER_P_384","ORDER_P_521","PKCS8_ALG_ID_P_256","PKCS8_ALG_ID_P_384","PKCS8_ALG_ID_P_521","Ec","kem","hkdf","_hkdf","_alg","namedCurve","_nPk","_nSk","_nDh","_order","_bitmask","_pkcs8AlgId","exportKey","_importRawKey","jwk","base64","replace","byteString","atob","charCodeAt","base64UrlToBytes","ArrayBuffer","_importJWK","generateKey","dkpPrk","labeledExtract","bn","counter","bytes","labeledExpand","sk","_deserializePkcs8Key","pk","deriveBits","public","crv","d","pkcs8Key","HPKE_VERSION","HkdfNative","hash","_suiteId","label","_checkInit","info","len","extract","salt","hashSize","algHash","sign","expand","prk","okm","p","prev","mid","tail","tmp","cur","slice","baseKey","HkdfSha256Native","arguments","AEAD_USAGES","BigInt","AesGcmContext","_rawKey","seal","iv","data","aad","_setupKey","alg","additionalData","encrypt","_key","open","decrypt","_importKey","Aes128Gcm","createEncryptionContext","Aes256Gcm","emitNotSupported","Promise","_resolve","reject","LABEL_SEC","ExporterContextImpl","api","exporterSecret","_data","_aad","exporterContext","RecipientExporterContextImpl","SenderExporterContextImpl","EncryptionContextImpl","baseNonce","seq","_aead","aead","_nK","keySize","_nN","nonceSize","_nT","tagSize","_ctx","computeNonce","seqBytes","buf","xor","incrementSeq","Number","MAX_SAFE_INTEGER","_Mutex_locked","Mutex","resolve","lock","releaseLock","nextLock","previousLock","receiver","state","kind","f","TypeError","call","__classPrivateFieldGet","__classPrivateFieldSet","WeakMap","_RecipientContextImpl_mutex","RecipientContextImpl","release","pt","_SenderContextImpl_mutex","SenderContextImpl","ct","LABEL_BASE_NONCE","LABEL_EXP","LABEL_INFO_HASH","LABEL_KEY","LABEL_PSK_ID_HASH","LABEL_SECRET","SUITE_ID_HEADER_HPKE","CipherSuiteNative","_kem","createSenderContext","_validateInputLength","mode","psk","_keyScheduleS","createRecipientContext","_keyScheduleR","ctx","_keySchedule","pskId","pskIdHash","infoHash","keyScheduleContext","exporterSecretInfo","keyInfo","baseNonceInfo","res","DhkemP256HkdfSha256Native","CipherSuite","DhkemP256HkdfSha256","HkdfSha256","ALPHABET","ALPHABET_MAP","z","charAt","polymodStep","pre","prefixChk","prefix","chk","convert","inBits","outBits","pad","bits","maxV","result","push","toWords","fromWordsUnsafe","words","Array","isArray","fromWords","getLibraryFromEncoding","encoding","ENCODING_CONST","__decode","str","LIMIT","lowered","toLowerCase","uppered","toUpperCase","split","lastIndexOf","wordChars","decodeUnsafe","decode","encode","ed25519_CURVE","h","Gx","Gy","P","N","_a","_d","err","args","captureStackTrace","captureTrace","abytes","title","isView","needsLen","u8n","u8fr","from","padh","toString","padStart","bytesToHex","map","join","_ch","ch","hexToBytes","hex","hl","al","array","ai","hi","n1","n2","cr","concatBytes","arrs","r","reduce","sum","forEach","big","assertRange","min","max","msg","isBig","M","invert","num","md","y","u","q","m","apoint","Point","B256","static","X","Y","Z","T","freeze","CURVE","fromAffine","fromBytes","zip215","normed","lastByte","bytesToNumLE","y2","isValid","uvRatio","isXOdd","isLastByteOdd","fromHex","toAffine","assertValidity","is0","X2","Y2","Z2","Z4","aX2","equals","other","X1","Y1","Z1","X1Z2","X2Z1","Y1Z2","Y2Z1","I","negate","double","A","B","C","D","x1y1","E","G","F","H","X3","Y3","T3","Z3","add","T1","T2","subtract","multiply","safe","wNAF","multiplyUnsafe","scalar","iz","toBytes","numTo32bLE","toHex","clearCofactor","isSmallOrder","isTorsionFree","BASE","ZERO","reverse","pow2","power","RM1","v3","pow","b2","b4","b5","b10","b20","b40","b80","b160","b240","b250","pow_p_5_8","pow_2_252_3","vx2","root1","root2","useRoot1","useRoot2","noRoot","modL_LE","modN","sha512s","fn","hashes","callHash","getExtendedPublicKey","secretKey","hashed","head","point","pointBytes","hash2extK","getPublicKey","priv","etc","mod","randomBytes","getRandomValues","sha512Async","s","digest","sha512","pwindows","Math","ceil","scalarBits","Gpows","ctneg","cnd","comp","points","precompute","mask","pow_2_w","shiftBy","wbits","off","offF","offP","abs","isEven","isNeg"],"sourceRoot":""} \ No newline at end of file diff --git a/export/src/turnkey-core.js b/export/src/turnkey-core.js index ea2848a..6b255f4 100644 --- a/export/src/turnkey-core.js +++ b/export/src/turnkey-core.js @@ -2,6 +2,7 @@ import "./styles.css"; import * as SharedTKHQ from "@shared/turnkey-core.js"; import * as nobleEd25519 from "@noble/ed25519"; import * as nobleHashes from "@noble/hashes" +import { sha512 } from "@noble/hashes/sha2.js"; const { getSettings, @@ -73,7 +74,8 @@ function applySettings(settings) { */ function getEd25519PublicKey(privateKeyHex) { nobleEd25519.etc.sha512Sync = (...m) => - nobleHashes.sha512(nobleEd25519.etc.concatBytes(...m)); + sha512(nobleEd25519.etc.concatBytes(...m)); + return nobleEd25519.getPublicKey(privateKeyHex); } diff --git a/import/dist/551.bundle.27da59437a4e403e3c24.js.map b/import/dist/551.bundle.27da59437a4e403e3c24.js.map index 811b1db..7da4edd 100644 --- a/import/dist/551.bundle.27da59437a4e403e3c24.js.map +++ b/import/dist/551.bundle.27da59437a4e403e3c24.js.map @@ -1 +1 @@ -{"version":3,"file":"551.bundle.27da59437a4e403e3c24.js","mappings":"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","sources":["webpack://import/../shared/turnkey-core.js","webpack://import/./src/turnkey-core.js","webpack://import/../shared/crypto-utils.js"],"sourcesContent":["import { bech32 } from \"bech32\";\n\n/**\n * Turnkey Core Module - Shared\n * Contains all the core cryptographic and utility functions shared across frames\n */\n\n/** constants for LocalStorage */\nconst TURNKEY_EMBEDDED_KEY = \"TURNKEY_EMBEDDED_KEY\";\nconst TURNKEY_TARGET_EMBEDDED_KEY = \"TURNKEY_TARGET_EMBEDDED_KEY\";\nconst TURNKEY_SETTINGS = \"TURNKEY_SETTINGS\";\n/** 48 hours in milliseconds */\nconst TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS = 1000 * 60 * 60 * 48;\nconst TURNKEY_EMBEDDED_KEY_ORIGIN = \"TURNKEY_EMBEDDED_KEY_ORIGIN\";\n\nlet parentFrameMessageChannelPort = null;\nvar cryptoProviderOverride = null;\n\n/*\n * Returns a reference to the WebCrypto subtle interface regardless of the host environment.\n */\nfunction getSubtleCrypto() {\n if (cryptoProviderOverride && cryptoProviderOverride.subtle) {\n return cryptoProviderOverride.subtle;\n }\n if (\n typeof globalThis !== \"undefined\" &&\n globalThis.crypto &&\n globalThis.crypto.subtle\n ) {\n return globalThis.crypto.subtle;\n }\n if (typeof window !== \"undefined\" && window.crypto && window.crypto.subtle) {\n return window.crypto.subtle;\n }\n if (typeof global !== \"undefined\" && global.crypto && global.crypto.subtle) {\n return global.crypto.subtle;\n }\n if (typeof crypto !== \"undefined\" && crypto.subtle) {\n return crypto.subtle;\n }\n\n return null;\n}\n\n/*\n * Allows tests to explicitly set the crypto provider (e.g. crypto.webcrypto) when the runtime\n * environment does not expose one on the global/window objects.\n */\nfunction setCryptoProvider(cryptoProvider) {\n cryptoProviderOverride = cryptoProvider || null;\n}\n\n/* Security functions */\n\nfunction isDoublyIframed() {\n if (window.location.ancestorOrigins !== undefined) {\n // Does not exist in IE and firefox.\n // See https://developer.mozilla.org/en-US/docs/Web/API/Location/ancestorOrigins for how this works\n return window.location.ancestorOrigins.length > 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n */\nasync function initEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey();\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n */\nfunction getEmbeddedKey() {\n const jwtKey = getItemWithExpiry(TURNKEY_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n */\nfunction setEmbeddedKey(targetKey) {\n setItemWithExpiry(\n TURNKEY_EMBEDDED_KEY,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n */\nfunction onResetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY);\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\" or \"SOLANA\"\n */\nasync function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) {\n switch (keyFormat) {\n case \"SOLANA\":\n if (!publicKeyBytes) {\n throw new Error(\"public key must be specified for SOLANA key format\");\n }\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n if (publicKeyBytes.length !== 32) {\n throw new Error(\n `invalid public key length. Expected 32 bytes. Got ${publicKeyBytes.length}.`\n );\n }\n {\n const concatenatedBytes = new Uint8Array(64);\n concatenatedBytes.set(privateKeyBytes, 0);\n concatenatedBytes.set(publicKeyBytes, 32);\n return base58Encode(concatenatedBytes);\n }\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n default:\n // keeping console.warn for debugging purposes.\n // eslint-disable-next-line no-console\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import * as SharedTKHQ from \"@shared/turnkey-core.js\";\n\nconst {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n} = SharedTKHQ;\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n const settingsObj = JSON.parse(settings);\n\n const passphraseLabel = document.getElementById(\"passphrase-label\");\n const mnemonicLabel = document.getElementById(\"mnemonic-label\");\n const passphraseTextarea = document.getElementById(\"passphrase\");\n\n if (!passphraseLabel || !passphraseTextarea) {\n throw new Error(\"no passphrase HTML elements found to apply settings to.\");\n }\n const plaintextTextarea = document.getElementById(\"plaintext\");\n if (!plaintextTextarea) {\n throw new Error(\n \"no plaintext textarea HTML element found to apply settings to.\"\n );\n }\n\n // Apply enablePassphrase setting\n if (settingsObj.enablePassphrase === true) {\n passphraseLabel.style.display = \"inline-block\";\n passphraseTextarea.style.display = \"inline-block\";\n passphraseTextarea.style.border = \"solid 1px #ccc\";\n passphraseTextarea.style.borderRadius = \"4px\";\n\n mnemonicLabel.style.display = \"inline-block\";\n plaintextTextarea.style.border = \"solid 1px #ccc\";\n plaintextTextarea.style.borderRadius = \"4px\";\n\n validSettings[\"enablePassphrase\"] = true;\n } else {\n passphraseLabel.style.display = \"none\";\n passphraseTextarea.style.display = \"none\";\n mnemonicLabel.style.display = \"none\";\n\n plaintextTextarea.style.border = \"none\";\n validSettings[\"enablePassphrase\"] = false;\n }\n\n if (settingsObj.styles) {\n // Validate, sanitize, and apply the styles to the \"plaintext\" textarea.\n const validStyles = validateStyles(settingsObj.styles);\n Object.entries(validStyles).forEach(([key, value]) => {\n plaintextTextarea.style[key] = value;\n });\n\n if (validStyles.backgroundColor) {\n // Apply background color to document and body as well.\n document.documentElement.style.backgroundColor =\n validStyles.backgroundColor;\n document.body.style.backgroundColor = validStyles.backgroundColor;\n }\n\n if (validStyles.labelColor) {\n document.getElementById(\"mnemonic-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"styles\"] = validStyles;\n }\n\n if (settingsObj.passphraseStyles) {\n // Validate, sanitize, and apply the styles to the \"passphrase\" textarea.\n const validStyles = validateStyles(settingsObj.passphraseStyles);\n Object.entries(validStyles).forEach(([key, value]) => {\n passphraseTextarea.style[key] = value;\n });\n\n if (validStyles.labelColor) {\n document.getElementById(\"passphrase-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"passphraseStyles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\n}\n\nexport {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n applySettings,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_OverloadYield","k","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_TARGET_EMBEDDED_KEY","TURNKEY_SETTINGS","parentFrameMessageChannelPort","cryptoProviderOverride","getSubtleCrypto","subtle","globalThis","crypto","window","global","setCryptoProvider","cryptoProvider","loadQuorumKey","_x","_loadQuorumKey","_regeneratorRuntime","mark","_callee","quorumPublic","wrap","_context","prev","next","Error","importKey","namedCurve","abrupt","sent","stop","loadTargetKey","_x2","_loadTargetKey","_callee2","targetPublic","targetKey","_context2","exportKey","getTargetEmbeddedKey","jwtKey","localStorage","getItem","JSON","parse","setTargetEmbeddedKey","setItem","stringify","resetTargetEmbeddedKey","removeItem","setParentFrameMessageChannelPort","port","getSettings","settings","setSettings","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","concat","expectedZeroCount","zeroCount","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","fromDerSignature","derSignature","derSignatureBuf","index","rLength","sLength","rPadded","sPadded","verifyEnclaveSignature","_x3","_x4","_x5","_verifyEnclaveSignature","_callee5","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context5","prod","preprod","__TURNKEY_SIGNER_ENVIRONMENT__","undefined","verify","hash","sendMessageUp","type","requestId","message","postMessage","parent","content","messageLog","document","getElementById","createElement","innerText","appendChild","logMessage","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","carry","push","j","currentByte","result","reverse","base58CheckDecode","_x7","_base58CheckDecode","_callee7","decoded","payload","checksum","hash1Buf","hash1","hash2Buf","hash2","computedChecksum","_context7","subarray","digest","decodeKey","_x8","_x9","_decodeKey","_callee8","privateKey","keyFormat","decodedKeyBytes","version","keyAndFlags","_payload","_version","_keyAndFlags","_bech32$decode","prefix","words","bytes","schemeFlag","privkey","_context8","t0","bech32","decode","fromWords","console","warn","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","SharedTKHQ","applySettings","validSettings","settingsObj","passphraseLabel","mnemonicLabel","passphraseTextarea","plaintextTextarea","enablePassphrase","style","display","border","_slicedToArray","key","documentElement","body","passphraseStyles","_ref3","_ref4","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","TextEncoder","encode","HpkeEncrypt","_HpkeEncrypt","plaintextBuf","receiverPubJwk","kemContext","receiverPub","suite","senderCtx","receiverPubCryptoKey","receiverPubRaw","encappedKeyBuf","aad","ciphertextBuf","ciphertextHex","encappedKeyBufHex","encryptedBundle","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createSenderContext","recipientPublicKey","info","enc","seal","encappedPublic","ciphertext"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"551.bundle.27da59437a4e403e3c24.js","mappings":"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","sources":["webpack://import/../shared/turnkey-core.js","webpack://import/./src/turnkey-core.js","webpack://import/../shared/crypto-utils.js"],"sourcesContent":["import { bech32 } from \"bech32\";\n\n/**\n * Turnkey Core Module - Shared\n * Contains all the core cryptographic and utility functions shared across frames\n */\n\n/** constants for LocalStorage */\nconst TURNKEY_EMBEDDED_KEY = \"TURNKEY_EMBEDDED_KEY\";\nconst TURNKEY_TARGET_EMBEDDED_KEY = \"TURNKEY_TARGET_EMBEDDED_KEY\";\nconst TURNKEY_SETTINGS = \"TURNKEY_SETTINGS\";\n/** 48 hours in milliseconds */\nconst TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS = 1000 * 60 * 60 * 48;\nconst TURNKEY_EMBEDDED_KEY_ORIGIN = \"TURNKEY_EMBEDDED_KEY_ORIGIN\";\n\nlet parentFrameMessageChannelPort = null;\nvar cryptoProviderOverride = null;\n\n/*\n * Returns a reference to the WebCrypto subtle interface regardless of the host environment.\n */\nfunction getSubtleCrypto() {\n if (cryptoProviderOverride && cryptoProviderOverride.subtle) {\n return cryptoProviderOverride.subtle;\n }\n if (\n typeof globalThis !== \"undefined\" &&\n globalThis.crypto &&\n globalThis.crypto.subtle\n ) {\n return globalThis.crypto.subtle;\n }\n if (typeof window !== \"undefined\" && window.crypto && window.crypto.subtle) {\n return window.crypto.subtle;\n }\n if (typeof global !== \"undefined\" && global.crypto && global.crypto.subtle) {\n return global.crypto.subtle;\n }\n if (typeof crypto !== \"undefined\" && crypto.subtle) {\n return crypto.subtle;\n }\n\n return null;\n}\n\n/*\n * Allows tests to explicitly set the crypto provider (e.g. crypto.webcrypto) when the runtime\n * environment does not expose one on the global/window objects.\n */\nfunction setCryptoProvider(cryptoProvider) {\n cryptoProviderOverride = cryptoProvider || null;\n}\n\n/* Security functions */\n\nfunction isDoublyIframed() {\n if (window.location.ancestorOrigins !== undefined) {\n // Does not exist in IE and firefox.\n // See https://developer.mozilla.org/en-US/docs/Web/API/Location/ancestorOrigins for how this works\n return window.location.ancestorOrigins.length > 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n */\nasync function initEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey();\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n */\nfunction getEmbeddedKey() {\n const jwtKey = getItemWithExpiry(TURNKEY_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n */\nfunction setEmbeddedKey(targetKey) {\n setItemWithExpiry(\n TURNKEY_EMBEDDED_KEY,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n */\nfunction onResetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY);\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Encodes a Uint8Array into a base58-check-encoded string\n * Throws an error if the input is invalid or the checksum is invalid.\n * @param {Uint8Array} payload The raw payload to encode.\n * @return {Promise} The base58check-encoded string.\n */\nasync function base58CheckEncode(payload) {\n const hash1Buf = await crypto.subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n\n const hash2Buf = await crypto.subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n\n const checksum = hash2.slice(0, 4);\n\n const full = new Uint8Array(payload.length + 4);\n full.set(payload, 0);\n full.set(checksum, payload.length);\n\n return base58Encode(full);\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n */\nasync function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) {\n switch (keyFormat) {\n case \"SOLANA\":\n if (!publicKeyBytes) {\n throw new Error(\n \"public key must be specified for SOLANA key format\"\n );\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 case \"BITCOIN_MAINNET_WIF\":\n case \"BITCOIN_TESTNET_WIF\": {\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const version = keyFormat === \"BITCOIN_MAINNET_WIF\" ? 0x80 : 0xef;\n const wifPayload = new Uint8Array(34);\n wifPayload[0] = version;\n wifPayload.set(privateKeyBytes, 1);\n wifPayload[33] = 0x01; // compressed flag\n\n return await base58CheckEncode(wifPayload);\n }\n case \"SUI_BECH32\":\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const schemeFlag = 0x00; // ED25519 | We only support ED25519 keys for Sui currently\n const bech32Payload = new Uint8Array(1 + 32);\n bech32Payload[0] = schemeFlag;\n bech32Payload.set(privateKeyBytes, 1);\n\n return bech32.encode(\"suiprivkey\", bech32.toWords(bech32Payload));\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n base58CheckEncode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import * as SharedTKHQ from \"@shared/turnkey-core.js\";\n\nconst {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n} = SharedTKHQ;\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n const settingsObj = JSON.parse(settings);\n\n const passphraseLabel = document.getElementById(\"passphrase-label\");\n const mnemonicLabel = document.getElementById(\"mnemonic-label\");\n const passphraseTextarea = document.getElementById(\"passphrase\");\n\n if (!passphraseLabel || !passphraseTextarea) {\n throw new Error(\"no passphrase HTML elements found to apply settings to.\");\n }\n const plaintextTextarea = document.getElementById(\"plaintext\");\n if (!plaintextTextarea) {\n throw new Error(\n \"no plaintext textarea HTML element found to apply settings to.\"\n );\n }\n\n // Apply enablePassphrase setting\n if (settingsObj.enablePassphrase === true) {\n passphraseLabel.style.display = \"inline-block\";\n passphraseTextarea.style.display = \"inline-block\";\n passphraseTextarea.style.border = \"solid 1px #ccc\";\n passphraseTextarea.style.borderRadius = \"4px\";\n\n mnemonicLabel.style.display = \"inline-block\";\n plaintextTextarea.style.border = \"solid 1px #ccc\";\n plaintextTextarea.style.borderRadius = \"4px\";\n\n validSettings[\"enablePassphrase\"] = true;\n } else {\n passphraseLabel.style.display = \"none\";\n passphraseTextarea.style.display = \"none\";\n mnemonicLabel.style.display = \"none\";\n\n plaintextTextarea.style.border = \"none\";\n validSettings[\"enablePassphrase\"] = false;\n }\n\n if (settingsObj.styles) {\n // Validate, sanitize, and apply the styles to the \"plaintext\" textarea.\n const validStyles = validateStyles(settingsObj.styles);\n Object.entries(validStyles).forEach(([key, value]) => {\n plaintextTextarea.style[key] = value;\n });\n\n if (validStyles.backgroundColor) {\n // Apply background color to document and body as well.\n document.documentElement.style.backgroundColor =\n validStyles.backgroundColor;\n document.body.style.backgroundColor = validStyles.backgroundColor;\n }\n\n if (validStyles.labelColor) {\n document.getElementById(\"mnemonic-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"styles\"] = validStyles;\n }\n\n if (settingsObj.passphraseStyles) {\n // Validate, sanitize, and apply the styles to the \"passphrase\" textarea.\n const validStyles = validateStyles(settingsObj.passphraseStyles);\n Object.entries(validStyles).forEach(([key, value]) => {\n passphraseTextarea.style[key] = value;\n });\n\n if (validStyles.labelColor) {\n document.getElementById(\"passphrase-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"passphraseStyles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\n}\n\nexport {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n applySettings,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_OverloadYield","k","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_TARGET_EMBEDDED_KEY","TURNKEY_SETTINGS","parentFrameMessageChannelPort","cryptoProviderOverride","getSubtleCrypto","subtle","globalThis","crypto","window","global","setCryptoProvider","cryptoProvider","loadQuorumKey","_x","_loadQuorumKey","_regeneratorRuntime","mark","_callee","quorumPublic","wrap","_context","prev","next","Error","importKey","namedCurve","abrupt","sent","stop","loadTargetKey","_x2","_loadTargetKey","_callee2","targetPublic","targetKey","_context2","exportKey","getTargetEmbeddedKey","jwtKey","localStorage","getItem","JSON","parse","setTargetEmbeddedKey","setItem","stringify","resetTargetEmbeddedKey","removeItem","setParentFrameMessageChannelPort","port","getSettings","settings","setSettings","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","concat","expectedZeroCount","zeroCount","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","fromDerSignature","derSignature","derSignatureBuf","index","rLength","sLength","rPadded","sPadded","verifyEnclaveSignature","_x3","_x4","_x5","_verifyEnclaveSignature","_callee5","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context5","prod","preprod","__TURNKEY_SIGNER_ENVIRONMENT__","undefined","verify","hash","sendMessageUp","type","requestId","message","postMessage","parent","content","messageLog","document","getElementById","createElement","innerText","appendChild","logMessage","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","carry","push","j","currentByte","result","reverse","base58CheckDecode","_x7","_base58CheckDecode","_callee7","decoded","payload","checksum","hash1Buf","hash1","hash2Buf","hash2","computedChecksum","_context7","subarray","digest","decodeKey","_x9","_x10","_decodeKey","_callee9","privateKey","keyFormat","decodedKeyBytes","version","keyAndFlags","_payload","_version","_keyAndFlags","_bech32$decode","prefix","words","bytes","schemeFlag","privkey","_context9","t0","bech32","decode","fromWords","console","warn","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","SharedTKHQ","applySettings","validSettings","settingsObj","passphraseLabel","mnemonicLabel","passphraseTextarea","plaintextTextarea","enablePassphrase","style","display","border","_slicedToArray","key","documentElement","body","passphraseStyles","_ref3","_ref4","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","TextEncoder","encode","HpkeEncrypt","_HpkeEncrypt","plaintextBuf","receiverPubJwk","kemContext","receiverPub","suite","senderCtx","receiverPubCryptoKey","receiverPubRaw","encappedKeyBuf","aad","ciphertextBuf","ciphertextHex","encappedKeyBufHex","encryptedBundle","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createSenderContext","recipientPublicKey","info","enc","seal","encappedPublic","ciphertext"],"sourceRoot":""} \ No newline at end of file diff --git a/shared/turnkey-core.js b/shared/turnkey-core.js index 50c866c..e36398e 100644 --- a/shared/turnkey-core.js +++ b/shared/turnkey-core.js @@ -833,7 +833,7 @@ async function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) { bech32Payload[0] = schemeFlag; bech32Payload.set(privateKeyBytes, 1); - return encodeBech32("suiprivkey", bech32Payload); + return bech32.encode("suiprivkey", bech32.toWords(bech32Payload)); default: console.warn( `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.` From ed363a17b9987fa04b83ef6e8b53902f0f5197ac Mon Sep 17 00:00:00 2001 From: Ethan Konkolowicz Date: Fri, 6 Feb 2026 10:32:11 -0500 Subject: [PATCH 3/7] linting and prettier --- export/index.test.js | 1 - export/src/index.js | 4 ++-- export/src/index.template.html | 5 ----- export/src/turnkey-core.js | 3 +-- export/webpack.config.js | 2 +- shared/turnkey-core.js | 10 +++++----- 6 files changed, 9 insertions(+), 16 deletions(-) diff --git a/export/index.test.js b/export/index.test.js index bb8fec7..e3280b8 100644 --- a/export/index.test.js +++ b/export/index.test.js @@ -2,7 +2,6 @@ import "@testing-library/jest-dom"; import * as crypto from "crypto"; import * as TKHQ from "./src/turnkey-core.js"; - describe("TKHQ", () => { beforeEach(() => { window.TextDecoder = global.TextDecoder; diff --git a/export/src/index.js b/export/src/index.js index 97c4a26..06f69e2 100644 --- a/export/src/index.js +++ b/export/src/index.js @@ -2,7 +2,6 @@ import * as TKHQ from "./turnkey-core.js"; import { HpkeDecrypt } from "@shared/crypto-utils.js"; -import * as hpke from "@hpke/core"; window.TKHQ = TKHQ; @@ -219,7 +218,7 @@ async function decryptBundle(bundle, organizationId) { // Parse the import bundle const bundleObj = JSON.parse(bundle); switch (bundleObj.version) { - case "v1.0.0": + case "v1.0.0": { // Validate fields exist if (!bundleObj.data) { throw new Error('missing "data" in bundle'); @@ -273,6 +272,7 @@ async function decryptBundle(bundle, organizationId) { encappedKeyBuf = TKHQ.uint8arrayFromHexString(signedData.encappedPublic); ciphertextBuf = TKHQ.uint8arrayFromHexString(signedData.ciphertext); break; + } default: throw new Error(`unsupported version: ${bundleObj.version}`); } diff --git a/export/src/index.template.html b/export/src/index.template.html index 88cc76a..d0cb6dc 100644 --- a/export/src/index.template.html +++ b/export/src/index.template.html @@ -92,10 +92,5 @@

Message log

- - - - - diff --git a/export/src/turnkey-core.js b/export/src/turnkey-core.js index 6b255f4..fc09180 100644 --- a/export/src/turnkey-core.js +++ b/export/src/turnkey-core.js @@ -1,7 +1,6 @@ import "./styles.css"; import * as SharedTKHQ from "@shared/turnkey-core.js"; import * as nobleEd25519 from "@noble/ed25519"; -import * as nobleHashes from "@noble/hashes" import { sha512 } from "@noble/hashes/sha2.js"; const { @@ -116,7 +115,7 @@ function getItemWithExpiry(key) { return null; } const item = JSON.parse(itemStr); - if (!item.hasOwnProperty("expiry") || !item.hasOwnProperty("value")) { + if (!Object.hasOwn(item, "expiry") || !Object.hasOwn(item, "value")) { window.localStorage.removeItem(key); return null; } diff --git a/export/webpack.config.js b/export/webpack.config.js index 977c45c..7ed42ac 100644 --- a/export/webpack.config.js +++ b/export/webpack.config.js @@ -11,7 +11,7 @@ module.exports = (env, argv) => { context: __dirname, // Set context to frame directory so module resolution works correctly entry: { index: "./src/index.js", - // standalone: "./src/standalone.js", + // standalone: "./src/standalone.js", }, output: { path: path.resolve(__dirname, "dist"), diff --git a/shared/turnkey-core.js b/shared/turnkey-core.js index e36398e..f245caf 100644 --- a/shared/turnkey-core.js +++ b/shared/turnkey-core.js @@ -783,11 +783,9 @@ async function decodeKey(privateKey, keyFormat) { */ async function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) { switch (keyFormat) { - case "SOLANA": + case "SOLANA": { if (!publicKeyBytes) { - throw new Error( - "public key must be specified for SOLANA key format" - ); + throw new Error("public key must be specified for SOLANA key format"); } if (privateKeyBytes.length !== 32) { throw new Error( @@ -803,6 +801,7 @@ async function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) { concatenatedBytes.set(privateKeyBytes, 0); concatenatedBytes.set(publicKeyBytes, 32); return base58Encode(concatenatedBytes); + } case "HEXADECIMAL": return "0x" + uint8arrayToHexString(privateKeyBytes); case "BITCOIN_MAINNET_WIF": @@ -821,7 +820,7 @@ async function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) { return await base58CheckEncode(wifPayload); } - case "SUI_BECH32": + case "SUI_BECH32": { if (privateKeyBytes.length !== 32) { throw new Error( `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.` @@ -834,6 +833,7 @@ async function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) { bech32Payload.set(privateKeyBytes, 1); return bech32.encode("suiprivkey", bech32.toWords(bech32Payload)); + } default: console.warn( `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.` From f6ab3a00060550e7a91e33b0f8cf965ea807abe1 Mon Sep 17 00:00:00 2001 From: Ethan Konkolowicz Date: Fri, 6 Feb 2026 10:55:03 -0500 Subject: [PATCH 4/7] added back standalone export stuff --- .../dist/551.bundle.782857d3859034ccafaf.js | 3 + ...undle.782857d3859034ccafaf.js.LICENSE.txt} | 0 .../551.bundle.782857d3859034ccafaf.js.map | 1 + .../dist/index.bundle.e0d2df0dce7785f4bfeb.js | 3 + ...bundle.e0d2df0dce7785f4bfeb.js.LICENSE.txt | 1 + .../index.bundle.e0d2df0dce7785f4bfeb.js.map | 1 + .../dist/index.bundle.f1e51a8345bac1b117ed.js | 3 - .../index.bundle.f1e51a8345bac1b117ed.js.map | 1 - export/dist/index.html | 2 +- .../standalone.bundle.0ce08212094b47d99d79.js | 3 + ...bundle.0ce08212094b47d99d79.js.LICENSE.txt | 1 + ...ndalone.bundle.0ce08212094b47d99d79.js.map | 1 + export/dist/standalone.html | 1 + ...standalone.styles.d2d0a2c3b41689154751.css | 150 ++++++++++ ...dalone.styles.d2d0a2c3b41689154751.css.map | 1 + export/src/index.js | 43 --- export/src/index.template.html | 87 +----- export/src/standalone-styles.css | 78 +++++ export/src/standalone.js | 276 ++++++++++++++++++ export/src/standalone.template.html | 99 +++++++ export/webpack.config.js | 2 +- nginx.conf | 2 +- 22 files changed, 627 insertions(+), 132 deletions(-) create mode 100644 export/dist/551.bundle.782857d3859034ccafaf.js rename export/dist/{index.bundle.f1e51a8345bac1b117ed.js.LICENSE.txt => 551.bundle.782857d3859034ccafaf.js.LICENSE.txt} (100%) create mode 100644 export/dist/551.bundle.782857d3859034ccafaf.js.map create mode 100644 export/dist/index.bundle.e0d2df0dce7785f4bfeb.js create mode 100644 export/dist/index.bundle.e0d2df0dce7785f4bfeb.js.LICENSE.txt create mode 100644 export/dist/index.bundle.e0d2df0dce7785f4bfeb.js.map delete mode 100644 export/dist/index.bundle.f1e51a8345bac1b117ed.js delete mode 100644 export/dist/index.bundle.f1e51a8345bac1b117ed.js.map create mode 100644 export/dist/standalone.bundle.0ce08212094b47d99d79.js create mode 100644 export/dist/standalone.bundle.0ce08212094b47d99d79.js.LICENSE.txt create mode 100644 export/dist/standalone.bundle.0ce08212094b47d99d79.js.map create mode 100644 export/dist/standalone.styles.d2d0a2c3b41689154751.css create mode 100644 export/dist/standalone.styles.d2d0a2c3b41689154751.css.map create mode 100644 export/src/standalone-styles.css diff --git a/export/dist/551.bundle.782857d3859034ccafaf.js b/export/dist/551.bundle.782857d3859034ccafaf.js new file mode 100644 index 0000000..e91e89b --- /dev/null +++ b/export/dist/551.bundle.782857d3859034ccafaf.js @@ -0,0 +1,3 @@ +/*! For license information please see 551.bundle.782857d3859034ccafaf.js.LICENSE.txt */ +"use strict";(self.webpackChunkexport_tests=self.webpackChunkexport_tests||[]).push([[551],{275:(e,t,r)=>{r.d(t,{$C:()=>M,B_:()=>te,Di:()=>B,Eh:()=>N,M8:()=>C,OG:()=>X,Ql:()=>D,Rl:()=>Q,Rx:()=>ee,Sb:()=>H,VU:()=>K,Wq:()=>F,Y$:()=>z,ZX:()=>L,Z_:()=>ie,cj:()=>G,eq:()=>$,fX:()=>Y,g2:()=>ne,g8:()=>J,mt:()=>R,oc:()=>W,zU:()=>V});var n=r(343);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function 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 a(e){for(var t=1;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(o(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 s(e,t,r,n,o){var i=p(e,t,r,n,o);return i.next().then(function(e){return e.done?e.value:i.next()})}function p(e,t,r,n,o){return new y(d().w(e,t,r,n),o||Promise)}function y(e,t){function r(n,o,i,a){try{var u=e[n](o),c=u.value;return c instanceof b?t.resolve(c.v).then(function(e){r("next",e,i,a)},function(e){r("throw",e,i,a)}):t.resolve(c).then(function(e){u.value=e,i(u)},function(e){return r("throw",e,i,a)})}catch(e){a(e)}}var n;this.next||(v(y.prototype),v(y.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),v(this,"_invoke",function(e,o,i){function a(){return new t(function(t,n){r(e,i,t,n)})}return n=n?n.then(a,a):a()},!0)}function d(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return v(f,"_invoke",function(r,n,o){var i,u,c,f=0,l=o||[],s=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return i=t,u=0,c=e,p.n=r,a}};function y(r,n){for(u=r,c=n,t=0;!s&&f&&!o&&t3?(o=d===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=e):i[0]<=y&&((o=r<2&&yn||n>d)&&(i[4]=r,i[5]=n,p.n=d,u=0))}if(o||r>1)return a;throw s=!0,n}return function(o,l,d){if(f>1)throw TypeError("Generator is already running");for(s&&1===l&&y(l,d),u=l,c=d;(t=u<2?e:c)||!s;){i||(u?u<3?(u>1&&(p.n=-1),y(u,c)):p.n=c:p.v=c);try{if(f=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,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=i.return)&&t.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=e}else if((t=(s=p.n<0)?c:r.call(n,p))!==a)break}catch(t){i=e,u=1,c=t}finally{f=1}}return{value:t,done:s}}}(r,o,i),!0),f}var a={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(v(t={},n,function(){return this}),t),s=f.prototype=u.prototype=Object.create(l);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,v(e,o,"GeneratorFunction")),e.prototype=Object.create(s),e}return c.prototype=f,v(s,"constructor",f),v(f,"constructor",c),c.displayName="GeneratorFunction",v(f,o,"GeneratorFunction"),v(s),v(s,o,"Generator"),v(s,n,function(){return this}),v(s,"toString",function(){return"[object Generator]"}),(d=function(){return{w:i,m:p}})()}function v(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}v=function(e,t,r,n){function i(t,r){v(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:(i("next",0),i("throw",1),i("return",2))},v(e,t,r,n)}function b(e,t){this.v=e,this.k=t}function h(e){return function(e){if(Array.isArray(e))return w(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||m(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 m(e,t){if(e){if("string"==typeof e)return w(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)?w(e,t):void 0}}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1:window.parent!==window.top}function _(e){return P.apply(this,arguments)}function P(){return(P=x(c().mark(function e(t){var r;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=A()){e.next=3;break}throw new Error("WebCrypto subtle API is unavailable");case 3:return e.next=5,r.importKey("raw",t,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}},e)}))).apply(this,arguments)}function N(){return T.apply(this,arguments)}function T(){return(T=x(c().mark(function e(){return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!I()){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,C();case 8:G(e.sent);case 10:case"end":return e.stop()}},e)}))).apply(this,arguments)}function C(){return U.apply(this,arguments)}function U(){return(U=x(c().mark(function e(){var t,r;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(t=A()){e.next=3;break}throw new Error("WebCrypto subtle API is unavailable");case 3:return e.next=5,t.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 5:return r=e.sent,e.next=8,t.exportKey("jwk",r.privateKey);case 8:return e.abrupt("return",e.sent);case 9:case"end":return e.stop()}},e)}))).apply(this,arguments)}function D(){var e=function(e){var t=window.localStorage.getItem(e);if(!t)return null;var r=JSON.parse(t);return Object.prototype.hasOwnProperty.call(r,"expiry")&&Object.prototype.hasOwnProperty.call(r,"value")?(new Date).getTime()>r.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}(E);return e?JSON.parse(e):null}function G(e){M(E,JSON.stringify(e),S)}function $(){window.localStorage.removeItem(E),window.localStorage.removeItem(k)}function K(e){j=e}function R(){var e=window.localStorage.getItem(O);return e?JSON.parse(e):null}function W(e){window.localStorage.setItem(O,JSON.stringify(e))}function M(e,t,r){var n={value:t,expiry:(new Date).getTime()+r};window.localStorage.setItem(e,JSON.stringify(n))}function F(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 B(e){return h(e).map(function(e){return e.toString(16).padStart(2,"0")}).join("")}function Y(e,t){var r=t-e.length;if(r>0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(h(n),h(e)))}if(r<0){for(var o=-1*r,i=0,a=0;a0;)r.push(o%58),o=o/58|0}for(var a=0;a0;){var u=r[a];i=(u=void 0===u?i:58*u+i)>>8,r[a]=u%256,a++}}var c=n.concat(r.reverse());return new Uint8Array(c)}function te(e){return re.apply(this,arguments)}function re(){return(re=x(c().mark(function e(t){var r,n,o,i,a,u;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,crypto.subtle.digest("SHA-256",t);case 2:return r=e.sent,n=new Uint8Array(r),e.next=6,crypto.subtle.digest("SHA-256",n);case 6:return o=e.sent,i=new Uint8Array(o),a=i.slice(0,4),(u=new Uint8Array(t.length+4)).set(t,0),u.set(a,t.length),e.abrupt("return",Q(u));case 13:case"end":return e.stop()}},e)}))).apply(this,arguments)}function ne(e,t,r){return oe.apply(this,arguments)}function oe(){return(oe=x(c().mark(function e(t,r,o){var i,a,u,f;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:e.t0=r,e.next="SOLANA"===e.t0?3:"HEXADECIMAL"===e.t0?13:"BITCOIN_MAINNET_WIF"===e.t0||"BITCOIN_TESTNET_WIF"===e.t0?14:"SUI_BECH32"===e.t0?24:31;break;case 3:if(o){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===o.length){e.next=9;break}throw new Error("invalid public key length. Expected 32 bytes. Got ".concat(o.length,"."));case 9:return(i=new Uint8Array(64)).set(t,0),i.set(o,32),e.abrupt("return",Q(i));case 13:return e.abrupt("return","0x"+B(t));case 14:if(32===t.length){e.next=16;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 16:return a="BITCOIN_MAINNET_WIF"===r?128:239,(u=new Uint8Array(34))[0]=a,u.set(t,1),u[33]=1,e.next=23,te(u);case 23:return e.abrupt("return",e.sent);case 24:if(32===t.length){e.next=26;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 26:return(f=new Uint8Array(33))[0]=0,f.set(t,1),e.abrupt("return",n.I.encode("suiprivkey",n.I.toWords(f)));case 31:return console.warn("invalid key format: ".concat(r,". Defaulting to HEXADECIMAL.")),e.abrupt("return","0x"+B(t));case 33:case"end":return e.stop()}},e)}))).apply(this,arguments)}function ie(e,t){var r={},n={padding:"^(\\d+(px|em|%|rem) ?){1,4}$",margin:"^(\\d+(px|em|%|rem) ?){1,4}$",borderWidth:"^(\\d+(px|em|rem) ?){1,4}$",borderStyle:"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$",borderColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",borderRadius:"^(\\d+(px|em|%|rem) ?){1,4}$",fontSize:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$",fontWeight:"^(normal|bold|bolder|lighter|\\d{3})$",fontFamily:'^[^";<>]*$',color:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",labelColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",backgroundColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",width:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",height:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",maxWidth:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",maxHeight:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",lineHeight:"^(\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$",boxShadow:"^(none|(\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)) ?(inset)?)$",textAlign:"^(left|right|center|justify|initial|inherit)$",overflowWrap:"^(normal|break-word|anywhere)$",wordWrap:"^(normal|break-word)$",resize:"^(none|both|horizontal|vertical|block|inline)$"};return Object.entries(e).forEach(function(e){var t,o,i=(o=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,u=[],c=!0,f=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){f=!0,o=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(f)throw o}}return u}}(t,o)||m(t,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=i[0],u=i[1],c=a.trim();if(0===c.length)throw new Error("css style property cannot be empty");var f=n[c];if(!f)throw new Error('invalid or unsupported css style property: "'.concat(c,'"'));var l=new RegExp(f),s=u.trim();if(0==s.length)throw new Error('css style for "'.concat(c,'" is empty'));if(!l.test(s))throw new Error('invalid css style value for property "'.concat(c,'"'));r[c]=s}),r}},482:(e,t,r)=>{r.r(t),r.d(t,{additionalAssociatedData:()=>w,applySettings:()=>P,base58CheckEncode:()=>d,base58Decode:()=>p,base58Encode:()=>y,encodeKey:()=>v,encodeWallet:()=>T,fromDerSignature:()=>m,generateTargetKey:()=>A,getEd25519PublicKey:()=>N,getEmbeddedKey:()=>j,getItemWithExpiry:()=>C,getSettings:()=>u,initEmbeddedKey:()=>I,logMessage:()=>_,normalizePadding:()=>h,onResetEmbeddedKey:()=>S,p256JWKPrivateToPublic:()=>E,sendMessageUp:()=>f,setEmbeddedKey:()=>k,setItemWithExpiry:()=>O,setParentFrameMessageChannelPort:()=>b,setSettings:()=>c,uint8arrayFromHexString:()=>l,uint8arrayToHexString:()=>s,validateStyles:()=>x,verifyEnclaveSignature:()=>g});var n=r(275),o=r(598),i=r(348);function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rr.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}},584:(e,t,r)=>{r.d(t,{u:()=>g});var n=r(275),o=r(255);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function a(){var e=p(),t=e.m(a),r=(Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__).constructor;function n(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===r||"GeneratorFunction"===(t.displayName||t.name))}var o={throw:1,return:2,break:3,continue:3};function i(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,i){return t.resultName=o,r(n.d,u(e),i)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(a=function(){return{wrap:function(t,r,n,o){return e.w(i(t),r,n,o&&o.reverse())},isGeneratorFunction:n,mark:e.m,awrap:function(e,t){return new d(e,t)},AsyncIterator:s,async:function(e,t,r,o,a){return(n(t)?l:f)(i(e),t,r,o,a)},keys:c,values:u}})()}function u(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(i(e)+" is not iterable")}function c(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}}function f(e,t,r,n,o){var i=l(e,t,r,n,o);return i.next().then(function(e){return e.done?e.value:i.next()})}function l(e,t,r,n,o){return new s(p().w(e,t,r,n),o||Promise)}function s(e,t){function r(n,o,i,a){try{var u=e[n](o),c=u.value;return c instanceof d?t.resolve(c.v).then(function(e){r("next",e,i,a)},function(e){r("throw",e,i,a)}):t.resolve(c).then(function(e){u.value=e,i(u)},function(e){return r("throw",e,i,a)})}catch(e){a(e)}}var n;this.next||(y(s.prototype),y(s.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),y(this,"_invoke",function(e,o,i){function a(){return new t(function(t,n){r(e,i,t,n)})}return n=n?n.then(a,a):a()},!0)}function p(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return y(f,"_invoke",function(r,n,o){var i,u,c,f=0,l=o||[],s=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return i=t,u=0,c=e,p.n=r,a}};function y(r,n){for(u=r,c=n,t=0;!s&&f&&!o&&t3?(o=d===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=e):i[0]<=y&&((o=r<2&&yn||n>d)&&(i[4]=r,i[5]=n,p.n=d,u=0))}if(o||r>1)return a;throw s=!0,n}return function(o,l,d){if(f>1)throw TypeError("Generator is already running");for(s&&1===l&&y(l,d),u=l,c=d;(t=u<2?e:c)||!s;){i||(u?u<3?(u>1&&(p.n=-1),y(u,c)):p.n=c:p.v=c);try{if(f=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,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=i.return)&&t.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=e}else if((t=(s=p.n<0)?c:r.call(n,p))!==a)break}catch(t){i=e,u=1,c=t}finally{f=1}}return{value:t,done:s}}}(r,o,i),!0),f}var a={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(y(t={},n,function(){return this}),t),s=f.prototype=u.prototype=Object.create(l);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,y(e,o,"GeneratorFunction")),e.prototype=Object.create(s),e}return c.prototype=f,y(s,"constructor",f),y(f,"constructor",c),c.displayName="GeneratorFunction",y(f,o,"GeneratorFunction"),y(s),y(s,o,"Generator"),y(s,n,function(){return this}),y(s,"toString",function(){return"[object Generator]"}),(p=function(){return{w:i,m:d}})()}function y(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}y=function(e,t,r,n){function i(t,r){y(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:(i("next",0),i("throw",1),i("return",2))},y(e,t,r,n)}function d(e,t){this.v=e,this.k=t}function v(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 b(e){for(var t=1;t 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n */\nasync function initEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey();\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n */\nfunction getEmbeddedKey() {\n const jwtKey = getItemWithExpiry(TURNKEY_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n */\nfunction setEmbeddedKey(targetKey) {\n setItemWithExpiry(\n TURNKEY_EMBEDDED_KEY,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n */\nfunction onResetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY);\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Encodes a Uint8Array into a base58-check-encoded string\n * Throws an error if the input is invalid or the checksum is invalid.\n * @param {Uint8Array} payload The raw payload to encode.\n * @return {Promise} The base58check-encoded string.\n */\nasync function base58CheckEncode(payload) {\n const hash1Buf = await crypto.subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n\n const hash2Buf = await crypto.subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n\n const checksum = hash2.slice(0, 4);\n\n const full = new Uint8Array(payload.length + 4);\n full.set(payload, 0);\n full.set(checksum, payload.length);\n\n return base58Encode(full);\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" 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 }\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n case \"BITCOIN_MAINNET_WIF\":\n case \"BITCOIN_TESTNET_WIF\": {\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const version = keyFormat === \"BITCOIN_MAINNET_WIF\" ? 0x80 : 0xef;\n const wifPayload = new Uint8Array(34);\n wifPayload[0] = version;\n wifPayload.set(privateKeyBytes, 1);\n wifPayload[33] = 0x01; // compressed flag\n\n return await base58CheckEncode(wifPayload);\n }\n case \"SUI_BECH32\": {\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const schemeFlag = 0x00; // ED25519 | We only support ED25519 keys for Sui currently\n const bech32Payload = new Uint8Array(1 + 32);\n bech32Payload[0] = schemeFlag;\n bech32Payload.set(privateKeyBytes, 1);\n\n return bech32.encode(\"suiprivkey\", bech32.toWords(bech32Payload));\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n base58CheckEncode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import \"./styles.css\";\nimport * as SharedTKHQ from \"@shared/turnkey-core.js\";\nimport * as nobleEd25519 from \"@noble/ed25519\";\nimport { sha512 } from \"@noble/hashes/sha2.js\";\n\nconst {\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58Encode,\n base58CheckEncode,\n encodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n p256JWKPrivateToPublic,\n setItemWithExpiry,\n onResetEmbeddedKey,\n setEmbeddedKey,\n getEmbeddedKey,\n generateTargetKey,\n initEmbeddedKey,\n logMessage,\n} = SharedTKHQ;\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n 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 if (validStyles.backgroundColor) {\n // Apply background color to document and body as well.\n document.documentElement.style.backgroundColor =\n validStyles.backgroundColor;\n document.body.style.backgroundColor = validStyles.backgroundColor;\n }\n\n validSettings[\"styles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\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 sha512(nobleEd25519.etc.concatBytes(...m));\n\n return nobleEd25519.getPublicKey(privateKeyHex);\n}\n\n/**\n * Returns a UTF-8 encoded wallet mnemonic + newline optional passphrase\n * from wallet bytes.\n * @param {Uint8Array} walletBytes\n */\nfunction encodeWallet(walletBytes) {\n const decoder = new TextDecoder(\"utf-8\");\n const wallet = decoder.decode(walletBytes);\n let mnemonic;\n let passphrase = null;\n\n if (wallet.includes(\"\\n\")) {\n const parts = wallet.split(\"\\n\");\n mnemonic = parts[0];\n passphrase = parts[1];\n } else {\n mnemonic = wallet;\n }\n\n return {\n mnemonic: mnemonic,\n passphrase: passphrase,\n };\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 (!Object.hasOwn(item, \"expiry\") || !Object.hasOwn(item, \"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\nexport {\n initEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getEmbeddedKey,\n setEmbeddedKey,\n onResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckEncode,\n encodeKey,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n getSettings,\n setSettings,\n logMessage,\n getItemWithExpiry,\n getEd25519PublicKey,\n applySettings,\n encodeWallet,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_OverloadYield","k","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_EMBEDDED_KEY","TURNKEY_SETTINGS","TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS","TURNKEY_EMBEDDED_KEY_ORIGIN","parentFrameMessageChannelPort","getSubtleCrypto","globalThis","crypto","subtle","window","global","isDoublyIframed","undefined","location","ancestorOrigins","parent","top","loadQuorumKey","_x","_loadQuorumKey","_regeneratorRuntime","mark","_callee","quorumPublic","wrap","_context","prev","next","Error","importKey","namedCurve","abrupt","sent","stop","initEmbeddedKey","_initEmbeddedKey","_callee3","_context3","getEmbeddedKey","generateTargetKey","setEmbeddedKey","_generateTargetKey","_callee4","p256key","_context4","generateKey","exportKey","privateKey","jwtKey","key","itemStr","localStorage","getItem","item","JSON","parse","hasOwnProperty","Date","getTime","expiry","removeItem","getItemWithExpiry","targetKey","setItemWithExpiry","stringify","onResetEmbeddedKey","setParentFrameMessageChannelPort","port","getSettings","settings","setSettings","setItem","ttl","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","concat","expectedZeroCount","zeroCount","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","fromDerSignature","derSignature","derSignatureBuf","index","rLength","sLength","rPadded","sPadded","verifyEnclaveSignature","_x3","_x4","_x5","_verifyEnclaveSignature","_callee5","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context5","prod","preprod","__TURNKEY_SIGNER_ENVIRONMENT__","verify","hash","sendMessageUp","type","requestId","message","postMessage","logMessage","content","messageLog","document","getElementById","createElement","innerText","appendChild","p256JWKPrivateToPublic","_x6","_p256JWKPrivateToPublic","_callee6","jwkPrivate","jwkPrivateCopy","publicKey","_context6","_objectSpread","key_ops","base58Encode","bytes","result","digits","carry","j","push","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","currentByte","reverse","base58CheckEncode","_x8","_base58CheckEncode","_callee8","payload","hash1Buf","hash1","hash2Buf","hash2","checksum","full","_context8","digest","set","encodeKey","_x11","_x12","_x13","_encodeKey","_callee10","privateKeyBytes","keyFormat","publicKeyBytes","concatenatedBytes","version","wifPayload","bech32Payload","_context10","t0","bech32","encode","toWords","console","warn","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","SharedTKHQ","applySettings","validSettings","settingsObj","keyDivTextarea","style","documentElement","body","getEd25519PublicKey","privateKeyHex","nobleEd25519","sha512Sync","_nobleEd25519$etc","sha512","concatBytes","encodeWallet","walletBytes","mnemonic","wallet","TextDecoder","decode","passphrase","includes","parts","split","hasOwn","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","TextEncoder","HpkeDecrypt","_HpkeDecrypt","ciphertextBuf","encappedKeyBuf","receiverPrivJwk","kemContext","receiverPriv","suite","recipientCtx","aad","res","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createRecipientContext","recipientKey","enc","info","open"],"sourceRoot":""} \ No newline at end of file diff --git a/export/dist/index.bundle.e0d2df0dce7785f4bfeb.js b/export/dist/index.bundle.e0d2df0dce7785f4bfeb.js new file mode 100644 index 0000000..cbcd62b --- /dev/null +++ b/export/dist/index.bundle.e0d2df0dce7785f4bfeb.js @@ -0,0 +1,3 @@ +/*! For license information please see index.bundle.e0d2df0dce7785f4bfeb.js.LICENSE.txt */ +(()=>{"use strict";var e,t,n,r,a,o={954:(e,t,n)=>{var r=n(482),a=n(584);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function i(){var e=p(),t=e.m(i),n=(Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__).constructor;function r(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===n||"GeneratorFunction"===(t.displayName||t.name))}var a={throw:1,return:2,break:3,continue:3};function o(e){var t,n;return function(r){t||(t={stop:function(){return n(r.a,2)},catch:function(){return r.v},abrupt:function(e,t){return n(r.a,a[e],t)},delegateYield:function(e,a,o){return t.resultName=a,n(r.d,u(e),o)},finish:function(e){return n(r.f,e)}},n=function(e,n,a){r.p=t.prev,r.n=t.next;try{return e(n,a)}finally{t.next=r.n}}),t.resultName&&(t[t.resultName]=r.v,t.resultName=void 0),t.sent=r.v,t.next=r.n;try{return e.call(this,t)}finally{r.p=t.prev,r.n=t.next}}}return(i=function(){return{wrap:function(t,n,r,a){return e.w(o(t),n,r,a&&a.reverse())},isGeneratorFunction:r,mark:e.m,awrap:function(e,t){return new y(e,t)},AsyncIterator:f,async:function(e,t,n,a,i){return(r(t)?d:s)(o(e),t,n,a,i)},keys:c,values:u}})()}function u(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(o(e)+" is not iterable")}function c(e){var t=Object(e),n=[];for(var r in t)n.unshift(r);return function e(){for(;n.length;)if((r=n.pop())in t)return e.value=r,e.done=!1,e;return e.done=!0,e}}function s(e,t,n,r,a){var o=d(e,t,n,r,a);return o.next().then(function(e){return e.done?e.value:o.next()})}function d(e,t,n,r,a){return new f(p().w(e,t,n,r),a||Promise)}function f(e,t){function n(r,a,o,i){try{var u=e[r](a),c=u.value;return c instanceof y?t.resolve(c.v).then(function(e){n("next",e,o,i)},function(e){n("throw",e,o,i)}):t.resolve(c).then(function(e){u.value=e,o(u)},function(e){return n("throw",e,o,i)})}catch(e){i(e)}}var r;this.next||(l(f.prototype),l(f.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),l(this,"_invoke",function(e,a,o){function i(){return new t(function(t,r){n(e,o,t,r)})}return r=r?r.then(i,i):i()},!0)}function p(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",a=n.toStringTag||"@@toStringTag";function o(n,r,a,o){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return l(s,"_invoke",function(n,r,a){var o,u,c,s=0,d=a||[],f=!1,p={p:0,n:0,v:e,a:l,f:l.bind(e,4),d:function(t,n){return o=t,u=0,c=e,p.n=n,i}};function l(n,r){for(u=n,c=r,t=0;!f&&s&&!a&&t3?(a=y===r)&&(c=o[(u=o[4])?5:(u=3,3)],o[4]=o[5]=e):o[0]<=l&&((a=n<2&&lr||r>y)&&(o[4]=n,o[5]=r,p.n=y,u=0))}if(a||n>1)return i;throw f=!0,r}return function(a,d,y){if(s>1)throw TypeError("Generator is already running");for(f&&1===d&&l(d,y),u=d,c=y;(t=u<2?e:c)||!f;){o||(u?u<3?(u>1&&(p.n=-1),l(u,c)):p.n=c:p.v=c);try{if(s=2,o){if(u||(a="next"),t=o[a]){if(!(t=t.call(o,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=o.return)&&t.call(o),u<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),u=1);o=e}else if((t=(f=p.n<0)?c:n.call(r,p))!==i)break}catch(t){o=e,u=1,c=t}finally{s=1}}return{value:t,done:f}}}(n,a,o),!0),s}var i={};function u(){}function c(){}function s(){}t=Object.getPrototypeOf;var d=[][r]?t(t([][r]())):(l(t={},r,function(){return this}),t),f=s.prototype=u.prototype=Object.create(d);function y(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,l(e,a,"GeneratorFunction")),e.prototype=Object.create(f),e}return c.prototype=s,l(f,"constructor",s),l(s,"constructor",c),c.displayName="GeneratorFunction",l(s,a,"GeneratorFunction"),l(f),l(f,a,"Generator"),l(f,r,function(){return this}),l(f,"toString",function(){return"[object Generator]"}),(p=function(){return{w:o,m:y}})()}function l(e,t,n,r){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}l=function(e,t,n,r){function o(t,n){l(e,t,function(e){return this._invoke(t,n,e)})}t?a?a(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},l(e,t,n,r)}function y(e,t){this.v=e,this.k=t}function v(e,t,n,r,a,o,i){try{var u=e[o](i),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,a)}function b(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var o=e.apply(t,n);function i(e){v(o,r,a,i,u,"next",e)}function u(e){v(o,r,a,i,u,"throw",e)}i(void 0)})}}window.TKHQ=r;var g=null,m=new AbortController,h=new AbortController,w=function(){var e=b(i().mark(function e(t){return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.data||"INJECT_KEY_EXPORT_BUNDLE"!=t.data.type){e.next=10;break}return r.logMessage("⬇️ Received message ".concat(t.data.type,": ").concat(t.data.value,", ").concat(t.data.keyFormat,", ").concat(t.data.organizationId)),e.prev=2,e.next=5,S(t.data.value,t.data.keyFormat,t.data.organizationId,t.data.requestId);case 5:e.next=10;break;case 7:e.prev=7,e.t0=e.catch(2),r.sendMessageUp("ERROR",e.t0.toString(),t.data.requestId);case 10:if(!t.data||"INJECT_WALLET_EXPORT_BUNDLE"!=t.data.type){e.next=20;break}return r.logMessage("⬇️ Received message ".concat(t.data.type,": ").concat(t.data.value,", ").concat(t.data.organizationId)),e.prev=12,e.next=15,P(t.data.value,t.data.organizationId,t.data.requestId);case 15:e.next=20;break;case 17:e.prev=17,e.t1=e.catch(12),r.sendMessageUp("ERROR",e.t1.toString(),t.data.requestId);case 20:if(!t.data||"APPLY_SETTINGS"!=t.data.type){e.next=29;break}return e.prev=21,e.next=24,T(t.data.value,t.data.requestId);case 24:e.next=29;break;case 26:e.prev=26,e.t2=e.catch(21),r.sendMessageUp("ERROR",e.t2.toString(),t.data.requestId);case 29:if(t.data&&"RESET_EMBEDDED_KEY"==t.data.type){r.logMessage("⬇️ Received message ".concat(t.data.type));try{r.onResetEmbeddedKey()}catch(e){r.sendMessageUp("ERROR",e.toString())}}case 30:case"end":return e.stop()}},e,null,[[2,7],[12,17],[21,26]])}));return function(t){return e.apply(this,arguments)}}();function x(e){Array.from(document.body.children).forEach(function(e){"SCRIPT"!==e.tagName&&"key-div"!==e.id&&(e.style.display="none")});var t={border:"none",color:"#555b64",fontSize:".875rem",lineHeight:"1.25rem",overflowWrap:"break-word",textAlign:"left"},n=document.getElementById("key-div");for(var a in n.innerText=e,t)n.style[a]=t[a];document.body.appendChild(n),r.applySettings(r.getSettings())}function E(e,t){return k.apply(this,arguments)}function k(){return(k=b(i().mark(function e(t,n){var o,u,c,s,d;return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:c=JSON.parse(t),e.t0=c.version,e.next="v1.0.0"===e.t0?4:31;break;case 4:if(c.data){e.next=6;break}throw new Error('missing "data" in bundle');case 6:if(c.dataSignature){e.next=8;break}throw new Error('missing "dataSignature" in bundle');case 8:if(c.enclaveQuorumPublic){e.next=10;break}throw new Error('missing "enclaveQuorumPublic" in bundle');case 10:if(r.verifyEnclaveSignature){e.next=12;break}throw new Error("method not loaded");case 12:return e.next=14,r.verifyEnclaveSignature(c.enclaveQuorumPublic,c.dataSignature,c.data);case 14:if(e.sent){e.next=17;break}throw new Error("failed to verify enclave signature: ".concat(t));case 17:if(s=JSON.parse((new TextDecoder).decode(r.uint8arrayFromHexString(c.data))),n){e.next=22;break}console.warn('we highly recommend a version of @turnkey/iframe-stamper >= v2.0.0 to pass "organizationId" for security purposes.'),e.next=24;break;case 22:if(s.organizationId&&s.organizationId===n){e.next=24;break}throw new Error("organization id does not match expected value. Expected: ".concat(n,". Found: ").concat(s.organizationId,"."));case 24:if(s.encappedPublic){e.next=26;break}throw new Error('missing "encappedPublic" in bundle signed data');case 26:if(s.ciphertext){e.next=28;break}throw new Error('missing "ciphertext" in bundle signed data');case 28:return o=r.uint8arrayFromHexString(s.encappedPublic),u=r.uint8arrayFromHexString(s.ciphertext),e.abrupt("break",32);case 31:throw new Error("unsupported version: ".concat(c.version));case 32:return e.next=34,r.getEmbeddedKey();case 34:return d=e.sent,e.next=37,(0,a.u)({ciphertextBuf:u,encappedKeyBuf:o,receiverPrivJwk:d});case 37:return e.abrupt("return",e.sent);case 38:case"end":return e.stop()}},e)}))).apply(this,arguments)}function S(e,t,n,r){return O.apply(this,arguments)}function O(){return(O=b(i().mark(function e(t,n,a,o){var u,c,s,d,f;return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,E(t,a);case 2:if(u=e.sent,r.onResetEmbeddedKey(),s=new Uint8Array(u),"SOLANA"!==n){e.next=13;break}return d=r.uint8arrayToHexString(s.subarray(0,32)),f=r.getEd25519PublicKey(d),e.next=10,r.encodeKey(s,n,f);case 10:c=e.sent,e.next=16;break;case 13:return e.next=15,r.encodeKey(s,n);case 15:c=e.sent;case 16:x(c),r.sendMessageUp("BUNDLE_INJECTED",!0,o);case 18:case"end":return e.stop()}},e)}))).apply(this,arguments)}function P(e,t,n){return _.apply(this,arguments)}function _(){return(_=b(i().mark(function e(t,n,a){var o;return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,E(t,n);case 2:o=e.sent,r.onResetEmbeddedKey(),x(r.encodeWallet(new Uint8Array(o)).mnemonic),r.sendMessageUp("BUNDLE_INJECTED",!0,a);case 7:case"end":return e.stop()}},e)}))).apply(this,arguments)}function T(e,t){return I.apply(this,arguments)}function I(){return(I=b(i().mark(function e(t,n){var a;return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:a=r.applySettings(t),r.setSettings(a),r.sendMessageUp("SETTINGS_APPLIED",!0,n);case 3:case"end":return e.stop()}},e)}))).apply(this,arguments)}document.addEventListener("DOMContentLoaded",b(i().mark(function e(){var t,n,a,o;return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,r.initEmbeddedKey();case 2:return e.next=4,r.getEmbeddedKey();case 4:return t=e.sent,e.next=7,r.p256JWKPrivateToPublic(t);case 7:n=e.sent,a=r.uint8arrayToHexString(n),document.getElementById("embedded-key").value=a,window.addEventListener("message",w,{capture:!1,signal:m.signal}),m.signal.aborted||((o=r.getSettings())&&r.applySettings(o),r.sendMessageUp("PUBLIC_KEY_READY",a));case 12:case"end":return e.stop()}},e)})),!1),window.addEventListener("message",function(){var e=b(i().mark(function e(t){var n,a,o,u;return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.data||"TURNKEY_INIT_MESSAGE_CHANNEL"!=t.data.type||null===(n=t.ports)||void 0===n||!n[0]){e.next=17;break}return m.abort(),(g=t.ports[0]).onmessage=w,r.setParentFrameMessageChannelPort(g),e.next=7,r.initEmbeddedKey();case 7:return e.next=9,r.getEmbeddedKey();case 9:return a=e.sent,e.next=12,r.p256JWKPrivateToPublic(a);case 12:o=e.sent,u=r.uint8arrayToHexString(o),document.getElementById("embedded-key").value=u,r.sendMessageUp("PUBLIC_KEY_READY",u),h.abort();case 17:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}(),{signal:h.signal})}},i={};function u(e){var t=i[e];if(void 0!==t)return t.exports;var n=i[e]={exports:{}};return o[e](n,n.exports,u),n.exports}u.m=o,e=[],u.O=(t,n,r,a)=>{if(!n){var o=1/0;for(d=0;d=a)&&Object.keys(u.O).every(e=>u.O[e](n[c]))?n.splice(c--,1):(i=!1,a0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[n,r,a]},n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,u.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var a=Object.create(null);u.r(a);var o={};t=t||[null,n({}),n([]),n(n)];for(var i=2&r&&e;("object"==typeof i||"function"==typeof i)&&!~t.indexOf(i);i=n(i))Object.getOwnPropertyNames(i).forEach(t=>o[t]=()=>e[t]);return o.default=()=>e,u.d(a,o),a},u.d=(e,t)=>{for(var n in t)u.o(t,n)&&!u.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},u.f={},u.e=e=>Promise.all(Object.keys(u.f).reduce((t,n)=>(u.f[n](e,t),t),[])),u.u=e=>e+".bundle."+{291:"7a021a78b825e05e9dc5",825:"cc79276508bd3ade610e"}[e]+".js",u.miniCssF=e=>{},u.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),u.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},a="export-tests:",u.l=(e,t,n,o)=>{if(r[e])r[e].push(t);else{var i,c;if(void 0!==n)for(var s=document.getElementsByTagName("script"),d=0;d{i.onerror=i.onload=null,clearTimeout(l);var a=r[e];if(delete r[e],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach(e=>e(n)),t)return t(n)},l=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.p="/",(()=>{var e={57:0};u.f.j=(t,n)=>{var r=u.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else{var a=new Promise((n,a)=>r=e[t]=[n,a]);n.push(r[2]=a);var o=u.p+u.u(t),i=new Error;u.l(o,n=>{if(u.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var a=n&&("load"===n.type?"missing":n.type),o=n&&n.target&&n.target.src;i.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",i.name="ChunkLoadError",i.type=a,i.request=o,r[1](i)}},"chunk-"+t,t)}},u.O.j=t=>0===e[t];var t=(t,n)=>{var r,a,[o,i,c]=n,s=0;if(o.some(t=>0!==e[t])){for(r in i)u.o(i,r)&&(u.m[r]=i[r]);if(c)var d=c(u)}for(t&&t(n);su(954));c=u.O(c)})(); +//# sourceMappingURL=index.bundle.e0d2df0dce7785f4bfeb.js.map \ No newline at end of file diff --git a/export/dist/index.bundle.e0d2df0dce7785f4bfeb.js.LICENSE.txt b/export/dist/index.bundle.e0d2df0dce7785f4bfeb.js.LICENSE.txt new file mode 100644 index 0000000..775d393 --- /dev/null +++ b/export/dist/index.bundle.e0d2df0dce7785f4bfeb.js.LICENSE.txt @@ -0,0 +1 @@ +/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ diff --git a/export/dist/index.bundle.e0d2df0dce7785f4bfeb.js.map b/export/dist/index.bundle.e0d2df0dce7785f4bfeb.js.map new file mode 100644 index 0000000..cbc7e4e --- /dev/null +++ b/export/dist/index.bundle.e0d2df0dce7785f4bfeb.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.bundle.e0d2df0dce7785f4bfeb.js","mappings":"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","sources":["webpack://export-tests/webpack/runtime/chunk loaded","webpack://export-tests/webpack/runtime/create fake namespace object","webpack://export-tests/webpack/runtime/load script","webpack://export-tests/./src/index.js","webpack://export-tests/webpack/bootstrap","webpack://export-tests/webpack/runtime/define property getters","webpack://export-tests/webpack/runtime/ensure chunk","webpack://export-tests/webpack/runtime/get javascript chunk filename","webpack://export-tests/webpack/runtime/get mini-css chunk filename","webpack://export-tests/webpack/runtime/global","webpack://export-tests/webpack/runtime/hasOwnProperty shorthand","webpack://export-tests/webpack/runtime/make namespace object","webpack://export-tests/webpack/runtime/publicPath","webpack://export-tests/webpack/runtime/jsonp chunk loading","webpack://export-tests/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-tests:\";\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};","// Vendor @hpke/core from https://esm.sh/@hpke/core@1.2.7\n\nimport * as TKHQ from \"./turnkey-core.js\";\nimport { HpkeDecrypt } from \"@shared/crypto-utils.js\";\n\nwindow.TKHQ = TKHQ;\n\n// persist the MessageChannel object so we can use it to communicate with the parent window\nvar iframeMessagePort = null;\n\n// controllers to remove event listeners\nconst messageListenerController = new AbortController();\nconst turnkeyInitController = new AbortController();\n\n/**\n * Message Event Handlers to process messages from the parent frame\n */\nvar messageEventListener = async function (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[\"value\"],\n event.data[\"keyFormat\"],\n event.data[\"organizationId\"],\n event.data[\"requestId\"]\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 );\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};\n\n/**\n * Initialize the embedded key and set up the DOM and message event listeners\n */\ndocument.addEventListener(\n \"DOMContentLoaded\",\n 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 window.addEventListener(\"message\", messageEventListener, {\n capture: false,\n signal: messageListenerController.signal,\n });\n\n if (!messageListenerController.signal.aborted) {\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 TKHQ.sendMessageUp(\"PUBLIC_KEY_READY\", targetPubHex);\n }\n },\n false\n);\n\nwindow.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 iframeMessagePort = event.ports[0];\n iframeMessagePort.onmessage = messageEventListener;\n\n TKHQ.setParentFrameMessageChannelPort(iframeMessagePort);\n\n await TKHQ.initEmbeddedKey();\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/**\n * Hide every HTML element in except any \ No newline at end of file +Turnkey Export
\ No newline at end of file diff --git a/export/dist/standalone.bundle.0ce08212094b47d99d79.js b/export/dist/standalone.bundle.0ce08212094b47d99d79.js new file mode 100644 index 0000000..018a497 --- /dev/null +++ b/export/dist/standalone.bundle.0ce08212094b47d99d79.js @@ -0,0 +1,3 @@ +/*! For license information please see standalone.bundle.0ce08212094b47d99d79.js.LICENSE.txt */ +(()=>{"use strict";var e,t,n,r,o,a={635:(e,t,n)=>{var r=n(482),o=n(584);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(){var e=l(),t=e.m(i),n=(Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__).constructor;function r(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===n||"GeneratorFunction"===(t.displayName||t.name))}var o={throw:1,return:2,break:3,continue:3};function a(e){var t,n;return function(r){t||(t={stop:function(){return n(r.a,2)},catch:function(){return r.v},abrupt:function(e,t){return n(r.a,o[e],t)},delegateYield:function(e,o,a){return t.resultName=o,n(r.d,u(e),a)},finish:function(e){return n(r.f,e)}},n=function(e,n,o){r.p=t.prev,r.n=t.next;try{return e(n,o)}finally{t.next=r.n}}),t.resultName&&(t[t.resultName]=r.v,t.resultName=void 0),t.sent=r.v,t.next=r.n;try{return e.call(this,t)}finally{r.p=t.prev,r.n=t.next}}}return(i=function(){return{wrap:function(t,n,r,o){return e.w(a(t),n,r,o&&o.reverse())},isGeneratorFunction:r,mark:e.m,awrap:function(e,t){return new y(e,t)},AsyncIterator:d,async:function(e,t,n,o,i){return(r(t)?f:s)(a(e),t,n,o,i)},keys:c,values:u}})()}function u(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(a(e)+" is not iterable")}function c(e){var t=Object(e),n=[];for(var r in t)n.unshift(r);return function e(){for(;n.length;)if((r=n.pop())in t)return e.value=r,e.done=!1,e;return e.done=!0,e}}function s(e,t,n,r,o){var a=f(e,t,n,r,o);return a.next().then(function(e){return e.done?e.value:a.next()})}function f(e,t,n,r,o){return new d(l().w(e,t,n,r),o||Promise)}function d(e,t){function n(r,o,a,i){try{var u=e[r](o),c=u.value;return c instanceof y?t.resolve(c.v).then(function(e){n("next",e,a,i)},function(e){n("throw",e,a,i)}):t.resolve(c).then(function(e){u.value=e,a(u)},function(e){return n("throw",e,a,i)})}catch(e){i(e)}}var r;this.next||(p(d.prototype),p(d.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),p(this,"_invoke",function(e,o,a){function i(){return new t(function(t,r){n(e,a,t,r)})}return r=r?r.then(i,i):i()},!0)}function l(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,r,o,a){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return p(s,"_invoke",function(n,r,o){var a,u,c,s=0,f=o||[],d=!1,l={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return a=t,u=0,c=e,l.n=n,i}};function p(n,r){for(u=n,c=r,t=0;!d&&s&&!o&&t3?(o=y===r)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=p&&((o=n<2&&pr||r>y)&&(a[4]=n,a[5]=r,l.n=y,u=0))}if(o||n>1)return i;throw d=!0,r}return function(o,f,y){if(s>1)throw TypeError("Generator is already running");for(d&&1===f&&p(f,y),u=f,c=y;(t=u<2?e:c)||!d;){a||(u?u<3?(u>1&&(l.n=-1),p(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=(d=l.n<0)?c:n.call(r,l))!==i)break}catch(t){a=e,u=1,c=t}finally{s=1}}return{value:t,done:d}}}(n,o,a),!0),s}var i={};function u(){}function c(){}function s(){}t=Object.getPrototypeOf;var f=[][r]?t(t([][r]())):(p(t={},r,function(){return this}),t),d=s.prototype=u.prototype=Object.create(f);function y(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,p(e,o,"GeneratorFunction")),e.prototype=Object.create(d),e}return c.prototype=s,p(d,"constructor",s),p(s,"constructor",c),c.displayName="GeneratorFunction",p(s,o,"GeneratorFunction"),p(d),p(d,o,"Generator"),p(d,r,function(){return this}),p(d,"toString",function(){return"[object Generator]"}),(l=function(){return{w:a,m:y}})()}function p(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}p=function(e,t,n,r){function a(t,n){p(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},p(e,t,n,r)}function y(e,t){this.v=e,this.k=t}function v(e,t,n,r,o,a,i){try{var u=e[a](i),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function m(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function i(e){v(a,r,o,i,u,"next",e)}function u(e){v(a,r,o,i,u,"throw",e)}i(void 0)})}}function b(e){var t=document.getElementById("message-log"),n=document.createElement("p");n.innerText=e,t.appendChild(n)}function h(e,t){null!==window.top&&window.top.postMessage({type:e,value:t},"*"),b("⬆️ Sent message ".concat(e,": ").concat(t))}function g(e){Array.from(document.body.children).forEach(function(e){"SCRIPT"!==e.tagName&&"key-div"!==e.id&&(e.style.display="none")});var t={border:"none",color:"#555b64",fontSize:".875rem",lineHeight:"1.25rem",overflowWrap:"break-word",textAlign:"left"},n=document.getElementById("key-div");for(var r in n.innerText=e,t)n.style[r]=t[r];document.body.appendChild(n)}function w(e,t){return E.apply(this,arguments)}function E(){return(E=m(i().mark(function e(t,n){var a,u,c,s,f;return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:c=JSON.parse(t),e.t0=c.version,e.next="v1.0.0"===e.t0?4:31;break;case 4:if(c.data){e.next=6;break}throw new Error('missing "data" in bundle');case 6:if(c.dataSignature){e.next=8;break}throw new Error('missing "dataSignature" in bundle');case 8:if(c.enclaveQuorumPublic){e.next=10;break}throw new Error('missing "enclaveQuorumPublic" in bundle');case 10:if(r.verifyEnclaveSignature){e.next=12;break}throw new Error("method not loaded");case 12:return e.next=14,r.verifyEnclaveSignature(c.enclaveQuorumPublic,c.dataSignature,c.data);case 14:if(e.sent){e.next=17;break}throw new Error("failed to verify enclave signature: ".concat(t));case 17:if(s=JSON.parse((new TextDecoder).decode(r.uint8arrayFromHexString(c.data))),n){e.next=22;break}console.warn('we highly recommend a version of @turnkey/iframe-stamper >= v2.0.0 to pass "organizationId" for security purposes.'),e.next=24;break;case 22:if(s.organizationId&&s.organizationId===n){e.next=24;break}throw new Error("organization id does not match expected value. Expected: ".concat(n,". Found: ").concat(s.organizationId,"."));case 24:if(s.encappedPublic){e.next=26;break}throw new Error('missing "encappedPublic" in bundle signed data');case 26:if(s.ciphertext){e.next=28;break}throw new Error('missing "ciphertext" in bundle signed data');case 28:return a=r.uint8arrayFromHexString(s.encappedPublic),u=r.uint8arrayFromHexString(s.ciphertext),e.abrupt("break",32);case 31:throw new Error("unsupported version: ".concat(c.version));case 32:return e.next=34,r.getEmbeddedKey();case 34:return f=e.sent,e.next=37,(0,o.u)({ciphertextBuf:u,encappedKeyBuf:a,receiverPrivJwk:f});case 37:return e.abrupt("return",e.sent);case 38:case"end":return e.stop()}},e)}))).apply(this,arguments)}function x(e,t,n){return k.apply(this,arguments)}function k(){return(k=m(i().mark(function e(t,n,o){var a,u,c,s,f;return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,w(t,o);case 2:if(a=e.sent,r.onResetEmbeddedKey(),c=new Uint8Array(a),"SOLANA"!==n){e.next=13;break}return s=r.uint8arrayToHexString(c.subarray(0,32)),f=r.getEd25519PublicKey(s),e.next=10,r.encodeKey(c,n,f);case 10:u=e.sent,e.next=16;break;case 13:return e.next=15,r.encodeKey(c,n);case 15:u=e.sent;case 16:g(u),h("BUNDLE_INJECTED",!0);case 18:case"end":return e.stop()}},e)}))).apply(this,arguments)}function O(e,t){return _.apply(this,arguments)}function _(){return(_=m(i().mark(function e(t,n){var o;return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,w(t,n);case 2:o=e.sent,r.onResetEmbeddedKey(),g(r.encodeWallet(new Uint8Array(o)).mnemonic),h("BUNDLE_INJECTED",!0);case 7:case"end":return e.stop()}},e)}))).apply(this,arguments)}window.TKHQ=r,document.addEventListener("DOMContentLoaded",m(i().mark(function e(){var t,n,o;return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,r.initEmbeddedKey();case 2:return e.next=4,r.getEmbeddedKey();case 4:return t=e.sent,e.next=7,r.p256JWKPrivateToPublic(t);case 7:n=e.sent,o=r.uint8arrayToHexString(n),document.getElementById("embedded-key").value=o,h("PUBLIC_KEY_READY",o),window.addEventListener("message",function(){var e=m(i().mark(function e(t){return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.data||"INJECT_KEY_EXPORT_BUNDLE"!=t.data.type){e.next=10;break}return b("⬇️ Received message ".concat(t.data.type,": ").concat(t.data.value,", ").concat(t.data.keyFormat,", ").concat(t.data.organizationId)),e.prev=2,e.next=5,x(t.data.value,t.data.keyFormat,t.data.organizationId);case 5:e.next=10;break;case 7:e.prev=7,e.t0=e.catch(2),h("ERROR",e.t0.toString());case 10:if(!t.data||"INJECT_WALLET_EXPORT_BUNDLE"!=t.data.type){e.next=20;break}return b("⬇️ Received message ".concat(t.data.type,": ").concat(t.data.value,", ").concat(t.data.organizationId)),e.prev=12,e.next=15,O(t.data.value,t.data.organizationId);case 15:e.next=20;break;case 17:e.prev=17,e.t1=e.catch(12),h("ERROR",e.t1.toString());case 20:if(t.data&&"RESET_EMBEDDED_KEY"==t.data.type){b("⬇️ Received message ".concat(t.data.type));try{r.onResetEmbeddedKey()}catch(e){h("ERROR",e.toString())}}case 21:case"end":return e.stop()}},e,null,[[2,7],[12,17]])}));return function(t){return e.apply(this,arguments)}}(),!1),document.getElementById("inject-key").addEventListener("click",function(){var e=m(i().mark(function e(t){return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.preventDefault(),window.postMessage({type:"INJECT_KEY_EXPORT_BUNDLE",value:document.getElementById("key-export-bundle").value,keyFormat:document.getElementById("key-export-format").value,organizationId:document.getElementById("key-organization-id").value});case 2:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}(),!1),document.getElementById("inject-wallet").addEventListener("click",function(){var e=m(i().mark(function e(t){return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.preventDefault(),window.postMessage({type:"INJECT_WALLET_EXPORT_BUNDLE",value:document.getElementById("wallet-export-bundle").value,organizationId:document.getElementById("wallet-organization-id").value});case 2:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}(),!1),document.getElementById("reset").addEventListener("click",function(){var e=m(i().mark(function e(t){return i().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t.preventDefault(),window.postMessage({type:"RESET_EMBEDDED_KEY"});case 2:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}(),!1);case 15:case"end":return e.stop()}},e)})),!1)}},i={};function u(e){var t=i[e];if(void 0!==t)return t.exports;var n=i[e]={exports:{}};return a[e](n,n.exports,u),n.exports}u.m=a,e=[],u.O=(t,n,r,o)=>{if(!n){var a=1/0;for(f=0;f=o)&&Object.keys(u.O).every(e=>u.O[e](n[c]))?n.splice(c--,1):(i=!1,o0&&e[f-1][2]>o;f--)e[f]=e[f-1];e[f]=[n,r,o]},n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,u.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);u.r(o);var a={};t=t||[null,n({}),n([]),n(n)];for(var i=2&r&&e;("object"==typeof i||"function"==typeof i)&&!~t.indexOf(i);i=n(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 n in t)u.o(t,n)&&!u.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},u.f={},u.e=e=>Promise.all(Object.keys(u.f).reduce((t,n)=>(u.f[n](e,t),t),[])),u.u=e=>e+".bundle."+{291:"7a021a78b825e05e9dc5",825:"cc79276508bd3ade610e"}[e]+".js",u.miniCssF=e=>{},u.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),u.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},o="export-tests:",u.l=(e,t,n,a)=>{if(r[e])r[e].push(t);else{var i,c;if(void 0!==n)for(var s=document.getElementsByTagName("script"),f=0;f{i.onerror=i.onload=null,clearTimeout(p);var o=r[e];if(delete r[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(e=>e(n)),t)return t(n)},p=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.p="/",(()=>{var e={362:0};u.f.j=(t,n)=>{var r=u.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise((n,o)=>r=e[t]=[n,o]);n.push(r[2]=o);var a=u.p+u.u(t),i=new Error;u.l(a,n=>{if(u.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;i.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,r[1](i)}},"chunk-"+t,t)}},u.O.j=t=>0===e[t];var t=(t,n)=>{var r,o,[a,i,c]=n,s=0;if(a.some(t=>0!==e[t])){for(r in i)u.o(i,r)&&(u.m[r]=i[r]);if(c)var f=c(u)}for(t&&t(n);su(635));c=u.O(c)})(); +//# sourceMappingURL=standalone.bundle.0ce08212094b47d99d79.js.map \ No newline at end of file diff --git a/export/dist/standalone.bundle.0ce08212094b47d99d79.js.LICENSE.txt b/export/dist/standalone.bundle.0ce08212094b47d99d79.js.LICENSE.txt new file mode 100644 index 0000000..775d393 --- /dev/null +++ b/export/dist/standalone.bundle.0ce08212094b47d99d79.js.LICENSE.txt @@ -0,0 +1 @@ +/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ diff --git a/export/dist/standalone.bundle.0ce08212094b47d99d79.js.map b/export/dist/standalone.bundle.0ce08212094b47d99d79.js.map new file mode 100644 index 0000000..7f6a606 --- /dev/null +++ b/export/dist/standalone.bundle.0ce08212094b47d99d79.js.map @@ -0,0 +1 @@ +{"version":3,"file":"standalone.bundle.0ce08212094b47d99d79.js","mappings":"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","sources":["webpack://export-tests/webpack/runtime/chunk loaded","webpack://export-tests/webpack/runtime/create fake namespace object","webpack://export-tests/webpack/runtime/load script","webpack://export-tests/./src/standalone.js","webpack://export-tests/webpack/bootstrap","webpack://export-tests/webpack/runtime/define property getters","webpack://export-tests/webpack/runtime/ensure chunk","webpack://export-tests/webpack/runtime/get javascript chunk filename","webpack://export-tests/webpack/runtime/get mini-css chunk filename","webpack://export-tests/webpack/runtime/global","webpack://export-tests/webpack/runtime/hasOwnProperty shorthand","webpack://export-tests/webpack/runtime/make namespace object","webpack://export-tests/webpack/runtime/publicPath","webpack://export-tests/webpack/runtime/jsonp chunk loading","webpack://export-tests/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-tests:\";\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};","import \"./standalone-styles.css\";\nimport * as TKHQ from \"./turnkey-core.js\";\nimport { HpkeDecrypt } from \"@shared/crypto-utils.js\";\n\n// Make TKHQ available globally\nwindow.TKHQ = TKHQ;\n\n/**\n * Function to log a message and persist it in the page's DOM.\n */\nfunction logMessage(content) {\n const messageLog = document.getElementById(\"message-log\");\n const message = document.createElement(\"p\");\n message.innerText = content;\n messageLog.appendChild(message);\n}\n\n/**\n * Standalone-specific sendMessageUp that logs to DOM instead\n */\nfunction sendMessageUpStandalone(type, value) {\n if (window.top !== null) {\n window.top.postMessage(\n {\n type: type,\n value: value,\n },\n \"*\"\n );\n }\n logMessage(`\\u2B06\\uFE0F Sent message ${type}: ${value}`);\n}\n\ndocument.addEventListener(\n \"DOMContentLoaded\",\n async () => {\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 sendMessageUpStandalone(\"PUBLIC_KEY_READY\", targetPubHex);\n\n window.addEventListener(\n \"message\",\n async function (event) {\n if (event.data && event.data[\"type\"] == \"INJECT_KEY_EXPORT_BUNDLE\") {\n logMessage(\n `\\u2B07\\uFE0F Received message ${event.data[\"type\"]}: ${event.data[\"value\"]}, ${event.data[\"keyFormat\"]}, ${event.data[\"organizationId\"]}`\n );\n try {\n await onInjectKeyBundle(\n event.data[\"value\"],\n event.data[\"keyFormat\"],\n event.data[\"organizationId\"]\n );\n } catch (e) {\n sendMessageUpStandalone(\"ERROR\", e.toString());\n }\n }\n if (event.data && event.data[\"type\"] == \"INJECT_WALLET_EXPORT_BUNDLE\") {\n logMessage(\n `\\u2B07\\uFE0F 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 );\n } catch (e) {\n sendMessageUpStandalone(\"ERROR\", e.toString());\n }\n }\n if (event.data && event.data[\"type\"] == \"RESET_EMBEDDED_KEY\") {\n logMessage(`\\u2B07\\uFE0F Received message ${event.data[\"type\"]}`);\n try {\n TKHQ.onResetEmbeddedKey();\n } catch (e) {\n sendMessageUpStandalone(\"ERROR\", e.toString());\n }\n }\n },\n false\n );\n\n /**\n * 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 */\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(\"inject-wallet\").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 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 false\n);\n\n/**\n * Hide every HTML element in except any \ No newline at end of file diff --git a/export/dist/standalone.styles.d2d0a2c3b41689154751.css b/export/dist/standalone.styles.d2d0a2c3b41689154751.css new file mode 100644 index 0000000..d7980c7 --- /dev/null +++ b/export/dist/standalone.styles.d2d0a2c3b41689154751.css @@ -0,0 +1,150 @@ +body { + text-align: center; + font-family: "Lucida Sans", "Lucida Sans Regular", "Lucida Grande", + "Lucida Sans Unicode", Geneva, Verdana, sans-serif; + max-width: 1024px; + margin: auto; +} + +form { + text-align: left; + margin-bottom: 2rem; +} + +label { + display: inline-block; + width: 8em; +} + +input[type="text"], +select { + width: 40em; + margin: 0.5em; + font-family: "Courier New", Courier, monospace; + font-size: 1em; + height: 1.8em; + color: rgb(18, 87, 18); + border: 1px rgb(217, 240, 221) solid; + border-radius: 4px; +} + +input:disabled { + background-color: rgb(239, 243, 240); +} + +#reset { + color: white; + width: 7em; + font-size: 1em; + padding: 0.38em; + border-radius: 4px; + background-color: rgb(187, 100, 100); + border: 1px rgb(112, 42, 42) solid; + cursor: pointer; + display: inline; +} + +#inject-key, +#inject-wallet { + color: white; + width: 10em; + font-size: 1em; + padding: 0.38em; + border-radius: 4px; + background-color: rgb(50, 44, 44); + border: 1px rgb(33, 33, 33) solid; + cursor: pointer; + display: inline; +} + +#message-log { + border: 1px #2a2828 solid; + padding: 0 0.7em; + border-radius: 4px; + margin-top: 2em; + max-width: 800px; + margin: auto; + display: block; +} + +#message-log p { + font-size: 0.9em; + text-align: left; + word-break: break-all; +} + +.hidden { + display: none; +} + +body { + text-align: center; + font-family: "Lucida Sans", "Lucida Sans Regular", "Lucida Grande", + "Lucida Sans Unicode", Geneva, Verdana, sans-serif; + max-width: 1024px; + margin: auto; +} +label { + display: inline-block; + width: 8em; +} +form { + text-align: left; +} +input[type="text"], +select { + width: 40em; + margin: 0.5em; + font-family: "Courier New", Courier, monospace; + font-size: 1em; + height: 1.8em; + color: rgb(18, 87, 18); + border: 1px rgb(217, 240, 221) solid; + border-radius: 4px; +} +input:disabled { + background-color: rgb(239, 243, 240); +} +#reset { + color: white; + width: 7em; + font-size: 1em; + padding: 0.38em; + border-radius: 4px; + background-color: rgb(187, 100, 100); + border: 1px rgb(112, 42, 42) solid; + cursor: pointer; + display: inline; +} +#inject-key, +#inject-wallet { + color: white; + width: 7em; + font-size: 1em; + padding: 0.38em; + border-radius: 4px; + background-color: rgb(50, 44, 44); + border: 1px rgb(33, 33, 33) solid; + cursor: pointer; + display: inline; +} +#message-log { + border: 1px #2a2828 solid; + padding: 0 0.7em; + border-radius: 4px; + margin-top: 2em; + max-width: 800px; + margin: auto; + display: block; +} +#message-log p { + font-size: 0.9em; + text-align: left; + word-break: break-all; +} +.hidden { + display: none; +} + + +/*# sourceMappingURL=standalone.styles.d2d0a2c3b41689154751.css.map*/ \ No newline at end of file diff --git a/export/dist/standalone.styles.d2d0a2c3b41689154751.css.map b/export/dist/standalone.styles.d2d0a2c3b41689154751.css.map new file mode 100644 index 0000000..ff9f6d6 --- /dev/null +++ b/export/dist/standalone.styles.d2d0a2c3b41689154751.css.map @@ -0,0 +1 @@ +{"version":3,"file":"standalone.styles.d2d0a2c3b41689154751.css","mappings":"AAAA;EACE,kBAAkB;EAClB;sDACoD;EACpD,iBAAiB;EACjB,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;EACrB,UAAU;AACZ;;AAEA;;EAEE,WAAW;EACX,aAAa;EACb,8CAA8C;EAC9C,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,oCAAoC;EACpC,kBAAkB;AACpB;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,YAAY;EACZ,UAAU;EACV,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,oCAAoC;EACpC,kCAAkC;EAClC,eAAe;EACf,eAAe;AACjB;;AAEA;;EAEE,YAAY;EACZ,WAAW;EACX,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,iCAAiC;EACjC,iCAAiC;EACjC,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;AACvB;;AAEA;EACE,aAAa;AACf;;AC7EA;EACE,kBAAkB;EAClB;sDACoD;EACpD,iBAAiB;EACjB,YAAY;AACd;AACA;EACE,qBAAqB;EACrB,UAAU;AACZ;AACA;EACE,gBAAgB;AAClB;AACA;;EAEE,WAAW;EACX,aAAa;EACb,8CAA8C;EAC9C,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,oCAAoC;EACpC,kBAAkB;AACpB;AACA;EACE,oCAAoC;AACtC;AACA;EACE,YAAY;EACZ,UAAU;EACV,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,oCAAoC;EACpC,kCAAkC;EAClC,eAAe;EACf,eAAe;AACjB;AACA;;EAEE,YAAY;EACZ,UAAU;EACV,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,iCAAiC;EACjC,iCAAiC;EACjC,eAAe;EACf,eAAe;AACjB;AACA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,cAAc;AAChB;AACA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;AACvB;AACA;EACE,aAAa;AACf","sources":["webpack://export-tests/./src/standalone-styles.css","webpack://export-tests/./src/styles.css"],"sourcesContent":["body {\n text-align: center;\n font-family: \"Lucida Sans\", \"Lucida Sans Regular\", \"Lucida Grande\",\n \"Lucida Sans Unicode\", Geneva, Verdana, sans-serif;\n max-width: 1024px;\n margin: auto;\n}\n\nform {\n text-align: left;\n margin-bottom: 2rem;\n}\n\nlabel {\n display: inline-block;\n width: 8em;\n}\n\ninput[type=\"text\"],\nselect {\n width: 40em;\n margin: 0.5em;\n font-family: \"Courier New\", Courier, monospace;\n font-size: 1em;\n height: 1.8em;\n color: rgb(18, 87, 18);\n border: 1px rgb(217, 240, 221) solid;\n border-radius: 4px;\n}\n\ninput:disabled {\n background-color: rgb(239, 243, 240);\n}\n\n#reset {\n color: white;\n width: 7em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(187, 100, 100);\n border: 1px rgb(112, 42, 42) solid;\n cursor: pointer;\n display: inline;\n}\n\n#inject-key,\n#inject-wallet {\n color: white;\n width: 10em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(50, 44, 44);\n border: 1px rgb(33, 33, 33) solid;\n cursor: pointer;\n display: inline;\n}\n\n#message-log {\n border: 1px #2a2828 solid;\n padding: 0 0.7em;\n border-radius: 4px;\n margin-top: 2em;\n max-width: 800px;\n margin: auto;\n display: block;\n}\n\n#message-log p {\n font-size: 0.9em;\n text-align: left;\n word-break: break-all;\n}\n\n.hidden {\n display: none;\n}\n","body {\n text-align: center;\n font-family: \"Lucida Sans\", \"Lucida Sans Regular\", \"Lucida Grande\",\n \"Lucida Sans Unicode\", Geneva, Verdana, sans-serif;\n max-width: 1024px;\n margin: auto;\n}\nlabel {\n display: inline-block;\n width: 8em;\n}\nform {\n text-align: left;\n}\ninput[type=\"text\"],\nselect {\n width: 40em;\n margin: 0.5em;\n font-family: \"Courier New\", Courier, monospace;\n font-size: 1em;\n height: 1.8em;\n color: rgb(18, 87, 18);\n border: 1px rgb(217, 240, 221) solid;\n border-radius: 4px;\n}\ninput:disabled {\n background-color: rgb(239, 243, 240);\n}\n#reset {\n color: white;\n width: 7em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(187, 100, 100);\n border: 1px rgb(112, 42, 42) solid;\n cursor: pointer;\n display: inline;\n}\n#inject-key,\n#inject-wallet {\n color: white;\n width: 7em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(50, 44, 44);\n border: 1px rgb(33, 33, 33) solid;\n cursor: pointer;\n display: inline;\n}\n#message-log {\n border: 1px #2a2828 solid;\n padding: 0 0.7em;\n border-radius: 4px;\n margin-top: 2em;\n max-width: 800px;\n margin: auto;\n display: block;\n}\n#message-log p {\n font-size: 0.9em;\n text-align: left;\n word-break: break-all;\n}\n.hidden {\n display: none;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/export/src/index.js b/export/src/index.js index 06f69e2..41fe82f 100644 --- a/export/src/index.js +++ b/export/src/index.js @@ -12,47 +12,6 @@ var iframeMessagePort = null; const messageListenerController = new AbortController(); const turnkeyInitController = new AbortController(); -/** - * DOM Event handlers to power the export flow in standalone mode - * Instead of receiving events from the parent page, forms trigger them. - * This is useful for debugging as well. - */ -var addDOMEventListeners = function () { - document.getElementById("inject-key").addEventListener( - "click", - async (e) => { - e.preventDefault(); - window.postMessage({ - type: "INJECT_KEY_EXPORT_BUNDLE", - value: document.getElementById("key-export-bundle").value, - keyFormat: document.getElementById("key-export-format").value, - organizationId: document.getElementById("key-organization-id").value, - }); - }, - false - ); - document.getElementById("inject-wallet").addEventListener( - "click", - async (e) => { - e.preventDefault(); - window.postMessage({ - type: "INJECT_WALLET_EXPORT_BUNDLE", - value: document.getElementById("wallet-export-bundle").value, - organizationId: document.getElementById("wallet-organization-id").value, - }); - }, - false - ); - document.getElementById("reset").addEventListener( - "click", - async (e) => { - e.preventDefault(); - window.postMessage({ type: "RESET_EMBEDDED_KEY" }); - }, - false - ); -}; - /** * Message Event Handlers to process messages from the parent frame */ @@ -120,8 +79,6 @@ document.addEventListener( signal: messageListenerController.signal, }); - addDOMEventListeners(); - if (!messageListenerController.signal.aborted) { // If styles are saved in local storage, sanitize and apply them. const styleSettings = TKHQ.getSettings(); diff --git a/export/src/index.template.html b/export/src/index.template.html index d0cb6dc..cbf52f7 100644 --- a/export/src/index.template.html +++ b/export/src/index.template.html @@ -1,3 +1,7 @@ + @@ -9,88 +13,7 @@ -

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). -

-
- - - -
- - -
-
-
-

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. -

-
+
diff --git a/export/src/standalone-styles.css b/export/src/standalone-styles.css new file mode 100644 index 0000000..0ae1c70 --- /dev/null +++ b/export/src/standalone-styles.css @@ -0,0 +1,78 @@ +body { + text-align: center; + font-family: "Lucida Sans", "Lucida Sans Regular", "Lucida Grande", + "Lucida Sans Unicode", Geneva, Verdana, sans-serif; + max-width: 1024px; + margin: auto; +} + +form { + text-align: left; + margin-bottom: 2rem; +} + +label { + display: inline-block; + width: 8em; +} + +input[type="text"], +select { + width: 40em; + margin: 0.5em; + font-family: "Courier New", Courier, monospace; + font-size: 1em; + height: 1.8em; + color: rgb(18, 87, 18); + border: 1px rgb(217, 240, 221) solid; + border-radius: 4px; +} + +input:disabled { + background-color: rgb(239, 243, 240); +} + +#reset { + color: white; + width: 7em; + font-size: 1em; + padding: 0.38em; + border-radius: 4px; + background-color: rgb(187, 100, 100); + border: 1px rgb(112, 42, 42) solid; + cursor: pointer; + display: inline; +} + +#inject-key, +#inject-wallet { + color: white; + width: 10em; + font-size: 1em; + padding: 0.38em; + border-radius: 4px; + background-color: rgb(50, 44, 44); + border: 1px rgb(33, 33, 33) solid; + cursor: pointer; + display: inline; +} + +#message-log { + border: 1px #2a2828 solid; + padding: 0 0.7em; + border-radius: 4px; + margin-top: 2em; + max-width: 800px; + margin: auto; + display: block; +} + +#message-log p { + font-size: 0.9em; + text-align: left; + word-break: break-all; +} + +.hidden { + display: none; +} diff --git a/export/src/standalone.js b/export/src/standalone.js index e69de29..181c401 100644 --- a/export/src/standalone.js +++ b/export/src/standalone.js @@ -0,0 +1,276 @@ +import "./standalone-styles.css"; +import * as TKHQ from "./turnkey-core.js"; +import { HpkeDecrypt } from "@shared/crypto-utils.js"; + +// Make TKHQ available globally +window.TKHQ = TKHQ; + +/** + * Function to log a message and persist it in the page's DOM. + */ +function logMessage(content) { + const messageLog = document.getElementById("message-log"); + const message = document.createElement("p"); + message.innerText = content; + messageLog.appendChild(message); +} + +/** + * Standalone-specific sendMessageUp that logs to DOM instead + */ +function sendMessageUpStandalone(type, value) { + if (window.top !== null) { + window.top.postMessage( + { + type: type, + value: value, + }, + "*" + ); + } + logMessage(`\u2B06\uFE0F Sent message ${type}: ${value}`); +} + +document.addEventListener( + "DOMContentLoaded", + async () => { + await TKHQ.initEmbeddedKey(); + const embeddedKeyJwk = await TKHQ.getEmbeddedKey(); + const targetPubBuf = await TKHQ.p256JWKPrivateToPublic(embeddedKeyJwk); + const targetPubHex = TKHQ.uint8arrayToHexString(targetPubBuf); + document.getElementById("embedded-key").value = targetPubHex; + + sendMessageUpStandalone("PUBLIC_KEY_READY", targetPubHex); + + window.addEventListener( + "message", + async function (event) { + if (event.data && event.data["type"] == "INJECT_KEY_EXPORT_BUNDLE") { + logMessage( + `\u2B07\uFE0F Received message ${event.data["type"]}: ${event.data["value"]}, ${event.data["keyFormat"]}, ${event.data["organizationId"]}` + ); + try { + await onInjectKeyBundle( + event.data["value"], + event.data["keyFormat"], + event.data["organizationId"] + ); + } catch (e) { + sendMessageUpStandalone("ERROR", e.toString()); + } + } + if (event.data && event.data["type"] == "INJECT_WALLET_EXPORT_BUNDLE") { + logMessage( + `\u2B07\uFE0F Received message ${event.data["type"]}: ${event.data["value"]}, ${event.data["organizationId"]}` + ); + try { + await onInjectWalletBundle( + event.data["value"], + event.data["organizationId"] + ); + } catch (e) { + sendMessageUpStandalone("ERROR", e.toString()); + } + } + if (event.data && event.data["type"] == "RESET_EMBEDDED_KEY") { + logMessage(`\u2B07\uFE0F Received message ${event.data["type"]}`); + try { + TKHQ.onResetEmbeddedKey(); + } catch (e) { + sendMessageUpStandalone("ERROR", e.toString()); + } + } + }, + false + ); + + /** + * Event handlers to power the export flow in standalone mode + * Instead of receiving events from the parent page, forms trigger them. + * This is useful for debugging as well. + */ + document.getElementById("inject-key").addEventListener( + "click", + async (e) => { + e.preventDefault(); + window.postMessage({ + type: "INJECT_KEY_EXPORT_BUNDLE", + value: document.getElementById("key-export-bundle").value, + keyFormat: document.getElementById("key-export-format").value, + organizationId: document.getElementById("key-organization-id").value, + }); + }, + false + ); + document.getElementById("inject-wallet").addEventListener( + "click", + async (e) => { + e.preventDefault(); + window.postMessage({ + type: "INJECT_WALLET_EXPORT_BUNDLE", + value: document.getElementById("wallet-export-bundle").value, + organizationId: document.getElementById("wallet-organization-id") + .value, + }); + }, + false + ); + document.getElementById("reset").addEventListener( + "click", + async (e) => { + e.preventDefault(); + window.postMessage({ type: "RESET_EMBEDDED_KEY" }); + }, + false + ); + }, + false +); + +/** + * Hide every HTML element in except any \ 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/import/dist/551.bundle.27da59437a4e403e3c24.js.map b/import/dist/551.bundle.27da59437a4e403e3c24.js.map index 7da4edd..8602302 100644 --- a/import/dist/551.bundle.27da59437a4e403e3c24.js.map +++ b/import/dist/551.bundle.27da59437a4e403e3c24.js.map @@ -1 +1 @@ -{"version":3,"file":"551.bundle.27da59437a4e403e3c24.js","mappings":";moFACA,IAAAA,EAAAC,EAAAC,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,aAAA,yBAAAC,EAAAN,EAAAE,EAAAE,EAAAE,GAAA,IAAAC,EAAAL,GAAAA,EAAAM,qBAAAC,EAAAP,EAAAO,EAAAC,EAAAC,OAAAC,OAAAL,EAAAC,WAAA,OAAAK,EAAAH,EAAA,mBAAAV,EAAAE,EAAAE,GAAA,IAAAE,EAAAC,EAAAG,EAAAI,EAAA,EAAAC,EAAAX,GAAA,GAAAY,GAAA,EAAAC,EAAA,CAAAF,EAAA,EAAAb,EAAA,EAAAgB,EAAApB,EAAAqB,EAAAC,EAAAN,EAAAM,EAAAC,KAAAvB,EAAA,GAAAsB,EAAA,SAAArB,EAAAC,GAAA,OAAAM,EAAAP,EAAAQ,EAAA,EAAAG,EAAAZ,EAAAmB,EAAAf,EAAAF,EAAAmB,CAAA,YAAAC,EAAApB,EAAAE,GAAA,IAAAK,EAAAP,EAAAU,EAAAR,EAAAH,EAAA,GAAAiB,GAAAF,IAAAV,GAAAL,EAAAgB,EAAAO,OAAAvB,IAAA,KAAAK,EAAAE,EAAAS,EAAAhB,GAAAqB,EAAAH,EAAAF,EAAAQ,EAAAjB,EAAA,GAAAN,EAAA,GAAAI,EAAAmB,IAAArB,KAAAQ,EAAAJ,GAAAC,EAAAD,EAAA,OAAAC,EAAA,MAAAD,EAAA,GAAAA,EAAA,GAAAR,GAAAQ,EAAA,IAAAc,KAAAhB,EAAAJ,EAAA,GAAAoB,EAAAd,EAAA,KAAAC,EAAA,EAAAU,EAAAC,EAAAhB,EAAAe,EAAAf,EAAAI,EAAA,IAAAc,EAAAG,IAAAnB,EAAAJ,EAAA,GAAAM,EAAA,GAAAJ,GAAAA,EAAAqB,KAAAjB,EAAA,GAAAN,EAAAM,EAAA,GAAAJ,EAAAe,EAAAf,EAAAqB,EAAAhB,EAAA,OAAAH,GAAAJ,EAAA,SAAAmB,EAAA,MAAAH,GAAA,EAAAd,CAAA,iBAAAE,EAAAW,EAAAQ,GAAA,GAAAT,EAAA,QAAAU,UAAA,oCAAAR,GAAA,IAAAD,GAAAK,EAAAL,EAAAQ,GAAAhB,EAAAQ,EAAAL,EAAAa,GAAAxB,EAAAQ,EAAA,EAAAT,EAAAY,KAAAM,GAAA,CAAAV,IAAAC,EAAAA,EAAA,GAAAA,EAAA,IAAAU,EAAAf,GAAA,GAAAkB,EAAAb,EAAAG,IAAAO,EAAAf,EAAAQ,EAAAO,EAAAC,EAAAR,GAAA,OAAAI,EAAA,EAAAR,EAAA,IAAAC,IAAAH,EAAA,QAAAL,EAAAO,EAAAF,GAAA,MAAAL,EAAAA,EAAA0B,KAAAnB,EAAAI,IAAA,MAAAc,UAAA,wCAAAzB,EAAA2B,KAAA,OAAA3B,EAAAW,EAAAX,EAAA4B,MAAApB,EAAA,IAAAA,EAAA,YAAAA,IAAAR,EAAAO,EAAA,SAAAP,EAAA0B,KAAAnB,GAAAC,EAAA,IAAAG,EAAAc,UAAA,oCAAApB,EAAA,YAAAG,EAAA,GAAAD,EAAAR,CAAA,UAAAC,GAAAiB,EAAAC,EAAAf,EAAA,GAAAQ,EAAAV,EAAAyB,KAAAvB,EAAAe,MAAAE,EAAA,YAAApB,GAAAO,EAAAR,EAAAS,EAAA,EAAAG,EAAAX,CAAA,SAAAe,EAAA,UAAAa,MAAA5B,EAAA2B,KAAAV,EAAA,GAAAhB,EAAAI,EAAAE,IAAA,GAAAI,CAAA,KAAAS,EAAA,YAAAV,IAAA,UAAAmB,IAAA,UAAAC,IAAA,CAAA9B,EAAAY,OAAAmB,eAAA,IAAAvB,EAAA,GAAAL,GAAAH,EAAAA,EAAA,GAAAG,QAAAW,EAAAd,EAAA,GAAAG,EAAA,yBAAAH,GAAAW,EAAAmB,EAAArB,UAAAC,EAAAD,UAAAG,OAAAC,OAAAL,GAAA,SAAAO,EAAAhB,GAAA,OAAAa,OAAAoB,eAAApB,OAAAoB,eAAAjC,EAAA+B,IAAA/B,EAAAkC,UAAAH,EAAAhB,EAAAf,EAAAM,EAAA,sBAAAN,EAAAU,UAAAG,OAAAC,OAAAF,GAAAZ,CAAA,QAAA8B,EAAApB,UAAAqB,EAAAhB,EAAAH,EAAA,cAAAmB,GAAAhB,EAAAgB,EAAA,cAAAD,GAAAA,EAAAK,YAAA,oBAAApB,EAAAgB,EAAAzB,EAAA,qBAAAS,EAAAH,GAAAG,EAAAH,EAAAN,EAAA,aAAAS,EAAAH,EAAAR,EAAA,yBAAAW,EAAAH,EAAA,oDAAAwB,EAAA,kBAAAC,EAAA7B,EAAA8B,EAAAtB,EAAA,cAAAD,EAAAf,EAAAE,EAAAE,EAAAH,GAAA,IAAAO,EAAAK,OAAA0B,eAAA,IAAA/B,EAAA,gBAAAR,GAAAQ,EAAA,EAAAO,EAAA,SAAAf,EAAAE,EAAAE,EAAAH,GAAA,SAAAK,EAAAJ,EAAAE,GAAAW,EAAAf,EAAAE,EAAA,SAAAF,GAAA,YAAAwC,QAAAtC,EAAAE,EAAAJ,EAAA,GAAAE,EAAAM,EAAAA,EAAAR,EAAAE,EAAA,CAAA2B,MAAAzB,EAAAqC,YAAAxC,EAAAyC,cAAAzC,EAAA0C,UAAA1C,IAAAD,EAAAE,GAAAE,GAAAE,EAAA,UAAAA,EAAA,WAAAA,EAAA,cAAAS,EAAAf,EAAAE,EAAAE,EAAAH,EAAA,UAAA2C,EAAA5C,EAAAsB,GAAA,KAAAF,EAAApB,EAAA,KAAA6C,EAAAvB,CAAA,UAAAwB,EAAA5C,GAAA,gBAAAA,GAAA,GAAA6C,MAAAC,QAAA9C,GAAA,OAAA+C,EAAA/C,EAAA,CAAAgD,CAAAhD,IAAA,SAAAA,GAAA,uBAAAC,QAAA,MAAAD,EAAAC,OAAAE,WAAA,MAAAH,EAAA,qBAAA6C,MAAAI,KAAAjD,EAAA,CAAAkD,CAAAlD,IAAAmD,EAAAnD,IAAA,qBAAAwB,UAAA,wIAAA4B,EAAA,UAAAD,EAAAnD,EAAAmB,GAAA,GAAAnB,EAAA,qBAAAA,EAAA,OAAA+C,EAAA/C,EAAAmB,GAAA,IAAApB,EAAA,GAAAsD,SAAA5B,KAAAzB,GAAAsD,MAAA,uBAAAvD,GAAAC,EAAAuD,cAAAxD,EAAAC,EAAAuD,YAAAC,MAAA,QAAAzD,GAAA,QAAAA,EAAA8C,MAAAI,KAAAjD,GAAA,cAAAD,GAAA,2CAAA0D,KAAA1D,GAAAgD,EAAA/C,EAAAmB,QAAA,YAAA4B,EAAA/C,EAAAmB,IAAA,MAAAA,GAAAA,EAAAnB,EAAAsB,UAAAH,EAAAnB,EAAAsB,QAAA,QAAAxB,EAAA,EAAAI,EAAA2C,MAAA1B,GAAArB,EAAAqB,EAAArB,IAAAI,EAAAJ,GAAAE,EAAAF,GAAA,OAAAI,CAAA,UAAAwD,EAAAxD,EAAAH,EAAAD,EAAAE,EAAAI,EAAAe,EAAAZ,GAAA,QAAAD,EAAAJ,EAAAiB,GAAAZ,GAAAG,EAAAJ,EAAAqB,KAAA,OAAAzB,GAAA,YAAAJ,EAAAI,EAAA,CAAAI,EAAAoB,KAAA3B,EAAAW,GAAAiD,QAAAC,QAAAlD,GAAAmD,KAAA7D,EAAAI,EAAA,UAAA0D,EAAA5D,GAAA,sBAAAH,EAAA,KAAAD,EAAAiE,UAAA,WAAAJ,QAAA,SAAA3D,EAAAI,GAAA,IAAAe,EAAAjB,EAAA8D,MAAAjE,EAAAD,GAAA,SAAAmE,EAAA/D,GAAAwD,EAAAvC,EAAAnB,EAAAI,EAAA6D,EAAAC,EAAA,OAAAhE,EAAA,UAAAgE,EAAAhE,GAAAwD,EAAAvC,EAAAnB,EAAAI,EAAA6D,EAAAC,EAAA,QAAAhE,EAAA,CAAA+D,OAAA,MAOA,IACME,EAA8B,8BAC9BC,EAAmB,mBAKrBC,EAAgC,KAChCC,EAAyB,KAK7B,SAASC,IACP,OAAID,GAA0BA,EAAuBE,OAC5CF,EAAuBE,OAGR,oBAAfC,YACPA,WAAWC,QACXD,WAAWC,OAAOF,OAEXC,WAAWC,OAAOF,OAEL,oBAAXG,QAA0BA,OAAOD,QAAUC,OAAOD,OAAOF,OAC3DG,OAAOD,OAAOF,YAED,IAAXI,EAAAA,GAA0BA,EAAAA,EAAOF,QAAUE,EAAAA,EAAOF,OAAOF,OAC3DI,EAAAA,EAAOF,OAAOF,OAED,oBAAXE,QAA0BA,OAAOF,OACnCE,OAAOF,OAGT,IACT,CAMA,SAASK,EAAkBC,GACzBR,EAAyBQ,GAAkB,IAC7C,CAcA,SAGeC,EAAaC,GAAA,OAAAC,EAAAjB,MAAC,KAADD,UAAA,CAiB5B,SAAAkB,IAFC,OAEDA,EAAAnB,EAAAoB,IAAAC,KAjBA,SAAAC,EAA6BC,GAAY,IAAAb,EAAA,OAAAU,IAAAI,KAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACP,GAA1BjB,EAASD,IACF,CAAFgB,EAAAE,KAAA,cACH,IAAIC,MAAM,uCAAsC,cAAAH,EAAAE,KAAA,EAE3CjB,EAAOmB,UAClB,MACAN,EACA,CACE7B,KAAM,QACNoC,WAAY,UAEd,EACA,CAAC,WACF,cAAAL,EAAAM,OAAA,SAAAN,EAAAO,MAAA,wBAAAP,EAAAQ,OAAA,EAAAX,EAAA,KACFpB,MAAA,KAAAD,UAAA,UAKciC,EAAaC,GAAA,OAAAC,EAAAlC,MAAC,KAADD,UAAA,CAmB5B,SAAAmC,IAFC,OAEDA,EAAApC,EAAAoB,IAAAC,KAnBA,SAAAgB,EAA6BC,GAAY,IAAA5B,EAAA6B,EAAA,OAAAnB,IAAAI,KAAA,SAAAgB,GAAA,cAAAA,EAAAd,KAAAc,EAAAb,MAAA,OACP,GAA1BjB,EAASD,IACF,CAAF+B,EAAAb,KAAA,cACH,IAAIC,MAAM,uCAAsC,cAAAY,EAAAb,KAAA,EAEhCjB,EAAOmB,UAC7B,MACAS,EACA,CACE5C,KAAM,OACNoC,WAAY,UAEd,EACA,IACD,OATc,OAATS,EAASC,EAAAR,KAAAQ,EAAAb,KAAG,EAWLjB,EAAO+B,UAAU,MAAOF,GAAU,cAAAC,EAAAT,OAAA,SAAAS,EAAAR,MAAA,wBAAAQ,EAAAP,OAAA,EAAAI,EAAA,KAChDnC,MAAA,KAAAD,UAAA,CA4DD,SAASyC,IACP,IAAMC,EAAS9B,OAAO+B,aAAaC,QAAQxC,GAC3C,OAAOsC,EAASG,KAAKC,MAAMJ,GAAU,IACvC,CAMA,SAASK,EAAqBT,GAC5B1B,OAAO+B,aAAaK,QAClB5C,EACAyC,KAAKI,UAAUX,GAEnB,CAaA,SAASY,IACPtC,OAAO+B,aAAaQ,WAAW/C,EACjC,CAEA,SAASgD,EAAiCC,GACxC/C,EAAgC+C,CAClC,CAKA,SAASC,IACP,IAAMC,EAAW3C,OAAO+B,aAAaC,QAAQvC,GAC7C,OAAOkD,EAAWV,KAAKC,MAAMS,GAAY,IAC3C,CAMA,SAASC,EAAYD,GACnB3C,OAAO+B,aAAaK,QAAQ3C,EAAkBwC,KAAKI,UAAUM,GAC/D,CAiDA,SAASE,EAAwBC,GAC/B,IAAKA,GAAkC,iBAAdA,EACvB,MAAM,IAAI/B,MAAM,oDAIlB,IAAMgC,EACJD,EAAUE,WAAW,OAASF,EAAUE,WAAW,MAC/CF,EAAUnE,MAAM,GAChBmE,EAGN,GAAIC,EAAiBpG,OAAS,GAAK,IADpB,iBACmCmC,KAAKiE,GACrD,MAAM,IAAIhC,MAAM,oDAElB,OAAO,IAAIkC,WACTF,EAAiBG,MAAM,OAAOC,IAAI,SAACC,GAAC,OAAKC,SAASD,EAAG,GAAG,GAE5D,CAOA,SAASE,EAAsBC,GAC7B,OAAOtF,EAAIsF,GAAQJ,IAAI,SAACK,GAAC,OAAKA,EAAE9E,SAAS,IAAI+E,SAAS,EAAG,IAAI,GAAEC,KAAK,GACtE,CAKA,SAASC,EAAiBC,EAAWC,GACnC,IAAMC,EAAgBD,EAAeD,EAAUjH,OAG/C,GAAImH,EAAgB,EAAG,CACrB,IAAMC,EAAU,IAAId,WAAWa,GAAeE,KAAK,GACnD,OAAO,IAAIf,WAAW,GAADgB,OAAAhG,EAAK8F,GAAO9F,EAAK2F,IACxC,CAGA,GAAIE,EAAgB,EAAG,CAGrB,IAFA,IAAMI,GAAqC,EAAjBJ,EACtBK,EAAY,EACPxI,EAAI,EAAGA,EAAIuI,GAAqBvI,EAAIiI,EAAUjH,OAAQhB,IACxC,IAAjBiI,EAAUjI,IACZwI,IAIJ,GAAIA,IAAcD,EAChB,MAAM,IAAInD,MAAM,iEAADkD,OACoDC,EAAiB,aAAAD,OAAYE,EAAS,MAG3G,OAAOP,EAAUjF,MAAMuF,EAAmBA,EAAoBL,EAChE,CACA,OAAOD,CACT,CAKA,SAASQ,EAAyBC,EAAcC,GAC9C,IAAMC,EAAIrG,MAAMI,KAAK,IAAI2E,WAAWoB,IAC9BhJ,EAAI6C,MAAMI,KAAK,IAAI2E,WAAWqB,IACpC,OAAO,IAAIrB,WAAW,GAADgB,OAAKM,EAAMlJ,GAClC,CAKA,SAASmJ,EAAiBC,GACxB,IAAMC,EAAkB7B,EAAwB4B,GAG5CE,EAAQ,EAGZ,GAA+B,IAA3BD,EAAgBC,GAClB,MAAM,IAAI5D,MACR,8DAIJ,IAAM6D,EAAUF,IADhBC,GAEAA,IACA,IAAMtJ,EAAIqJ,EAAgB/F,MAAMgG,EAAOA,EAAQC,GAI/C,GAA+B,IAA3BF,EAHJC,GAASC,GAIP,MAAM,IAAI7D,MACR,8DAIJ,IAAM8D,EAAUH,IADhBC,GAEAA,IACA,IAAMJ,EAAIG,EAAgB/F,MAAMgG,EAAOA,EAAQE,GAGzCC,EAAUnB,EAAiBtI,EAAG,IAC9B0J,EAAUpB,EAAiBY,EAAG,IAGpC,OAAO,IAAItB,WAAW,GAADgB,OAAAhG,EAAK6G,GAAO7G,EAAK8G,IACxC,CAEA,SAMeC,EAAsBC,EAAAC,EAAAC,GAAA,OAAAC,EAAA/F,MAAC,KAADD,UAAA,CAyDrC,SAAAgG,IAFC,OAEDA,EAAAjG,EAAAoB,IAAAC,KAzDA,SAAA6E,EACEC,EACAC,EACAC,GAAU,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAlG,EAAA,OAAAU,IAAAI,KAAA,SAAAqF,GAAA,cAAAA,EAAAnF,KAAAmF,EAAAlF,MAAA,OAc6B,GAXjC2E,EAA2B,CAC/BQ,KAAM,qIACNC,QACE,sIAIER,EACe,oBAAX1F,QAA0BA,OAAOmG,gCACzC,sCAI+CC,KAH3CT,EACJF,EAAyBC,IAE+B,CAAAM,EAAAlF,KAAA,cAClD,IAAIC,MAAM,8EAEf,WAICuE,EAAqB,CAAFU,EAAAlF,KAAA,WACjBwE,IAAwBK,EAAwC,CAAAK,EAAAlF,KAAA,cAC5D,IAAIC,MAAM,2EAADkD,OAC8D0B,EAAwC,cAAA1B,OAAaqB,EAAmB,MACpJ,OAMJ,OAFKM,EAA4B,IAAI3C,WACpCJ,EAAwB8C,IACzBK,EAAAlF,KAAA,GACuBV,EAAcwF,GAA0B,QAAjD,GAATC,EAASG,EAAA7E,KACC,CAAF6E,EAAAlF,KAAA,eACN,IAAIC,MAAM,6BAA4B,QAMd,GAF1B+E,EAAqBtB,EAAiBe,GACtCQ,EAAgBlD,EAAwB2C,GACxC3F,EAASD,IACF,CAAFoG,EAAAlF,KAAA,eACH,IAAIC,MAAM,uCAAsC,eAAAiF,EAAAlF,KAAA,GAE3CjB,EAAOwG,OAClB,CAAExH,KAAM,QAASyH,KAAM,WACvBT,EACAC,EACAC,GACD,eAAAC,EAAA9E,OAAA,SAAA8E,EAAA7E,MAAA,yBAAA6E,EAAA5E,OAAA,EAAAiE,EAAA,KACFhG,MAAA,KAAAD,UAAA,CAeD,SAASmH,EAAcC,EAAMxJ,EAAOyJ,GAClC,IAAMC,EAAU,CACdF,KAAMA,EACNxJ,MAAOA,GAILyJ,IACFC,EAAQD,UAAYA,GAGlB/G,EACFA,EAA8BiH,YAAYD,GACjC1G,OAAO4G,SAAW5G,QAC3BA,OAAO4G,OAAOD,YACZ,CACEH,KAAMA,EACNxJ,MAAOA,GAET,KASN,SAAoB6J,GAClB,IAAMC,EAAaC,SAASC,eAAe,eAC3C,GAAIF,EAAY,CACd,IAAMJ,EAAUK,SAASE,cAAc,KACvCP,EAAQQ,UAAYL,EACpBC,EAAWK,YAAYT,EACzB,CACF,CAbEU,CAAW,mBAADnD,OAAoBuC,EAAI,MAAAvC,OAAKjH,GACzC,CAkFA,SAASqK,EAAa9C,GAKpB,IAHA,IAAI+C,EAAW,6DACXC,EAAe,GACfC,EAAe,GACV7L,EAAI,EAAGA,EAAI4I,EAAE5H,OAAQhB,IAAK,CACjC,IAAgC,IAA5B2L,EAASG,QAAQlD,EAAE5I,IACrB,MAAM,IAAIoF,MAAM,yBAADkD,OAA0BM,EAAE5I,GAAE,6BAE/C,IAAI+L,EAAQJ,EAASG,QAAQlD,EAAE5I,IAKlB,GAAT+L,GAAc/L,IAAM6L,EAAa7K,QACnC6K,EAAaG,KAAK,GAIpB,IADA,IAAIC,EAAI,EACDA,EAAIL,EAAa5K,QAAU+K,EAAQ,GAAG,CAC3C,IAAIG,EAAcN,EAAaK,GAW/BF,GANEG,OADkBzB,IAAhByB,EACYH,EAEc,GAAdG,EAAmBH,IAIZ,EAEvBH,EAAaK,GAAKC,EAAc,IAChCD,GACF,CACF,CAEA,IAAIE,EAASN,EAAavD,OAAOsD,EAAaQ,WAC9C,OAAO,IAAI9E,WAAW6E,EACxB,CAEA,SAQeE,EAAiBC,GAAA,OAAAC,EAAA7I,MAAC,KAADD,UAAA,CAqChC,SAAA8I,IAFC,OAEDA,EAAA/I,EAAAoB,IAAAC,KArCA,SAAA2H,EAAiC5D,GAAC,IAAA6D,EAAAC,EAAAC,EAAAzI,EAAA0I,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAApI,IAAAI,KAAA,SAAAiI,GAAA,cAAAA,EAAA/H,KAAA+H,EAAA9H,MAAA,OACD,MAAzBsH,EAAUf,EAAa9C,IAEjB5H,OAAS,GAAC,CAAAiM,EAAA9H,KAAA,cACd,IAAIC,MAAM,8DAADkD,OACiDmE,EAAQzL,SACvE,OAM6B,GAH1B0L,EAAUD,EAAQS,SAAS,EAAGT,EAAQzL,OAAS,GAC/C2L,EAAWF,EAAQS,SAAST,EAAQzL,OAAS,GAE7CkD,EAASD,IACF,CAAFgJ,EAAA9H,KAAA,cACH,IAAIC,MAAM,uCAAsC,cAAA6H,EAAA9H,KAAA,GAIjCjB,EAAOiJ,OAAO,UAAWT,GAAQ,QAClB,OADhCE,EAAQK,EAAAzH,KACRqH,EAAQ,IAAIvF,WAAWsF,GAASK,EAAA9H,KAAA,GACfjB,EAAOiJ,OAAO,UAAWN,GAAM,QASjB,GAT/BC,EAAQG,EAAAzH,KACRuH,EAAQ,IAAIzF,WAAWwF,GACvBE,EAAmBD,EAAMG,SAAS,EAAG,GAQ1B,KAJdP,EAAS,GAAKK,EAAiB,GAC/BL,EAAS,GAAKK,EAAiB,GAC/BL,EAAS,GAAKK,EAAiB,GAC/BL,EAAS,GAAKK,EAAiB,IAChB,CAAAC,EAAA9H,KAAA,eACV,IAAIC,MAAM,gCAA+B,eAAA6H,EAAA1H,OAAA,SAG1CmH,GAAO,yBAAAO,EAAAxH,OAAA,EAAA+G,EAAA,KACf9I,MAAA,KAAAD,UAAA,CAsBA,SAUc2J,EAASC,EAAAC,GAAA,OAAAC,EAAA7J,MAAC,KAADD,UAAA,CAyGxB,SAAA8J,IAFC,OAEDA,EAAA/J,EAAAoB,IAAAC,KAzGA,SAAA2I,EAAyBC,EAAYC,GAAS,IAAAC,EAAAjB,EAAAkB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAA1J,IAAAI,KAAA,SAAAuJ,GAAA,cAAAA,EAAArJ,KAAAqJ,EAAApJ,MAAA,OAAAoJ,EAAAC,GACpCd,EAASa,EAAApJ,KACV,WADUoJ,EAAAC,GACF,EASR,gBATQD,EAAAC,GASK,EAKb,wBALaD,EAAAC,GAKQ,GAyBrB,wBAzBqBD,EAAAC,GAyBA,GAyBrB,eAzBqBD,EAAAC,GAyBT,mBA/DiC,GACjB,MADzBb,EAAkBjC,EAAa+B,IACjBzM,OAAa,CAAAuN,EAAApJ,KAAA,cACzB,IAAIC,MAAM,8CAADkD,OACiCqF,EAAgB3M,OAAM,MACrE,cAAAuN,EAAAhJ,OAAA,SAEIoI,EAAgBT,SAAS,EAAG,KAAG,WAGlCO,EAAWpG,WAAW,MAAO,CAAFkH,EAAApJ,KAAA,eAAAoJ,EAAAhJ,OAAA,SACtB2B,EAAwBuG,EAAWzK,MAAM,KAAG,OAsFA,eAAAuL,EAAAhJ,OAAA,SAE9C2B,EAAwBuG,IAtFW,eAAAc,EAAApJ,KAAA,GAEpBkH,EAAkBoB,GAAW,QAKnD,GALMf,EAAO6B,EAAA/I,KAEPoI,EAAUlB,EAAQ,GAClBmB,EAAcnB,EAAQQ,SAAS,GAGrB,MAAZU,EAAgB,CAAAW,EAAApJ,KAAA,eACZ,IAAIC,MAAM,6BAADkD,OACgBsF,EAAO,+BACrC,WAIwB,KAAvBC,EAAY7M,OAAa,CAAAuN,EAAApJ,KAAA,eACrB,IAAIC,MAAM,uCAAsC,WAI7B,KAAvByI,EAAY7M,QAAqC,IAApB6M,EAAY,IAAY,CAAAU,EAAApJ,KAAA,eACjD,IAAIC,MAAM,uDAAsD,eAAAmJ,EAAAhJ,OAAA,SAGjEsI,EAAYX,SAAS,EAAG,KAAG,eAAAqB,EAAApJ,KAAA,GAGZkH,EAAkBoB,GAAW,QAKnD,GALMf,EAAO6B,EAAA/I,KAEPoI,EAAUlB,EAAQ,GAClBmB,EAAcnB,EAAQQ,SAAS,GAGrB,MAAZU,EAAgB,CAAAW,EAAApJ,KAAA,eACZ,IAAIC,MAAM,6BAADkD,OACgBsF,EAAO,+BACrC,WAIwB,KAAvBC,EAAY7M,OAAa,CAAAuN,EAAApJ,KAAA,eACrB,IAAIC,MAAM,uCAAsC,WAI7B,KAAvByI,EAAY7M,QAAqC,IAApB6M,EAAY,IAAY,CAAAU,EAAApJ,KAAA,eACjD,IAAIC,MAAM,uDAAsD,eAAAmJ,EAAAhJ,OAAA,SAGjEsI,EAAYX,SAAS,EAAG,KAAG,QAGb,GAHae,EAGRQ,EAAAA,EAAOC,OAAOjB,GAAhCS,EAAMD,EAANC,OAAQC,EAAKF,EAALE,MAED,eAAXD,EAAuB,CAAAK,EAAApJ,KAAA,eACnB,IAAIC,MAAM,4EAEf,QAGkC,GAChB,MADfgJ,EAAQK,EAAAA,EAAOE,UAAUR,IACrBnN,OAAa,CAAAuN,EAAApJ,KAAA,eACf,IAAIC,MAAM,0DAADkD,OAC6C8F,EAAMpN,SACjE,QAMH,GAHMqN,EAAaD,EAAM,GACnBE,EAAUF,EAAMpL,MAAM,GAGT,IAAfqL,EAAgB,CAAAE,EAAApJ,KAAA,eACZ,IAAIC,MAAM,0GAEf,eAAAmJ,EAAAhJ,OAAA,SAGI,IAAI+B,WAAWgH,IAAQ,QAK5B,GAFFM,QAAQC,KAAK,uBAADvG,OACaoF,EAAS,kCAE9BD,EAAWpG,WAAW,MAAO,CAAFkH,EAAApJ,KAAA,gBAAAoJ,EAAAhJ,OAAA,SACtB2B,EAAwBuG,EAAWzK,MAAM,KAER,yBAAAuL,EAAA9I,OAAA,EAAA+H,EAAA,KAE/C9J,MAAA,KAAAD,UAAA,CA4GD,SAASqL,EAAeC,EAAQC,GAC9B,IAAMC,EAAc,CAAC,EAEfC,EAAqB,CACzB9G,QAAS,+BACT+G,OAAQ,+BACRC,YAAa,6BACbC,YACE,gEACFC,YACE,iLACFC,aAAc,+BACdC,SAAU,6DACVC,WAAY,wCACZC,WAAY,aACZC,MACE,iLACFC,WACE,iLACFC,gBACE,iLACFC,MAAO,kEACPC,OAAQ,kEACRC,SAAU,kEACVC,UACE,kEACFC,WACE,8EACFC,UACE,8HACFC,UAAW,gDACXC,aAAc,iCACdC,SAAU,wBACVC,OAAQ,kDA4BV,OAzBAlQ,OAAOmQ,QAAQzB,GAAQ0B,QAAQ,SAAAC,GAAuB,IAr5BxDhR,EAAAF,EAq5BwDmR,GAr5BxDnR,EAq5BwD,EAr5BxD,SAAAE,GAAA,GAAA6C,MAAAC,QAAA9C,GAAA,OAAAA,CAAA,CAAAkR,CAAAlR,EAq5BwDgR,IAr5BxD,SAAAhR,EAAAuB,GAAA,IAAAxB,EAAA,MAAAC,EAAA,yBAAAC,QAAAD,EAAAC,OAAAE,WAAAH,EAAA,uBAAAD,EAAA,KAAAD,EAAAI,EAAAI,EAAAI,EAAAS,EAAA,GAAAL,GAAA,EAAAV,GAAA,SAAAE,GAAAP,EAAAA,EAAA0B,KAAAzB,IAAAyF,KAAA,IAAAlE,EAAA,IAAAZ,OAAAZ,KAAAA,EAAA,OAAAe,GAAA,cAAAA,GAAAhB,EAAAQ,EAAAmB,KAAA1B,IAAA2B,QAAAP,EAAAmL,KAAAxM,EAAA6B,OAAAR,EAAAG,SAAAC,GAAAT,GAAA,UAAAd,GAAAI,GAAA,EAAAF,EAAAF,CAAA,iBAAAc,GAAA,MAAAf,EAAA,SAAAW,EAAAX,EAAA,SAAAY,OAAAD,KAAAA,GAAA,kBAAAN,EAAA,MAAAF,CAAA,SAAAiB,CAAA,EAAAgQ,CAAAnR,EAAAF,IAAAqD,EAAAnD,EAAAF,IAAA,qBAAA0B,UAAA,6IAAA4P,IAq5BmCC,EAAQJ,EAAA,GAAEtP,EAAKsP,EAAA,GACxCK,EAAgBD,EAASE,OAC/B,GAA6B,IAAzBD,EAAchQ,OAChB,MAAM,IAAIoE,MAAM,sCAElB,IAAM8L,EAAgBhC,EAAmB8B,GACzC,IAAKE,EACH,MAAM,IAAI9L,MAAM,+CAADkD,OACkC0I,EAAa,MAGhE,IAAMG,EAAa,IAAIC,OAAOF,GACxBG,EAAahQ,EAAM4P,OACzB,GAAyB,GAArBI,EAAWrQ,OACb,MAAM,IAAIoE,MAAM,kBAADkD,OAAmB0I,EAAa,eAGjD,IADqBG,EAAWhO,KAAKkO,GAEnC,MAAM,IAAIjM,MAAM,yCAADkD,OAC4B0I,EAAa,MAG1D/B,EAAY+B,GAAiBK,CAC/B,GAEOpC,CACT,C,mhDC96BA,IACE1K,EAmBE+M,EAAAA,GAlBF5L,EAkBE4L,EAAAA,GAjBFpL,EAiBEoL,EAAAA,GAhBF9K,EAgBE8K,EAAAA,GAfF3K,EAeE2K,EAAAA,GAdFvK,EAcEuK,EAAAA,GAbFrK,EAaEqK,EAAAA,GAZF1G,EAYE0G,EAAAA,GAXFpK,EAWEoK,EAAAA,GAVF3J,EAUE2J,EAAAA,GATF5F,EASE4F,EAAAA,GARFjF,EAQEiF,EAAAA,GAPFlE,EAOEkE,EAAAA,GANFzK,EAMEyK,EAAAA,GALFtJ,EAKEsJ,EAAAA,GAJFzI,EAIEyI,EAAAA,GAHF7I,EAGE6I,EAAAA,GAFFjI,EAEEiI,EAAAA,GADFxC,EACEwC,EAAAA,GAQJ,SAASC,EAAcvK,GACrB,IAAMwK,EAAgB,CAAC,EACjBC,EAAcnL,KAAKC,MAAMS,GAEzB0K,EAAkBtG,SAASC,eAAe,oBAC1CsG,EAAgBvG,SAASC,eAAe,kBACxCuG,EAAqBxG,SAASC,eAAe,cAEnD,IAAKqG,IAAoBE,EACvB,MAAM,IAAIxM,MAAM,2DAElB,IAAMyM,EAAoBzG,SAASC,eAAe,aAClD,IAAKwG,EACH,MAAM,IAAIzM,MACR,kEAyBJ,IApBqC,IAAjCqM,EAAYK,kBACdJ,EAAgBK,MAAMC,QAAU,eAChCJ,EAAmBG,MAAMC,QAAU,eACnCJ,EAAmBG,MAAME,OAAS,iBAClCL,EAAmBG,MAAMxC,aAAe,MAExCoC,EAAcI,MAAMC,QAAU,eAC9BH,EAAkBE,MAAME,OAAS,iBACjCJ,EAAkBE,MAAMxC,aAAe,MAEvCiC,EAAgC,kBAAI,IAEpCE,EAAgBK,MAAMC,QAAU,OAChCJ,EAAmBG,MAAMC,QAAU,OACnCL,EAAcI,MAAMC,QAAU,OAE9BH,EAAkBE,MAAME,OAAS,OACjCT,EAAgC,kBAAI,GAGlCC,EAAY1C,OAAQ,CAEtB,IAAME,EAAcH,EAAe2C,EAAY1C,QAC/C1O,OAAOmQ,QAAQvB,GAAawB,QAAQ,SAAAC,GAAkB,IAAAC,EAAAuB,EAAAxB,EAAA,GAAhByB,EAAGxB,EAAA,GAAEtP,EAAKsP,EAAA,GAC9CkB,EAAkBE,MAAMI,GAAO9Q,CACjC,GAEI4N,EAAYY,kBAEdzE,SAASgH,gBAAgBL,MAAMlC,gBAC7BZ,EAAYY,gBACdzE,SAASiH,KAAKN,MAAMlC,gBAAkBZ,EAAYY,iBAGhDZ,EAAYW,aACdxE,SAASC,eAAe,kBAAkB0G,MAAMpC,MAC9CV,EAAYW,YAGhB4B,EAAsB,OAAIvC,CAC5B,CAEA,GAAIwC,EAAYa,iBAAkB,CAEhC,IAAMrD,EAAcH,EAAe2C,EAAYa,kBAC/CjS,OAAOmQ,QAAQvB,GAAawB,QAAQ,SAAA8B,GAAkB,IAAAC,EAAAN,EAAAK,EAAA,GAAhBJ,EAAGK,EAAA,GAAEnR,EAAKmR,EAAA,GAC9CZ,EAAmBG,MAAMI,GAAO9Q,CAClC,GAEI4N,EAAYW,aACdxE,SAASC,eAAe,oBAAoB0G,MAAMpC,MAChDV,EAAYW,YAGhB4B,EAAgC,iBAAIvC,CACtC,CAEA,OAAO3I,KAAKI,UAAU8K,EACxB,C,25EC1GA,IAAAhS,EAAAC,EAAAC,EAAA,mBAAAC,OAAAA,OAAA,GAAAC,EAAAF,EAAAG,UAAA,aAAAC,EAAAJ,EAAAK,aAAA,yBAAAC,EAAAN,EAAAE,EAAAE,EAAAE,GAAA,IAAAC,EAAAL,GAAAA,EAAAM,qBAAAC,EAAAP,EAAAO,EAAAC,EAAAC,OAAAC,OAAAL,EAAAC,WAAA,OAAAK,EAAAH,EAAA,mBAAAV,EAAAE,EAAAE,GAAA,IAAAE,EAAAC,EAAAG,EAAAI,EAAA,EAAAC,EAAAX,GAAA,GAAAY,GAAA,EAAAC,EAAA,CAAAF,EAAA,EAAAb,EAAA,EAAAgB,EAAApB,EAAAqB,EAAAC,EAAAN,EAAAM,EAAAC,KAAAvB,EAAA,GAAAsB,EAAA,SAAArB,EAAAC,GAAA,OAAAM,EAAAP,EAAAQ,EAAA,EAAAG,EAAAZ,EAAAmB,EAAAf,EAAAF,EAAAmB,CAAA,YAAAC,EAAApB,EAAAE,GAAA,IAAAK,EAAAP,EAAAU,EAAAR,EAAAH,EAAA,GAAAiB,GAAAF,IAAAV,GAAAL,EAAAgB,EAAAO,OAAAvB,IAAA,KAAAK,EAAAE,EAAAS,EAAAhB,GAAAqB,EAAAH,EAAAF,EAAAQ,EAAAjB,EAAA,GAAAN,EAAA,GAAAI,EAAAmB,IAAArB,KAAAQ,EAAAJ,GAAAC,EAAAD,EAAA,OAAAC,EAAA,MAAAD,EAAA,GAAAA,EAAA,GAAAR,GAAAQ,EAAA,IAAAc,KAAAhB,EAAAJ,EAAA,GAAAoB,EAAAd,EAAA,KAAAC,EAAA,EAAAU,EAAAC,EAAAhB,EAAAe,EAAAf,EAAAI,EAAA,IAAAc,EAAAG,IAAAnB,EAAAJ,EAAA,GAAAM,EAAA,GAAAJ,GAAAA,EAAAqB,KAAAjB,EAAA,GAAAN,EAAAM,EAAA,GAAAJ,EAAAe,EAAAf,EAAAqB,EAAAhB,EAAA,OAAAH,GAAAJ,EAAA,SAAAmB,EAAA,MAAAH,GAAA,EAAAd,CAAA,iBAAAE,EAAAW,EAAAQ,GAAA,GAAAT,EAAA,QAAAU,UAAA,oCAAAR,GAAA,IAAAD,GAAAK,EAAAL,EAAAQ,GAAAhB,EAAAQ,EAAAL,EAAAa,GAAAxB,EAAAQ,EAAA,EAAAT,EAAAY,KAAAM,GAAA,CAAAV,IAAAC,EAAAA,EAAA,GAAAA,EAAA,IAAAU,EAAAf,GAAA,GAAAkB,EAAAb,EAAAG,IAAAO,EAAAf,EAAAQ,EAAAO,EAAAC,EAAAR,GAAA,OAAAI,EAAA,EAAAR,EAAA,IAAAC,IAAAH,EAAA,QAAAL,EAAAO,EAAAF,GAAA,MAAAL,EAAAA,EAAA0B,KAAAnB,EAAAI,IAAA,MAAAc,UAAA,wCAAAzB,EAAA2B,KAAA,OAAA3B,EAAAW,EAAAX,EAAA4B,MAAApB,EAAA,IAAAA,EAAA,YAAAA,IAAAR,EAAAO,EAAA,SAAAP,EAAA0B,KAAAnB,GAAAC,EAAA,IAAAG,EAAAc,UAAA,oCAAApB,EAAA,YAAAG,EAAA,GAAAD,EAAAR,CAAA,UAAAC,GAAAiB,EAAAC,EAAAf,EAAA,GAAAQ,EAAAV,EAAAyB,KAAAvB,EAAAe,MAAAE,EAAA,YAAApB,GAAAO,EAAAR,EAAAS,EAAA,EAAAG,EAAAX,CAAA,SAAAe,EAAA,UAAAa,MAAA5B,EAAA2B,KAAAV,EAAA,GAAAhB,EAAAI,EAAAE,IAAA,GAAAI,CAAA,KAAAS,EAAA,YAAAV,IAAA,UAAAmB,IAAA,UAAAC,IAAA,CAAA9B,EAAAY,OAAAmB,eAAA,IAAAvB,EAAA,GAAAL,GAAAH,EAAAA,EAAA,GAAAG,QAAAW,EAAAd,EAAA,GAAAG,EAAA,yBAAAH,GAAAW,EAAAmB,EAAArB,UAAAC,EAAAD,UAAAG,OAAAC,OAAAL,GAAA,SAAAO,EAAAhB,GAAA,OAAAa,OAAAoB,eAAApB,OAAAoB,eAAAjC,EAAA+B,IAAA/B,EAAAkC,UAAAH,EAAAhB,EAAAf,EAAAM,EAAA,sBAAAN,EAAAU,UAAAG,OAAAC,OAAAF,GAAAZ,CAAA,QAAA8B,EAAApB,UAAAqB,EAAAhB,EAAAH,EAAA,cAAAmB,GAAAhB,EAAAgB,EAAA,cAAAD,GAAAA,EAAAK,YAAA,oBAAApB,EAAAgB,EAAAzB,EAAA,qBAAAS,EAAAH,GAAAG,EAAAH,EAAAN,EAAA,aAAAS,EAAAH,EAAAR,EAAA,yBAAAW,EAAAH,EAAA,oDAAAwB,EAAA,kBAAAC,EAAA7B,EAAA8B,EAAAtB,EAAA,cAAAD,EAAAf,EAAAE,EAAAE,EAAAH,GAAA,IAAAO,EAAAK,OAAA0B,eAAA,IAAA/B,EAAA,gBAAAR,GAAAQ,EAAA,EAAAO,EAAA,SAAAf,EAAAE,EAAAE,EAAAH,GAAA,SAAAK,EAAAJ,EAAAE,GAAAW,EAAAf,EAAAE,EAAA,SAAAF,GAAA,YAAAwC,QAAAtC,EAAAE,EAAAJ,EAAA,GAAAE,EAAAM,EAAAA,EAAAR,EAAAE,EAAA,CAAA2B,MAAAzB,EAAAqC,YAAAxC,EAAAyC,cAAAzC,EAAA0C,UAAA1C,IAAAD,EAAAE,GAAAE,GAAAE,EAAA,UAAAA,EAAA,WAAAA,EAAA,cAAAS,EAAAf,EAAAE,EAAAE,EAAAH,EAAA,UAAA2C,EAAA5C,EAAAsB,GAAA,KAAAF,EAAApB,EAAA,KAAA6C,EAAAvB,CAAA,UAAA2R,EAAAjT,EAAAE,GAAA,IAAAD,EAAAY,OAAAqS,KAAAlT,GAAA,GAAAa,OAAAsS,sBAAA,KAAA7S,EAAAO,OAAAsS,sBAAAnT,GAAAE,IAAAI,EAAAA,EAAA8S,OAAA,SAAAlT,GAAA,OAAAW,OAAAwS,yBAAArT,EAAAE,GAAAuC,UAAA,IAAAxC,EAAAuM,KAAAtI,MAAAjE,EAAAK,EAAA,QAAAL,CAAA,UAAAqT,EAAAtT,GAAA,QAAAE,EAAA,EAAAA,EAAA+D,UAAAzC,OAAAtB,IAAA,KAAAD,EAAA,MAAAgE,UAAA/D,GAAA+D,UAAA/D,GAAA,GAAAA,EAAA,EAAA+S,EAAApS,OAAAZ,IAAA,GAAAgR,QAAA,SAAA/Q,GAAAqT,EAAAvT,EAAAE,EAAAD,EAAAC,GAAA,GAAAW,OAAA2S,0BAAA3S,OAAA4S,iBAAAzT,EAAAa,OAAA2S,0BAAAvT,IAAAgT,EAAApS,OAAAZ,IAAAgR,QAAA,SAAA/Q,GAAAW,OAAA0B,eAAAvC,EAAAE,EAAAW,OAAAwS,yBAAApT,EAAAC,GAAA,UAAAF,CAAA,UAAAuT,EAAAvT,EAAAE,EAAAD,GAAA,OAAAC,EAAA,SAAAD,GAAA,IAAAO,EAAA,SAAAP,GAAA,aAAAyT,EAAAzT,KAAAA,EAAA,OAAAA,EAAA,IAAAD,EAAAC,EAAAE,OAAAwT,aAAA,YAAA3T,EAAA,KAAAQ,EAAAR,EAAA2B,KAAA1B,EAAAC,UAAA,aAAAwT,EAAAlT,GAAA,OAAAA,EAAA,UAAAkB,UAAA,uDAAAkS,OAAA3T,EAAA,CAAA4T,CAAA5T,GAAA,gBAAAyT,EAAAlT,GAAAA,EAAAA,EAAA,GAAAsT,CAAA5T,MAAAF,EAAAa,OAAA0B,eAAAvC,EAAAE,EAAA,CAAA2B,MAAA5B,EAAAwC,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAA3C,EAAAE,GAAAD,EAAAD,CAAA,UAAA4D,EAAAxD,EAAAH,EAAAD,EAAAE,EAAAI,EAAAe,EAAAZ,GAAA,QAAAD,EAAAJ,EAAAiB,GAAAZ,GAAAG,EAAAJ,EAAAqB,KAAA,OAAAzB,GAAA,YAAAJ,EAAAI,EAAA,CAAAI,EAAAoB,KAAA3B,EAAAW,GAAAiD,QAAAC,QAAAlD,GAAAmD,KAAA7D,EAAAI,EAAA,CAiBA,IAAMyT,GAAoB,IAAIC,aAAcC,OAAO,gBAmD5C,SAAeC,EAAW/N,GAAA,OAAAgO,EAAAjQ,MAAC,KAADD,UAAA,CAuDhC,SAAAkQ,IAAA,OA3HD/T,EA2HCgF,IAAAC,KAvDM,SAAAgB,EAAA8K,GAAA,IAAAiD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAxL,EAAAyL,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAA7P,IAAAI,KAAA,SAAAgB,GAAA,cAAAA,EAAAd,KAAAc,EAAAb,MAAA,OACuC,OADVyO,EAAYjD,EAAZiD,aAAcC,EAAclD,EAAdkD,eAC1CC,EAAa,IAAIY,EAAAA,GAAqB1O,EAAAb,KAAA,EAClB2O,EAAWzO,UACnC,MAAKyN,EAAA,GACAe,IACL,GACD,OAMC,OAVIE,EAAW/N,EAAAR,KAMXwO,EAAQ,IAAIW,EAAAA,GAAY,CAC5BC,IAAKd,EACLe,IAAK,IAAIC,EAAAA,GACTC,KAAM,IAAIC,EAAAA,KACVhP,EAAAb,KAAA,EAEsB6O,EAAMiB,oBAAoB,CAChDC,mBAAoBnB,EACpBoB,KAAM5B,IACN,OAHa,OAATU,EAASjO,EAAAR,KAAAQ,EAAAb,KAAG,GAOiBf,OAAOF,OAAOmB,UAC/C,MACAwO,EACA,CACE3Q,KAAM,QACNoC,WAAY,UAEd,EACA,IACD,QATyB,OAApB4O,EAAoBlO,EAAAR,KAAAQ,EAAAb,KAAG,GAUAf,OAAOF,OAAO+B,UACzC,MACAiO,GACD,QAKmE,OAR9DC,EAAcnO,EAAAR,KAIdmD,EAAiB,IAAIrB,WAAW6M,GAEhCC,EAAiB,IAAI9M,WAAW2M,EAAUmB,KAE1Cf,GAAM5L,EAAAA,EAAAA,IAAyB2L,EAAgBzL,GAAe3C,EAAAd,KAAA,GAAAc,EAAAb,KAAA,GAI5C8O,EAAUoB,KAAKzB,EAAcS,GAAI,QAAvDC,EAAatO,EAAAR,KAAAQ,EAAAb,KAAG,GAAH,oBAAAa,EAAAd,KAAG,GAAHc,EAAAwI,GAAAxI,EAAA,UAEP,IAAIZ,MAAM,oCAAsCY,EAAAwI,GAAEzL,YAAW,QAQnE,OALIwR,GAAgB5M,EAAAA,EAAAA,IAAsB,IAAIL,WAAWgN,IACrDE,GAAoB7M,EAAAA,EAAAA,IAAsByM,GAC1CK,EAAkBnO,KAAKI,UAAU,CACrC4O,eAAgBd,EAChBe,WAAYhB,IACZvO,EAAAT,OAAA,SACKkP,GAAe,yBAAAzO,EAAAP,OAAA,EAAAI,EAAA,kBACvB8N,EA3HD,eAAAlU,EAAA,KAAAD,EAAAiE,UAAA,WAAAJ,QAAA,SAAA3D,EAAAI,GAAA,IAAAe,EAAAjB,EAAA8D,MAAAjE,EAAAD,GAAA,SAAAmE,EAAA/D,GAAAwD,EAAAvC,EAAAnB,EAAAI,EAAA6D,EAAAC,EAAA,OAAAhE,EAAA,UAAAgE,EAAAhE,GAAAwD,EAAAvC,EAAAnB,EAAAI,EAAA6D,EAAAC,EAAA,QAAAhE,EAAA,CAAA+D,OAAA,OA2HCD,MAAA,KAAAD,WA3HD,IAAA7D,CA2HC,C","sources":["webpack://import/../shared/turnkey-core.js","webpack://import/./src/turnkey-core.js","webpack://import/../shared/crypto-utils.js"],"sourcesContent":["import { bech32 } from \"bech32\";\n\n/**\n * Turnkey Core Module - Shared\n * Contains all the core cryptographic and utility functions shared across frames\n */\n\n/** constants for LocalStorage */\nconst TURNKEY_EMBEDDED_KEY = \"TURNKEY_EMBEDDED_KEY\";\nconst TURNKEY_TARGET_EMBEDDED_KEY = \"TURNKEY_TARGET_EMBEDDED_KEY\";\nconst TURNKEY_SETTINGS = \"TURNKEY_SETTINGS\";\n/** 48 hours in milliseconds */\nconst TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS = 1000 * 60 * 60 * 48;\nconst TURNKEY_EMBEDDED_KEY_ORIGIN = \"TURNKEY_EMBEDDED_KEY_ORIGIN\";\n\nlet parentFrameMessageChannelPort = null;\nvar cryptoProviderOverride = null;\n\n/*\n * Returns a reference to the WebCrypto subtle interface regardless of the host environment.\n */\nfunction getSubtleCrypto() {\n if (cryptoProviderOverride && cryptoProviderOverride.subtle) {\n return cryptoProviderOverride.subtle;\n }\n if (\n typeof globalThis !== \"undefined\" &&\n globalThis.crypto &&\n globalThis.crypto.subtle\n ) {\n return globalThis.crypto.subtle;\n }\n if (typeof window !== \"undefined\" && window.crypto && window.crypto.subtle) {\n return window.crypto.subtle;\n }\n if (typeof global !== \"undefined\" && global.crypto && global.crypto.subtle) {\n return global.crypto.subtle;\n }\n if (typeof crypto !== \"undefined\" && crypto.subtle) {\n return crypto.subtle;\n }\n\n return null;\n}\n\n/*\n * Allows tests to explicitly set the crypto provider (e.g. crypto.webcrypto) when the runtime\n * environment does not expose one on the global/window objects.\n */\nfunction setCryptoProvider(cryptoProvider) {\n cryptoProviderOverride = cryptoProvider || null;\n}\n\n/* Security functions */\n\nfunction isDoublyIframed() {\n if (window.location.ancestorOrigins !== undefined) {\n // Does not exist in IE and firefox.\n // See https://developer.mozilla.org/en-US/docs/Web/API/Location/ancestorOrigins for how this works\n return window.location.ancestorOrigins.length > 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n */\nasync function initEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey();\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n */\nfunction getEmbeddedKey() {\n const jwtKey = getItemWithExpiry(TURNKEY_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n */\nfunction setEmbeddedKey(targetKey) {\n setItemWithExpiry(\n TURNKEY_EMBEDDED_KEY,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n */\nfunction onResetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY);\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Encodes a Uint8Array into a base58-check-encoded string\n * Throws an error if the input is invalid or the checksum is invalid.\n * @param {Uint8Array} payload The raw payload to encode.\n * @return {Promise} The base58check-encoded string.\n */\nasync function base58CheckEncode(payload) {\n const hash1Buf = await crypto.subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n\n const hash2Buf = await crypto.subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n\n const checksum = hash2.slice(0, 4);\n\n const full = new Uint8Array(payload.length + 4);\n full.set(payload, 0);\n full.set(checksum, payload.length);\n\n return base58Encode(full);\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n */\nasync function encodeKey(privateKeyBytes, keyFormat, publicKeyBytes) {\n switch (keyFormat) {\n case \"SOLANA\":\n if (!publicKeyBytes) {\n throw new Error(\n \"public key must be specified for SOLANA key format\"\n );\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 case \"BITCOIN_MAINNET_WIF\":\n case \"BITCOIN_TESTNET_WIF\": {\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const version = keyFormat === \"BITCOIN_MAINNET_WIF\" ? 0x80 : 0xef;\n const wifPayload = new Uint8Array(34);\n wifPayload[0] = version;\n wifPayload.set(privateKeyBytes, 1);\n wifPayload[33] = 0x01; // compressed flag\n\n return await base58CheckEncode(wifPayload);\n }\n case \"SUI_BECH32\":\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const schemeFlag = 0x00; // ED25519 | We only support ED25519 keys for Sui currently\n const bech32Payload = new Uint8Array(1 + 32);\n bech32Payload[0] = schemeFlag;\n bech32Payload.set(privateKeyBytes, 1);\n\n return bech32.encode(\"suiprivkey\", bech32.toWords(bech32Payload));\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n base58CheckEncode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import * as SharedTKHQ from \"@shared/turnkey-core.js\";\n\nconst {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n} = SharedTKHQ;\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n const settingsObj = JSON.parse(settings);\n\n const passphraseLabel = document.getElementById(\"passphrase-label\");\n const mnemonicLabel = document.getElementById(\"mnemonic-label\");\n const passphraseTextarea = document.getElementById(\"passphrase\");\n\n if (!passphraseLabel || !passphraseTextarea) {\n throw new Error(\"no passphrase HTML elements found to apply settings to.\");\n }\n const plaintextTextarea = document.getElementById(\"plaintext\");\n if (!plaintextTextarea) {\n throw new Error(\n \"no plaintext textarea HTML element found to apply settings to.\"\n );\n }\n\n // Apply enablePassphrase setting\n if (settingsObj.enablePassphrase === true) {\n passphraseLabel.style.display = \"inline-block\";\n passphraseTextarea.style.display = \"inline-block\";\n passphraseTextarea.style.border = \"solid 1px #ccc\";\n passphraseTextarea.style.borderRadius = \"4px\";\n\n mnemonicLabel.style.display = \"inline-block\";\n plaintextTextarea.style.border = \"solid 1px #ccc\";\n plaintextTextarea.style.borderRadius = \"4px\";\n\n validSettings[\"enablePassphrase\"] = true;\n } else {\n passphraseLabel.style.display = \"none\";\n passphraseTextarea.style.display = \"none\";\n mnemonicLabel.style.display = \"none\";\n\n plaintextTextarea.style.border = \"none\";\n validSettings[\"enablePassphrase\"] = false;\n }\n\n if (settingsObj.styles) {\n // Validate, sanitize, and apply the styles to the \"plaintext\" textarea.\n const validStyles = validateStyles(settingsObj.styles);\n Object.entries(validStyles).forEach(([key, value]) => {\n plaintextTextarea.style[key] = value;\n });\n\n if (validStyles.backgroundColor) {\n // Apply background color to document and body as well.\n document.documentElement.style.backgroundColor =\n validStyles.backgroundColor;\n document.body.style.backgroundColor = validStyles.backgroundColor;\n }\n\n if (validStyles.labelColor) {\n document.getElementById(\"mnemonic-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"styles\"] = validStyles;\n }\n\n if (settingsObj.passphraseStyles) {\n // Validate, sanitize, and apply the styles to the \"passphrase\" textarea.\n const validStyles = validateStyles(settingsObj.passphraseStyles);\n Object.entries(validStyles).forEach(([key, value]) => {\n passphraseTextarea.style[key] = value;\n });\n\n if (validStyles.labelColor) {\n document.getElementById(\"passphrase-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"passphraseStyles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\n}\n\nexport {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n applySettings,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_OverloadYield","k","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_TARGET_EMBEDDED_KEY","TURNKEY_SETTINGS","parentFrameMessageChannelPort","cryptoProviderOverride","getSubtleCrypto","subtle","globalThis","crypto","window","global","setCryptoProvider","cryptoProvider","loadQuorumKey","_x","_loadQuorumKey","_regeneratorRuntime","mark","_callee","quorumPublic","wrap","_context","prev","next","Error","importKey","namedCurve","abrupt","sent","stop","loadTargetKey","_x2","_loadTargetKey","_callee2","targetPublic","targetKey","_context2","exportKey","getTargetEmbeddedKey","jwtKey","localStorage","getItem","JSON","parse","setTargetEmbeddedKey","setItem","stringify","resetTargetEmbeddedKey","removeItem","setParentFrameMessageChannelPort","port","getSettings","settings","setSettings","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","concat","expectedZeroCount","zeroCount","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","fromDerSignature","derSignature","derSignatureBuf","index","rLength","sLength","rPadded","sPadded","verifyEnclaveSignature","_x3","_x4","_x5","_verifyEnclaveSignature","_callee5","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context5","prod","preprod","__TURNKEY_SIGNER_ENVIRONMENT__","undefined","verify","hash","sendMessageUp","type","requestId","message","postMessage","parent","content","messageLog","document","getElementById","createElement","innerText","appendChild","logMessage","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","carry","push","j","currentByte","result","reverse","base58CheckDecode","_x7","_base58CheckDecode","_callee7","decoded","payload","checksum","hash1Buf","hash1","hash2Buf","hash2","computedChecksum","_context7","subarray","digest","decodeKey","_x9","_x10","_decodeKey","_callee9","privateKey","keyFormat","decodedKeyBytes","version","keyAndFlags","_payload","_version","_keyAndFlags","_bech32$decode","prefix","words","bytes","schemeFlag","privkey","_context9","t0","bech32","decode","fromWords","console","warn","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","SharedTKHQ","applySettings","validSettings","settingsObj","passphraseLabel","mnemonicLabel","passphraseTextarea","plaintextTextarea","enablePassphrase","style","display","border","_slicedToArray","key","documentElement","body","passphraseStyles","_ref3","_ref4","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","TextEncoder","encode","HpkeEncrypt","_HpkeEncrypt","plaintextBuf","receiverPubJwk","kemContext","receiverPub","suite","senderCtx","receiverPubCryptoKey","receiverPubRaw","encappedKeyBuf","aad","ciphertextBuf","ciphertextHex","encappedKeyBufHex","encryptedBundle","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createSenderContext","recipientPublicKey","info","enc","seal","encappedPublic","ciphertext"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"551.bundle.27da59437a4e403e3c24.js","mappings":"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","sources":["webpack://import/../shared/turnkey-core.js","webpack://import/./src/turnkey-core.js","webpack://import/../shared/crypto-utils.js"],"sourcesContent":["import { bech32 } from \"bech32\";\n\n/**\n * Turnkey Core Module - Shared\n * Contains all the core cryptographic and utility functions shared across frames\n */\n\n/** constants for LocalStorage */\nconst TURNKEY_EMBEDDED_KEY = \"TURNKEY_EMBEDDED_KEY\";\nconst TURNKEY_TARGET_EMBEDDED_KEY = \"TURNKEY_TARGET_EMBEDDED_KEY\";\nconst TURNKEY_SETTINGS = \"TURNKEY_SETTINGS\";\n/** 48 hours in milliseconds */\nconst TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS = 1000 * 60 * 60 * 48;\nconst TURNKEY_EMBEDDED_KEY_ORIGIN = \"TURNKEY_EMBEDDED_KEY_ORIGIN\";\n\nlet parentFrameMessageChannelPort = null;\nvar cryptoProviderOverride = null;\n\n/*\n * Returns a reference to the WebCrypto subtle interface regardless of the host environment.\n */\nfunction getSubtleCrypto() {\n if (cryptoProviderOverride && cryptoProviderOverride.subtle) {\n return cryptoProviderOverride.subtle;\n }\n if (\n typeof globalThis !== \"undefined\" &&\n globalThis.crypto &&\n globalThis.crypto.subtle\n ) {\n return globalThis.crypto.subtle;\n }\n if (typeof window !== \"undefined\" && window.crypto && window.crypto.subtle) {\n return window.crypto.subtle;\n }\n if (typeof global !== \"undefined\" && global.crypto && global.crypto.subtle) {\n return global.crypto.subtle;\n }\n if (typeof crypto !== \"undefined\" && crypto.subtle) {\n return crypto.subtle;\n }\n\n return null;\n}\n\n/*\n * Allows tests to explicitly set the crypto provider (e.g. crypto.webcrypto) when the runtime\n * environment does not expose one on the global/window objects.\n */\nfunction setCryptoProvider(cryptoProvider) {\n cryptoProviderOverride = cryptoProvider || null;\n}\n\n/* Security functions */\n\nfunction isDoublyIframed() {\n if (window.location.ancestorOrigins !== undefined) {\n // Does not exist in IE and firefox.\n // See https://developer.mozilla.org/en-US/docs/Web/API/Location/ancestorOrigins for how this works\n return window.location.ancestorOrigins.length > 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n */\nasync function initEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey();\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n */\nfunction getEmbeddedKey() {\n const jwtKey = getItemWithExpiry(TURNKEY_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n */\nfunction setEmbeddedKey(targetKey) {\n setItemWithExpiry(\n TURNKEY_EMBEDDED_KEY,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n */\nfunction onResetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY);\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Encodes a Uint8Array into a Base58Check-encoded string.\n * Computes a 4-byte checksum as the first 4 bytes of SHA256(SHA256(payload))\n * and appends it to the payload before base58 encoding.\n * @param {Uint8Array} payload The raw payload to encode.\n * @return {Promise} The Base58Check-encoded string.\n */\nasync function base58CheckEncode(payload) {\n const subtle = getSubtleCrypto();\n\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n\n const checksum = hash2.slice(0, 4);\n\n const full = new Uint8Array(payload.length + 4);\n full.set(payload, 0);\n full.set(checksum, payload.length);\n\n return base58Encode(full);\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" 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 }\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n case \"BITCOIN_MAINNET_WIF\":\n case \"BITCOIN_TESTNET_WIF\": {\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const version = keyFormat === \"BITCOIN_MAINNET_WIF\" ? 0x80 : 0xef;\n const wifPayload = new Uint8Array(34);\n wifPayload[0] = version;\n wifPayload.set(privateKeyBytes, 1);\n wifPayload[33] = 0x01; // compressed flag\n\n return await base58CheckEncode(wifPayload);\n }\n case \"SUI_BECH32\": {\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const schemeFlag = 0x00; // ED25519 | We only support ED25519 keys for Sui currently\n const bech32Payload = new Uint8Array(1 + 32);\n bech32Payload[0] = schemeFlag;\n bech32Payload.set(privateKeyBytes, 1);\n\n return bech32.encode(\"suiprivkey\", bech32.toWords(bech32Payload));\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n base58CheckEncode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import * as SharedTKHQ from \"@shared/turnkey-core.js\";\n\nconst {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n} = SharedTKHQ;\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n const settingsObj = JSON.parse(settings);\n\n const passphraseLabel = document.getElementById(\"passphrase-label\");\n const mnemonicLabel = document.getElementById(\"mnemonic-label\");\n const passphraseTextarea = document.getElementById(\"passphrase\");\n\n if (!passphraseLabel || !passphraseTextarea) {\n throw new Error(\"no passphrase HTML elements found to apply settings to.\");\n }\n const plaintextTextarea = document.getElementById(\"plaintext\");\n if (!plaintextTextarea) {\n throw new Error(\n \"no plaintext textarea HTML element found to apply settings to.\"\n );\n }\n\n // Apply enablePassphrase setting\n if (settingsObj.enablePassphrase === true) {\n passphraseLabel.style.display = \"inline-block\";\n passphraseTextarea.style.display = \"inline-block\";\n passphraseTextarea.style.border = \"solid 1px #ccc\";\n passphraseTextarea.style.borderRadius = \"4px\";\n\n mnemonicLabel.style.display = \"inline-block\";\n plaintextTextarea.style.border = \"solid 1px #ccc\";\n plaintextTextarea.style.borderRadius = \"4px\";\n\n validSettings[\"enablePassphrase\"] = true;\n } else {\n passphraseLabel.style.display = \"none\";\n passphraseTextarea.style.display = \"none\";\n mnemonicLabel.style.display = \"none\";\n\n plaintextTextarea.style.border = \"none\";\n validSettings[\"enablePassphrase\"] = false;\n }\n\n if (settingsObj.styles) {\n // Validate, sanitize, and apply the styles to the \"plaintext\" textarea.\n const validStyles = validateStyles(settingsObj.styles);\n Object.entries(validStyles).forEach(([key, value]) => {\n plaintextTextarea.style[key] = value;\n });\n\n if (validStyles.backgroundColor) {\n // Apply background color to document and body as well.\n document.documentElement.style.backgroundColor =\n validStyles.backgroundColor;\n document.body.style.backgroundColor = validStyles.backgroundColor;\n }\n\n if (validStyles.labelColor) {\n document.getElementById(\"mnemonic-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"styles\"] = validStyles;\n }\n\n if (settingsObj.passphraseStyles) {\n // Validate, sanitize, and apply the styles to the \"passphrase\" textarea.\n const validStyles = validateStyles(settingsObj.passphraseStyles);\n Object.entries(validStyles).forEach(([key, value]) => {\n passphraseTextarea.style[key] = value;\n });\n\n if (validStyles.labelColor) {\n document.getElementById(\"passphrase-label\").style.color =\n validStyles.labelColor;\n }\n\n validSettings[\"passphraseStyles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\n}\n\nexport {\n setCryptoProvider,\n loadTargetKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n resetTargetEmbeddedKey,\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58CheckDecode,\n decodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n applySettings,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_OverloadYield","k","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_TARGET_EMBEDDED_KEY","TURNKEY_SETTINGS","parentFrameMessageChannelPort","cryptoProviderOverride","getSubtleCrypto","subtle","globalThis","crypto","window","global","setCryptoProvider","cryptoProvider","loadQuorumKey","_x","_loadQuorumKey","_regeneratorRuntime","mark","_callee","quorumPublic","wrap","_context","prev","next","Error","importKey","namedCurve","abrupt","sent","stop","loadTargetKey","_x2","_loadTargetKey","_callee2","targetPublic","targetKey","_context2","exportKey","getTargetEmbeddedKey","jwtKey","localStorage","getItem","JSON","parse","setTargetEmbeddedKey","setItem","stringify","resetTargetEmbeddedKey","removeItem","setParentFrameMessageChannelPort","port","getSettings","settings","setSettings","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","concat","expectedZeroCount","zeroCount","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","fromDerSignature","derSignature","derSignatureBuf","index","rLength","sLength","rPadded","sPadded","verifyEnclaveSignature","_x3","_x4","_x5","_verifyEnclaveSignature","_callee5","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context5","prod","preprod","__TURNKEY_SIGNER_ENVIRONMENT__","undefined","verify","hash","sendMessageUp","type","requestId","message","postMessage","parent","content","messageLog","document","getElementById","createElement","innerText","appendChild","logMessage","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","carry","push","j","currentByte","result","reverse","base58CheckDecode","_x7","_base58CheckDecode","_callee7","decoded","payload","checksum","hash1Buf","hash1","hash2Buf","hash2","computedChecksum","_context7","subarray","digest","decodeKey","_x9","_x10","_decodeKey","_callee9","privateKey","keyFormat","decodedKeyBytes","version","keyAndFlags","_payload","_version","_keyAndFlags","_bech32$decode","prefix","words","bytes","schemeFlag","privkey","_context9","t0","bech32","decode","fromWords","console","warn","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","SharedTKHQ","applySettings","validSettings","settingsObj","passphraseLabel","mnemonicLabel","passphraseTextarea","plaintextTextarea","enablePassphrase","style","display","border","_slicedToArray","key","documentElement","body","passphraseStyles","_ref3","_ref4","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","TextEncoder","encode","HpkeEncrypt","_HpkeEncrypt","plaintextBuf","receiverPubJwk","kemContext","receiverPub","suite","senderCtx","receiverPubCryptoKey","receiverPubRaw","encappedKeyBuf","aad","ciphertextBuf","ciphertextHex","encappedKeyBufHex","encryptedBundle","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createSenderContext","recipientPublicKey","info","enc","seal","encappedPublic","ciphertext"],"sourceRoot":""} \ No newline at end of file From b6402c6e7b2220bbd290f91798fdab2fe845f84b Mon Sep 17 00:00:00 2001 From: Ethan Konkolowicz Date: Fri, 6 Feb 2026 13:42:31 -0500 Subject: [PATCH 7/7] fixed tests --- export/babel.config.js | 2 +- .../dist/551.bundle.782857d3859034ccafaf.js | 3 - .../551.bundle.782857d3859034ccafaf.js.map | 1 - .../dist/551.bundle.815c489ea784882a647b.js | 3 + ...undle.815c489ea784882a647b.js.LICENSE.txt} | 0 .../551.bundle.815c489ea784882a647b.js.map | 1 + export/dist/index.html | 2 +- .../index.styles.a4288d6084137b3233b5.css.map | 1 - export/dist/standalone.html | 2 +- ...tandalone.styles.3b0cc66661f0bb609373.css} | 20 ++- ...dalone.styles.3b0cc66661f0bb609373.css.map | 1 + ...standalone.styles.d2d0a2c3b41689154751.css | 150 ------------------ ...dalone.styles.d2d0a2c3b41689154751.css.map | 1 - export/index.test.js | 11 +- export/jest.config.js | 11 ++ export/jest.setup.js | 9 ++ export/src/turnkey-core.js | 3 +- 17 files changed, 51 insertions(+), 170 deletions(-) delete mode 100644 export/dist/551.bundle.782857d3859034ccafaf.js delete mode 100644 export/dist/551.bundle.782857d3859034ccafaf.js.map create mode 100644 export/dist/551.bundle.815c489ea784882a647b.js rename export/dist/{551.bundle.782857d3859034ccafaf.js.LICENSE.txt => 551.bundle.815c489ea784882a647b.js.LICENSE.txt} (100%) create mode 100644 export/dist/551.bundle.815c489ea784882a647b.js.map delete mode 100644 export/dist/index.styles.a4288d6084137b3233b5.css.map rename export/dist/{index.styles.a4288d6084137b3233b5.css => standalone.styles.3b0cc66661f0bb609373.css} (91%) create mode 100644 export/dist/standalone.styles.3b0cc66661f0bb609373.css.map delete mode 100644 export/dist/standalone.styles.d2d0a2c3b41689154751.css delete mode 100644 export/dist/standalone.styles.d2d0a2c3b41689154751.css.map create mode 100644 export/jest.setup.js diff --git a/export/babel.config.js b/export/babel.config.js index a8036a9..24d5e76 100644 --- a/export/babel.config.js +++ b/export/babel.config.js @@ -1,3 +1,3 @@ module.exports = { - presets: [["@babel/preset-env"]], + presets: [["@babel/preset-env", { targets: { node: "current" } }]], }; diff --git a/export/dist/551.bundle.782857d3859034ccafaf.js b/export/dist/551.bundle.782857d3859034ccafaf.js deleted file mode 100644 index e91e89b..0000000 --- a/export/dist/551.bundle.782857d3859034ccafaf.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see 551.bundle.782857d3859034ccafaf.js.LICENSE.txt */ -"use strict";(self.webpackChunkexport_tests=self.webpackChunkexport_tests||[]).push([[551],{275:(e,t,r)=>{r.d(t,{$C:()=>M,B_:()=>te,Di:()=>B,Eh:()=>N,M8:()=>C,OG:()=>X,Ql:()=>D,Rl:()=>Q,Rx:()=>ee,Sb:()=>H,VU:()=>K,Wq:()=>F,Y$:()=>z,ZX:()=>L,Z_:()=>ie,cj:()=>G,eq:()=>$,fX:()=>Y,g2:()=>ne,g8:()=>J,mt:()=>R,oc:()=>W,zU:()=>V});var n=r(343);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function 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 a(e){for(var t=1;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(o(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 s(e,t,r,n,o){var i=p(e,t,r,n,o);return i.next().then(function(e){return e.done?e.value:i.next()})}function p(e,t,r,n,o){return new y(d().w(e,t,r,n),o||Promise)}function y(e,t){function r(n,o,i,a){try{var u=e[n](o),c=u.value;return c instanceof b?t.resolve(c.v).then(function(e){r("next",e,i,a)},function(e){r("throw",e,i,a)}):t.resolve(c).then(function(e){u.value=e,i(u)},function(e){return r("throw",e,i,a)})}catch(e){a(e)}}var n;this.next||(v(y.prototype),v(y.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),v(this,"_invoke",function(e,o,i){function a(){return new t(function(t,n){r(e,i,t,n)})}return n=n?n.then(a,a):a()},!0)}function d(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return v(f,"_invoke",function(r,n,o){var i,u,c,f=0,l=o||[],s=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return i=t,u=0,c=e,p.n=r,a}};function y(r,n){for(u=r,c=n,t=0;!s&&f&&!o&&t3?(o=d===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=e):i[0]<=y&&((o=r<2&&yn||n>d)&&(i[4]=r,i[5]=n,p.n=d,u=0))}if(o||r>1)return a;throw s=!0,n}return function(o,l,d){if(f>1)throw TypeError("Generator is already running");for(s&&1===l&&y(l,d),u=l,c=d;(t=u<2?e:c)||!s;){i||(u?u<3?(u>1&&(p.n=-1),y(u,c)):p.n=c:p.v=c);try{if(f=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,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=i.return)&&t.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=e}else if((t=(s=p.n<0)?c:r.call(n,p))!==a)break}catch(t){i=e,u=1,c=t}finally{f=1}}return{value:t,done:s}}}(r,o,i),!0),f}var a={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(v(t={},n,function(){return this}),t),s=f.prototype=u.prototype=Object.create(l);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,v(e,o,"GeneratorFunction")),e.prototype=Object.create(s),e}return c.prototype=f,v(s,"constructor",f),v(f,"constructor",c),c.displayName="GeneratorFunction",v(f,o,"GeneratorFunction"),v(s),v(s,o,"Generator"),v(s,n,function(){return this}),v(s,"toString",function(){return"[object Generator]"}),(d=function(){return{w:i,m:p}})()}function v(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}v=function(e,t,r,n){function i(t,r){v(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:(i("next",0),i("throw",1),i("return",2))},v(e,t,r,n)}function b(e,t){this.v=e,this.k=t}function h(e){return function(e){if(Array.isArray(e))return w(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||m(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 m(e,t){if(e){if("string"==typeof e)return w(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)?w(e,t):void 0}}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1:window.parent!==window.top}function _(e){return P.apply(this,arguments)}function P(){return(P=x(c().mark(function e(t){var r;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=A()){e.next=3;break}throw new Error("WebCrypto subtle API is unavailable");case 3:return e.next=5,r.importKey("raw",t,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}},e)}))).apply(this,arguments)}function N(){return T.apply(this,arguments)}function T(){return(T=x(c().mark(function e(){return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!I()){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,C();case 8:G(e.sent);case 10:case"end":return e.stop()}},e)}))).apply(this,arguments)}function C(){return U.apply(this,arguments)}function U(){return(U=x(c().mark(function e(){var t,r;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(t=A()){e.next=3;break}throw new Error("WebCrypto subtle API is unavailable");case 3:return e.next=5,t.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 5:return r=e.sent,e.next=8,t.exportKey("jwk",r.privateKey);case 8:return e.abrupt("return",e.sent);case 9:case"end":return e.stop()}},e)}))).apply(this,arguments)}function D(){var e=function(e){var t=window.localStorage.getItem(e);if(!t)return null;var r=JSON.parse(t);return Object.prototype.hasOwnProperty.call(r,"expiry")&&Object.prototype.hasOwnProperty.call(r,"value")?(new Date).getTime()>r.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}(E);return e?JSON.parse(e):null}function G(e){M(E,JSON.stringify(e),S)}function $(){window.localStorage.removeItem(E),window.localStorage.removeItem(k)}function K(e){j=e}function R(){var e=window.localStorage.getItem(O);return e?JSON.parse(e):null}function W(e){window.localStorage.setItem(O,JSON.stringify(e))}function M(e,t,r){var n={value:t,expiry:(new Date).getTime()+r};window.localStorage.setItem(e,JSON.stringify(n))}function F(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 B(e){return h(e).map(function(e){return e.toString(16).padStart(2,"0")}).join("")}function Y(e,t){var r=t-e.length;if(r>0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(h(n),h(e)))}if(r<0){for(var o=-1*r,i=0,a=0;a0;)r.push(o%58),o=o/58|0}for(var a=0;a0;){var u=r[a];i=(u=void 0===u?i:58*u+i)>>8,r[a]=u%256,a++}}var c=n.concat(r.reverse());return new Uint8Array(c)}function te(e){return re.apply(this,arguments)}function re(){return(re=x(c().mark(function e(t){var r,n,o,i,a,u;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,crypto.subtle.digest("SHA-256",t);case 2:return r=e.sent,n=new Uint8Array(r),e.next=6,crypto.subtle.digest("SHA-256",n);case 6:return o=e.sent,i=new Uint8Array(o),a=i.slice(0,4),(u=new Uint8Array(t.length+4)).set(t,0),u.set(a,t.length),e.abrupt("return",Q(u));case 13:case"end":return e.stop()}},e)}))).apply(this,arguments)}function ne(e,t,r){return oe.apply(this,arguments)}function oe(){return(oe=x(c().mark(function e(t,r,o){var i,a,u,f;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:e.t0=r,e.next="SOLANA"===e.t0?3:"HEXADECIMAL"===e.t0?13:"BITCOIN_MAINNET_WIF"===e.t0||"BITCOIN_TESTNET_WIF"===e.t0?14:"SUI_BECH32"===e.t0?24:31;break;case 3:if(o){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===o.length){e.next=9;break}throw new Error("invalid public key length. Expected 32 bytes. Got ".concat(o.length,"."));case 9:return(i=new Uint8Array(64)).set(t,0),i.set(o,32),e.abrupt("return",Q(i));case 13:return e.abrupt("return","0x"+B(t));case 14:if(32===t.length){e.next=16;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 16:return a="BITCOIN_MAINNET_WIF"===r?128:239,(u=new Uint8Array(34))[0]=a,u.set(t,1),u[33]=1,e.next=23,te(u);case 23:return e.abrupt("return",e.sent);case 24:if(32===t.length){e.next=26;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 26:return(f=new Uint8Array(33))[0]=0,f.set(t,1),e.abrupt("return",n.I.encode("suiprivkey",n.I.toWords(f)));case 31:return console.warn("invalid key format: ".concat(r,". Defaulting to HEXADECIMAL.")),e.abrupt("return","0x"+B(t));case 33:case"end":return e.stop()}},e)}))).apply(this,arguments)}function ie(e,t){var r={},n={padding:"^(\\d+(px|em|%|rem) ?){1,4}$",margin:"^(\\d+(px|em|%|rem) ?){1,4}$",borderWidth:"^(\\d+(px|em|rem) ?){1,4}$",borderStyle:"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$",borderColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",borderRadius:"^(\\d+(px|em|%|rem) ?){1,4}$",fontSize:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$",fontWeight:"^(normal|bold|bolder|lighter|\\d{3})$",fontFamily:'^[^";<>]*$',color:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",labelColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",backgroundColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",width:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",height:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",maxWidth:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",maxHeight:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",lineHeight:"^(\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$",boxShadow:"^(none|(\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)) ?(inset)?)$",textAlign:"^(left|right|center|justify|initial|inherit)$",overflowWrap:"^(normal|break-word|anywhere)$",wordWrap:"^(normal|break-word)$",resize:"^(none|both|horizontal|vertical|block|inline)$"};return Object.entries(e).forEach(function(e){var t,o,i=(o=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,u=[],c=!0,f=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){f=!0,o=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(f)throw o}}return u}}(t,o)||m(t,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=i[0],u=i[1],c=a.trim();if(0===c.length)throw new Error("css style property cannot be empty");var f=n[c];if(!f)throw new Error('invalid or unsupported css style property: "'.concat(c,'"'));var l=new RegExp(f),s=u.trim();if(0==s.length)throw new Error('css style for "'.concat(c,'" is empty'));if(!l.test(s))throw new Error('invalid css style value for property "'.concat(c,'"'));r[c]=s}),r}},482:(e,t,r)=>{r.r(t),r.d(t,{additionalAssociatedData:()=>w,applySettings:()=>P,base58CheckEncode:()=>d,base58Decode:()=>p,base58Encode:()=>y,encodeKey:()=>v,encodeWallet:()=>T,fromDerSignature:()=>m,generateTargetKey:()=>A,getEd25519PublicKey:()=>N,getEmbeddedKey:()=>j,getItemWithExpiry:()=>C,getSettings:()=>u,initEmbeddedKey:()=>I,logMessage:()=>_,normalizePadding:()=>h,onResetEmbeddedKey:()=>S,p256JWKPrivateToPublic:()=>E,sendMessageUp:()=>f,setEmbeddedKey:()=>k,setItemWithExpiry:()=>O,setParentFrameMessageChannelPort:()=>b,setSettings:()=>c,uint8arrayFromHexString:()=>l,uint8arrayToHexString:()=>s,validateStyles:()=>x,verifyEnclaveSignature:()=>g});var n=r(275),o=r(598),i=r(348);function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rr.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}},584:(e,t,r)=>{r.d(t,{u:()=>g});var n=r(275),o=r(255);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function a(){var e=p(),t=e.m(a),r=(Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__).constructor;function n(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===r||"GeneratorFunction"===(t.displayName||t.name))}var o={throw:1,return:2,break:3,continue:3};function i(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,i){return t.resultName=o,r(n.d,u(e),i)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(a=function(){return{wrap:function(t,r,n,o){return e.w(i(t),r,n,o&&o.reverse())},isGeneratorFunction:n,mark:e.m,awrap:function(e,t){return new d(e,t)},AsyncIterator:s,async:function(e,t,r,o,a){return(n(t)?l:f)(i(e),t,r,o,a)},keys:c,values:u}})()}function u(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(i(e)+" is not iterable")}function c(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}}function f(e,t,r,n,o){var i=l(e,t,r,n,o);return i.next().then(function(e){return e.done?e.value:i.next()})}function l(e,t,r,n,o){return new s(p().w(e,t,r,n),o||Promise)}function s(e,t){function r(n,o,i,a){try{var u=e[n](o),c=u.value;return c instanceof d?t.resolve(c.v).then(function(e){r("next",e,i,a)},function(e){r("throw",e,i,a)}):t.resolve(c).then(function(e){u.value=e,i(u)},function(e){return r("throw",e,i,a)})}catch(e){a(e)}}var n;this.next||(y(s.prototype),y(s.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),y(this,"_invoke",function(e,o,i){function a(){return new t(function(t,n){r(e,i,t,n)})}return n=n?n.then(a,a):a()},!0)}function p(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return y(f,"_invoke",function(r,n,o){var i,u,c,f=0,l=o||[],s=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return i=t,u=0,c=e,p.n=r,a}};function y(r,n){for(u=r,c=n,t=0;!s&&f&&!o&&t3?(o=d===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=e):i[0]<=y&&((o=r<2&&yn||n>d)&&(i[4]=r,i[5]=n,p.n=d,u=0))}if(o||r>1)return a;throw s=!0,n}return function(o,l,d){if(f>1)throw TypeError("Generator is already running");for(s&&1===l&&y(l,d),u=l,c=d;(t=u<2?e:c)||!s;){i||(u?u<3?(u>1&&(p.n=-1),y(u,c)):p.n=c:p.v=c);try{if(f=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,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=i.return)&&t.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=e}else if((t=(s=p.n<0)?c:r.call(n,p))!==a)break}catch(t){i=e,u=1,c=t}finally{f=1}}return{value:t,done:s}}}(r,o,i),!0),f}var a={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(y(t={},n,function(){return this}),t),s=f.prototype=u.prototype=Object.create(l);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,y(e,o,"GeneratorFunction")),e.prototype=Object.create(s),e}return c.prototype=f,y(s,"constructor",f),y(f,"constructor",c),c.displayName="GeneratorFunction",y(f,o,"GeneratorFunction"),y(s),y(s,o,"Generator"),y(s,n,function(){return this}),y(s,"toString",function(){return"[object Generator]"}),(p=function(){return{w:i,m:d}})()}function y(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}y=function(e,t,r,n){function i(t,r){y(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:(i("next",0),i("throw",1),i("return",2))},y(e,t,r,n)}function d(e,t){this.v=e,this.k=t}function v(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 b(e){for(var t=1;t 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n */\nasync function initEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey();\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n */\nfunction getEmbeddedKey() {\n const jwtKey = getItemWithExpiry(TURNKEY_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n */\nfunction setEmbeddedKey(targetKey) {\n setItemWithExpiry(\n TURNKEY_EMBEDDED_KEY,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n */\nfunction onResetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY);\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Encodes a Uint8Array into a base58-check-encoded string\n * Throws an error if the input is invalid or the checksum is invalid.\n * @param {Uint8Array} payload The raw payload to encode.\n * @return {Promise} The base58check-encoded string.\n */\nasync function base58CheckEncode(payload) {\n const hash1Buf = await crypto.subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n\n const hash2Buf = await crypto.subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n\n const checksum = hash2.slice(0, 4);\n\n const full = new Uint8Array(payload.length + 4);\n full.set(payload, 0);\n full.set(checksum, payload.length);\n\n return base58Encode(full);\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" 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 }\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n case \"BITCOIN_MAINNET_WIF\":\n case \"BITCOIN_TESTNET_WIF\": {\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const version = keyFormat === \"BITCOIN_MAINNET_WIF\" ? 0x80 : 0xef;\n const wifPayload = new Uint8Array(34);\n wifPayload[0] = version;\n wifPayload.set(privateKeyBytes, 1);\n wifPayload[33] = 0x01; // compressed flag\n\n return await base58CheckEncode(wifPayload);\n }\n case \"SUI_BECH32\": {\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const schemeFlag = 0x00; // ED25519 | We only support ED25519 keys for Sui currently\n const bech32Payload = new Uint8Array(1 + 32);\n bech32Payload[0] = schemeFlag;\n bech32Payload.set(privateKeyBytes, 1);\n\n return bech32.encode(\"suiprivkey\", bech32.toWords(bech32Payload));\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n base58CheckEncode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import \"./styles.css\";\nimport * as SharedTKHQ from \"@shared/turnkey-core.js\";\nimport * as nobleEd25519 from \"@noble/ed25519\";\nimport { sha512 } from \"@noble/hashes/sha2.js\";\n\nconst {\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58Encode,\n base58CheckEncode,\n encodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n p256JWKPrivateToPublic,\n setItemWithExpiry,\n onResetEmbeddedKey,\n setEmbeddedKey,\n getEmbeddedKey,\n generateTargetKey,\n initEmbeddedKey,\n logMessage,\n} = SharedTKHQ;\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n 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 if (validStyles.backgroundColor) {\n // Apply background color to document and body as well.\n document.documentElement.style.backgroundColor =\n validStyles.backgroundColor;\n document.body.style.backgroundColor = validStyles.backgroundColor;\n }\n\n validSettings[\"styles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\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 sha512(nobleEd25519.etc.concatBytes(...m));\n\n return nobleEd25519.getPublicKey(privateKeyHex);\n}\n\n/**\n * Returns a UTF-8 encoded wallet mnemonic + newline optional passphrase\n * from wallet bytes.\n * @param {Uint8Array} walletBytes\n */\nfunction encodeWallet(walletBytes) {\n const decoder = new TextDecoder(\"utf-8\");\n const wallet = decoder.decode(walletBytes);\n let mnemonic;\n let passphrase = null;\n\n if (wallet.includes(\"\\n\")) {\n const parts = wallet.split(\"\\n\");\n mnemonic = parts[0];\n passphrase = parts[1];\n } else {\n mnemonic = wallet;\n }\n\n return {\n mnemonic: mnemonic,\n passphrase: passphrase,\n };\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 (!Object.hasOwn(item, \"expiry\") || !Object.hasOwn(item, \"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\nexport {\n initEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getEmbeddedKey,\n setEmbeddedKey,\n onResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckEncode,\n encodeKey,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n getSettings,\n setSettings,\n logMessage,\n getItemWithExpiry,\n getEd25519PublicKey,\n applySettings,\n encodeWallet,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_OverloadYield","k","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_EMBEDDED_KEY","TURNKEY_SETTINGS","TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS","TURNKEY_EMBEDDED_KEY_ORIGIN","parentFrameMessageChannelPort","getSubtleCrypto","globalThis","crypto","subtle","window","global","isDoublyIframed","undefined","location","ancestorOrigins","parent","top","loadQuorumKey","_x","_loadQuorumKey","_regeneratorRuntime","mark","_callee","quorumPublic","wrap","_context","prev","next","Error","importKey","namedCurve","abrupt","sent","stop","initEmbeddedKey","_initEmbeddedKey","_callee3","_context3","getEmbeddedKey","generateTargetKey","setEmbeddedKey","_generateTargetKey","_callee4","p256key","_context4","generateKey","exportKey","privateKey","jwtKey","key","itemStr","localStorage","getItem","item","JSON","parse","hasOwnProperty","Date","getTime","expiry","removeItem","getItemWithExpiry","targetKey","setItemWithExpiry","stringify","onResetEmbeddedKey","setParentFrameMessageChannelPort","port","getSettings","settings","setSettings","setItem","ttl","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","concat","expectedZeroCount","zeroCount","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","fromDerSignature","derSignature","derSignatureBuf","index","rLength","sLength","rPadded","sPadded","verifyEnclaveSignature","_x3","_x4","_x5","_verifyEnclaveSignature","_callee5","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context5","prod","preprod","__TURNKEY_SIGNER_ENVIRONMENT__","verify","hash","sendMessageUp","type","requestId","message","postMessage","logMessage","content","messageLog","document","getElementById","createElement","innerText","appendChild","p256JWKPrivateToPublic","_x6","_p256JWKPrivateToPublic","_callee6","jwkPrivate","jwkPrivateCopy","publicKey","_context6","_objectSpread","key_ops","base58Encode","bytes","result","digits","carry","j","push","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","currentByte","reverse","base58CheckEncode","_x8","_base58CheckEncode","_callee8","payload","hash1Buf","hash1","hash2Buf","hash2","checksum","full","_context8","digest","set","encodeKey","_x11","_x12","_x13","_encodeKey","_callee10","privateKeyBytes","keyFormat","publicKeyBytes","concatenatedBytes","version","wifPayload","bech32Payload","_context10","t0","bech32","encode","toWords","console","warn","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","SharedTKHQ","applySettings","validSettings","settingsObj","keyDivTextarea","style","documentElement","body","getEd25519PublicKey","privateKeyHex","nobleEd25519","sha512Sync","_nobleEd25519$etc","sha512","concatBytes","encodeWallet","walletBytes","mnemonic","wallet","TextDecoder","decode","passphrase","includes","parts","split","hasOwn","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","TextEncoder","HpkeDecrypt","_HpkeDecrypt","ciphertextBuf","encappedKeyBuf","receiverPrivJwk","kemContext","receiverPriv","suite","recipientCtx","aad","res","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createRecipientContext","recipientKey","enc","info","open"],"sourceRoot":""} \ No newline at end of file diff --git a/export/dist/551.bundle.815c489ea784882a647b.js b/export/dist/551.bundle.815c489ea784882a647b.js new file mode 100644 index 0000000..48d589b --- /dev/null +++ b/export/dist/551.bundle.815c489ea784882a647b.js @@ -0,0 +1,3 @@ +/*! For license information please see 551.bundle.815c489ea784882a647b.js.LICENSE.txt */ +"use strict";(self.webpackChunkexport_tests=self.webpackChunkexport_tests||[]).push([[551],{275:(e,t,r)=>{r.d(t,{$C:()=>B,B_:()=>ne,Di:()=>H,Eh:()=>C,M8:()=>D,OG:()=>Z,Ql:()=>$,Rl:()=>te,Rx:()=>re,Sb:()=>z,VU:()=>W,Wq:()=>Y,Y$:()=>L,ZX:()=>V,Z_:()=>ue,b6:()=>P,cj:()=>K,eq:()=>R,fX:()=>J,g2:()=>ie,g8:()=>q,mt:()=>M,oc:()=>F,zU:()=>Q});var n=r(343);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function 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 a(e){for(var t=1;t=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(o(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 s(e,t,r,n,o){var i=p(e,t,r,n,o);return i.next().then(function(e){return e.done?e.value:i.next()})}function p(e,t,r,n,o){return new y(d().w(e,t,r,n),o||Promise)}function y(e,t){function r(n,o,i,a){try{var u=e[n](o),c=u.value;return c instanceof b?t.resolve(c.v).then(function(e){r("next",e,i,a)},function(e){r("throw",e,i,a)}):t.resolve(c).then(function(e){u.value=e,i(u)},function(e){return r("throw",e,i,a)})}catch(e){a(e)}}var n;this.next||(v(y.prototype),v(y.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),v(this,"_invoke",function(e,o,i){function a(){return new t(function(t,n){r(e,i,t,n)})}return n=n?n.then(a,a):a()},!0)}function d(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return v(f,"_invoke",function(r,n,o){var i,u,c,f=0,l=o||[],s=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return i=t,u=0,c=e,p.n=r,a}};function y(r,n){for(u=r,c=n,t=0;!s&&f&&!o&&t3?(o=d===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=e):i[0]<=y&&((o=r<2&&yn||n>d)&&(i[4]=r,i[5]=n,p.n=d,u=0))}if(o||r>1)return a;throw s=!0,n}return function(o,l,d){if(f>1)throw TypeError("Generator is already running");for(s&&1===l&&y(l,d),u=l,c=d;(t=u<2?e:c)||!s;){i||(u?u<3?(u>1&&(p.n=-1),y(u,c)):p.n=c:p.v=c);try{if(f=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,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=i.return)&&t.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=e}else if((t=(s=p.n<0)?c:r.call(n,p))!==a)break}catch(t){i=e,u=1,c=t}finally{f=1}}return{value:t,done:s}}}(r,o,i),!0),f}var a={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(v(t={},n,function(){return this}),t),s=f.prototype=u.prototype=Object.create(l);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,v(e,o,"GeneratorFunction")),e.prototype=Object.create(s),e}return c.prototype=f,v(s,"constructor",f),v(f,"constructor",c),c.displayName="GeneratorFunction",v(f,o,"GeneratorFunction"),v(s),v(s,o,"Generator"),v(s,n,function(){return this}),v(s,"toString",function(){return"[object Generator]"}),(d=function(){return{w:i,m:p}})()}function v(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}v=function(e,t,r,n){function i(t,r){v(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:(i("next",0),i("throw",1),i("return",2))},v(e,t,r,n)}function b(e,t){this.v=e,this.k=t}function h(e){return function(e){if(Array.isArray(e))return w(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||m(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 m(e,t){if(e){if("string"==typeof e)return w(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)?w(e,t):void 0}}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r1:window.parent!==window.top}function N(e){return T.apply(this,arguments)}function T(){return(T=x(c().mark(function e(t){var r;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(r=I()){e.next=3;break}throw new Error("WebCrypto subtle API is unavailable");case 3:return e.next=5,r.importKey("raw",t,{name:"ECDSA",namedCurve:"P-256"},!0,["verify"]);case 5:return e.abrupt("return",e.sent);case 6:case"end":return e.stop()}},e)}))).apply(this,arguments)}function C(){return U.apply(this,arguments)}function U(){return(U=x(c().mark(function e(){return c().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,$();case 4:if(null!==e.sent){e.next=10;break}return e.next=8,D();case 8:K(e.sent);case 10:case"end":return e.stop()}},e)}))).apply(this,arguments)}function D(){return G.apply(this,arguments)}function G(){return(G=x(c().mark(function e(){var t,r;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(t=I()){e.next=3;break}throw new Error("WebCrypto subtle API is unavailable");case 3:return e.next=5,t.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveBits"]);case 5:return r=e.sent,e.next=8,t.exportKey("jwk",r.privateKey);case 8:return e.abrupt("return",e.sent);case 9:case"end":return e.stop()}},e)}))).apply(this,arguments)}function $(){var e=function(e){var t=window.localStorage.getItem(e);if(!t)return null;var r=JSON.parse(t);return Object.prototype.hasOwnProperty.call(r,"expiry")&&Object.prototype.hasOwnProperty.call(r,"value")?(new Date).getTime()>r.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}(E);return e?JSON.parse(e):null}function K(e){B(E,JSON.stringify(e),S)}function R(){window.localStorage.removeItem(E),window.localStorage.removeItem(k)}function W(e){j=e}function M(){var e=window.localStorage.getItem(O);return e?JSON.parse(e):null}function F(e){window.localStorage.setItem(O,JSON.stringify(e))}function B(e,t,r){var n={value:t,expiry:(new Date).getTime()+r};window.localStorage.setItem(e,JSON.stringify(n))}function Y(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 H(e){return h(e).map(function(e){return e.toString(16).padStart(2,"0")}).join("")}function J(e,t){var r=t-e.length;if(r>0){var n=new Uint8Array(r).fill(0);return new Uint8Array([].concat(h(n),h(e)))}if(r<0){for(var o=-1*r,i=0,a=0;a0;)r.push(o%58),o=o/58|0}for(var a=0;a0;){var u=r[a];i=(u=void 0===u?i:58*u+i)>>8,r[a]=u%256,a++}}var c=n.concat(r.reverse());return new Uint8Array(c)}function ne(e){return oe.apply(this,arguments)}function oe(){return(oe=x(c().mark(function e(t){var r,n,o,i,a,u,f;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=I(),e.next=3,r.digest("SHA-256",t);case 3:return n=e.sent,o=new Uint8Array(n),e.next=7,r.digest("SHA-256",o);case 7:return i=e.sent,a=new Uint8Array(i),u=a.slice(0,4),(f=new Uint8Array(t.length+4)).set(t,0),f.set(u,t.length),e.abrupt("return",te(f));case 14:case"end":return e.stop()}},e)}))).apply(this,arguments)}function ie(e,t,r){return ae.apply(this,arguments)}function ae(){return(ae=x(c().mark(function e(t,r,o){var i,a,u,f;return c().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:e.t0=r,e.next="SOLANA"===e.t0?3:"HEXADECIMAL"===e.t0?13:"BITCOIN_MAINNET_WIF"===e.t0||"BITCOIN_TESTNET_WIF"===e.t0?14:"SUI_BECH32"===e.t0?24:31;break;case 3:if(o){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===o.length){e.next=9;break}throw new Error("invalid public key length. Expected 32 bytes. Got ".concat(o.length,"."));case 9:return(i=new Uint8Array(64)).set(t,0),i.set(o,32),e.abrupt("return",te(i));case 13:return e.abrupt("return","0x"+H(t));case 14:if(32===t.length){e.next=16;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 16:return a="BITCOIN_MAINNET_WIF"===r?128:239,(u=new Uint8Array(34))[0]=a,u.set(t,1),u[33]=1,e.next=23,ne(u);case 23:return e.abrupt("return",e.sent);case 24:if(32===t.length){e.next=26;break}throw new Error("invalid private key length. Expected 32 bytes. Got ".concat(t.length,"."));case 26:return(f=new Uint8Array(33))[0]=0,f.set(t,1),e.abrupt("return",n.I.encode("suiprivkey",n.I.toWords(f)));case 31:return console.warn("invalid key format: ".concat(r,". Defaulting to HEXADECIMAL.")),e.abrupt("return","0x"+H(t));case 33:case"end":return e.stop()}},e)}))).apply(this,arguments)}function ue(e,t){var r={},n={padding:"^(\\d+(px|em|%|rem) ?){1,4}$",margin:"^(\\d+(px|em|%|rem) ?){1,4}$",borderWidth:"^(\\d+(px|em|rem) ?){1,4}$",borderStyle:"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$",borderColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",borderRadius:"^(\\d+(px|em|%|rem) ?){1,4}$",fontSize:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$",fontWeight:"^(normal|bold|bolder|lighter|\\d{3})$",fontFamily:'^[^";<>]*$',color:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",labelColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",backgroundColor:"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)|hsla?\\(\\d{1,3}, \\d{1,3}%, \\d{1,3}%(, \\d?(\\.\\d{1,2})?)?\\))$",width:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",height:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$",maxWidth:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",maxHeight:"^(\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$",lineHeight:"^(\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$",boxShadow:"^(none|(\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\(\\d{1,3}, \\d{1,3}, \\d{1,3}(, \\d?(\\.\\d{1,2})?)?\\)) ?(inset)?)$",textAlign:"^(left|right|center|justify|initial|inherit)$",overflowWrap:"^(normal|break-word|anywhere)$",wordWrap:"^(normal|break-word)$",resize:"^(none|both|horizontal|vertical|block|inline)$"};return Object.entries(e).forEach(function(e){var t,o,i=(o=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,u=[],c=!0,f=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){f=!0,o=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(f)throw o}}return u}}(t,o)||m(t,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=i[0],u=i[1],c=a.trim();if(0===c.length)throw new Error("css style property cannot be empty");var f=n[c];if(!f)throw new Error('invalid or unsupported css style property: "'.concat(c,'"'));var l=new RegExp(f),s=u.trim();if(0==s.length)throw new Error('css style for "'.concat(c,'" is empty'));if(!l.test(s))throw new Error('invalid css style value for property "'.concat(c,'"'));r[c]=s}),r}},482:(e,t,r)=>{r.r(t),r.d(t,{additionalAssociatedData:()=>w,applySettings:()=>N,base58CheckEncode:()=>d,base58Decode:()=>p,base58Encode:()=>y,encodeKey:()=>v,encodeWallet:()=>C,fromDerSignature:()=>m,generateTargetKey:()=>A,getEd25519PublicKey:()=>T,getEmbeddedKey:()=>j,getItemWithExpiry:()=>U,getSettings:()=>u,initEmbeddedKey:()=>I,logMessage:()=>P,normalizePadding:()=>h,onResetEmbeddedKey:()=>S,p256JWKPrivateToPublic:()=>E,sendMessageUp:()=>f,setCryptoProvider:()=>_,setEmbeddedKey:()=>k,setItemWithExpiry:()=>O,setParentFrameMessageChannelPort:()=>b,setSettings:()=>c,uint8arrayFromHexString:()=>l,uint8arrayToHexString:()=>s,validateStyles:()=>x,verifyEnclaveSignature:()=>g});var n=r(275),o=r(598),i=r(348);function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rr.expiry?(window.localStorage.removeItem(e),null):r.value:(window.localStorage.removeItem(e),null)}},584:(e,t,r)=>{r.d(t,{u:()=>g});var n=r(275),o=r(255);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function a(){var e=p(),t=e.m(a),r=(Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__).constructor;function n(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===r||"GeneratorFunction"===(t.displayName||t.name))}var o={throw:1,return:2,break:3,continue:3};function i(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,i){return t.resultName=o,r(n.d,u(e),i)},finish:function(e){return r(n.f,e)}},r=function(e,r,o){n.p=t.prev,n.n=t.next;try{return e(r,o)}finally{t.next=n.n}}),t.resultName&&(t[t.resultName]=n.v,t.resultName=void 0),t.sent=n.v,t.next=n.n;try{return e.call(this,t)}finally{n.p=t.prev,n.n=t.next}}}return(a=function(){return{wrap:function(t,r,n,o){return e.w(i(t),r,n,o&&o.reverse())},isGeneratorFunction:n,mark:e.m,awrap:function(e,t){return new d(e,t)},AsyncIterator:s,async:function(e,t,r,o,a){return(n(t)?l:f)(i(e),t,r,o,a)},keys:c,values:u}})()}function u(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(i(e)+" is not iterable")}function c(e){var t=Object(e),r=[];for(var n in t)r.unshift(n);return function e(){for(;r.length;)if((n=r.pop())in t)return e.value=n,e.done=!1,e;return e.done=!0,e}}function f(e,t,r,n,o){var i=l(e,t,r,n,o);return i.next().then(function(e){return e.done?e.value:i.next()})}function l(e,t,r,n,o){return new s(p().w(e,t,r,n),o||Promise)}function s(e,t){function r(n,o,i,a){try{var u=e[n](o),c=u.value;return c instanceof d?t.resolve(c.v).then(function(e){r("next",e,i,a)},function(e){r("throw",e,i,a)}):t.resolve(c).then(function(e){u.value=e,i(u)},function(e){return r("throw",e,i,a)})}catch(e){a(e)}}var n;this.next||(y(s.prototype),y(s.prototype,"function"==typeof Symbol&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),y(this,"_invoke",function(e,o,i){function a(){return new t(function(t,n){r(e,i,t,n)})}return n=n?n.then(a,a):a()},!0)}function p(){var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return y(f,"_invoke",function(r,n,o){var i,u,c,f=0,l=o||[],s=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return i=t,u=0,c=e,p.n=r,a}};function y(r,n){for(u=r,c=n,t=0;!s&&f&&!o&&t3?(o=d===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=e):i[0]<=y&&((o=r<2&&yn||n>d)&&(i[4]=r,i[5]=n,p.n=d,u=0))}if(o||r>1)return a;throw s=!0,n}return function(o,l,d){if(f>1)throw TypeError("Generator is already running");for(s&&1===l&&y(l,d),u=l,c=d;(t=u<2?e:c)||!s;){i||(u?u<3?(u>1&&(p.n=-1),y(u,c)):p.n=c:p.v=c);try{if(f=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,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=i.return)&&t.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=e}else if((t=(s=p.n<0)?c:r.call(n,p))!==a)break}catch(t){i=e,u=1,c=t}finally{f=1}}return{value:t,done:s}}}(r,o,i),!0),f}var a={};function u(){}function c(){}function f(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(y(t={},n,function(){return this}),t),s=f.prototype=u.prototype=Object.create(l);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,y(e,o,"GeneratorFunction")),e.prototype=Object.create(s),e}return c.prototype=f,y(s,"constructor",f),y(f,"constructor",c),c.displayName="GeneratorFunction",y(f,o,"GeneratorFunction"),y(s),y(s,o,"Generator"),y(s,n,function(){return this}),y(s,"toString",function(){return"[object Generator]"}),(p=function(){return{w:i,m:d}})()}function y(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}y=function(e,t,r,n){function i(t,r){y(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:(i("next",0),i("throw",1),i("return",2))},y(e,t,r,n)}function d(e,t){this.v=e,this.k=t}function v(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 b(e){for(var t=1;t 1;\n } else {\n return window.parent !== window.top;\n }\n}\n\n/*\n * Loads the quorum public key as a CryptoKey.\n */\nasync function loadQuorumKey(quorumPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.importKey(\n \"raw\",\n quorumPublic,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n [\"verify\"]\n );\n}\n\n/*\n * Load a key to encrypt to as a CryptoKey and return it as a JSON Web Key.\n */\nasync function loadTargetKey(targetPublic) {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const targetKey = await subtle.importKey(\n \"raw\",\n targetPublic,\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n\n return await subtle.exportKey(\"jwk\", targetKey);\n}\n\n/**\n * Creates a new public/private key pair and persists it in localStorage\n */\nasync function initEmbeddedKey() {\n if (isDoublyIframed()) {\n throw new Error(\"Doubly iframed\");\n }\n const retrievedKey = await getEmbeddedKey();\n if (retrievedKey === null) {\n const targetKey = await generateTargetKey();\n setEmbeddedKey(targetKey);\n }\n // Nothing to do, key is correctly initialized!\n}\n\n/*\n * Generate a key to encrypt to and export it as a JSON Web Key.\n */\nasync function generateTargetKey() {\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n const p256key = await subtle.generateKey(\n {\n name: \"ECDH\",\n namedCurve: \"P-256\",\n },\n true,\n [\"deriveBits\"]\n );\n\n return await subtle.exportKey(\"jwk\", p256key.privateKey);\n}\n\n/**\n * Gets the current embedded private key JWK. Returns `null` if not found.\n */\nfunction getEmbeddedKey() {\n const jwtKey = getItemWithExpiry(TURNKEY_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the embedded private key JWK with the default expiration time.\n * @param {JsonWebKey} targetKey\n */\nfunction setEmbeddedKey(targetKey) {\n setItemWithExpiry(\n TURNKEY_EMBEDDED_KEY,\n JSON.stringify(targetKey),\n TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS\n );\n}\n\n/**\n * Gets the current target embedded private key JWK. Returns `null` if not found.\n */\nfunction getTargetEmbeddedKey() {\n const jwtKey = window.localStorage.getItem(TURNKEY_TARGET_EMBEDDED_KEY);\n return jwtKey ? JSON.parse(jwtKey) : null;\n}\n\n/**\n * Sets the target embedded public key JWK.\n * @param {JsonWebKey} targetKey\n */\nfunction setTargetEmbeddedKey(targetKey) {\n window.localStorage.setItem(\n TURNKEY_TARGET_EMBEDDED_KEY,\n JSON.stringify(targetKey)\n );\n}\n\n/**\n * Resets the current embedded private key JWK.\n */\nfunction onResetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY);\n window.localStorage.removeItem(TURNKEY_EMBEDDED_KEY_ORIGIN);\n}\n\n/**\n * Resets the current target embedded private key JWK.\n */\nfunction resetTargetEmbeddedKey() {\n window.localStorage.removeItem(TURNKEY_TARGET_EMBEDDED_KEY);\n}\n\nfunction setParentFrameMessageChannelPort(port) {\n parentFrameMessageChannelPort = port;\n}\n\n/**\n * Gets the current settings.\n */\nfunction getSettings() {\n const settings = window.localStorage.getItem(TURNKEY_SETTINGS);\n return settings ? JSON.parse(settings) : null;\n}\n\n/**\n * Sets the settings object.\n * @param {Object} settings\n */\nfunction setSettings(settings) {\n window.localStorage.setItem(TURNKEY_SETTINGS, JSON.stringify(settings));\n}\n\n/**\n * Set an item in localStorage with an expiration time\n * @param {string} key\n * @param {string} value\n * @param {number} ttl expiration time in milliseconds\n */\nfunction setItemWithExpiry(key, value, ttl) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ttl,\n };\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\n/**\n * Get an item from localStorage. Returns `null` and\n * removes the item from localStorage if expired or\n * expiry time is missing.\n * @param {string} key\n */\nfunction getItemWithExpiry(key) {\n const itemStr = window.localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n if (\n !Object.prototype.hasOwnProperty.call(item, \"expiry\") ||\n !Object.prototype.hasOwnProperty.call(item, \"value\")\n ) {\n window.localStorage.removeItem(key);\n return null;\n }\n const now = new Date();\n if (now.getTime() > item.expiry) {\n window.localStorage.removeItem(key);\n return null;\n }\n return item.value;\n}\n\n/**\n * Takes a hex string (e.g. \"e4567ab\" or \"0xe4567ab\") and returns an array buffer (Uint8Array)\n * @param {string} hexString - Hex string with or without \"0x\" prefix\n * @returns {Uint8Array}\n */\nfunction uint8arrayFromHexString(hexString) {\n if (!hexString || typeof hexString !== \"string\") {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n\n // Remove 0x prefix if present\n const hexWithoutPrefix =\n hexString.startsWith(\"0x\") || hexString.startsWith(\"0X\")\n ? hexString.slice(2)\n : hexString;\n\n var hexRegex = /^[0-9A-Fa-f]+$/;\n if (hexWithoutPrefix.length % 2 != 0 || !hexRegex.test(hexWithoutPrefix)) {\n throw new Error(\"cannot create uint8array from invalid hex string\");\n }\n return new Uint8Array(\n hexWithoutPrefix.match(/../g).map((h) => parseInt(h, 16))\n );\n}\n\n/**\n * Takes a Uint8Array and returns a hex string\n * @param {Uint8Array} buffer\n * @return {string}\n */\nfunction uint8arrayToHexString(buffer) {\n return [...buffer].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n/**\n * Function to normalize padding of byte array with 0's to a target length\n */\nfunction normalizePadding(byteArray, targetLength) {\n const paddingLength = targetLength - byteArray.length;\n\n // Add leading 0's to array\n if (paddingLength > 0) {\n const padding = new Uint8Array(paddingLength).fill(0);\n return new Uint8Array([...padding, ...byteArray]);\n }\n\n // Remove leading 0's from array\n if (paddingLength < 0) {\n const expectedZeroCount = paddingLength * -1;\n let zeroCount = 0;\n for (let i = 0; i < expectedZeroCount && i < byteArray.length; i++) {\n if (byteArray[i] === 0) {\n zeroCount++;\n }\n }\n // Check if the number of zeros found equals the number of zeroes expected\n if (zeroCount !== expectedZeroCount) {\n throw new Error(\n `invalid number of starting zeroes. Expected number of zeroes: ${expectedZeroCount}. Found: ${zeroCount}.`\n );\n }\n return byteArray.slice(expectedZeroCount, expectedZeroCount + targetLength);\n }\n return byteArray;\n}\n\n/**\n * Additional Associated Data (AAD) in the format dictated by the enclave_encrypt crate.\n */\nfunction additionalAssociatedData(senderPubBuf, receiverPubBuf) {\n const s = Array.from(new Uint8Array(senderPubBuf));\n const r = Array.from(new Uint8Array(receiverPubBuf));\n return new Uint8Array([...s, ...r]);\n}\n\n/**\n * Converts an ASN.1 DER-encoded ECDSA signature to the raw format that WebCrypto uses.\n */\nfunction fromDerSignature(derSignature) {\n const derSignatureBuf = uint8arrayFromHexString(derSignature);\n\n // Check and skip the sequence tag (0x30)\n let index = 2;\n\n // Parse 'r' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for r\"\n );\n }\n index++; // Move past the INTEGER tag\n const rLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const r = derSignatureBuf.slice(index, index + rLength);\n index += rLength; // Move to the start of s\n\n // Parse 's' and check for integer tag (0x02)\n if (derSignatureBuf[index] !== 0x02) {\n throw new Error(\n \"failed to convert DER-encoded signature: invalid tag for s\"\n );\n }\n index++; // Move past the INTEGER tag\n const sLength = derSignatureBuf[index];\n index++; // Move past the length byte\n const s = derSignatureBuf.slice(index, index + sLength);\n\n // Normalize 'r' and 's' to 32 bytes each\n const rPadded = normalizePadding(r, 32);\n const sPadded = normalizePadding(s, 32);\n\n // Concatenate and return the raw signature\n return new Uint8Array([...rPadded, ...sPadded]);\n}\n\n/**\n * Function to verify enclave signature on import bundle received from the server.\n * @param {string} enclaveQuorumPublic uncompressed public key for the quorum key which produced the signature\n * @param {string} publicSignature signature bytes encoded as a hexadecimal string\n * @param {string} signedData signed bytes encoded as a hexadecimal string. This could be public key bytes directly, or JSON-encoded bytes\n */\nasync function verifyEnclaveSignature(\n enclaveQuorumPublic,\n publicSignature,\n signedData\n) {\n /** Turnkey Signer enclave's public keys */\n const TURNKEY_SIGNERS_ENCLAVES = {\n prod: \"04cf288fe433cc4e1aa0ce1632feac4ea26bf2f5a09dcfe5a42c398e06898710330f0572882f4dbdf0f5304b8fc8703acd69adca9a4bbf7f5d00d20a5e364b2569\",\n preprod:\n \"04f3422b8afbe425d6ece77b8d2469954715a2ff273ab7ac89f1ed70e0a9325eaa1698b4351fd1b23734e65c0b6a86b62dd49d70b37c94606aac402cbd84353212\",\n };\n\n // Use window.__TURNKEY_SIGNER_ENVIRONMENT__ if available (for testing), otherwise use the webpack replacement\n const environment =\n (typeof window !== \"undefined\" && window.__TURNKEY_SIGNER_ENVIRONMENT__) ||\n \"__TURNKEY_SIGNER_ENVIRONMENT__\";\n const TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY =\n TURNKEY_SIGNERS_ENCLAVES[environment];\n\n if (TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY === undefined) {\n throw new Error(\n `Configuration error: TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY is undefined`\n );\n }\n\n // todo(olivia): throw error if enclave quorum public is null once server changes are deployed\n if (enclaveQuorumPublic) {\n if (enclaveQuorumPublic !== TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY) {\n throw new Error(\n `enclave quorum public keys from client and bundle do not match. Client: ${TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY}. Bundle: ${enclaveQuorumPublic}.`\n );\n }\n }\n\n const encryptionQuorumPublicBuf = new Uint8Array(\n uint8arrayFromHexString(TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY)\n );\n const quorumKey = await loadQuorumKey(encryptionQuorumPublicBuf);\n if (!quorumKey) {\n throw new Error(\"failed to load quorum key\");\n }\n\n // The ECDSA signature is ASN.1 DER encoded but WebCrypto uses raw format\n const publicSignatureBuf = fromDerSignature(publicSignature);\n const signedDataBuf = uint8arrayFromHexString(signedData);\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n return await subtle.verify(\n { name: \"ECDSA\", hash: \"SHA-256\" },\n quorumKey,\n publicSignatureBuf,\n signedDataBuf\n );\n}\n\n/**\n * Function to send a message.\n *\n * If this page is embedded as an iframe we'll send a postMessage\n * in one of two ways depending on the version of @turnkey/iframe-stamper:\n * 1. newer versions (>=v2.1.0) pass a MessageChannel MessagePort from the parent frame for postMessages.\n * 2. older versions ( 0) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n // Convert digits to a base58 string\n for (let k = 0; k < digits.length; k++) {\n result = alphabet[digits[k]] + result;\n }\n\n // Add '1' for each leading 0 byte\n for (let i = 0; bytes[i] === 0 && i < bytes.length - 1; i++) {\n result = \"1\" + result;\n }\n return result;\n}\n\n/**\n * Decodes a base58-encoded string into a buffer\n * This function throws an error when the string contains invalid characters.\n * @param {string} s The base58-encoded string.\n * @return {Uint8Array} The decoded buffer.\n */\nfunction base58Decode(s) {\n // See https://en.bitcoin.it/wiki/Base58Check_encoding\n var alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\n var decodedBytes = [];\n var leadingZeros = [];\n for (var i = 0; i < s.length; i++) {\n if (alphabet.indexOf(s[i]) === -1) {\n throw new Error(`cannot base58-decode: ${s[i]} isn't a valid character`);\n }\n var carry = alphabet.indexOf(s[i]);\n\n // If the current base58 digit is 0, append a 0 byte.\n // \"i == leadingZeros.length\" can only be true if we have not seen non-zero bytes so far.\n // If we had seen a non-zero byte, carry wouldn't be 0, and i would be strictly more than `leadingZeros.length`\n if (carry == 0 && i === leadingZeros.length) {\n leadingZeros.push(0);\n }\n\n var j = 0;\n while (j < decodedBytes.length || carry > 0) {\n var currentByte = decodedBytes[j];\n\n // shift the current byte 58 units and add the carry amount\n // (or just add the carry amount if this is a new byte -- undefined case)\n if (currentByte === undefined) {\n currentByte = carry;\n } else {\n currentByte = currentByte * 58 + carry;\n }\n\n // find the new carry amount (1-byte shift of current byte value)\n carry = currentByte >> 8;\n // reset the current byte to the remainder (the carry amount will pass on the overflow)\n decodedBytes[j] = currentByte % 256;\n j++;\n }\n }\n\n var result = leadingZeros.concat(decodedBytes.reverse());\n return new Uint8Array(result);\n}\n\n/**\n * Decodes a base58check-encoded string and verifies the checksum.\n * Base58Check encoding includes a 4-byte checksum at the end to detect errors.\n * The checksum is the first 4 bytes of SHA256(SHA256(payload)).\n * This function throws an error if the checksum is invalid.\n * @param {string} s The base58check-encoded string.\n * @return {Promise} The decoded payload (without checksum).\n */\nasync function base58CheckDecode(s) {\n const decoded = base58Decode(s);\n\n if (decoded.length < 5) {\n throw new Error(\n `invalid base58check length: expected at least 5 bytes, got ${decoded.length}`\n );\n }\n\n const payload = decoded.subarray(0, decoded.length - 4);\n const checksum = decoded.subarray(decoded.length - 4);\n\n const subtle = getSubtleCrypto();\n if (!subtle) {\n throw new Error(\"WebCrypto subtle API is unavailable\");\n }\n\n // Compute double SHA256 hash\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n const computedChecksum = hash2.subarray(0, 4);\n\n // Verify checksum\n const mismatch =\n (checksum[0] ^ computedChecksum[0]) |\n (checksum[1] ^ computedChecksum[1]) |\n (checksum[2] ^ computedChecksum[2]) |\n (checksum[3] ^ computedChecksum[3]);\n if (mismatch !== 0) {\n throw new Error(\"invalid base58check checksum\");\n }\n\n return payload;\n}\n\n/**\n * Encodes a Uint8Array into a Base58Check-encoded string.\n * Computes a 4-byte checksum as the first 4 bytes of SHA256(SHA256(payload))\n * and appends it to the payload before base58 encoding.\n * @param {Uint8Array} payload The raw payload to encode.\n * @return {Promise} The Base58Check-encoded string.\n */\nasync function base58CheckEncode(payload) {\n const subtle = getSubtleCrypto();\n\n const hash1Buf = await subtle.digest(\"SHA-256\", payload);\n const hash1 = new Uint8Array(hash1Buf);\n\n const hash2Buf = await subtle.digest(\"SHA-256\", hash1);\n const hash2 = new Uint8Array(hash2Buf);\n\n const checksum = hash2.slice(0, 4);\n\n const full = new Uint8Array(payload.length + 4);\n full.set(payload, 0);\n full.set(checksum, payload.length);\n\n return base58Encode(full);\n}\n\n/**\n * Returns private key bytes from a private key, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {string} privateKey\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" or \"SOLANA\"\n * @return {Promise}\n */\nasync function decodeKey(privateKey, keyFormat) {\n switch (keyFormat) {\n case \"SOLANA\": {\n const decodedKeyBytes = base58Decode(privateKey);\n if (decodedKeyBytes.length !== 64) {\n throw new Error(\n `invalid key length. Expected 64 bytes. Got ${decodedKeyBytes.length}.`\n );\n }\n return decodedKeyBytes.subarray(0, 32);\n }\n case \"HEXADECIMAL\":\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n case \"BITCOIN_MAINNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0x80 = mainnet\n if (version !== 0x80) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0x80 (mainnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"BITCOIN_TESTNET_WIF\": {\n const payload = await base58CheckDecode(privateKey);\n\n const version = payload[0];\n const keyAndFlags = payload.subarray(1);\n\n // 0xEF = testnet\n if (version !== 0xef) {\n throw new Error(\n `invalid WIF version byte: ${version}. Expected 0xEF (testnet).`\n );\n }\n\n // Check for common mistake: uncompressed keys\n if (keyAndFlags.length === 32) {\n throw new Error(\"uncompressed WIF keys not supported\");\n }\n\n // Validate compressed format\n if (keyAndFlags.length !== 33 || keyAndFlags[32] !== 0x01) {\n throw new Error(\"invalid WIF format: expected compressed private key\");\n }\n\n return keyAndFlags.subarray(0, 32);\n }\n case \"SUI_BECH32\": {\n const { prefix, words } = bech32.decode(privateKey);\n\n if (prefix !== \"suiprivkey\") {\n throw new Error(\n `invalid SUI private key human-readable part (HRP): expected \"suiprivkey\"`\n );\n }\n\n const bytes = bech32.fromWords(words);\n if (bytes.length !== 33) {\n throw new Error(\n `invalid SUI private key length: expected 33 bytes, got ${bytes.length}`\n );\n }\n\n const schemeFlag = bytes[0];\n const privkey = bytes.slice(1);\n\n // schemeFlag = 0 is Ed25519; We currently only support Ed25519 keys for SUI.\n if (schemeFlag !== 0) {\n throw new Error(\n `invalid SUI private key scheme flag: expected 0 (Ed25519). Turnkey only supports Ed25519 keys for SUI.`\n );\n }\n\n return new Uint8Array(privkey);\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n if (privateKey.startsWith(\"0x\")) {\n return uint8arrayFromHexString(privateKey.slice(2));\n }\n return uint8arrayFromHexString(privateKey);\n }\n}\n\n/**\n * Returns a private key from private key bytes, represented in\n * the encoding and format specified by `keyFormat`. Defaults to\n * hex-encoding if `keyFormat` isn't passed.\n * @param {Uint8Array} privateKeyBytes\n * @param {string} keyFormat Can be \"HEXADECIMAL\", \"SUI_BECH32\", \"BITCOIN_MAINNET_WIF\", \"BITCOIN_TESTNET_WIF\" 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 }\n case \"HEXADECIMAL\":\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n case \"BITCOIN_MAINNET_WIF\":\n case \"BITCOIN_TESTNET_WIF\": {\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const version = keyFormat === \"BITCOIN_MAINNET_WIF\" ? 0x80 : 0xef;\n const wifPayload = new Uint8Array(34);\n wifPayload[0] = version;\n wifPayload.set(privateKeyBytes, 1);\n wifPayload[33] = 0x01; // compressed flag\n\n return await base58CheckEncode(wifPayload);\n }\n case \"SUI_BECH32\": {\n if (privateKeyBytes.length !== 32) {\n throw new Error(\n `invalid private key length. Expected 32 bytes. Got ${privateKeyBytes.length}.`\n );\n }\n\n const schemeFlag = 0x00; // ED25519 | We only support ED25519 keys for Sui currently\n const bech32Payload = new Uint8Array(1 + 32);\n bech32Payload[0] = schemeFlag;\n bech32Payload.set(privateKeyBytes, 1);\n\n return bech32.encode(\"suiprivkey\", bech32.toWords(bech32Payload));\n }\n default:\n console.warn(\n `invalid key format: ${keyFormat}. Defaulting to HEXADECIMAL.`\n );\n return \"0x\" + uint8arrayToHexString(privateKeyBytes);\n }\n}\n\n// Helper to parse a private key into a Solana base58 private key.\n// To be used if a wallet account is exported without the `SOLANA` address format.\nfunction parsePrivateKey(privateKey) {\n if (Array.isArray(privateKey)) {\n return new Uint8Array(privateKey);\n }\n\n if (typeof privateKey === \"string\") {\n // Remove 0x prefix if present\n if (privateKey.startsWith(\"0x\")) {\n privateKey = privateKey.slice(2);\n }\n\n // Check if it's hex-formatted correctly (i.e. 64 hex chars)\n if (privateKey.length === 64 && /^[0-9a-fA-F]+$/.test(privateKey)) {\n return uint8arrayFromHexString(privateKey);\n }\n\n // Otherwise assume it's base58 format (for Solana)\n try {\n return base58Decode(privateKey);\n } catch (error) {\n throw new Error(\n \"Invalid private key format. Use hex (64 chars) or base58 format.\"\n );\n }\n }\n\n throw new Error(\"Private key must be a string (hex/base58) or number array\");\n}\n\n/**\n * Function to validate and sanitize the styles object using the accepted map of style keys and values (as regular expressions).\n * Any invalid style throws an error. Returns an object of valid styles.\n * @param {Object} styles\n * @param {HTMLElement} element - Optional element parameter (for import frame)\n * @return {Object}\n */\nfunction validateStyles(styles, element) {\n const validStyles = {};\n\n const cssValidationRegex = {\n padding: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n margin: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n borderWidth: \"^(\\\\d+(px|em|rem) ?){1,4}$\",\n borderStyle:\n \"^(none|solid|dashed|dotted|double|groove|ridge|inset|outset)$\",\n borderColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n borderRadius: \"^(\\\\d+(px|em|%|rem) ?){1,4}$\",\n fontSize: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax))$\",\n fontWeight: \"^(normal|bold|bolder|lighter|\\\\d{3})$\",\n fontFamily: '^[^\";<>]*$', // checks for the absence of some characters that could lead to CSS/HTML injection\n color:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n labelColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n backgroundColor:\n \"^(transparent|inherit|initial|#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)|hsla?\\\\(\\\\d{1,3}, \\\\d{1,3}%, \\\\d{1,3}%(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\))$\",\n width: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n height: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|auto)$\",\n maxWidth: \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n maxHeight:\n \"^(\\\\d+(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|none)$\",\n lineHeight:\n \"^(\\\\d+(\\\\.\\\\d+)?(px|em|rem|%|vh|vw|in|cm|mm|pt|pc|ex|ch|vmin|vmax)|normal)$\",\n boxShadow:\n \"^(none|(\\\\d+(px|em|rem) ?){2,4} (#[0-9a-f]{3,8}|rgba?\\\\(\\\\d{1,3}, \\\\d{1,3}, \\\\d{1,3}(, \\\\d?(\\\\.\\\\d{1,2})?)?\\\\)) ?(inset)?)$\",\n textAlign: \"^(left|right|center|justify|initial|inherit)$\",\n overflowWrap: \"^(normal|break-word|anywhere)$\",\n wordWrap: \"^(normal|break-word)$\",\n resize: \"^(none|both|horizontal|vertical|block|inline)$\",\n };\n\n Object.entries(styles).forEach(([property, value]) => {\n const styleProperty = property.trim();\n if (styleProperty.length === 0) {\n throw new Error(\"css style property cannot be empty\");\n }\n const styleRegexStr = cssValidationRegex[styleProperty];\n if (!styleRegexStr) {\n throw new Error(\n `invalid or unsupported css style property: \"${styleProperty}\"`\n );\n }\n const styleRegex = new RegExp(styleRegexStr);\n const styleValue = value.trim();\n if (styleValue.length == 0) {\n throw new Error(`css style for \"${styleProperty}\" is empty`);\n }\n const isValidStyle = styleRegex.test(styleValue);\n if (!isValidStyle) {\n throw new Error(\n `invalid css style value for property \"${styleProperty}\"`\n );\n }\n validStyles[styleProperty] = styleValue;\n });\n\n return validStyles;\n}\n\n// Export all shared functions\nexport {\n setCryptoProvider,\n getSubtleCrypto,\n isDoublyIframed,\n loadQuorumKey,\n loadTargetKey,\n initEmbeddedKey,\n generateTargetKey,\n getEmbeddedKey,\n setEmbeddedKey,\n getTargetEmbeddedKey,\n setTargetEmbeddedKey,\n onResetEmbeddedKey,\n resetTargetEmbeddedKey,\n setParentFrameMessageChannelPort,\n getSettings,\n setSettings,\n setItemWithExpiry,\n getItemWithExpiry,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n normalizePadding,\n additionalAssociatedData,\n fromDerSignature,\n verifyEnclaveSignature,\n sendMessageUp,\n logMessage,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckDecode,\n base58CheckEncode,\n decodeKey,\n encodeKey,\n parsePrivateKey,\n validateStyles,\n};\n","import * as SharedTKHQ from \"@shared/turnkey-core.js\";\nimport * as nobleEd25519 from \"@noble/ed25519\";\nimport { sha512 } from \"@noble/hashes/sha2.js\";\n\nconst {\n getSettings,\n setSettings,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n base58Decode,\n base58Encode,\n base58CheckEncode,\n encodeKey,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n p256JWKPrivateToPublic,\n setItemWithExpiry,\n onResetEmbeddedKey,\n setEmbeddedKey,\n getEmbeddedKey,\n generateTargetKey,\n initEmbeddedKey,\n logMessage,\n setCryptoProvider,\n} = SharedTKHQ;\n\n/**\n * Function to apply settings on this page. For now, the only settings that can be applied\n * are for \"styles\". Upon successful application, return the valid, sanitized settings JSON string.\n * @param {string} settings\n * @return {string}\n */\nfunction applySettings(settings) {\n const validSettings = {};\n 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 if (validStyles.backgroundColor) {\n // Apply background color to document and body as well.\n document.documentElement.style.backgroundColor =\n validStyles.backgroundColor;\n document.body.style.backgroundColor = validStyles.backgroundColor;\n }\n\n validSettings[\"styles\"] = validStyles;\n }\n\n return JSON.stringify(validSettings);\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 sha512(nobleEd25519.etc.concatBytes(...m));\n\n return nobleEd25519.getPublicKey(privateKeyHex);\n}\n\n/**\n * Returns a UTF-8 encoded wallet mnemonic + newline optional passphrase\n * from wallet bytes.\n * @param {Uint8Array} walletBytes\n */\nfunction encodeWallet(walletBytes) {\n const decoder = new TextDecoder(\"utf-8\");\n const wallet = decoder.decode(walletBytes);\n let mnemonic;\n let passphrase = null;\n\n if (wallet.includes(\"\\n\")) {\n const parts = wallet.split(\"\\n\");\n mnemonic = parts[0];\n passphrase = parts[1];\n } else {\n mnemonic = wallet;\n }\n\n return {\n mnemonic: mnemonic,\n passphrase: passphrase,\n };\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 (!Object.hasOwn(item, \"expiry\") || !Object.hasOwn(item, \"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\nexport {\n initEmbeddedKey,\n generateTargetKey,\n setItemWithExpiry,\n getEmbeddedKey,\n setEmbeddedKey,\n onResetEmbeddedKey,\n p256JWKPrivateToPublic,\n base58Encode,\n base58Decode,\n base58CheckEncode,\n encodeKey,\n sendMessageUp,\n uint8arrayFromHexString,\n uint8arrayToHexString,\n setParentFrameMessageChannelPort,\n normalizePadding,\n fromDerSignature,\n additionalAssociatedData,\n verifyEnclaveSignature,\n validateStyles,\n getSettings,\n setSettings,\n logMessage,\n setCryptoProvider,\n getItemWithExpiry,\n getEd25519PublicKey,\n applySettings,\n encodeWallet,\n};\n","/**\n * Crypto Utilities - Shared\n * Contains HPKE encryption and decryption functions\n */\n\nimport {\n p256JWKPrivateToPublic,\n additionalAssociatedData,\n uint8arrayToHexString,\n} from \"./turnkey-core.js\";\nimport {\n CipherSuite,\n DhkemP256HkdfSha256,\n HkdfSha256,\n Aes256Gcm,\n} from \"@hpke/core\";\n\n// Pre-compute const (for perf)\nconst TURNKEY_HPKE_INFO = new TextEncoder().encode(\"turnkey_hpke\");\n\n/**\n * Decrypt the ciphertext (ArrayBuffer) given an encapsulation key (ArrayBuffer)\n * and the receivers private key (JSON Web Key).\n */\nexport async function HpkeDecrypt({\n ciphertextBuf,\n encappedKeyBuf,\n receiverPrivJwk,\n}) {\n const kemContext = new DhkemP256HkdfSha256();\n var receiverPriv = await kemContext.importKey(\n \"jwk\",\n { ...receiverPrivJwk },\n false\n );\n\n var suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n var recipientCtx = await suite.createRecipientContext({\n recipientKey: receiverPriv,\n enc: encappedKeyBuf,\n info: TURNKEY_HPKE_INFO,\n });\n\n var receiverPubBuf = await p256JWKPrivateToPublic(receiverPrivJwk);\n var aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n var res;\n try {\n res = await recipientCtx.open(ciphertextBuf, aad);\n } catch (e) {\n throw new Error(\n \"unable to decrypt bundle using embedded key. the bundle may be incorrect. failed with error: \" +\n e.toString()\n );\n }\n return res;\n}\n\n/**\n * Encrypt plaintext using HPKE with the receiver's public key.\n * @param {Object} params\n * @param {Uint8Array} params.plaintextBuf - Plaintext to encrypt\n * @param {JsonWebKey} params.receiverPubJwk - Receiver's public key in JWK format\n * @returns {Promise} JSON stringified encrypted bundle with encappedPublic and ciphertext\n */\nexport async function HpkeEncrypt({ plaintextBuf, receiverPubJwk }) {\n const kemContext = new DhkemP256HkdfSha256();\n const receiverPub = await kemContext.importKey(\n \"jwk\",\n { ...receiverPubJwk },\n true\n );\n\n const suite = new CipherSuite({\n kem: kemContext,\n kdf: new HkdfSha256(),\n aead: new Aes256Gcm(),\n });\n\n const senderCtx = await suite.createSenderContext({\n recipientPublicKey: receiverPub,\n info: TURNKEY_HPKE_INFO,\n });\n\n // Need to import the key again as a JWK to export as a raw key, the format needed to\n // create the aad with the newly generated raw encapped key.\n const receiverPubCryptoKey = await crypto.subtle.importKey(\n \"jwk\",\n receiverPubJwk,\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\",\n },\n true,\n []\n );\n const receiverPubRaw = await crypto.subtle.exportKey(\n \"raw\",\n receiverPubCryptoKey\n );\n const receiverPubBuf = new Uint8Array(receiverPubRaw);\n\n const encappedKeyBuf = new Uint8Array(senderCtx.enc);\n\n const aad = additionalAssociatedData(encappedKeyBuf, receiverPubBuf);\n\n var ciphertextBuf;\n try {\n ciphertextBuf = await senderCtx.seal(plaintextBuf, aad);\n } catch (e) {\n throw new Error(\"failed to encrypt import bundle: \" + e.toString());\n }\n\n const ciphertextHex = uint8arrayToHexString(new Uint8Array(ciphertextBuf));\n const encappedKeyBufHex = uint8arrayToHexString(encappedKeyBuf);\n const encryptedBundle = JSON.stringify({\n encappedPublic: encappedKeyBufHex,\n ciphertext: ciphertextHex,\n });\n return encryptedBundle;\n}\n"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","_OverloadYield","k","_toConsumableArray","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","toString","slice","constructor","name","test","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","TURNKEY_EMBEDDED_KEY","TURNKEY_SETTINGS","TURNKEY_EMBEDDED_KEY_TTL_IN_MILLIS","TURNKEY_EMBEDDED_KEY_ORIGIN","parentFrameMessageChannelPort","cryptoProviderOverride","getSubtleCrypto","subtle","globalThis","crypto","window","global","setCryptoProvider","cryptoProvider","isDoublyIframed","undefined","location","ancestorOrigins","parent","top","loadQuorumKey","_x","_loadQuorumKey","_regeneratorRuntime","mark","_callee","quorumPublic","wrap","_context","prev","next","Error","importKey","namedCurve","abrupt","sent","stop","initEmbeddedKey","_initEmbeddedKey","_callee3","_context3","getEmbeddedKey","generateTargetKey","setEmbeddedKey","_generateTargetKey","_callee4","p256key","_context4","generateKey","exportKey","privateKey","jwtKey","key","itemStr","localStorage","getItem","item","JSON","parse","hasOwnProperty","Date","getTime","expiry","removeItem","getItemWithExpiry","targetKey","setItemWithExpiry","stringify","onResetEmbeddedKey","setParentFrameMessageChannelPort","port","getSettings","settings","setSettings","setItem","ttl","uint8arrayFromHexString","hexString","hexWithoutPrefix","startsWith","Uint8Array","match","map","h","parseInt","uint8arrayToHexString","buffer","x","padStart","join","normalizePadding","byteArray","targetLength","paddingLength","padding","fill","concat","expectedZeroCount","zeroCount","additionalAssociatedData","senderPubBuf","receiverPubBuf","s","fromDerSignature","derSignature","derSignatureBuf","index","rLength","sLength","rPadded","sPadded","verifyEnclaveSignature","_x3","_x4","_x5","_verifyEnclaveSignature","_callee5","enclaveQuorumPublic","publicSignature","signedData","TURNKEY_SIGNERS_ENCLAVES","environment","TURNKEY_SIGNER_ENCLAVE_QUORUM_PUBLIC_KEY","encryptionQuorumPublicBuf","quorumKey","publicSignatureBuf","signedDataBuf","_context5","prod","preprod","__TURNKEY_SIGNER_ENVIRONMENT__","verify","hash","sendMessageUp","type","requestId","message","postMessage","logMessage","content","messageLog","document","getElementById","createElement","innerText","appendChild","p256JWKPrivateToPublic","_x6","_p256JWKPrivateToPublic","_callee6","jwkPrivate","jwkPrivateCopy","publicKey","_context6","_objectSpread","key_ops","base58Encode","bytes","result","digits","carry","j","push","base58Decode","alphabet","decodedBytes","leadingZeros","indexOf","currentByte","reverse","base58CheckEncode","_x8","_base58CheckEncode","_callee8","payload","hash1Buf","hash1","hash2Buf","hash2","checksum","full","_context8","digest","set","encodeKey","_x11","_x12","_x13","_encodeKey","_callee10","privateKeyBytes","keyFormat","publicKeyBytes","concatenatedBytes","version","wifPayload","bech32Payload","_context10","t0","bech32","encode","toWords","console","warn","validateStyles","styles","element","validStyles","cssValidationRegex","margin","borderWidth","borderStyle","borderColor","borderRadius","fontSize","fontWeight","fontFamily","color","labelColor","backgroundColor","width","height","maxWidth","maxHeight","lineHeight","boxShadow","textAlign","overflowWrap","wordWrap","resize","entries","forEach","_ref","_ref2","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","property","styleProperty","trim","styleRegexStr","styleRegex","RegExp","styleValue","SharedTKHQ","applySettings","validSettings","settingsObj","keyDivTextarea","style","documentElement","body","getEd25519PublicKey","privateKeyHex","nobleEd25519","sha512Sync","_nobleEd25519$etc","sha512","concatBytes","encodeWallet","walletBytes","mnemonic","wallet","TextDecoder","decode","passphrase","includes","parts","split","hasOwn","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_defineProperty","getOwnPropertyDescriptors","defineProperties","_typeof","toPrimitive","String","_toPrimitive","_toPropertyKey","TURNKEY_HPKE_INFO","TextEncoder","HpkeDecrypt","_HpkeDecrypt","ciphertextBuf","encappedKeyBuf","receiverPrivJwk","kemContext","receiverPriv","suite","recipientCtx","aad","res","DhkemP256HkdfSha256","CipherSuite","kem","kdf","HkdfSha256","aead","Aes256Gcm","createRecipientContext","recipientKey","enc","info","open"],"sourceRoot":""} \ No newline at end of file diff --git a/export/dist/index.html b/export/dist/index.html index b5c99c5..a9496a7 100644 --- a/export/dist/index.html +++ b/export/dist/index.html @@ -1 +1 @@ -Turnkey Export
\ No newline at end of file +Turnkey Export
\ No newline at end of file diff --git a/export/dist/index.styles.a4288d6084137b3233b5.css.map b/export/dist/index.styles.a4288d6084137b3233b5.css.map deleted file mode 100644 index be46f16..0000000 --- a/export/dist/index.styles.a4288d6084137b3233b5.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.styles.a4288d6084137b3233b5.css","mappings":"AAAA;EACE,kBAAkB;EAClB;sDACoD;EACpD,iBAAiB;EACjB,YAAY;AACd;AACA;EACE,qBAAqB;EACrB,UAAU;AACZ;AACA;EACE,gBAAgB;AAClB;AACA;;EAEE,WAAW;EACX,aAAa;EACb,8CAA8C;EAC9C,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,oCAAoC;EACpC,kBAAkB;AACpB;AACA;EACE,oCAAoC;AACtC;AACA;EACE,YAAY;EACZ,UAAU;EACV,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,oCAAoC;EACpC,kCAAkC;EAClC,eAAe;EACf,eAAe;AACjB;AACA;;EAEE,YAAY;EACZ,UAAU;EACV,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,iCAAiC;EACjC,iCAAiC;EACjC,eAAe;EACf,eAAe;AACjB;AACA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,cAAc;AAChB;AACA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;AACvB;AACA;EACE,aAAa;AACf","sources":["webpack://export-tests/./src/styles.css"],"sourcesContent":["body {\n text-align: center;\n font-family: \"Lucida Sans\", \"Lucida Sans Regular\", \"Lucida Grande\",\n \"Lucida Sans Unicode\", Geneva, Verdana, sans-serif;\n max-width: 1024px;\n margin: auto;\n}\nlabel {\n display: inline-block;\n width: 8em;\n}\nform {\n text-align: left;\n}\ninput[type=\"text\"],\nselect {\n width: 40em;\n margin: 0.5em;\n font-family: \"Courier New\", Courier, monospace;\n font-size: 1em;\n height: 1.8em;\n color: rgb(18, 87, 18);\n border: 1px rgb(217, 240, 221) solid;\n border-radius: 4px;\n}\ninput:disabled {\n background-color: rgb(239, 243, 240);\n}\n#reset {\n color: white;\n width: 7em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(187, 100, 100);\n border: 1px rgb(112, 42, 42) solid;\n cursor: pointer;\n display: inline;\n}\n#inject-key,\n#inject-wallet {\n color: white;\n width: 7em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(50, 44, 44);\n border: 1px rgb(33, 33, 33) solid;\n cursor: pointer;\n display: inline;\n}\n#message-log {\n border: 1px #2a2828 solid;\n padding: 0 0.7em;\n border-radius: 4px;\n margin-top: 2em;\n max-width: 800px;\n margin: auto;\n display: block;\n}\n#message-log p {\n font-size: 0.9em;\n text-align: left;\n word-break: break-all;\n}\n.hidden {\n display: none;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/export/dist/standalone.html b/export/dist/standalone.html index b1fddc5..1d44e3a 100644 --- a/export/dist/standalone.html +++ b/export/dist/standalone.html @@ -1 +1 @@ -Turnkey Export (Standalone Mode)

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).




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 (Standalone Mode)

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).




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/dist/index.styles.a4288d6084137b3233b5.css b/export/dist/standalone.styles.3b0cc66661f0bb609373.css similarity index 91% rename from export/dist/index.styles.a4288d6084137b3233b5.css rename to export/dist/standalone.styles.3b0cc66661f0bb609373.css index 7021092..038dc5a 100644 --- a/export/dist/index.styles.a4288d6084137b3233b5.css +++ b/export/dist/standalone.styles.3b0cc66661f0bb609373.css @@ -5,13 +5,17 @@ body { max-width: 1024px; margin: auto; } + +form { + text-align: left; + margin-bottom: 2rem; +} + label { display: inline-block; width: 8em; } -form { - text-align: left; -} + input[type="text"], select { width: 40em; @@ -23,9 +27,11 @@ select { border: 1px rgb(217, 240, 221) solid; border-radius: 4px; } + input:disabled { background-color: rgb(239, 243, 240); } + #reset { color: white; width: 7em; @@ -37,10 +43,11 @@ input:disabled { cursor: pointer; display: inline; } + #inject-key, #inject-wallet { color: white; - width: 7em; + width: 10em; font-size: 1em; padding: 0.38em; border-radius: 4px; @@ -49,6 +56,7 @@ input:disabled { cursor: pointer; display: inline; } + #message-log { border: 1px #2a2828 solid; padding: 0 0.7em; @@ -58,14 +66,16 @@ input:disabled { margin: auto; display: block; } + #message-log p { font-size: 0.9em; text-align: left; word-break: break-all; } + .hidden { display: none; } -/*# sourceMappingURL=index.styles.a4288d6084137b3233b5.css.map*/ \ No newline at end of file +/*# sourceMappingURL=standalone.styles.3b0cc66661f0bb609373.css.map*/ \ No newline at end of file diff --git a/export/dist/standalone.styles.3b0cc66661f0bb609373.css.map b/export/dist/standalone.styles.3b0cc66661f0bb609373.css.map new file mode 100644 index 0000000..6c83406 --- /dev/null +++ b/export/dist/standalone.styles.3b0cc66661f0bb609373.css.map @@ -0,0 +1 @@ +{"version":3,"file":"standalone.styles.3b0cc66661f0bb609373.css","mappings":"AAAA;EACE,kBAAkB;EAClB;sDACoD;EACpD,iBAAiB;EACjB,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;EACrB,UAAU;AACZ;;AAEA;;EAEE,WAAW;EACX,aAAa;EACb,8CAA8C;EAC9C,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,oCAAoC;EACpC,kBAAkB;AACpB;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,YAAY;EACZ,UAAU;EACV,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,oCAAoC;EACpC,kCAAkC;EAClC,eAAe;EACf,eAAe;AACjB;;AAEA;;EAEE,YAAY;EACZ,WAAW;EACX,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,iCAAiC;EACjC,iCAAiC;EACjC,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;AACvB;;AAEA;EACE,aAAa;AACf","sources":["webpack://export-tests/./src/standalone-styles.css"],"sourcesContent":["body {\n text-align: center;\n font-family: \"Lucida Sans\", \"Lucida Sans Regular\", \"Lucida Grande\",\n \"Lucida Sans Unicode\", Geneva, Verdana, sans-serif;\n max-width: 1024px;\n margin: auto;\n}\n\nform {\n text-align: left;\n margin-bottom: 2rem;\n}\n\nlabel {\n display: inline-block;\n width: 8em;\n}\n\ninput[type=\"text\"],\nselect {\n width: 40em;\n margin: 0.5em;\n font-family: \"Courier New\", Courier, monospace;\n font-size: 1em;\n height: 1.8em;\n color: rgb(18, 87, 18);\n border: 1px rgb(217, 240, 221) solid;\n border-radius: 4px;\n}\n\ninput:disabled {\n background-color: rgb(239, 243, 240);\n}\n\n#reset {\n color: white;\n width: 7em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(187, 100, 100);\n border: 1px rgb(112, 42, 42) solid;\n cursor: pointer;\n display: inline;\n}\n\n#inject-key,\n#inject-wallet {\n color: white;\n width: 10em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(50, 44, 44);\n border: 1px rgb(33, 33, 33) solid;\n cursor: pointer;\n display: inline;\n}\n\n#message-log {\n border: 1px #2a2828 solid;\n padding: 0 0.7em;\n border-radius: 4px;\n margin-top: 2em;\n max-width: 800px;\n margin: auto;\n display: block;\n}\n\n#message-log p {\n font-size: 0.9em;\n text-align: left;\n word-break: break-all;\n}\n\n.hidden {\n display: none;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/export/dist/standalone.styles.d2d0a2c3b41689154751.css b/export/dist/standalone.styles.d2d0a2c3b41689154751.css deleted file mode 100644 index d7980c7..0000000 --- a/export/dist/standalone.styles.d2d0a2c3b41689154751.css +++ /dev/null @@ -1,150 +0,0 @@ -body { - text-align: center; - font-family: "Lucida Sans", "Lucida Sans Regular", "Lucida Grande", - "Lucida Sans Unicode", Geneva, Verdana, sans-serif; - max-width: 1024px; - margin: auto; -} - -form { - text-align: left; - margin-bottom: 2rem; -} - -label { - display: inline-block; - width: 8em; -} - -input[type="text"], -select { - width: 40em; - margin: 0.5em; - font-family: "Courier New", Courier, monospace; - font-size: 1em; - height: 1.8em; - color: rgb(18, 87, 18); - border: 1px rgb(217, 240, 221) solid; - border-radius: 4px; -} - -input:disabled { - background-color: rgb(239, 243, 240); -} - -#reset { - color: white; - width: 7em; - font-size: 1em; - padding: 0.38em; - border-radius: 4px; - background-color: rgb(187, 100, 100); - border: 1px rgb(112, 42, 42) solid; - cursor: pointer; - display: inline; -} - -#inject-key, -#inject-wallet { - color: white; - width: 10em; - font-size: 1em; - padding: 0.38em; - border-radius: 4px; - background-color: rgb(50, 44, 44); - border: 1px rgb(33, 33, 33) solid; - cursor: pointer; - display: inline; -} - -#message-log { - border: 1px #2a2828 solid; - padding: 0 0.7em; - border-radius: 4px; - margin-top: 2em; - max-width: 800px; - margin: auto; - display: block; -} - -#message-log p { - font-size: 0.9em; - text-align: left; - word-break: break-all; -} - -.hidden { - display: none; -} - -body { - text-align: center; - font-family: "Lucida Sans", "Lucida Sans Regular", "Lucida Grande", - "Lucida Sans Unicode", Geneva, Verdana, sans-serif; - max-width: 1024px; - margin: auto; -} -label { - display: inline-block; - width: 8em; -} -form { - text-align: left; -} -input[type="text"], -select { - width: 40em; - margin: 0.5em; - font-family: "Courier New", Courier, monospace; - font-size: 1em; - height: 1.8em; - color: rgb(18, 87, 18); - border: 1px rgb(217, 240, 221) solid; - border-radius: 4px; -} -input:disabled { - background-color: rgb(239, 243, 240); -} -#reset { - color: white; - width: 7em; - font-size: 1em; - padding: 0.38em; - border-radius: 4px; - background-color: rgb(187, 100, 100); - border: 1px rgb(112, 42, 42) solid; - cursor: pointer; - display: inline; -} -#inject-key, -#inject-wallet { - color: white; - width: 7em; - font-size: 1em; - padding: 0.38em; - border-radius: 4px; - background-color: rgb(50, 44, 44); - border: 1px rgb(33, 33, 33) solid; - cursor: pointer; - display: inline; -} -#message-log { - border: 1px #2a2828 solid; - padding: 0 0.7em; - border-radius: 4px; - margin-top: 2em; - max-width: 800px; - margin: auto; - display: block; -} -#message-log p { - font-size: 0.9em; - text-align: left; - word-break: break-all; -} -.hidden { - display: none; -} - - -/*# sourceMappingURL=standalone.styles.d2d0a2c3b41689154751.css.map*/ \ No newline at end of file diff --git a/export/dist/standalone.styles.d2d0a2c3b41689154751.css.map b/export/dist/standalone.styles.d2d0a2c3b41689154751.css.map deleted file mode 100644 index ff9f6d6..0000000 --- a/export/dist/standalone.styles.d2d0a2c3b41689154751.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"standalone.styles.d2d0a2c3b41689154751.css","mappings":"AAAA;EACE,kBAAkB;EAClB;sDACoD;EACpD,iBAAiB;EACjB,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;EACrB,UAAU;AACZ;;AAEA;;EAEE,WAAW;EACX,aAAa;EACb,8CAA8C;EAC9C,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,oCAAoC;EACpC,kBAAkB;AACpB;;AAEA;EACE,oCAAoC;AACtC;;AAEA;EACE,YAAY;EACZ,UAAU;EACV,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,oCAAoC;EACpC,kCAAkC;EAClC,eAAe;EACf,eAAe;AACjB;;AAEA;;EAEE,YAAY;EACZ,WAAW;EACX,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,iCAAiC;EACjC,iCAAiC;EACjC,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;AACvB;;AAEA;EACE,aAAa;AACf;;AC7EA;EACE,kBAAkB;EAClB;sDACoD;EACpD,iBAAiB;EACjB,YAAY;AACd;AACA;EACE,qBAAqB;EACrB,UAAU;AACZ;AACA;EACE,gBAAgB;AAClB;AACA;;EAEE,WAAW;EACX,aAAa;EACb,8CAA8C;EAC9C,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,oCAAoC;EACpC,kBAAkB;AACpB;AACA;EACE,oCAAoC;AACtC;AACA;EACE,YAAY;EACZ,UAAU;EACV,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,oCAAoC;EACpC,kCAAkC;EAClC,eAAe;EACf,eAAe;AACjB;AACA;;EAEE,YAAY;EACZ,UAAU;EACV,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,iCAAiC;EACjC,iCAAiC;EACjC,eAAe;EACf,eAAe;AACjB;AACA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,cAAc;AAChB;AACA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;AACvB;AACA;EACE,aAAa;AACf","sources":["webpack://export-tests/./src/standalone-styles.css","webpack://export-tests/./src/styles.css"],"sourcesContent":["body {\n text-align: center;\n font-family: \"Lucida Sans\", \"Lucida Sans Regular\", \"Lucida Grande\",\n \"Lucida Sans Unicode\", Geneva, Verdana, sans-serif;\n max-width: 1024px;\n margin: auto;\n}\n\nform {\n text-align: left;\n margin-bottom: 2rem;\n}\n\nlabel {\n display: inline-block;\n width: 8em;\n}\n\ninput[type=\"text\"],\nselect {\n width: 40em;\n margin: 0.5em;\n font-family: \"Courier New\", Courier, monospace;\n font-size: 1em;\n height: 1.8em;\n color: rgb(18, 87, 18);\n border: 1px rgb(217, 240, 221) solid;\n border-radius: 4px;\n}\n\ninput:disabled {\n background-color: rgb(239, 243, 240);\n}\n\n#reset {\n color: white;\n width: 7em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(187, 100, 100);\n border: 1px rgb(112, 42, 42) solid;\n cursor: pointer;\n display: inline;\n}\n\n#inject-key,\n#inject-wallet {\n color: white;\n width: 10em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(50, 44, 44);\n border: 1px rgb(33, 33, 33) solid;\n cursor: pointer;\n display: inline;\n}\n\n#message-log {\n border: 1px #2a2828 solid;\n padding: 0 0.7em;\n border-radius: 4px;\n margin-top: 2em;\n max-width: 800px;\n margin: auto;\n display: block;\n}\n\n#message-log p {\n font-size: 0.9em;\n text-align: left;\n word-break: break-all;\n}\n\n.hidden {\n display: none;\n}\n","body {\n text-align: center;\n font-family: \"Lucida Sans\", \"Lucida Sans Regular\", \"Lucida Grande\",\n \"Lucida Sans Unicode\", Geneva, Verdana, sans-serif;\n max-width: 1024px;\n margin: auto;\n}\nlabel {\n display: inline-block;\n width: 8em;\n}\nform {\n text-align: left;\n}\ninput[type=\"text\"],\nselect {\n width: 40em;\n margin: 0.5em;\n font-family: \"Courier New\", Courier, monospace;\n font-size: 1em;\n height: 1.8em;\n color: rgb(18, 87, 18);\n border: 1px rgb(217, 240, 221) solid;\n border-radius: 4px;\n}\ninput:disabled {\n background-color: rgb(239, 243, 240);\n}\n#reset {\n color: white;\n width: 7em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(187, 100, 100);\n border: 1px rgb(112, 42, 42) solid;\n cursor: pointer;\n display: inline;\n}\n#inject-key,\n#inject-wallet {\n color: white;\n width: 7em;\n font-size: 1em;\n padding: 0.38em;\n border-radius: 4px;\n background-color: rgb(50, 44, 44);\n border: 1px rgb(33, 33, 33) solid;\n cursor: pointer;\n display: inline;\n}\n#message-log {\n border: 1px #2a2828 solid;\n padding: 0 0.7em;\n border-radius: 4px;\n margin-top: 2em;\n max-width: 800px;\n margin: auto;\n display: block;\n}\n#message-log p {\n font-size: 0.9em;\n text-align: left;\n word-break: break-all;\n}\n.hidden {\n display: none;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/export/index.test.js b/export/index.test.js index e3280b8..983c8cf 100644 --- a/export/index.test.js +++ b/export/index.test.js @@ -1,6 +1,7 @@ import "@testing-library/jest-dom"; import * as crypto from "crypto"; import * as TKHQ from "./src/turnkey-core.js"; +import { bech32 } from "bech32"; describe("TKHQ", () => { beforeEach(() => { @@ -34,7 +35,7 @@ describe("TKHQ", () => { }, 600); // Wait for 600ms to ensure the item has expired // Returns null if getItemWithExpiry is called for item without expiry - dom.window.localStorage.setItem("k", JSON.stringify({ value: "v" })); + window.localStorage.setItem("k", JSON.stringify({ value: "v" })); item = TKHQ.getItemWithExpiry("k"); expect(item).toBeNull(); }); @@ -141,10 +142,10 @@ describe("TKHQ", () => { it("encodes sui bech32 private key correctly", async () => { const keySui = "suiprivkey1qpj5xd9396rxsu7h45tzccalhuf95e4pygls3ps9txszn9ywpwsnznaeq0l"; - const { words } = TKHQ.decodeBech32(keySui); - const keySuiBytes = TKHQ.bech32FromWords(words).subarray(1); // remove 1 byte scheme flag - expect(keySuiBytes.length).toEqual(32); - const encodedKey = await TKHQ.encodeKey(keySuiBytes, "SUI_BECH32"); + const { words } = bech32.decode(keySui); + const keyBytes = Uint8Array.from(bech32.fromWords(words)).subarray(1); // remove 1 byte scheme flag + expect(keyBytes.length).toEqual(32); + const encodedKey = await TKHQ.encodeKey(keyBytes, "SUI_BECH32"); expect(encodedKey).toEqual(keySui); }); diff --git a/export/jest.config.js b/export/jest.config.js index ffcfa55..bfc19ba 100644 --- a/export/jest.config.js +++ b/export/jest.config.js @@ -1,5 +1,16 @@ +const path = require("path"); + module.exports = { clearMocks: true, + testEnvironment: "jsdom", + setupFiles: ["/jest.setup.js"], setupFilesAfterEnv: ["regenerator-runtime/runtime"], testPathIgnorePatterns: ["/node_modules/"], + transformIgnorePatterns: [ + "/node_modules/(?!(@noble/ed25519|@noble/hashes|@hpke/core)/)", + ], + modulePaths: ["/node_modules"], + moduleNameMapper: { + "^@shared/(.*)$": path.resolve(__dirname, "../shared/$1"), + }, }; diff --git a/export/jest.setup.js b/export/jest.setup.js new file mode 100644 index 0000000..0d33ea4 --- /dev/null +++ b/export/jest.setup.js @@ -0,0 +1,9 @@ +const { TextEncoder, TextDecoder } = require("util"); + +if (typeof global.TextEncoder === "undefined") { + global.TextEncoder = TextEncoder; +} + +if (typeof global.TextDecoder === "undefined") { + global.TextDecoder = TextDecoder; +} diff --git a/export/src/turnkey-core.js b/export/src/turnkey-core.js index fc09180..fe89a44 100644 --- a/export/src/turnkey-core.js +++ b/export/src/turnkey-core.js @@ -1,4 +1,3 @@ -import "./styles.css"; import * as SharedTKHQ from "@shared/turnkey-core.js"; import * as nobleEd25519 from "@noble/ed25519"; import { sha512 } from "@noble/hashes/sha2.js"; @@ -27,6 +26,7 @@ const { generateTargetKey, initEmbeddedKey, logMessage, + setCryptoProvider, } = SharedTKHQ; /** @@ -151,6 +151,7 @@ export { getSettings, setSettings, logMessage, + setCryptoProvider, getItemWithExpiry, getEd25519PublicKey, applySettings,