@php-wasm/web 1.1.2 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/index.cjs +10 -10
  2. package/index.cjs.map +1 -1
  3. package/index.js +522 -620
  4. package/index.js.map +1 -1
  5. package/lib/index.d.ts +1 -2
  6. package/lib/tls/utils.d.ts +0 -2
  7. package/package.json +9 -8
  8. package/php/asyncify/7_2_34/php_7_2.wasm +0 -0
  9. package/php/asyncify/7_3_33/php_7_3.wasm +0 -0
  10. package/php/asyncify/7_4_33/php_7_4.wasm +0 -0
  11. package/php/asyncify/8_0_30/php_8_0.wasm +0 -0
  12. package/php/asyncify/8_1_23/php_8_1.wasm +0 -0
  13. package/php/asyncify/8_2_10/php_8_2.wasm +0 -0
  14. package/php/asyncify/8_3_0/php_8_3.wasm +0 -0
  15. package/php/asyncify/8_4_0/php_8_4.wasm +0 -0
  16. package/php/asyncify/php_7_2.js +2 -2
  17. package/php/asyncify/php_7_3.js +2 -2
  18. package/php/asyncify/php_7_4.js +2 -2
  19. package/php/asyncify/php_8_0.js +2 -2
  20. package/php/asyncify/php_8_1.js +4 -4
  21. package/php/asyncify/php_8_2.js +2 -2
  22. package/php/asyncify/php_8_3.js +2 -2
  23. package/php/asyncify/php_8_4.js +2 -2
  24. package/php/jspi/7_2_34/php_7_2.wasm +0 -0
  25. package/php/jspi/7_3_33/php_7_3.wasm +0 -0
  26. package/php/jspi/7_4_33/php_7_4.wasm +0 -0
  27. package/php/jspi/8_0_30/php_8_0.wasm +0 -0
  28. package/php/jspi/8_1_23/php_8_1.wasm +0 -0
  29. package/php/jspi/8_2_10/php_8_2.wasm +0 -0
  30. package/php/jspi/8_3_0/php_8_3.wasm +0 -0
  31. package/php/jspi/8_4_0/php_8_4.wasm +0 -0
  32. package/php/jspi/php_7_2.js +2 -2
  33. package/php/jspi/php_7_3.js +2 -2
  34. package/php/jspi/php_7_4.js +2 -2
  35. package/php/jspi/php_8_0.js +2 -2
  36. package/php/jspi/php_8_1.js +2 -2
  37. package/php/jspi/php_8_2.js +2 -2
  38. package/php/jspi/php_8_3.js +2 -2
  39. package/php/jspi/php_8_4.js +2 -2
  40. package/lib/api.d.ts +0 -17
package/index.cjs CHANGED
@@ -1,21 +1,21 @@
1
- "use strict";var De=Object.create;var Y=Object.defineProperty;var We=Object.getOwnPropertyDescriptor;var be=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,Pe=Object.prototype.hasOwnProperty;var Be=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of be(e))!Pe.call(s,n)&&n!==t&&Y(s,n,{get:()=>e[n],enumerable:!(r=We(e,n))||r.enumerable});return s};var A=(s,e,t)=>(t=s!=null?De(Re(s)):{},Be(e||!s||!s.__esModule?Y(t,"default",{value:s,enumerable:!0}):t,s));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("@php-wasm/universal"),Ue=require("comlink"),ve=require("wasm-feature-detect"),M=require("@php-wasm/logger"),Z=require("@php-wasm/web-service-worker"),N=require("@php-wasm/util"),Me=require("@php-wasm/fs-journal");function Ne(s){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const t in s)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(s,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>s[t]})}}return e.default=s,Object.freeze(e)}const p=Ne(Ue);function xe(s,e=void 0){Ce();const t=s instanceof Worker?s:p.windowEndpoint(s,e),r=p.wrap(t),n=G(r);return new Proxy(n,{get:(i,a)=>a==="isConnected"?async()=>{for(;;)try{await ke(r.isConnected(),200);break}catch{}}:r[a]})}async function ke(s,e){return new Promise((t,r)=>{setTimeout(r,e),s.then(t)})}function qe(s,e){Ce();const t=Promise.resolve();let r,n;const i=new Promise((c,S)=>{r=c,n=S}),a=G(s),_=new Proxy(a,{get:(c,S)=>S==="isConnected"?()=>t:S==="isReady"?()=>i:S in c?c[S]:e==null?void 0:e[S]});return p.expose(_,typeof window<"u"?p.windowEndpoint(self.parent):void 0),[r,n,_]}let J=!1;function Ce(){if(J)return;J=!0,p.transferHandlers.set("EVENT",{canHandle:t=>t instanceof CustomEvent,serialize:t=>[{detail:t.detail},[]],deserialize:t=>t}),p.transferHandlers.set("FUNCTION",{canHandle:t=>typeof t=="function",serialize(t){const{port1:r,port2:n}=new MessageChannel;return p.expose(t,r),[n,[n]]},deserialize(t){return t.start(),p.wrap(t)}}),p.transferHandlers.set("PHPResponse",{canHandle:t=>typeof t=="object"&&t!==null&&"headers"in t&&"bytes"in t&&"errors"in t&&"exitCode"in t&&"httpStatusCode"in t,serialize(t){return[t.toRawData(),[]]},deserialize(t){return w.PHPResponse.fromRawData(t)}});const s=p.transferHandlers.get("throw"),e=s==null?void 0:s.serialize;s.serialize=({value:t})=>{const r=e({value:t});return t.response&&(r[0].value.response=t.response),t.source&&(r[0].value.source=t.source),r}}function G(s){return new Proxy(s,{get(e,t){switch(typeof e[t]){case"function":return(...r)=>e[t](...r);case"object":return e[t]===null?e[t]:G(e[t]);case"undefined":case"number":case"string":return e[t];default:return p.proxy(e[t])}}})}async function le(s=w.LatestSupportedPHPVersion){if(await ve.jspi())switch(s){case"8.4":return await import("./php/jspi/php_8_4.js");case"8.3":return await import("./php/jspi/php_8_3.js");case"8.2":return await import("./php/jspi/php_8_2.js");case"8.1":return await import("./php/jspi/php_8_1.js");case"8.0":return await import("./php/jspi/php_8_0.js");case"7.4":return await import("./php/jspi/php_7_4.js");case"7.3":return await import("./php/jspi/php_7_3.js");case"7.2":return await import("./php/jspi/php_7_2.js")}else switch(s){case"8.4":return await import("./php/asyncify/php_8_4.js");case"8.3":return await import("./php/asyncify/php_8_3.js");case"8.2":return await import("./php/asyncify/php_8_2.js");case"8.1":return await import("./php/asyncify/php_8_1.js");case"8.0":return await import("./php/asyncify/php_8_0.js");case"7.4":return await import("./php/asyncify/php_7_4.js");case"7.3":return await import("./php/asyncify/php_7_3.js");case"7.2":return await import("./php/asyncify/php_7_2.js")}throw new Error(`Unsupported PHP version ${s}`)}function y(s){return Object.fromEntries(Object.entries(s).map(([e,t])=>[t,e]))}function H(s){let e=0;s.forEach(n=>e+=n.length);const t=new Uint8Array(e);let r=0;return s.forEach(n=>{t.set(n,r),r+=n.length}),t}function U(s){return H(s.map(e=>new Uint8Array(e))).buffer}function W(s){return new Uint8Array([s>>8&255,s&255])}function m(s){return new Uint8Array([s>>16&255,s>>8&255,s&255])}function X(s){const e=new ArrayBuffer(8);return new DataView(e).setBigUint64(0,BigInt(s),!1),new Uint8Array(e)}class K{constructor(e){this.offset=0,this.buffer=e,this.view=new DataView(e)}readUint8(){const e=this.view.getUint8(this.offset);return this.offset+=1,e}readUint16(){const e=this.view.getUint16(this.offset);return this.offset+=2,e}readUint32(){const e=this.view.getUint32(this.offset);return this.offset+=4,e}readUint8Array(e){const t=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,new Uint8Array(t)}isFinished(){return this.offset>=this.buffer.byteLength}}class x{constructor(e){this.offset=0,this.buffer=new ArrayBuffer(e),this.uint8Array=new Uint8Array(this.buffer),this.view=new DataView(this.buffer)}writeUint8(e){this.view.setUint8(this.offset,e),this.offset+=1}writeUint16(e){this.view.setUint16(this.offset,e),this.offset+=2}writeUint32(e){this.view.setUint32(this.offset,e),this.offset+=4}writeUint8Array(e){this.uint8Array.set(e,this.offset),this.offset+=e.length}}const P={server_name:0,max_fragment_length:1,client_certificate_url:2,trusted_ca_keys:3,truncated_hmac:4,status_request:5,user_mapping:6,client_authz:7,server_authz:8,cert_type:9,supported_groups:10,ec_point_formats:11,srp:12,signature_algorithms:13,use_srtp:14,heartbeat:15,application_layer_protocol_negotiation:16,status_request_v2:17,signed_certificate_timestamp:18,client_certificate_type:19,server_certificate_type:20,padding:21,encrypt_then_mac:22,extended_master_secret:23,token_binding:24,cached_info:25,tls_its:26,compress_certificate:27,record_size_limit:28,pwd_protect:29,pwo_clear:30,password_salt:31,ticket_pinning:32,tls_cert_with_extern_psk:33,delegated_credential:34,session_ticket:35,TLMSP:36,TLMSP_proxying:37,TLMSP_delegate:38,supported_ekt_ciphers:39,pre_shared_key:41,early_data:42,supported_versions:43,cookie:44,psk_key_exchange_modes:45,reserved:46,certificate_authorities:47,oid_filters:48,post_handshake_auth:49,signature_algorithms_cert:50,key_share:51,transparency_info:52,connection_id:54},Oe=y(P),he={host_name:0},Fe=y(he);class ue{static decodeFromClient(e){const t=new DataView(e.buffer);let r=0;const n=t.getUint16(r);r+=2;const i=[];for(;r<n+2;){const a=e[r];r+=1;const _=t.getUint16(r);r+=2;const c=e.slice(r,r+_);switch(r+=_,a){case he.host_name:i.push({name_type:Fe[a],name:{host_name:new TextDecoder().decode(c)}});break;default:throw new Error(`Unsupported name type ${a}`)}}return{server_name_list:i}}static encodeForClient(e){if(e!=null&&e.server_name_list.length)throw new Error("Encoding non-empty lists for ClientHello is not supported yet. Only empty lists meant for ServerHello are supported today.");const t=new x(4);return t.writeUint16(P.server_name),t.writeUint16(0),t.uint8Array}}const Ae={TLS1_CK_PSK_WITH_RC4_128_SHA:138,TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA:139,TLS1_CK_PSK_WITH_AES_128_CBC_SHA:140,TLS1_CK_PSK_WITH_AES_256_CBC_SHA:141,TLS1_CK_DHE_PSK_WITH_RC4_128_SHA:142,TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA:143,TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA:144,TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA:145,TLS1_CK_RSA_PSK_WITH_RC4_128_SHA:146,TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA:147,TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA:148,TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA:149,TLS1_CK_PSK_WITH_AES_128_GCM_SHA256:168,TLS1_CK_PSK_WITH_AES_256_GCM_SHA384:169,TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256:170,TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384:171,TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256:172,TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384:173,TLS1_CK_PSK_WITH_AES_128_CBC_SHA256:174,TLS1_CK_PSK_WITH_AES_256_CBC_SHA384:175,TLS1_CK_PSK_WITH_NULL_SHA256:176,TLS1_CK_PSK_WITH_NULL_SHA384:177,TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256:178,TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384:179,TLS1_CK_DHE_PSK_WITH_NULL_SHA256:180,TLS1_CK_DHE_PSK_WITH_NULL_SHA384:181,TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256:182,TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384:183,TLS1_CK_RSA_PSK_WITH_NULL_SHA256:184,TLS1_CK_RSA_PSK_WITH_NULL_SHA384:185,TLS1_CK_PSK_WITH_NULL_SHA:44,TLS1_CK_DHE_PSK_WITH_NULL_SHA:45,TLS1_CK_RSA_PSK_WITH_NULL_SHA:46,TLS1_CK_RSA_WITH_AES_128_SHA:47,TLS1_CK_DH_DSS_WITH_AES_128_SHA:48,TLS1_CK_DH_RSA_WITH_AES_128_SHA:49,TLS1_CK_DHE_DSS_WITH_AES_128_SHA:50,TLS1_CK_DHE_RSA_WITH_AES_128_SHA:51,TLS1_CK_ADH_WITH_AES_128_SHA:52,TLS1_CK_RSA_WITH_AES_256_SHA:53,TLS1_CK_DH_DSS_WITH_AES_256_SHA:54,TLS1_CK_DH_RSA_WITH_AES_256_SHA:55,TLS1_CK_DHE_DSS_WITH_AES_256_SHA:56,TLS1_CK_DHE_RSA_WITH_AES_256_SHA:57,TLS1_CK_ADH_WITH_AES_256_SHA:58,TLS1_CK_RSA_WITH_NULL_SHA256:59,TLS1_CK_RSA_WITH_AES_128_SHA256:60,TLS1_CK_RSA_WITH_AES_256_SHA256:61,TLS1_CK_DH_DSS_WITH_AES_128_SHA256:62,TLS1_CK_DH_RSA_WITH_AES_128_SHA256:63,TLS1_CK_DHE_DSS_WITH_AES_128_SHA256:64,TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA:65,TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA:66,TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA:67,TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA:68,TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA:69,TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA:70,TLS1_CK_DHE_RSA_WITH_AES_128_SHA256:103,TLS1_CK_DH_DSS_WITH_AES_256_SHA256:104,TLS1_CK_DH_RSA_WITH_AES_256_SHA256:105,TLS1_CK_DHE_DSS_WITH_AES_256_SHA256:106,TLS1_CK_DHE_RSA_WITH_AES_256_SHA256:107,TLS1_CK_ADH_WITH_AES_128_SHA256:108,TLS1_CK_ADH_WITH_AES_256_SHA256:109,TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA:132,TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA:133,TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA:134,TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA:135,TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA:136,TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA:137,TLS1_CK_RSA_WITH_SEED_SHA:150,TLS1_CK_DH_DSS_WITH_SEED_SHA:151,TLS1_CK_DH_RSA_WITH_SEED_SHA:152,TLS1_CK_DHE_DSS_WITH_SEED_SHA:153,TLS1_CK_DHE_RSA_WITH_SEED_SHA:154,TLS1_CK_ADH_WITH_SEED_SHA:155,TLS1_CK_RSA_WITH_AES_128_GCM_SHA256:156,TLS1_CK_RSA_WITH_AES_256_GCM_SHA384:157,TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256:158,TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384:159,TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256:160,TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384:161,TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256:162,TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384:163,TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256:164,TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384:165,TLS1_CK_ADH_WITH_AES_128_GCM_SHA256:166,TLS1_CK_ADH_WITH_AES_256_GCM_SHA384:167,TLS1_CK_RSA_WITH_AES_128_CCM:49308,TLS1_CK_RSA_WITH_AES_256_CCM:49309,TLS1_CK_DHE_RSA_WITH_AES_128_CCM:49310,TLS1_CK_DHE_RSA_WITH_AES_256_CCM:49311,TLS1_CK_RSA_WITH_AES_128_CCM_8:49312,TLS1_CK_RSA_WITH_AES_256_CCM_8:49313,TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8:49314,TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8:49315,TLS1_CK_PSK_WITH_AES_128_CCM:49316,TLS1_CK_PSK_WITH_AES_256_CCM:49317,TLS1_CK_DHE_PSK_WITH_AES_128_CCM:49318,TLS1_CK_DHE_PSK_WITH_AES_256_CCM:49319,TLS1_CK_PSK_WITH_AES_128_CCM_8:49320,TLS1_CK_PSK_WITH_AES_256_CCM_8:49321,TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8:49322,TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8:49323,TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM:49324,TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM:49325,TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8:49326,TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8:49327,TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256:186,TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256:187,TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256:188,TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256:189,TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256:190,TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256:191,TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256:192,TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256:193,TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256:194,TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256:195,TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256:196,TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256:197,TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA:49153,TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA:49154,TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA:49155,TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA:49156,TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA:49157,TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA:49158,TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA:49159,TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA:49160,TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:49161,TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:49162,TLS1_CK_ECDH_RSA_WITH_NULL_SHA:49163,TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA:49164,TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA:49165,TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA:49166,TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA:49167,TLS1_CK_ECDHE_RSA_WITH_NULL_SHA:49168,TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA:49169,TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA:49170,TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA:49171,TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA:49172,TLS1_CK_ECDH_anon_WITH_NULL_SHA:49173,TLS1_CK_ECDH_anon_WITH_RC4_128_SHA:49174,TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA:49175,TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA:49176,TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA:49177,TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA:49178,TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA:49179,TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA:49180,TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA:49181,TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA:49182,TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA:49183,TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA:49184,TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA:49185,TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA:49186,TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256:49187,TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384:49188,TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256:49189,TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384:49190,TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256:49191,TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384:49192,TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256:49193,TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384:49194,TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:49195,TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:49196,TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256:49197,TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384:49198,TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256:49199,TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384:49200,TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256:49201,TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384:49202,TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA:49203,TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA:49204,TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA:49205,TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA:49206,TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256:49207,TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384:49208,TLS1_CK_ECDHE_PSK_WITH_NULL_SHA:49209,TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256:49210,TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384:49211,TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256:49266,TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384:49267,TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256:49268,TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384:49269,TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256:49270,TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384:49271,TLS1_CK_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256:49272,TLS1_CK_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384:49273,TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256:49300,TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384:49301,TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256:49302,TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384:49303,TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256:49304,TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384:49305,TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256:49306,TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384:49307,TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305:52392,TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305:52393,TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305:52394,TLS1_CK_PSK_WITH_CHACHA20_POLY1305:52395,TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305:52396,TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305:52397,TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305:52398},Q=y(Ae),He={secp256r1:23,secp384r1:24,secp521r1:25,x25519:29,x448:30},ee=y(He);class je{static decodeFromClient(e){const t=new K(e.buffer);t.readUint16();const r=[];for(;!t.isFinished();){const n=t.readUint16();n in ee&&r.push(ee[n])}return r}static encodeForClient(e){const t=new x(6);return t.writeUint16(P.supported_groups),t.writeUint16(2),t.writeUint16(He[e]),t.uint8Array}}const de={uncompressed:0,ansiX962_compressed_prime:1,ansiX962_compressed_char2:2},te=y(de);class Ge{static decodeFromClient(e){const t=new K(e.buffer),r=t.readUint8(),n=[];for(let i=0;i<r;i++){const a=t.readUint8();a in te&&n.push(te[a])}return n}static encodeForClient(e){const t=new x(6);return t.writeUint16(P.ec_point_formats),t.writeUint16(2),t.writeUint8(1),t.writeUint8(de[e]),t.uint8Array}}const $={anonymous:0,rsa:1,dsa:2,ecdsa:3},re=y($),z={none:0,md5:1,sha1:2,sha224:3,sha256:4,sha384:5,sha512:6},ne=y(z);class $e{static decodeFromClient(e){const t=new K(e.buffer);t.readUint16();const r=[];for(;!t.isFinished();){const n=t.readUint8(),i=t.readUint8();if(re[i]){if(!ne[n]){M.logger.warn(`Unknown hash algorithm: ${n}`);continue}r.push({algorithm:re[i],hash:ne[n]})}}return r}static encodeforClient(e,t){const r=new x(6);return r.writeUint16(P.signature_algorithms),r.writeUint16(2),r.writeUint8(z[e]),r.writeUint8($[t]),r.uint8Array}}const se={server_name:ue,signature_algorithms:$e,supported_groups:je,ec_point_formats:Ge};function ze(s){const e=new K(s.buffer),t=[];for(;!e.isFinished();){const r=e.offset,n=e.readUint16(),i=Oe[n],a=e.readUint16(),_=e.readUint8Array(a);if(!(i in se))continue;const c=se[i];t.push({type:i,data:c.decodeFromClient(_),raw:s.slice(r,r+4+a)})}return t}async function F(s,e,t,r){const n=U([e,t]),i=await crypto.subtle.importKey("raw",s,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]);let a=n;const _=[];for(;U(_).byteLength<r;){a=await ie(i,a);const S=U([a,n]),l=await ie(i,S);_.push(l)}return U(_).slice(0,r)}async function ie(s,e){return await crypto.subtle.sign({name:"HMAC",hash:"SHA-256"},s,e)}const Ve={Null:0},Ye={Warning:1,Fatal:2},fe=y(Ye),Ze={CloseNotify:0,UnexpectedMessage:10,BadRecordMac:20,DecryptionFailed:21,RecordOverflow:22,DecompressionFailure:30,HandshakeFailure:40,NoCertificate:41,BadCertificate:42,UnsupportedCertificate:43,CertificateRevoked:44,CertificateExpired:45,CertificateUnknown:46,IllegalParameter:47,UnknownCa:48,AccessDenied:49,DecodeError:50,DecryptError:51,ExportRestriction:60,ProtocolVersion:70,InsufficientSecurity:71,InternalError:80,UserCanceled:90,NoRenegotiation:100,UnsupportedExtension:110},Te=y(Ze),C={ChangeCipherSpec:20,Alert:21,Handshake:22,ApplicationData:23},f={HelloRequest:0,ClientHello:1,ServerHello:2,Certificate:11,ServerKeyExchange:12,ServerHelloDone:14,ClientKeyExchange:16,Finished:20},Je={NamedCurve:3},Xe={secp256r1:23};class ae extends Error{}const v=new Uint8Array([3,3]),Qe=crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveKey","deriveBits"]);class et{constructor(){this.receivedRecordSequenceNumber=0,this.sentRecordSequenceNumber=0,this.closed=!1,this.receivedBytesBuffer=new Uint8Array,this.receivedTLSRecords=[],this.partialTLSMessages={},this.handshakeMessages=[],this.MAX_CHUNK_SIZE=1024*16,this.clientEnd={upstream:new TransformStream,downstream:new TransformStream},this.clientDownstreamWriter=this.clientEnd.downstream.writable.getWriter(),this.clientUpstreamReader=this.clientEnd.upstream.readable.getReader(),this.serverEnd={upstream:new TransformStream,downstream:tt(this.MAX_CHUNK_SIZE)},this.serverUpstreamWriter=this.serverEnd.upstream.writable.getWriter();const e=this;this.serverEnd.downstream.readable.pipeTo(new WritableStream({async write(t){await e.writeTLSRecord(C.ApplicationData,t)},async abort(t){e.clientDownstreamWriter.releaseLock(),e.clientEnd.downstream.writable.abort(t),e.close()},close(){e.close()}})).catch(()=>{})}async close(){if(!this.closed){this.closed=!0;try{await this.clientDownstreamWriter.close()}catch{}try{await this.clientUpstreamReader.cancel()}catch{}try{await this.serverUpstreamWriter.close()}catch{}try{await this.clientEnd.upstream.readable.cancel()}catch{}try{await this.clientEnd.downstream.writable.close()}catch{}}}async TLSHandshake(e,t){const r=await this.readNextHandshakeMessage(f.ClientHello);if(!r.body.cipher_suites.length)throw new Error("Client did not propose any supported cipher suites.");const n=crypto.getRandomValues(new Uint8Array(32));await this.writeTLSRecord(C.Handshake,D.serverHello(r.body,n,Ve.Null)),await this.writeTLSRecord(C.Handshake,D.certificate(t));const i=await Qe,a=r.body.random,_=await D.ECDHEServerKeyExchange(a,n,i,e);await this.writeTLSRecord(C.Handshake,_),await this.writeTLSRecord(C.Handshake,D.serverHelloDone());const c=await this.readNextHandshakeMessage(f.ClientKeyExchange);await this.readNextMessage(C.ChangeCipherSpec),this.sessionKeys=await this.deriveSessionKeys({clientRandom:a,serverRandom:n,serverPrivateKey:i.privateKey,clientPublicKey:await crypto.subtle.importKey("raw",c.body.exchange_keys,{name:"ECDH",namedCurve:"P-256"},!1,[])}),await this.readNextHandshakeMessage(f.Finished),await this.writeTLSRecord(C.ChangeCipherSpec,D.changeCipherSpec()),await this.writeTLSRecord(C.Handshake,await D.createFinishedMessage(this.handshakeMessages,this.sessionKeys.masterSecret)),this.handshakeMessages=[],this.pollForClientMessages()}async deriveSessionKeys({clientRandom:e,serverRandom:t,serverPrivateKey:r,clientPublicKey:n}){const i=await crypto.subtle.deriveBits({name:"ECDH",public:n},r,256),a=new Uint8Array(await F(i,new TextEncoder().encode("master secret"),H([e,t]),48)),_=await F(a,new TextEncoder().encode("key expansion"),H([t,e]),40),c=new K(_),S=c.readUint8Array(16),l=c.readUint8Array(16),h=c.readUint8Array(4),u=c.readUint8Array(4);return{masterSecret:a,clientWriteKey:await crypto.subtle.importKey("raw",S,{name:"AES-GCM"},!1,["encrypt","decrypt"]),serverWriteKey:await crypto.subtle.importKey("raw",l,{name:"AES-GCM"},!1,["encrypt","decrypt"]),clientIV:h,serverIV:u}}async readNextHandshakeMessage(e){const t=await this.readNextMessage(C.Handshake);if(t.msg_type!==e)throw new Error(`Expected ${e} message`);return t}async readNextMessage(e){let t,r=!1;do t=await this.readNextTLSRecord(e),r=await this.accumulateUntilMessageIsComplete(t);while(r===!1);const n=E.TLSMessage(t.type,r);return t.type===C.Handshake&&this.handshakeMessages.push(t.fragment),n}async readNextTLSRecord(e){for(;;){for(let _=0;_<this.receivedTLSRecords.length;_++){const c=this.receivedTLSRecords[_];if(c.type===e)return this.receivedTLSRecords.splice(_,1),c}const t=await this.pollBytes(5),r=t[3]<<8|t[4],n=t[0],i=await this.pollBytes(r),a={type:n,version:{major:t[1],minor:t[2]},length:r,fragment:this.sessionKeys&&n!==C.ChangeCipherSpec?await this.decryptData(n,i):i};if(a.type===C.Alert){const _=fe[a.fragment[0]],c=Te[a.fragment[1]];throw new Error(`TLS non-warning alert received: ${_} ${c}`)}this.receivedTLSRecords.push(a)}}async pollBytes(e){for(;this.receivedBytesBuffer.length<e;){const{value:r,done:n}=await this.clientUpstreamReader.read();if(n)throw await this.close(),new ae("TLS connection closed");if(this.receivedBytesBuffer=H([this.receivedBytesBuffer,r]),this.receivedBytesBuffer.length>=e)break;await new Promise(i=>setTimeout(i,100))}const t=this.receivedBytesBuffer.slice(0,e);return this.receivedBytesBuffer=this.receivedBytesBuffer.slice(e),t}async pollForClientMessages(){try{for(;;){const e=await this.readNextMessage(C.ApplicationData);this.serverUpstreamWriter.write(e.body)}}catch(e){if(e instanceof ae)return;throw e}}async decryptData(e,t){const r=this.sessionKeys.clientIV,n=t.slice(0,8),i=new Uint8Array([...r,...n]),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:i,additionalData:new Uint8Array([...X(this.receivedRecordSequenceNumber),e,...v,...W(t.length-8-16)]),tagLength:128},this.sessionKeys.clientWriteKey,t.slice(8));return++this.receivedRecordSequenceNumber,new Uint8Array(a)}async accumulateUntilMessageIsComplete(e){this.partialTLSMessages[e.type]=H([this.partialTLSMessages[e.type]||new Uint8Array,e.fragment]);const t=this.partialTLSMessages[e.type];switch(e.type){case C.Handshake:{if(t.length<4)return!1;const r=t[1]<<8|t[2];if(t.length<3+r)return!1;break}case C.Alert:{if(t.length<2)return!1;break}case C.ChangeCipherSpec:case C.ApplicationData:break;default:throw new Error(`TLS: Unsupported record type ${e.type}`)}return delete this.partialTLSMessages[e.type],t}async writeTLSRecord(e,t){e===C.Handshake&&this.handshakeMessages.push(t),this.sessionKeys&&e!==C.ChangeCipherSpec&&(t=await this.encryptData(e,t));const r=v,n=t.length,i=new Uint8Array(5);i[0]=e,i[1]=r[0],i[2]=r[1],i[3]=n>>8&255,i[4]=n&255;const a=H([i,t]);this.clientDownstreamWriter.write(a)}async encryptData(e,t){const r=this.sessionKeys.serverIV,n=crypto.getRandomValues(new Uint8Array(8)),i=new Uint8Array([...r,...n]),a=new Uint8Array([...X(this.sentRecordSequenceNumber),e,...v,...W(t.length)]),_=await crypto.subtle.encrypt({name:"AES-GCM",iv:i,additionalData:a,tagLength:128},this.sessionKeys.serverWriteKey,t);return++this.sentRecordSequenceNumber,H([n,new Uint8Array(_)])}}class E{static TLSMessage(e,t){switch(e){case C.Handshake:return E.clientHandshake(t);case C.Alert:return E.alert(t);case C.ChangeCipherSpec:return E.changeCipherSpec();case C.ApplicationData:return E.applicationData(t);default:throw new Error(`TLS: Unsupported TLS record type ${e}`)}}static parseCipherSuites(e){const t=new K(e);t.readUint16();const r=[];for(;!t.isFinished();){const n=t.readUint16();n in Q&&r.push(Q[n])}return r}static applicationData(e){return{type:C.ApplicationData,body:e}}static changeCipherSpec(){return{type:C.ChangeCipherSpec,body:new Uint8Array}}static alert(e){return{type:C.Alert,level:fe[e[0]],description:Te[e[1]]}}static clientHandshake(e){const t=e[0],r=e[1]<<16|e[2]<<8|e[3],n=e.slice(4);let i;switch(t){case f.HelloRequest:i=E.clientHelloRequestPayload();break;case f.ClientHello:i=E.clientHelloPayload(n);break;case f.ClientKeyExchange:i=E.clientKeyExchangePayload(n);break;case f.Finished:i=E.clientFinishedPayload(n);break;default:throw new Error(`Invalid handshake type ${t}`)}return{type:C.Handshake,msg_type:t,length:r,body:i}}static clientHelloRequestPayload(){return{}}static clientHelloPayload(e){const t=new K(e.buffer),r={client_version:t.readUint8Array(2),random:t.readUint8Array(32)},n=t.readUint8();r.session_id=t.readUint8Array(n);const i=t.readUint16();r.cipher_suites=E.parseCipherSuites(t.readUint8Array(i).buffer);const a=t.readUint8();r.compression_methods=t.readUint8Array(a);const _=t.readUint16();return r.extensions=ze(t.readUint8Array(_)),r}static clientKeyExchangePayload(e){return{exchange_keys:e.slice(1,e.length)}}static clientFinishedPayload(e){return{verify_data:e}}}function tt(s){return new TransformStream({transform(e,t){for(;e.length>0;)t.enqueue(e.slice(0,s)),e=e.slice(s)}})}class D{static certificate(e){const t=[];for(const i of e)t.push(m(i.byteLength)),t.push(new Uint8Array(i));const r=H(t),n=new Uint8Array([...m(r.byteLength),...r]);return new Uint8Array([f.Certificate,...m(n.length),...n])}static async ECDHEServerKeyExchange(e,t,r,n){const i=new Uint8Array(await crypto.subtle.exportKey("raw",r.publicKey)),a=new Uint8Array([Je.NamedCurve,...W(Xe.secp256r1),i.byteLength,...i]),_=await crypto.subtle.sign({name:"RSASSA-PKCS1-v1_5",hash:"SHA-256"},n,new Uint8Array([...e,...t,...a])),c=new Uint8Array(_),S=new Uint8Array([z.sha256,$.rsa]),l=new Uint8Array([...a,...S,...W(c.length),...c]);return new Uint8Array([f.ServerKeyExchange,...m(l.length),...l])}static serverHello(e,t,r){const n=e.extensions.map(_=>{switch(_.type){case"server_name":return ue.encodeForClient()}}).filter(_=>_!==void 0),i=H(n),a=new Uint8Array([...v,...t,e.session_id.length,...e.session_id,...W(Ae.TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256),r,...W(i.length),...i]);return new Uint8Array([f.ServerHello,...m(a.length),...a])}static serverHelloDone(){return new Uint8Array([f.ServerHelloDone,...m(0)])}static async createFinishedMessage(e,t){const r=await crypto.subtle.digest("SHA-256",H(e)),n=new Uint8Array(await F(t,new TextEncoder().encode("server finished"),r,12));return new Uint8Array([f.Finished,...m(n.length),...n])}static changeCipherSpec(){return new Uint8Array([1])}}function Ee(s,e){return st.generateCertificate(s,e)}function rt(s){return`-----BEGIN CERTIFICATE-----
2
- ${we(pe(s.buffer))}
3
- -----END CERTIFICATE-----`}async function nt(s){const e=await crypto.subtle.exportKey("pkcs8",s);return`-----BEGIN PRIVATE KEY-----
4
- ${we(pe(e))}
5
- -----END PRIVATE KEY-----`}class st{static async generateCertificate(e,t){const r=await crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",hash:"SHA-256",modulusLength:2048,publicExponent:new Uint8Array([1,0,1])},!0,["sign","verify"]),n=await this.signingRequest(e,r.publicKey),i=await this.sign(n,(t==null?void 0:t.privateKey)??r.privateKey);return{keyPair:r,certificate:i,tbsCertificate:n,tbsDescription:e}}static async sign(e,t){const r=await crypto.subtle.sign({name:"RSASSA-PKCS1-v1_5",hash:"SHA-256"},t,e.buffer);return o.sequence([new Uint8Array(e.buffer),this.signatureAlgorithm("sha256WithRSAEncryption"),o.bitString(new Uint8Array(r))])}static async signingRequest(e,t){const r=[];return e.keyUsage&&r.push(this.keyUsage(e.keyUsage)),e.extKeyUsage&&r.push(this.extKeyUsage(e.extKeyUsage)),e.subjectAltNames&&r.push(this.subjectAltName(e.subjectAltNames)),e.nsCertType&&r.push(this.nsCertType(e.nsCertType)),e.basicConstraints&&r.push(this.basicConstraints(e.basicConstraints)),o.sequence([this.version(e.version),this.serialNumber(e.serialNumber),this.signatureAlgorithm(e.signatureAlgorithm),this.distinguishedName(e.issuer??e.subject),this.validity(e.validity),this.distinguishedName(e.subject),await this.subjectPublicKeyInfo(t),this.extensions(r)])}static version(e=2){return o.ASN1(160,o.integer(new Uint8Array([e])))}static serialNumber(e=crypto.getRandomValues(new Uint8Array(4))){return o.integer(e)}static signatureAlgorithm(e="sha256WithRSAEncryption"){return o.sequence([o.objectIdentifier(L(e)),o.null()])}static async subjectPublicKeyInfo(e){return new Uint8Array(await crypto.subtle.exportKey("spki",e))}static extensions(e){return o.ASN1(163,o.sequence(e))}static distinguishedName(e){const t=[];for(const[r,n]of Object.entries(e)){const i=[o.objectIdentifier(L(r))];switch(r){case"countryName":i.push(o.printableString(n));break;default:i.push(o.utf8String(n))}t.push(o.set([o.sequence(i)]))}return o.sequence(t)}static validity(e){return o.sequence([o.ASN1(d.UTCTime,new TextEncoder().encode(oe((e==null?void 0:e.notBefore)??new Date))),o.ASN1(d.UTCTime,new TextEncoder().encode(oe((e==null?void 0:e.notAfter)??at(new Date,10))))])}static basicConstraints({ca:e=!0,pathLenConstraint:t=void 0}){const r=[o.boolean(e)];return t!==void 0&&r.push(o.integer(new Uint8Array([t]))),o.sequence([o.objectIdentifier(L("basicConstraints")),o.octetString(o.sequence(r))])}static keyUsage(e){const t=new Uint8Array([0]);return e!=null&&e.digitalSignature&&(t[0]|=1),e!=null&&e.nonRepudiation&&(t[0]|=2),e!=null&&e.keyEncipherment&&(t[0]|=4),e!=null&&e.dataEncipherment&&(t[0]|=8),e!=null&&e.keyAgreement&&(t[0]|=16),e!=null&&e.keyCertSign&&(t[0]|=32),e!=null&&e.cRLSign&&(t[0]|=64),e!=null&&e.encipherOnly&&(t[0]|=128),e!=null&&e.decipherOnly&&(t[0]|=64),o.sequence([o.objectIdentifier(L("keyUsage")),o.boolean(!0),o.octetString(o.bitString(t))])}static extKeyUsage(e={}){return o.sequence([o.objectIdentifier(L("extKeyUsage")),o.boolean(!0),o.octetString(o.sequence(Object.entries(e).map(([t,r])=>r?o.objectIdentifier(L(t)):o.null())))])}static nsCertType(e){const t=new Uint8Array([0]);return e.client&&(t[0]|=1),e.server&&(t[0]|=2),e.email&&(t[0]|=4),e.objsign&&(t[0]|=8),e.sslCA&&(t[0]|=16),e.emailCA&&(t[0]|=32),e.objCA&&(t[0]|=64),o.sequence([o.objectIdentifier(L("nsCertType")),o.octetString(t)])}static subjectAltName(e){var i,a;const t=((i=e.dnsNames)==null?void 0:i.map(_=>{const c=o.ia5String(_);return o.contextSpecific(2,c)}))||[],r=((a=e.ipAddresses)==null?void 0:a.map(_=>{const c=o.ia5String(_);return o.contextSpecific(7,c)}))||[],n=o.octetString(o.sequence([...t,...r]));return o.sequence([o.objectIdentifier(L("subjectAltName")),o.boolean(!0),n])}}const it={"1.2.840.113549.1.1.1":"rsaEncryption","1.2.840.113549.1.1.4":"md5WithRSAEncryption","1.2.840.113549.1.1.5":"sha1WithRSAEncryption","1.2.840.113549.1.1.7":"RSAES-OAEP","1.2.840.113549.1.1.8":"mgf1","1.2.840.113549.1.1.9":"pSpecified","1.2.840.113549.1.1.10":"RSASSA-PSS","1.2.840.113549.1.1.11":"sha256WithRSAEncryption","1.2.840.113549.1.1.12":"sha384WithRSAEncryption","1.2.840.113549.1.1.13":"sha512WithRSAEncryption","1.3.101.112":"EdDSA25519","1.2.840.10040.4.3":"dsa-with-sha1","1.3.14.3.2.7":"desCBC","1.3.14.3.2.26":"sha1","1.3.14.3.2.29":"sha1WithRSASignature","2.16.840.1.101.3.4.2.1":"sha256","2.16.840.1.101.3.4.2.2":"sha384","2.16.840.1.101.3.4.2.3":"sha512","2.16.840.1.101.3.4.2.4":"sha224","2.16.840.1.101.3.4.2.5":"sha512-224","2.16.840.1.101.3.4.2.6":"sha512-256","1.2.840.113549.2.2":"md2","1.2.840.113549.2.5":"md5","1.2.840.113549.1.7.1":"data","1.2.840.113549.1.7.2":"signedData","1.2.840.113549.1.7.3":"envelopedData","1.2.840.113549.1.7.4":"signedAndEnvelopedData","1.2.840.113549.1.7.5":"digestedData","1.2.840.113549.1.7.6":"encryptedData","1.2.840.113549.1.9.1":"emailAddress","1.2.840.113549.1.9.2":"unstructuredName","1.2.840.113549.1.9.3":"contentType","1.2.840.113549.1.9.4":"messageDigest","1.2.840.113549.1.9.5":"signingTime","1.2.840.113549.1.9.6":"counterSignature","1.2.840.113549.1.9.7":"challengePassword","1.2.840.113549.1.9.8":"unstructuredAddress","1.2.840.113549.1.9.14":"extensionRequest","1.2.840.113549.1.9.20":"friendlyName","1.2.840.113549.1.9.21":"localKeyId","1.2.840.113549.1.9.22.1":"x509Certificate","1.2.840.113549.1.12.10.1.1":"keyBag","1.2.840.113549.1.12.10.1.2":"pkcs8ShroudedKeyBag","1.2.840.113549.1.12.10.1.3":"certBag","1.2.840.113549.1.12.10.1.4":"crlBag","1.2.840.113549.1.12.10.1.5":"secretBag","1.2.840.113549.1.12.10.1.6":"safeContentsBag","1.2.840.113549.1.5.13":"pkcs5PBES2","1.2.840.113549.1.5.12":"pkcs5PBKDF2","1.2.840.113549.1.12.1.1":"pbeWithSHAAnd128BitRC4","1.2.840.113549.1.12.1.2":"pbeWithSHAAnd40BitRC4","1.2.840.113549.1.12.1.3":"pbeWithSHAAnd3-KeyTripleDES-CBC","1.2.840.113549.1.12.1.4":"pbeWithSHAAnd2-KeyTripleDES-CBC","1.2.840.113549.1.12.1.5":"pbeWithSHAAnd128BitRC2-CBC","1.2.840.113549.1.12.1.6":"pbewithSHAAnd40BitRC2-CBC","1.2.840.113549.2.7":"hmacWithSHA1","1.2.840.113549.2.8":"hmacWithSHA224","1.2.840.113549.2.9":"hmacWithSHA256","1.2.840.113549.2.10":"hmacWithSHA384","1.2.840.113549.2.11":"hmacWithSHA512","1.2.840.113549.3.7":"des-EDE3-CBC","2.16.840.1.101.3.4.1.2":"aes128-CBC","2.16.840.1.101.3.4.1.22":"aes192-CBC","2.16.840.1.101.3.4.1.42":"aes256-CBC","2.5.4.3":"commonName","2.5.4.4":"surname","2.5.4.5":"serialNumber","2.5.4.6":"countryName","2.5.4.7":"localityName","2.5.4.8":"stateOrProvinceName","2.5.4.9":"streetAddress","2.5.4.10":"organizationName","2.5.4.11":"organizationalUnitName","2.5.4.12":"title","2.5.4.13":"description","2.5.4.15":"businessCategory","2.5.4.17":"postalCode","2.5.4.42":"givenName","1.3.6.1.4.1.311.60.2.1.2":"jurisdictionOfIncorporationStateOrProvinceName","1.3.6.1.4.1.311.60.2.1.3":"jurisdictionOfIncorporationCountryName","2.16.840.1.113730.1.1":"nsCertType","2.16.840.1.113730.1.13":"nsComment","2.5.29.14":"subjectKeyIdentifier","2.5.29.15":"keyUsage","2.5.29.17":"subjectAltName","2.5.29.18":"issuerAltName","2.5.29.19":"basicConstraints","2.5.29.31":"cRLDistributionPoints","2.5.29.32":"certificatePolicies","2.5.29.35":"authorityKeyIdentifier","2.5.29.37":"extKeyUsage","1.3.6.1.4.1.11129.2.4.2":"timestampList","1.3.6.1.5.5.7.1.1":"authorityInfoAccess","1.3.6.1.5.5.7.3.1":"serverAuth","1.3.6.1.5.5.7.3.2":"clientAuth","1.3.6.1.5.5.7.3.3":"codeSigning","1.3.6.1.5.5.7.3.4":"emailProtection","1.3.6.1.5.5.7.3.8":"timeStamping"};function L(s){for(const[e,t]of Object.entries(it))if(t===s)return e;throw new Error(`OID not found for name: ${s}`)}const _e=32,d={Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,Utf8String:12,Sequence:16|_e,Set:17|_e,PrintableString:19,IA5String:22,UTCTime:23};class o{static length_(e){if(e<128)return new Uint8Array([e]);{let t=e;const r=[];for(;t>0;)r.unshift(t&255),t>>=8;const n=r.length,i=new Uint8Array(1+n);i[0]=128|n;for(let a=0;a<n;a++)i[a+1]=r[a];return i}}static ASN1(e,t){const r=o.length_(t.length),n=new Uint8Array(1+r.length+t.length);return n[0]=e,n.set(r,1),n.set(t,1+r.length),n}static integer(e){if(e[0]>127){const t=new Uint8Array(e.length+1);t[0]=0,t.set(e,1),e=t}return o.ASN1(d.Integer,e)}static bitString(e){const t=new Uint8Array([0]),r=new Uint8Array(t.length+e.length);return r.set(t),r.set(e,t.length),o.ASN1(d.BitString,r)}static octetString(e){return o.ASN1(d.OctetString,e)}static null(){return o.ASN1(d.Null,new Uint8Array(0))}static objectIdentifier(e){const t=e.split(".").map(Number),n=[t[0]*40+t[1]];for(let i=2;i<t.length;i++){let a=t[i];const _=[];do _.unshift(a&127),a>>=7;while(a>0);for(let c=0;c<_.length-1;c++)_[c]|=128;n.push(..._)}return o.ASN1(d.OID,new Uint8Array(n))}static utf8String(e){const t=new TextEncoder().encode(e);return o.ASN1(d.Utf8String,t)}static printableString(e){const t=new TextEncoder().encode(e);return o.ASN1(d.PrintableString,t)}static sequence(e){return o.ASN1(d.Sequence,H(e))}static set(e){return o.ASN1(d.Set,H(e))}static ia5String(e){const t=new TextEncoder().encode(e);return o.ASN1(d.IA5String,t)}static contextSpecific(e,t,r=!1){const n=(r?160:128)|e;return o.ASN1(n,t)}static boolean(e){return o.ASN1(d.Boolean,new Uint8Array([e?255:0]))}}function pe(s){return btoa(String.fromCodePoint(...new Uint8Array(s)))}function we(s){var e;return((e=s.match(/.{1,64}/g))==null?void 0:e.join(`
6
- `))||s}function oe(s){const e=s.getUTCFullYear().toString().substr(2),t=R(s.getUTCMonth()+1),r=R(s.getUTCDate()),n=R(s.getUTCHours()),i=R(s.getUTCMinutes()),a=R(s.getUTCSeconds());return`${e}${t}${r}${n}${i}${a}Z`}function R(s){return s.toString().padStart(2,"0")}function at(s,e){const t=new Date(s);return t.setUTCFullYear(t.getUTCFullYear()+e),t}async function ye(s,e,t){var a;const r=typeof s=="string"?new Request(s,e):s;if(!t)return await fetch(r);const[n,i]=await Z.teeRequest(r);try{return await fetch(n)}catch{const c=((a=new Headers(i.headers).get("x-cors-proxy-allowed-request-headers"))==null?void 0:a.split(","))||[],S=c.includes("authorization")||c.includes("cookie"),l=await Z.cloneRequest(i,{url:`${t}${r.url}`,...S&&{credentials:"include"}});return await fetch(l,e)}}class _t extends TransformStream{constructor(){let e=new Uint8Array(0),t="SCAN_CHUNK_SIZE",r=0;super({transform(n,i){for(e=H([e,n]);e.length>0;)if(t==="SCAN_CHUNK_SIZE"){if(e.length<3)return;let a=0;for(;a<e.length;){const S=e[a];if(!(S>=48&&S<=57||S>=97&&S<=102||S>=65&&S<=70))break;a++}if(a===0)throw new Error("Invalid chunk size format");if(e.length<a+2)return;if(e[a]!==13||e[a+1]!==10)throw new Error("Invalid chunk size format. Expected CRLF after chunk size");const _=new TextDecoder().decode(e.slice(0,a)),c=parseInt(_,16);if(e=e.slice(a+2),c===0){t="SCAN_FINAL_CHUNK",i.terminate();return}r=c,t="SCAN_CHUNK_DATA"}else if(t==="SCAN_CHUNK_DATA"){const a=Math.min(r,e.length),_=e.slice(0,a);e=e.slice(a),r-=a,i.enqueue(_),r===0&&(t="SCAN_CHUNK_TRAILER")}else if(t==="SCAN_CHUNK_TRAILER"){if(e.length<2)return;if(e[0]!==13||e[1]!==10)throw new Error("Invalid chunk trailer format. Expected CRLF after chunk data");e=e.slice(2),t="SCAN_CHUNK_SIZE"}}})}}const ot=(s,e)=>({...s,websocket:{url:(t,r,n)=>`ws://playground.internal/?${new URLSearchParams({host:r,port:n}).toString()}`,subprotocol:"binary",decorator:()=>class extends ct{constructor(t,r){super(t,r,{CAroot:e.CAroot,corsProxyUrl:e.corsProxyUrl})}}}});class ct{constructor(e,t,{CAroot:r,corsProxyUrl:n,outputType:i="messages"}={}){this.CONNECTING=0,this.OPEN=1,this.CLOSING=2,this.CLOSED=3,this.readyState=this.CONNECTING,this.binaryType="blob",this.bufferedAmount=0,this.extensions="",this.protocol="ws",this.host="",this.port=0,this.listeners=new Map,this.clientUpstream=new TransformStream,this.clientUpstreamWriter=this.clientUpstream.writable.getWriter(),this.clientDownstream=new TransformStream,this.fetchInitiated=!1,this.bufferedBytesFromClient=new Uint8Array(0),this.url=e,this.options=t;const a=new URL(e);this.host=a.searchParams.get("host"),this.port=parseInt(a.searchParams.get("port"),10),this.binaryType="arraybuffer",this.corsProxyUrl=n,this.CAroot=r,i==="messages"&&this.clientDownstream.readable.pipeTo(new WritableStream({write:_=>{this.emit("message",{data:_})},abort:()=>{this.emit("error",new Error("ECONNREFUSED")),this.close()},close:()=>{this.close()}})).catch(()=>{}),this.readyState=this.OPEN,this.emit("open")}on(e,t){this.addEventListener(e,t)}once(e,t){const r=n=>{t(n),this.removeEventListener(e,r)};this.addEventListener(e,r)}addEventListener(e,t){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t)}removeListener(e,t){this.removeEventListener(e,t)}removeEventListener(e,t){const r=this.listeners.get(e);r&&r.delete(t)}emit(e,t={}){e==="message"?this.onmessage(t):e==="close"?this.onclose(t):e==="error"?this.onerror(t):e==="open"&&this.onopen(t);const r=this.listeners.get(e);if(r)for(const n of r)n(t)}onclose(e){}onerror(e){}onmessage(e){}onopen(e){}send(e){if(!(this.readyState===this.CLOSING||this.readyState===this.CLOSED)&&(this.clientUpstreamWriter.write(new Uint8Array(e)),!this.fetchInitiated))switch(this.bufferedBytesFromClient=H([this.bufferedBytesFromClient,new Uint8Array(e)]),Ct(this.port,this.bufferedBytesFromClient)){case!1:return;case"other":this.emit("error",new Error("Unsupported protocol")),this.close();break;case"tls":this.fetchOverTLS(),this.fetchInitiated=!0;break;case"http":this.fetchOverHTTP(),this.fetchInitiated=!0;break}}async fetchOverTLS(){if(!this.CAroot)throw new Error("TLS protocol is only supported when the TCPOverFetchWebsocket is instantiated with a CAroot");const e=await Ee({subject:{commonName:this.host,organizationName:this.host,countryName:"US"},issuer:this.CAroot.tbsDescription.subject},this.CAroot.keyPair),t=new et;this.clientUpstream.readable.pipeTo(t.clientEnd.upstream.writable).catch(()=>{}),t.clientEnd.downstream.readable.pipeTo(this.clientDownstream.writable).catch(()=>{}),await t.TLSHandshake(e.keyPair.privateKey,[e.certificate,this.CAroot.certificate]);const r=await g.parseHttpRequest(t.serverEnd.upstream.readable,this.host,"https");try{await g.fetchRawResponseBytes(r,this.corsProxyUrl).pipeTo(t.serverEnd.downstream.writable)}catch{}}async fetchOverHTTP(){const e=await g.parseHttpRequest(this.clientUpstream.readable,this.host,"http");try{await g.fetchRawResponseBytes(e,this.corsProxyUrl).pipeTo(this.clientDownstream.writable)}catch{}}close(){this.emit("message",{data:new Uint8Array(0)}),this.readyState=this.CLOSING,this.emit("close"),this.readyState=this.CLOSED}}const St=["GET","POST","HEAD","PATCH","OPTIONS","DELETE","PUT","TRACE"];function Ct(s,e){if(e.length<8)return!1;if(s===443&&e[0]===C.Handshake&&e[1]===3&&e[2]>=1&&e[2]<=3)return"tls";const r=new TextDecoder("latin1",{fatal:!0}).decode(e);return St.some(i=>r.startsWith(i+" "))?"http":"other"}class g{static fetchRawResponseBytes(e,t){return new ReadableStream({async start(r){var _;let n;try{n=await ye(e,void 0,t)}catch(c){r.enqueue(new TextEncoder().encode(`HTTP/1.1 400 Bad Request\r
1
+ "use strict";var Le=Object.create;var G=Object.defineProperty;var me=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames;var Ke=Object.getPrototypeOf,Ie=Object.prototype.hasOwnProperty;var De=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ge(e))!Ie.call(s,n)&&n!==t&&G(s,n,{get:()=>e[n],enumerable:!(r=me(e,n))||r.enumerable});return s};var H=(s,e,t)=>(t=s!=null?Le(Ke(s)):{},De(e||!s||!s.__esModule?G(t,"default",{value:s,enumerable:!0}):t,s));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("@php-wasm/universal"),We=require("wasm-feature-detect"),h=require("@php-wasm/util"),U=require("@php-wasm/logger"),$=require("@php-wasm/web-service-worker"),V=require("@php-wasm/fs-journal");async function _e(s=E.LatestSupportedPHPVersion){if(await We.jspi())switch(s){case"8.4":return await import("./php/jspi/php_8_4.js");case"8.3":return await import("./php/jspi/php_8_3.js");case"8.2":return await import("./php/jspi/php_8_2.js");case"8.1":return await import("./php/jspi/php_8_1.js");case"8.0":return await import("./php/jspi/php_8_0.js");case"7.4":return await import("./php/jspi/php_7_4.js");case"7.3":return await import("./php/jspi/php_7_3.js");case"7.2":return await import("./php/jspi/php_7_2.js")}else switch(s){case"8.4":return await import("./php/asyncify/php_8_4.js");case"8.3":return await import("./php/asyncify/php_8_3.js");case"8.2":return await import("./php/asyncify/php_8_2.js");case"8.1":return await import("./php/asyncify/php_8_1.js");case"8.0":return await import("./php/asyncify/php_8_0.js");case"7.4":return await import("./php/asyncify/php_7_4.js");case"7.3":return await import("./php/asyncify/php_7_3.js");case"7.2":return await import("./php/asyncify/php_7_2.js")}throw new Error(`Unsupported PHP version ${s}`)}function w(s){return Object.fromEntries(Object.entries(s).map(([e,t])=>[t,e]))}function D(s){return new Uint8Array([s>>8&255,s&255])}function L(s){return new Uint8Array([s>>16&255,s>>8&255,s&255])}function z(s){const e=new ArrayBuffer(8);return new DataView(e).setBigUint64(0,BigInt(s),!1),new Uint8Array(e)}class g{constructor(e){this.offset=0,this.buffer=e,this.view=new DataView(e)}readUint8(){const e=this.view.getUint8(this.offset);return this.offset+=1,e}readUint16(){const e=this.view.getUint16(this.offset);return this.offset+=2,e}readUint32(){const e=this.view.getUint32(this.offset);return this.offset+=4,e}readUint8Array(e){const t=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,new Uint8Array(t)}isFinished(){return this.offset>=this.buffer.byteLength}}class v{constructor(e){this.offset=0,this.buffer=new ArrayBuffer(e),this.uint8Array=new Uint8Array(this.buffer),this.view=new DataView(this.buffer)}writeUint8(e){this.view.setUint8(this.offset,e),this.offset+=1}writeUint16(e){this.view.setUint16(this.offset,e),this.offset+=2}writeUint32(e){this.view.setUint32(this.offset,e),this.offset+=4}writeUint8Array(e){this.uint8Array.set(e,this.offset),this.offset+=e.length}}const R={server_name:0,max_fragment_length:1,client_certificate_url:2,trusted_ca_keys:3,truncated_hmac:4,status_request:5,user_mapping:6,client_authz:7,server_authz:8,cert_type:9,supported_groups:10,ec_point_formats:11,srp:12,signature_algorithms:13,use_srtp:14,heartbeat:15,application_layer_protocol_negotiation:16,status_request_v2:17,signed_certificate_timestamp:18,client_certificate_type:19,server_certificate_type:20,padding:21,encrypt_then_mac:22,extended_master_secret:23,token_binding:24,cached_info:25,tls_its:26,compress_certificate:27,record_size_limit:28,pwd_protect:29,pwo_clear:30,password_salt:31,ticket_pinning:32,tls_cert_with_extern_psk:33,delegated_credential:34,session_ticket:35,TLMSP:36,TLMSP_proxying:37,TLMSP_delegate:38,supported_ekt_ciphers:39,pre_shared_key:41,early_data:42,supported_versions:43,cookie:44,psk_key_exchange_modes:45,reserved:46,certificate_authorities:47,oid_filters:48,post_handshake_auth:49,signature_algorithms_cert:50,key_share:51,transparency_info:52,connection_id:54},be=w(R),oe={host_name:0},Re=w(oe);class ce{static decodeFromClient(e){const t=new DataView(e.buffer);let r=0;const n=t.getUint16(r);r+=2;const i=[];for(;r<n+2;){const a=e[r];r+=1;const _=t.getUint16(r);r+=2;const c=e.slice(r,r+_);switch(r+=_,a){case oe.host_name:i.push({name_type:Re[a],name:{host_name:new TextDecoder().decode(c)}});break;default:throw new Error(`Unsupported name type ${a}`)}}return{server_name_list:i}}static encodeForClient(e){if(e!=null&&e.server_name_list.length)throw new Error("Encoding non-empty lists for ClientHello is not supported yet. Only empty lists meant for ServerHello are supported today.");const t=new v(4);return t.writeUint16(R.server_name),t.writeUint16(0),t.uint8Array}}const Se={TLS1_CK_PSK_WITH_RC4_128_SHA:138,TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA:139,TLS1_CK_PSK_WITH_AES_128_CBC_SHA:140,TLS1_CK_PSK_WITH_AES_256_CBC_SHA:141,TLS1_CK_DHE_PSK_WITH_RC4_128_SHA:142,TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA:143,TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA:144,TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA:145,TLS1_CK_RSA_PSK_WITH_RC4_128_SHA:146,TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA:147,TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA:148,TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA:149,TLS1_CK_PSK_WITH_AES_128_GCM_SHA256:168,TLS1_CK_PSK_WITH_AES_256_GCM_SHA384:169,TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256:170,TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384:171,TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256:172,TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384:173,TLS1_CK_PSK_WITH_AES_128_CBC_SHA256:174,TLS1_CK_PSK_WITH_AES_256_CBC_SHA384:175,TLS1_CK_PSK_WITH_NULL_SHA256:176,TLS1_CK_PSK_WITH_NULL_SHA384:177,TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256:178,TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384:179,TLS1_CK_DHE_PSK_WITH_NULL_SHA256:180,TLS1_CK_DHE_PSK_WITH_NULL_SHA384:181,TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256:182,TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384:183,TLS1_CK_RSA_PSK_WITH_NULL_SHA256:184,TLS1_CK_RSA_PSK_WITH_NULL_SHA384:185,TLS1_CK_PSK_WITH_NULL_SHA:44,TLS1_CK_DHE_PSK_WITH_NULL_SHA:45,TLS1_CK_RSA_PSK_WITH_NULL_SHA:46,TLS1_CK_RSA_WITH_AES_128_SHA:47,TLS1_CK_DH_DSS_WITH_AES_128_SHA:48,TLS1_CK_DH_RSA_WITH_AES_128_SHA:49,TLS1_CK_DHE_DSS_WITH_AES_128_SHA:50,TLS1_CK_DHE_RSA_WITH_AES_128_SHA:51,TLS1_CK_ADH_WITH_AES_128_SHA:52,TLS1_CK_RSA_WITH_AES_256_SHA:53,TLS1_CK_DH_DSS_WITH_AES_256_SHA:54,TLS1_CK_DH_RSA_WITH_AES_256_SHA:55,TLS1_CK_DHE_DSS_WITH_AES_256_SHA:56,TLS1_CK_DHE_RSA_WITH_AES_256_SHA:57,TLS1_CK_ADH_WITH_AES_256_SHA:58,TLS1_CK_RSA_WITH_NULL_SHA256:59,TLS1_CK_RSA_WITH_AES_128_SHA256:60,TLS1_CK_RSA_WITH_AES_256_SHA256:61,TLS1_CK_DH_DSS_WITH_AES_128_SHA256:62,TLS1_CK_DH_RSA_WITH_AES_128_SHA256:63,TLS1_CK_DHE_DSS_WITH_AES_128_SHA256:64,TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA:65,TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA:66,TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA:67,TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA:68,TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA:69,TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA:70,TLS1_CK_DHE_RSA_WITH_AES_128_SHA256:103,TLS1_CK_DH_DSS_WITH_AES_256_SHA256:104,TLS1_CK_DH_RSA_WITH_AES_256_SHA256:105,TLS1_CK_DHE_DSS_WITH_AES_256_SHA256:106,TLS1_CK_DHE_RSA_WITH_AES_256_SHA256:107,TLS1_CK_ADH_WITH_AES_128_SHA256:108,TLS1_CK_ADH_WITH_AES_256_SHA256:109,TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA:132,TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA:133,TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA:134,TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA:135,TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA:136,TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA:137,TLS1_CK_RSA_WITH_SEED_SHA:150,TLS1_CK_DH_DSS_WITH_SEED_SHA:151,TLS1_CK_DH_RSA_WITH_SEED_SHA:152,TLS1_CK_DHE_DSS_WITH_SEED_SHA:153,TLS1_CK_DHE_RSA_WITH_SEED_SHA:154,TLS1_CK_ADH_WITH_SEED_SHA:155,TLS1_CK_RSA_WITH_AES_128_GCM_SHA256:156,TLS1_CK_RSA_WITH_AES_256_GCM_SHA384:157,TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256:158,TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384:159,TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256:160,TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384:161,TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256:162,TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384:163,TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256:164,TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384:165,TLS1_CK_ADH_WITH_AES_128_GCM_SHA256:166,TLS1_CK_ADH_WITH_AES_256_GCM_SHA384:167,TLS1_CK_RSA_WITH_AES_128_CCM:49308,TLS1_CK_RSA_WITH_AES_256_CCM:49309,TLS1_CK_DHE_RSA_WITH_AES_128_CCM:49310,TLS1_CK_DHE_RSA_WITH_AES_256_CCM:49311,TLS1_CK_RSA_WITH_AES_128_CCM_8:49312,TLS1_CK_RSA_WITH_AES_256_CCM_8:49313,TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8:49314,TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8:49315,TLS1_CK_PSK_WITH_AES_128_CCM:49316,TLS1_CK_PSK_WITH_AES_256_CCM:49317,TLS1_CK_DHE_PSK_WITH_AES_128_CCM:49318,TLS1_CK_DHE_PSK_WITH_AES_256_CCM:49319,TLS1_CK_PSK_WITH_AES_128_CCM_8:49320,TLS1_CK_PSK_WITH_AES_256_CCM_8:49321,TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8:49322,TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8:49323,TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM:49324,TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM:49325,TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8:49326,TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8:49327,TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256:186,TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256:187,TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256:188,TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256:189,TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256:190,TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256:191,TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256:192,TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256:193,TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256:194,TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256:195,TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256:196,TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256:197,TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA:49153,TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA:49154,TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA:49155,TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA:49156,TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA:49157,TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA:49158,TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA:49159,TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA:49160,TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:49161,TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:49162,TLS1_CK_ECDH_RSA_WITH_NULL_SHA:49163,TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA:49164,TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA:49165,TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA:49166,TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA:49167,TLS1_CK_ECDHE_RSA_WITH_NULL_SHA:49168,TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA:49169,TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA:49170,TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA:49171,TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA:49172,TLS1_CK_ECDH_anon_WITH_NULL_SHA:49173,TLS1_CK_ECDH_anon_WITH_RC4_128_SHA:49174,TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA:49175,TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA:49176,TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA:49177,TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA:49178,TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA:49179,TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA:49180,TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA:49181,TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA:49182,TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA:49183,TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA:49184,TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA:49185,TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA:49186,TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256:49187,TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384:49188,TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256:49189,TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384:49190,TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256:49191,TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384:49192,TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256:49193,TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384:49194,TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:49195,TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:49196,TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256:49197,TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384:49198,TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256:49199,TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384:49200,TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256:49201,TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384:49202,TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA:49203,TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA:49204,TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA:49205,TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA:49206,TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256:49207,TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384:49208,TLS1_CK_ECDHE_PSK_WITH_NULL_SHA:49209,TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256:49210,TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384:49211,TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256:49266,TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384:49267,TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256:49268,TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384:49269,TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256:49270,TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384:49271,TLS1_CK_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256:49272,TLS1_CK_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384:49273,TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256:49300,TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384:49301,TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256:49302,TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384:49303,TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256:49304,TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384:49305,TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256:49306,TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384:49307,TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305:52392,TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305:52393,TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305:52394,TLS1_CK_PSK_WITH_CHACHA20_POLY1305:52395,TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305:52396,TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305:52397,TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305:52398},Y=w(Se),Ce={secp256r1:23,secp384r1:24,secp521r1:25,x25519:29,x448:30},J=w(Ce);class Pe{static decodeFromClient(e){const t=new g(e.buffer);t.readUint16();const r=[];for(;!t.isFinished();){const n=t.readUint16();n in J&&r.push(J[n])}return r}static encodeForClient(e){const t=new v(6);return t.writeUint16(R.supported_groups),t.writeUint16(2),t.writeUint16(Ce[e]),t.uint8Array}}const Ae={uncompressed:0,ansiX962_compressed_prime:1,ansiX962_compressed_char2:2},Z=w(Ae);class Be{static decodeFromClient(e){const t=new g(e.buffer),r=t.readUint8(),n=[];for(let i=0;i<r;i++){const a=t.readUint8();a in Z&&n.push(Z[a])}return n}static encodeForClient(e){const t=new v(6);return t.writeUint16(R.ec_point_formats),t.writeUint16(2),t.writeUint8(1),t.writeUint8(Ae[e]),t.uint8Array}}const O={anonymous:0,rsa:1,dsa:2,ecdsa:3},X=w(O),F={none:0,md5:1,sha1:2,sha224:3,sha256:4,sha384:5,sha512:6},Q=w(F);class Ue{static decodeFromClient(e){const t=new g(e.buffer);t.readUint16();const r=[];for(;!t.isFinished();){const n=t.readUint8(),i=t.readUint8();if(X[i]){if(!Q[n]){U.logger.warn(`Unknown hash algorithm: ${n}`);continue}r.push({algorithm:X[i],hash:Q[n]})}}return r}static encodeforClient(e,t){const r=new v(6);return r.writeUint16(R.signature_algorithms),r.writeUint16(2),r.writeUint8(F[e]),r.writeUint8(O[t]),r.uint8Array}}const ee={server_name:ce,signature_algorithms:Ue,supported_groups:Pe,ec_point_formats:Be};function ve(s){const e=new g(s.buffer),t=[];for(;!e.isFinished();){const r=e.offset,n=e.readUint16(),i=be[n],a=e.readUint16(),_=e.readUint8Array(a);if(!(i in ee))continue;const c=ee[i];t.push({type:i,data:c.decodeFromClient(_),raw:s.slice(r,r+4+a)})}return t}async function k(s,e,t,r){const n=h.concatArrayBuffers([e,t]),i=await crypto.subtle.importKey("raw",s,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]);let a=n;const _=[];for(;h.concatArrayBuffers(_).byteLength<r;){a=await te(i,a);const S=h.concatArrayBuffers([a,n]),A=await te(i,S);_.push(A)}return h.concatArrayBuffers(_).slice(0,r)}async function te(s,e){return await crypto.subtle.sign({name:"HMAC",hash:"SHA-256"},s,e)}const Me={Null:0},Ne={Warning:1,Fatal:2},he=w(Ne),xe={CloseNotify:0,UnexpectedMessage:10,BadRecordMac:20,DecryptionFailed:21,RecordOverflow:22,DecompressionFailure:30,HandshakeFailure:40,NoCertificate:41,BadCertificate:42,UnsupportedCertificate:43,CertificateRevoked:44,CertificateExpired:45,CertificateUnknown:46,IllegalParameter:47,UnknownCa:48,AccessDenied:49,DecodeError:50,DecryptError:51,ExportRestriction:60,ProtocolVersion:70,InsufficientSecurity:71,InternalError:80,UserCanceled:90,NoRenegotiation:100,UnsupportedExtension:110},le=w(xe),C={ChangeCipherSpec:20,Alert:21,Handshake:22,ApplicationData:23},T={HelloRequest:0,ClientHello:1,ServerHello:2,Certificate:11,ServerKeyExchange:12,ServerHelloDone:14,ClientKeyExchange:16,Finished:20},ke={NamedCurve:3},qe={secp256r1:23};class re extends Error{}const B=new Uint8Array([3,3]),Oe=crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveKey","deriveBits"]);class Fe{constructor(){this.receivedRecordSequenceNumber=0,this.sentRecordSequenceNumber=0,this.closed=!1,this.receivedBytesBuffer=new Uint8Array,this.receivedTLSRecords=[],this.partialTLSMessages={},this.handshakeMessages=[],this.MAX_CHUNK_SIZE=1024*16,this.clientEnd={upstream:new TransformStream,downstream:new TransformStream},this.clientDownstreamWriter=this.clientEnd.downstream.writable.getWriter(),this.clientUpstreamReader=this.clientEnd.upstream.readable.getReader(),this.serverEnd={upstream:new TransformStream,downstream:je(this.MAX_CHUNK_SIZE)},this.serverUpstreamWriter=this.serverEnd.upstream.writable.getWriter();const e=this;this.serverEnd.downstream.readable.pipeTo(new WritableStream({async write(t){await e.writeTLSRecord(C.ApplicationData,t)},async abort(t){e.clientDownstreamWriter.releaseLock(),e.clientEnd.downstream.writable.abort(t),e.close()},close(){e.close()}})).catch(()=>{})}async close(){if(!this.closed){this.closed=!0;try{await this.clientDownstreamWriter.close()}catch{}try{await this.clientUpstreamReader.cancel()}catch{}try{await this.serverUpstreamWriter.close()}catch{}try{await this.clientEnd.upstream.readable.cancel()}catch{}try{await this.clientEnd.downstream.writable.close()}catch{}}}async TLSHandshake(e,t){const r=await this.readNextHandshakeMessage(T.ClientHello);if(!r.body.cipher_suites.length)throw new Error("Client did not propose any supported cipher suites.");const n=crypto.getRandomValues(new Uint8Array(32));await this.writeTLSRecord(C.Handshake,I.serverHello(r.body,n,Me.Null)),await this.writeTLSRecord(C.Handshake,I.certificate(t));const i=await Oe,a=r.body.random,_=await I.ECDHEServerKeyExchange(a,n,i,e);await this.writeTLSRecord(C.Handshake,_),await this.writeTLSRecord(C.Handshake,I.serverHelloDone());const c=await this.readNextHandshakeMessage(T.ClientKeyExchange);await this.readNextMessage(C.ChangeCipherSpec),this.sessionKeys=await this.deriveSessionKeys({clientRandom:a,serverRandom:n,serverPrivateKey:i.privateKey,clientPublicKey:await crypto.subtle.importKey("raw",c.body.exchange_keys,{name:"ECDH",namedCurve:"P-256"},!1,[])}),await this.readNextHandshakeMessage(T.Finished),await this.writeTLSRecord(C.ChangeCipherSpec,I.changeCipherSpec()),await this.writeTLSRecord(C.Handshake,await I.createFinishedMessage(this.handshakeMessages,this.sessionKeys.masterSecret)),this.handshakeMessages=[],this.pollForClientMessages()}async deriveSessionKeys({clientRandom:e,serverRandom:t,serverPrivateKey:r,clientPublicKey:n}){const i=await crypto.subtle.deriveBits({name:"ECDH",public:n},r,256),a=new Uint8Array(await k(i,new TextEncoder().encode("master secret"),h.concatUint8Arrays([e,t]),48)),_=await k(a,new TextEncoder().encode("key expansion"),h.concatUint8Arrays([t,e]),40),c=new g(_),S=c.readUint8Array(16),A=c.readUint8Array(16),l=c.readUint8Array(4),u=c.readUint8Array(4);return{masterSecret:a,clientWriteKey:await crypto.subtle.importKey("raw",S,{name:"AES-GCM"},!1,["encrypt","decrypt"]),serverWriteKey:await crypto.subtle.importKey("raw",A,{name:"AES-GCM"},!1,["encrypt","decrypt"]),clientIV:l,serverIV:u}}async readNextHandshakeMessage(e){const t=await this.readNextMessage(C.Handshake);if(t.msg_type!==e)throw new Error(`Expected ${e} message`);return t}async readNextMessage(e){let t,r=!1;do t=await this.readNextTLSRecord(e),r=await this.accumulateUntilMessageIsComplete(t);while(r===!1);const n=p.TLSMessage(t.type,r);return t.type===C.Handshake&&this.handshakeMessages.push(t.fragment),n}async readNextTLSRecord(e){for(;;){for(let _=0;_<this.receivedTLSRecords.length;_++){const c=this.receivedTLSRecords[_];if(c.type===e)return this.receivedTLSRecords.splice(_,1),c}const t=await this.pollBytes(5),r=t[3]<<8|t[4],n=t[0],i=await this.pollBytes(r),a={type:n,version:{major:t[1],minor:t[2]},length:r,fragment:this.sessionKeys&&n!==C.ChangeCipherSpec?await this.decryptData(n,i):i};if(a.type===C.Alert){const _=he[a.fragment[0]],c=le[a.fragment[1]];throw new Error(`TLS non-warning alert received: ${_} ${c}`)}this.receivedTLSRecords.push(a)}}async pollBytes(e){for(;this.receivedBytesBuffer.length<e;){const{value:r,done:n}=await this.clientUpstreamReader.read();if(n)throw await this.close(),new re("TLS connection closed");if(this.receivedBytesBuffer=h.concatUint8Arrays([this.receivedBytesBuffer,r]),this.receivedBytesBuffer.length>=e)break;await new Promise(i=>setTimeout(i,100))}const t=this.receivedBytesBuffer.slice(0,e);return this.receivedBytesBuffer=this.receivedBytesBuffer.slice(e),t}async pollForClientMessages(){try{for(;;){const e=await this.readNextMessage(C.ApplicationData);this.serverUpstreamWriter.write(e.body)}}catch(e){if(e instanceof re)return;throw e}}async decryptData(e,t){const r=this.sessionKeys.clientIV,n=t.slice(0,8),i=new Uint8Array([...r,...n]),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:i,additionalData:new Uint8Array([...z(this.receivedRecordSequenceNumber),e,...B,...D(t.length-8-16)]),tagLength:128},this.sessionKeys.clientWriteKey,t.slice(8));return++this.receivedRecordSequenceNumber,new Uint8Array(a)}async accumulateUntilMessageIsComplete(e){this.partialTLSMessages[e.type]=h.concatUint8Arrays([this.partialTLSMessages[e.type]||new Uint8Array,e.fragment]);const t=this.partialTLSMessages[e.type];switch(e.type){case C.Handshake:{if(t.length<4)return!1;const r=t[1]<<8|t[2];if(t.length<3+r)return!1;break}case C.Alert:{if(t.length<2)return!1;break}case C.ChangeCipherSpec:case C.ApplicationData:break;default:throw new Error(`TLS: Unsupported record type ${e.type}`)}return delete this.partialTLSMessages[e.type],t}async writeTLSRecord(e,t){e===C.Handshake&&this.handshakeMessages.push(t),this.sessionKeys&&e!==C.ChangeCipherSpec&&(t=await this.encryptData(e,t));const r=B,n=t.length,i=new Uint8Array(5);i[0]=e,i[1]=r[0],i[2]=r[1],i[3]=n>>8&255,i[4]=n&255;const a=h.concatUint8Arrays([i,t]);this.clientDownstreamWriter.write(a)}async encryptData(e,t){const r=this.sessionKeys.serverIV,n=crypto.getRandomValues(new Uint8Array(8)),i=new Uint8Array([...r,...n]),a=new Uint8Array([...z(this.sentRecordSequenceNumber),e,...B,...D(t.length)]),_=await crypto.subtle.encrypt({name:"AES-GCM",iv:i,additionalData:a,tagLength:128},this.sessionKeys.serverWriteKey,t);return++this.sentRecordSequenceNumber,h.concatUint8Arrays([n,new Uint8Array(_)])}}class p{static TLSMessage(e,t){switch(e){case C.Handshake:return p.clientHandshake(t);case C.Alert:return p.alert(t);case C.ChangeCipherSpec:return p.changeCipherSpec();case C.ApplicationData:return p.applicationData(t);default:throw new Error(`TLS: Unsupported TLS record type ${e}`)}}static parseCipherSuites(e){const t=new g(e);t.readUint16();const r=[];for(;!t.isFinished();){const n=t.readUint16();n in Y&&r.push(Y[n])}return r}static applicationData(e){return{type:C.ApplicationData,body:e}}static changeCipherSpec(){return{type:C.ChangeCipherSpec,body:new Uint8Array}}static alert(e){return{type:C.Alert,level:he[e[0]],description:le[e[1]]}}static clientHandshake(e){const t=e[0],r=e[1]<<16|e[2]<<8|e[3],n=e.slice(4);let i;switch(t){case T.HelloRequest:i=p.clientHelloRequestPayload();break;case T.ClientHello:i=p.clientHelloPayload(n);break;case T.ClientKeyExchange:i=p.clientKeyExchangePayload(n);break;case T.Finished:i=p.clientFinishedPayload(n);break;default:throw new Error(`Invalid handshake type ${t}`)}return{type:C.Handshake,msg_type:t,length:r,body:i}}static clientHelloRequestPayload(){return{}}static clientHelloPayload(e){const t=new g(e.buffer),r={client_version:t.readUint8Array(2),random:t.readUint8Array(32)},n=t.readUint8();r.session_id=t.readUint8Array(n);const i=t.readUint16();r.cipher_suites=p.parseCipherSuites(t.readUint8Array(i).buffer);const a=t.readUint8();r.compression_methods=t.readUint8Array(a);const _=t.readUint16();return r.extensions=ve(t.readUint8Array(_)),r}static clientKeyExchangePayload(e){return{exchange_keys:e.slice(1,e.length)}}static clientFinishedPayload(e){return{verify_data:e}}}function je(s){return new TransformStream({transform(e,t){for(;e.length>0;)t.enqueue(e.slice(0,s)),e=e.slice(s)}})}class I{static certificate(e){const t=[];for(const i of e)t.push(L(i.byteLength)),t.push(new Uint8Array(i));const r=h.concatUint8Arrays(t),n=new Uint8Array([...L(r.byteLength),...r]);return new Uint8Array([T.Certificate,...L(n.length),...n])}static async ECDHEServerKeyExchange(e,t,r,n){const i=new Uint8Array(await crypto.subtle.exportKey("raw",r.publicKey)),a=new Uint8Array([ke.NamedCurve,...D(qe.secp256r1),i.byteLength,...i]),_=await crypto.subtle.sign({name:"RSASSA-PKCS1-v1_5",hash:"SHA-256"},n,new Uint8Array([...e,...t,...a])),c=new Uint8Array(_),S=new Uint8Array([F.sha256,O.rsa]),A=new Uint8Array([...a,...S,...D(c.length),...c]);return new Uint8Array([T.ServerKeyExchange,...L(A.length),...A])}static serverHello(e,t,r){const n=e.extensions.map(_=>{switch(_.type){case"server_name":return ce.encodeForClient()}}).filter(_=>_!==void 0),i=h.concatUint8Arrays(n),a=new Uint8Array([...B,...t,e.session_id.length,...e.session_id,...D(Se.TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256),r,...D(i.length),...i]);return new Uint8Array([T.ServerHello,...L(a.length),...a])}static serverHelloDone(){return new Uint8Array([T.ServerHelloDone,...L(0)])}static async createFinishedMessage(e,t){const r=await crypto.subtle.digest("SHA-256",h.concatUint8Arrays(e)),n=new Uint8Array(await k(t,new TextEncoder().encode("server finished"),r,12));return new Uint8Array([T.Finished,...L(n.length),...n])}static changeCipherSpec(){return new Uint8Array([1])}}function ue(s,e){return Ve.generateCertificate(s,e)}function Ge(s){return`-----BEGIN CERTIFICATE-----
2
+ ${de(He(s.buffer))}
3
+ -----END CERTIFICATE-----`}async function $e(s){const e=await crypto.subtle.exportKey("pkcs8",s);return`-----BEGIN PRIVATE KEY-----
4
+ ${de(He(e))}
5
+ -----END PRIVATE KEY-----`}class Ve{static async generateCertificate(e,t){const r=await crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",hash:"SHA-256",modulusLength:2048,publicExponent:new Uint8Array([1,0,1])},!0,["sign","verify"]),n=await this.signingRequest(e,r.publicKey),i=await this.sign(n,(t==null?void 0:t.privateKey)??r.privateKey);return{keyPair:r,certificate:i,tbsCertificate:n,tbsDescription:e}}static async sign(e,t){const r=await crypto.subtle.sign({name:"RSASSA-PKCS1-v1_5",hash:"SHA-256"},t,e.buffer);return o.sequence([new Uint8Array(e.buffer),this.signatureAlgorithm("sha256WithRSAEncryption"),o.bitString(new Uint8Array(r))])}static async signingRequest(e,t){const r=[];return e.keyUsage&&r.push(this.keyUsage(e.keyUsage)),e.extKeyUsage&&r.push(this.extKeyUsage(e.extKeyUsage)),e.subjectAltNames&&r.push(this.subjectAltName(e.subjectAltNames)),e.nsCertType&&r.push(this.nsCertType(e.nsCertType)),e.basicConstraints&&r.push(this.basicConstraints(e.basicConstraints)),o.sequence([this.version(e.version),this.serialNumber(e.serialNumber),this.signatureAlgorithm(e.signatureAlgorithm),this.distinguishedName(e.issuer??e.subject),this.validity(e.validity),this.distinguishedName(e.subject),await this.subjectPublicKeyInfo(t),this.extensions(r)])}static version(e=2){return o.ASN1(160,o.integer(new Uint8Array([e])))}static serialNumber(e=crypto.getRandomValues(new Uint8Array(4))){return o.integer(e)}static signatureAlgorithm(e="sha256WithRSAEncryption"){return o.sequence([o.objectIdentifier(y(e)),o.null()])}static async subjectPublicKeyInfo(e){return new Uint8Array(await crypto.subtle.exportKey("spki",e))}static extensions(e){return o.ASN1(163,o.sequence(e))}static distinguishedName(e){const t=[];for(const[r,n]of Object.entries(e)){const i=[o.objectIdentifier(y(r))];switch(r){case"countryName":i.push(o.printableString(n));break;default:i.push(o.utf8String(n))}t.push(o.set([o.sequence(i)]))}return o.sequence(t)}static validity(e){return o.sequence([o.ASN1(d.UTCTime,new TextEncoder().encode(se((e==null?void 0:e.notBefore)??new Date))),o.ASN1(d.UTCTime,new TextEncoder().encode(se((e==null?void 0:e.notAfter)??Ye(new Date,10))))])}static basicConstraints({ca:e=!0,pathLenConstraint:t=void 0}){const r=[o.boolean(e)];return t!==void 0&&r.push(o.integer(new Uint8Array([t]))),o.sequence([o.objectIdentifier(y("basicConstraints")),o.octetString(o.sequence(r))])}static keyUsage(e){const t=new Uint8Array([0]);return e!=null&&e.digitalSignature&&(t[0]|=1),e!=null&&e.nonRepudiation&&(t[0]|=2),e!=null&&e.keyEncipherment&&(t[0]|=4),e!=null&&e.dataEncipherment&&(t[0]|=8),e!=null&&e.keyAgreement&&(t[0]|=16),e!=null&&e.keyCertSign&&(t[0]|=32),e!=null&&e.cRLSign&&(t[0]|=64),e!=null&&e.encipherOnly&&(t[0]|=128),e!=null&&e.decipherOnly&&(t[0]|=64),o.sequence([o.objectIdentifier(y("keyUsage")),o.boolean(!0),o.octetString(o.bitString(t))])}static extKeyUsage(e={}){return o.sequence([o.objectIdentifier(y("extKeyUsage")),o.boolean(!0),o.octetString(o.sequence(Object.entries(e).map(([t,r])=>r?o.objectIdentifier(y(t)):o.null())))])}static nsCertType(e){const t=new Uint8Array([0]);return e.client&&(t[0]|=1),e.server&&(t[0]|=2),e.email&&(t[0]|=4),e.objsign&&(t[0]|=8),e.sslCA&&(t[0]|=16),e.emailCA&&(t[0]|=32),e.objCA&&(t[0]|=64),o.sequence([o.objectIdentifier(y("nsCertType")),o.octetString(t)])}static subjectAltName(e){var i,a;const t=((i=e.dnsNames)==null?void 0:i.map(_=>{const c=o.ia5String(_);return o.contextSpecific(2,c)}))||[],r=((a=e.ipAddresses)==null?void 0:a.map(_=>{const c=o.ia5String(_);return o.contextSpecific(7,c)}))||[],n=o.octetString(o.sequence([...t,...r]));return o.sequence([o.objectIdentifier(y("subjectAltName")),o.boolean(!0),n])}}const ze={"1.2.840.113549.1.1.1":"rsaEncryption","1.2.840.113549.1.1.4":"md5WithRSAEncryption","1.2.840.113549.1.1.5":"sha1WithRSAEncryption","1.2.840.113549.1.1.7":"RSAES-OAEP","1.2.840.113549.1.1.8":"mgf1","1.2.840.113549.1.1.9":"pSpecified","1.2.840.113549.1.1.10":"RSASSA-PSS","1.2.840.113549.1.1.11":"sha256WithRSAEncryption","1.2.840.113549.1.1.12":"sha384WithRSAEncryption","1.2.840.113549.1.1.13":"sha512WithRSAEncryption","1.3.101.112":"EdDSA25519","1.2.840.10040.4.3":"dsa-with-sha1","1.3.14.3.2.7":"desCBC","1.3.14.3.2.26":"sha1","1.3.14.3.2.29":"sha1WithRSASignature","2.16.840.1.101.3.4.2.1":"sha256","2.16.840.1.101.3.4.2.2":"sha384","2.16.840.1.101.3.4.2.3":"sha512","2.16.840.1.101.3.4.2.4":"sha224","2.16.840.1.101.3.4.2.5":"sha512-224","2.16.840.1.101.3.4.2.6":"sha512-256","1.2.840.113549.2.2":"md2","1.2.840.113549.2.5":"md5","1.2.840.113549.1.7.1":"data","1.2.840.113549.1.7.2":"signedData","1.2.840.113549.1.7.3":"envelopedData","1.2.840.113549.1.7.4":"signedAndEnvelopedData","1.2.840.113549.1.7.5":"digestedData","1.2.840.113549.1.7.6":"encryptedData","1.2.840.113549.1.9.1":"emailAddress","1.2.840.113549.1.9.2":"unstructuredName","1.2.840.113549.1.9.3":"contentType","1.2.840.113549.1.9.4":"messageDigest","1.2.840.113549.1.9.5":"signingTime","1.2.840.113549.1.9.6":"counterSignature","1.2.840.113549.1.9.7":"challengePassword","1.2.840.113549.1.9.8":"unstructuredAddress","1.2.840.113549.1.9.14":"extensionRequest","1.2.840.113549.1.9.20":"friendlyName","1.2.840.113549.1.9.21":"localKeyId","1.2.840.113549.1.9.22.1":"x509Certificate","1.2.840.113549.1.12.10.1.1":"keyBag","1.2.840.113549.1.12.10.1.2":"pkcs8ShroudedKeyBag","1.2.840.113549.1.12.10.1.3":"certBag","1.2.840.113549.1.12.10.1.4":"crlBag","1.2.840.113549.1.12.10.1.5":"secretBag","1.2.840.113549.1.12.10.1.6":"safeContentsBag","1.2.840.113549.1.5.13":"pkcs5PBES2","1.2.840.113549.1.5.12":"pkcs5PBKDF2","1.2.840.113549.1.12.1.1":"pbeWithSHAAnd128BitRC4","1.2.840.113549.1.12.1.2":"pbeWithSHAAnd40BitRC4","1.2.840.113549.1.12.1.3":"pbeWithSHAAnd3-KeyTripleDES-CBC","1.2.840.113549.1.12.1.4":"pbeWithSHAAnd2-KeyTripleDES-CBC","1.2.840.113549.1.12.1.5":"pbeWithSHAAnd128BitRC2-CBC","1.2.840.113549.1.12.1.6":"pbewithSHAAnd40BitRC2-CBC","1.2.840.113549.2.7":"hmacWithSHA1","1.2.840.113549.2.8":"hmacWithSHA224","1.2.840.113549.2.9":"hmacWithSHA256","1.2.840.113549.2.10":"hmacWithSHA384","1.2.840.113549.2.11":"hmacWithSHA512","1.2.840.113549.3.7":"des-EDE3-CBC","2.16.840.1.101.3.4.1.2":"aes128-CBC","2.16.840.1.101.3.4.1.22":"aes192-CBC","2.16.840.1.101.3.4.1.42":"aes256-CBC","2.5.4.3":"commonName","2.5.4.4":"surname","2.5.4.5":"serialNumber","2.5.4.6":"countryName","2.5.4.7":"localityName","2.5.4.8":"stateOrProvinceName","2.5.4.9":"streetAddress","2.5.4.10":"organizationName","2.5.4.11":"organizationalUnitName","2.5.4.12":"title","2.5.4.13":"description","2.5.4.15":"businessCategory","2.5.4.17":"postalCode","2.5.4.42":"givenName","1.3.6.1.4.1.311.60.2.1.2":"jurisdictionOfIncorporationStateOrProvinceName","1.3.6.1.4.1.311.60.2.1.3":"jurisdictionOfIncorporationCountryName","2.16.840.1.113730.1.1":"nsCertType","2.16.840.1.113730.1.13":"nsComment","2.5.29.14":"subjectKeyIdentifier","2.5.29.15":"keyUsage","2.5.29.17":"subjectAltName","2.5.29.18":"issuerAltName","2.5.29.19":"basicConstraints","2.5.29.31":"cRLDistributionPoints","2.5.29.32":"certificatePolicies","2.5.29.35":"authorityKeyIdentifier","2.5.29.37":"extKeyUsage","1.3.6.1.4.1.11129.2.4.2":"timestampList","1.3.6.1.5.5.7.1.1":"authorityInfoAccess","1.3.6.1.5.5.7.3.1":"serverAuth","1.3.6.1.5.5.7.3.2":"clientAuth","1.3.6.1.5.5.7.3.3":"codeSigning","1.3.6.1.5.5.7.3.4":"emailProtection","1.3.6.1.5.5.7.3.8":"timeStamping"};function y(s){for(const[e,t]of Object.entries(ze))if(t===s)return e;throw new Error(`OID not found for name: ${s}`)}const ne=32,d={Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,Utf8String:12,Sequence:16|ne,Set:17|ne,PrintableString:19,IA5String:22,UTCTime:23};class o{static length_(e){if(e<128)return new Uint8Array([e]);{let t=e;const r=[];for(;t>0;)r.unshift(t&255),t>>=8;const n=r.length,i=new Uint8Array(1+n);i[0]=128|n;for(let a=0;a<n;a++)i[a+1]=r[a];return i}}static ASN1(e,t){const r=o.length_(t.length),n=new Uint8Array(1+r.length+t.length);return n[0]=e,n.set(r,1),n.set(t,1+r.length),n}static integer(e){if(e[0]>127){const t=new Uint8Array(e.length+1);t[0]=0,t.set(e,1),e=t}return o.ASN1(d.Integer,e)}static bitString(e){const t=new Uint8Array([0]),r=new Uint8Array(t.length+e.length);return r.set(t),r.set(e,t.length),o.ASN1(d.BitString,r)}static octetString(e){return o.ASN1(d.OctetString,e)}static null(){return o.ASN1(d.Null,new Uint8Array(0))}static objectIdentifier(e){const t=e.split(".").map(Number),n=[t[0]*40+t[1]];for(let i=2;i<t.length;i++){let a=t[i];const _=[];do _.unshift(a&127),a>>=7;while(a>0);for(let c=0;c<_.length-1;c++)_[c]|=128;n.push(..._)}return o.ASN1(d.OID,new Uint8Array(n))}static utf8String(e){const t=new TextEncoder().encode(e);return o.ASN1(d.Utf8String,t)}static printableString(e){const t=new TextEncoder().encode(e);return o.ASN1(d.PrintableString,t)}static sequence(e){return o.ASN1(d.Sequence,h.concatUint8Arrays(e))}static set(e){return o.ASN1(d.Set,h.concatUint8Arrays(e))}static ia5String(e){const t=new TextEncoder().encode(e);return o.ASN1(d.IA5String,t)}static contextSpecific(e,t,r=!1){const n=(r?160:128)|e;return o.ASN1(n,t)}static boolean(e){return o.ASN1(d.Boolean,new Uint8Array([e?255:0]))}}function He(s){return btoa(String.fromCodePoint(...new Uint8Array(s)))}function de(s){var e;return((e=s.match(/.{1,64}/g))==null?void 0:e.join(`
6
+ `))||s}function se(s){const e=s.getUTCFullYear().toString().substr(2),t=b(s.getUTCMonth()+1),r=b(s.getUTCDate()),n=b(s.getUTCHours()),i=b(s.getUTCMinutes()),a=b(s.getUTCSeconds());return`${e}${t}${r}${n}${i}${a}Z`}function b(s){return s.toString().padStart(2,"0")}function Ye(s,e){const t=new Date(s);return t.setUTCFullYear(t.getUTCFullYear()+e),t}async function Te(s,e,t){var a;const r=typeof s=="string"?new Request(s,e):s;if(!t)return await fetch(r);const[n,i]=await $.teeRequest(r);try{return await fetch(n)}catch{const c=((a=new Headers(i.headers).get("x-cors-proxy-allowed-request-headers"))==null?void 0:a.split(","))||[],S=c.includes("authorization")||c.includes("cookie"),A=await $.cloneRequest(i,{url:`${t}${r.url}`,...S&&{credentials:"include"}});return await fetch(A,e)}}class Je extends TransformStream{constructor(){let e=new Uint8Array(0),t="SCAN_CHUNK_SIZE",r=0;super({transform(n,i){for(e=h.concatUint8Arrays([e,n]);e.length>0;)if(t==="SCAN_CHUNK_SIZE"){if(e.length<3)return;let a=0;for(;a<e.length;){const S=e[a];if(!(S>=48&&S<=57||S>=97&&S<=102||S>=65&&S<=70))break;a++}if(a===0)throw new Error("Invalid chunk size format");if(e.length<a+2)return;if(e[a]!==13||e[a+1]!==10)throw new Error("Invalid chunk size format. Expected CRLF after chunk size");const _=new TextDecoder().decode(e.slice(0,a)),c=parseInt(_,16);if(e=e.slice(a+2),c===0){t="SCAN_FINAL_CHUNK",i.terminate();return}r=c,t="SCAN_CHUNK_DATA"}else if(t==="SCAN_CHUNK_DATA"){const a=Math.min(r,e.length),_=e.slice(0,a);e=e.slice(a),r-=a,i.enqueue(_),r===0&&(t="SCAN_CHUNK_TRAILER")}else if(t==="SCAN_CHUNK_TRAILER"){if(e.length<2)return;if(e[0]!==13||e[1]!==10)throw new Error("Invalid chunk trailer format. Expected CRLF after chunk data");e=e.slice(2),t="SCAN_CHUNK_SIZE"}}})}}const Ze=(s,e)=>({...s,websocket:{url:(t,r,n)=>`ws://playground.internal/?${new URLSearchParams({host:r,port:n}).toString()}`,subprotocol:"binary",decorator:()=>class extends Xe{constructor(t,r){super(t,r,{CAroot:e.CAroot,corsProxyUrl:e.corsProxyUrl})}}}});class Xe{constructor(e,t,{CAroot:r,corsProxyUrl:n,outputType:i="messages"}={}){this.CONNECTING=0,this.OPEN=1,this.CLOSING=2,this.CLOSED=3,this.readyState=this.CONNECTING,this.binaryType="blob",this.bufferedAmount=0,this.extensions="",this.protocol="ws",this.host="",this.port=0,this.listeners=new Map,this.clientUpstream=new TransformStream,this.clientUpstreamWriter=this.clientUpstream.writable.getWriter(),this.clientDownstream=new TransformStream,this.fetchInitiated=!1,this.bufferedBytesFromClient=new Uint8Array(0),this.url=e,this.options=t;const a=new URL(e);this.host=a.searchParams.get("host"),this.port=parseInt(a.searchParams.get("port"),10),this.binaryType="arraybuffer",this.corsProxyUrl=n,this.CAroot=r,i==="messages"&&this.clientDownstream.readable.pipeTo(new WritableStream({write:_=>{this.emit("message",{data:_})},abort:()=>{this.emit("error",new Error("ECONNREFUSED")),this.close()},close:()=>{this.close()}})).catch(()=>{}),this.readyState=this.OPEN,this.emit("open")}on(e,t){this.addEventListener(e,t)}once(e,t){const r=n=>{t(n),this.removeEventListener(e,r)};this.addEventListener(e,r)}addEventListener(e,t){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t)}removeListener(e,t){this.removeEventListener(e,t)}removeEventListener(e,t){const r=this.listeners.get(e);r&&r.delete(t)}emit(e,t={}){e==="message"?this.onmessage(t):e==="close"?this.onclose(t):e==="error"?this.onerror(t):e==="open"&&this.onopen(t);const r=this.listeners.get(e);if(r)for(const n of r)n(t)}onclose(e){}onerror(e){}onmessage(e){}onopen(e){}send(e){if(!(this.readyState===this.CLOSING||this.readyState===this.CLOSED)&&(this.clientUpstreamWriter.write(new Uint8Array(e)),!this.fetchInitiated))switch(this.bufferedBytesFromClient=h.concatUint8Arrays([this.bufferedBytesFromClient,new Uint8Array(e)]),et(this.port,this.bufferedBytesFromClient)){case!1:return;case"other":this.emit("error",new Error("Unsupported protocol")),this.close();break;case"tls":this.fetchOverTLS(),this.fetchInitiated=!0;break;case"http":this.fetchOverHTTP(),this.fetchInitiated=!0;break}}async fetchOverTLS(){if(!this.CAroot)throw new Error("TLS protocol is only supported when the TCPOverFetchWebsocket is instantiated with a CAroot");const e=await ue({subject:{commonName:this.host,organizationName:this.host,countryName:"US"},issuer:this.CAroot.tbsDescription.subject},this.CAroot.keyPair),t=new Fe;this.clientUpstream.readable.pipeTo(t.clientEnd.upstream.writable).catch(()=>{}),t.clientEnd.downstream.readable.pipeTo(this.clientDownstream.writable).catch(()=>{}),await t.TLSHandshake(e.keyPair.privateKey,[e.certificate,this.CAroot.certificate]);const r=await m.parseHttpRequest(t.serverEnd.upstream.readable,this.host,"https");try{await m.fetchRawResponseBytes(r,this.corsProxyUrl).pipeTo(t.serverEnd.downstream.writable)}catch{}}async fetchOverHTTP(){const e=await m.parseHttpRequest(this.clientUpstream.readable,this.host,"http");try{await m.fetchRawResponseBytes(e,this.corsProxyUrl).pipeTo(this.clientDownstream.writable)}catch{}}close(){this.emit("message",{data:new Uint8Array(0)}),this.readyState=this.CLOSING,this.emit("close"),this.readyState=this.CLOSED}}const Qe=["GET","POST","HEAD","PATCH","OPTIONS","DELETE","PUT","TRACE"];function et(s,e){if(e.length<8)return!1;if(s===443&&e[0]===C.Handshake&&e[1]===3&&e[2]>=1&&e[2]<=3)return"tls";const r=new TextDecoder("latin1",{fatal:!0}).decode(e);return Qe.some(i=>r.startsWith(i+" "))?"http":"other"}class m{static fetchRawResponseBytes(e,t){return new ReadableStream({async start(r){var _;let n;try{n=await Te(e,void 0,t)}catch(c){r.enqueue(new TextEncoder().encode(`HTTP/1.1 400 Bad Request\r
7
7
  Content-Length: 0\r
8
8
  \r
9
- `)),r.error(c);return}r.enqueue(g.headersAsBytes(n));const i=(_=n.body)==null?void 0:_.getReader();if(!i){r.close();return}const a=new TextEncoder;for(;;){const{done:c,value:S}=await i.read();if(S&&(r.enqueue(a.encode(`${S.length.toString(16)}\r
9
+ `)),r.error(c);return}r.enqueue(m.headersAsBytes(n));const i=(_=n.body)==null?void 0:_.getReader();if(!i){r.close();return}const a=new TextEncoder;for(;;){const{done:c,value:S}=await i.read();if(S&&(r.enqueue(a.encode(`${S.length.toString(16)}\r
10
10
  `)),r.enqueue(S),r.enqueue(a.encode(`\r
11
11
  `))),c){r.enqueue(a.encode(`0\r
12
12
  \r
13
13
  `)),r.close();return}}}})}static headersAsBytes(e){const t=`HTTP/1.1 ${e.status} ${e.statusText}`,r={};e.headers.forEach((a,_)=>{r[_.toLowerCase()]=a}),delete r["content-length"],r["transfer-encoding"]="chunked";const n=[];for(const[a,_]of Object.entries(r))n.push(`${a}: ${_}`);const i=[t,...n].join(`\r
14
14
  `)+`\r
15
15
  \r
16
- `;return new TextEncoder().encode(i)}static async parseHttpRequest(e,t,r){let n=new Uint8Array(0),i=!1,a=-1;const _=e.getReader();for(;a===-1;){const{done:q,value:B}=await _.read();if(q){i=!0;break}n=H([n,B]),a=lt(n,new Uint8Array([13,10,13,10]))}_.releaseLock();const c=n.slice(0,a),S=g.parseRequestHeaders(c),l=S.headers.get("Transfer-Encoding")!==null?"chunked":"content-length",h=S.headers.get("Content-Length")!==null?parseInt(S.headers.get("Content-Length"),10):void 0,u=n.slice(a+4);let T;if(S.method!=="GET"){const q=e.getReader();let B=u.length,O=u.slice(-6);const me=new TextEncoder().encode(`0\r
16
+ `;return new TextEncoder().encode(i)}static async parseHttpRequest(e,t,r){let n=new Uint8Array(0),i=!1,a=-1;const _=e.getReader();for(;a===-1;){const{done:N,value:P}=await _.read();if(N){i=!0;break}n=h.concatUint8Arrays([n,P]),a=tt(n,new Uint8Array([13,10,13,10]))}_.releaseLock();const c=n.slice(0,a),S=m.parseRequestHeaders(c),A=S.headers.get("Transfer-Encoding")!==null?"chunked":"content-length",l=S.headers.get("Content-Length")!==null?parseInt(S.headers.get("Content-Length"),10):void 0,u=n.slice(a+4);let f;if(S.method!=="GET"){const N=e.getReader();let P=u.length,x=u.slice(-6);const fe=new TextEncoder().encode(`0\r
17
17
  \r
18
- `);T=new ReadableStream({async start(b){u.length>0&&b.enqueue(u),i&&b.close()},async pull(b){const{done:ge,value:I}=await q.read();if(B+=(I==null?void 0:I.length)||0,I&&(b.enqueue(I),O=H([O,I||new Uint8Array]).slice(-5)),ge||l==="content-length"&&h!==void 0&&B>=h||l==="chunked"&&O.every((Ke,Ie)=>Ke===me[Ie])){b.close();return}}}),l==="chunked"&&(T=T.pipeThrough(new _t))}const k=S.headers.get("Host")??t,V=new URL(S.path,r+"://"+k);return V.pathname=S.path,new Request(V.toString(),{method:S.method,headers:S.headers,body:T,duplex:"half"})}static parseRequestHeaders(e){const t=new TextDecoder().decode(e),r=t.split(`
18
+ `);f=new ReadableStream({async start(W){u.length>0&&W.enqueue(u),i&&W.close()},async pull(W){const{done:pe,value:K}=await N.read();if(P+=(K==null?void 0:K.length)||0,K&&(W.enqueue(K),x=h.concatUint8Arrays([x,K||new Uint8Array]).slice(-5)),pe||A==="content-length"&&l!==void 0&&P>=l||A==="chunked"&&x.every((we,ye)=>we===fe[ye])){W.close();return}}}),A==="chunked"&&(f=f.pipeThrough(new Je))}const M=S.headers.get("Host")??t,j=new URL(S.path,r+"://"+M);return j.pathname=S.path,new Request(j.toString(),{method:S.method,headers:S.headers,body:f,duplex:"half"})}static parseRequestHeaders(e){const t=new TextDecoder().decode(e),r=t.split(`
19
19
  `)[0],[n,i]=r.split(" "),a=new Headers;for(const _ of t.split(`\r
20
- `).slice(1)){if(_==="")break;const[c,S]=_.split(": ");a.set(c,S)}return{method:n,path:i,headers:a}}}function lt(s,e){const t=s.length,r=e.length,n=t-r;for(let i=0;i<=n;i++){let a=!0;for(let _=0;_<r;_++)if(s[i+_]!==e[_]){a=!1;break}if(a)return i}return-1}async function ht(s){const e="icudt74l.dat",t=(await import("./shared/icudt74l.js")).dataFilename,r=await(await fetch(t)).arrayBuffer();return{...s,ENV:{...s.ENV,ICU_DATA:"/internal/shared"},onRuntimeInitialized:n=>{s.onRuntimeInitialized&&s.onRuntimeInitialized(n),w.FSHelpers.fileExists(n.FS,`${n.ENV.ICU_DATA}/${e}`)||(n.FS.mkdirTree(n.ENV.ICU_DATA),n.FS.writeFile(`${n.ENV.ICU_DATA}/${e}`,new Uint8Array(r)))}}}const ut=()=>({websocket:{decorator:s=>class extends s{constructor(){try{super()}catch{}}send(){return null}}}});async function At(s,e={}){var i;let t={...ut(),...e.emscriptenOptions||{}};e.tcpOverFetch&&(t=ot(t,e.tcpOverFetch)),e.withICU&&(t=ht(t));const[r,n]=await Promise.all([le(s),t]);return(i=e.onPhpLoaderModuleLoaded)==null||i.call(e,r),await w.loadPHPRuntime(r,n)}function Ht(s,e){window.addEventListener("message",t=>{t.source===s.contentWindow&&(e&&t.origin!==e||typeof t.data!="object"||t.data.type!=="relay"||window.parent.postMessage(t.data,"*"))}),window.addEventListener("message",t=>{var r;t.source===window.parent&&(typeof t.data!="object"||t.data.type!=="relay"||(r=s==null?void 0:s.contentWindow)==null||r.postMessage(t.data))})}async function dt(s){const e=new Worker(s,{type:"module"});return new Promise((t,r)=>{e.onerror=i=>{const a=new Error(`WebWorker failed to load at ${s}. ${i.message?`Original error: ${i.message}`:""}`);a.filename=i.filename,r(a)};function n(i){i.data==="worker-script-started"&&(t(e),e.removeEventListener("message",n))}e.addEventListener("message",n)})}function ft(s,e={initialSync:{}}){return e={...e,initialSync:{...e.initialSync,direction:e.initialSync.direction??"opfs-to-memfs"}},async function(t,r,n){return e.initialSync.direction==="opfs-to-memfs"?(w.FSHelpers.fileExists(r,n)&&w.FSHelpers.rmdir(r,n),w.FSHelpers.mkdir(r,n),await Tt(r,s,n)):await Le(r,s,n,e.initialSync.onProgress),pt(t,s,n)}}async function Tt(s,e,t){w.FSHelpers.mkdir(s,t);const r=new N.Semaphore({concurrency:40}),n=[],i=[[e,t]];for(;i.length>0;){const[a,_]=i.pop();for await(const c of a.values()){const S=r.run(async()=>{const l=N.joinPaths(_,c.name);if(c.kind==="directory"){try{s.mkdir(l)}catch(h){if((h==null?void 0:h.errno)!==20)throw M.logger.error(h),h}i.push([c,l])}else if(c.kind==="file"){const h=await c.getFile(),u=new Uint8Array(await h.arrayBuffer());s.createDataFile(_,c.name,u,!0,!0,!0)}n.splice(n.indexOf(S),1)});n.push(S)}for(;i.length===0&&n.length>0;)await Promise.any(n)}}async function Le(s,e,t,r){s.mkdirTree(t);const n=[];async function i(l,h){await Promise.all(s.readdir(l).filter(u=>u!=="."&&u!=="..").map(async u=>{const T=N.joinPaths(l,u);if(!Et(s,T)){n.push([h,T,u]);return}const k=await h.getDirectoryHandle(u,{create:!0});return await i(T,k)}))}await i(t,e);let a=0;const _=r&&Lt(r,100),c=100,S=new Set;try{for(const[l,h,u]of n){const T=j(l,u,s,h).then(()=>{a++,S.delete(T),_==null||_({files:a,total:n.length})});S.add(T),S.size>=c&&(await Promise.race(S),_==null||_({files:a,total:n.length}))}}finally{await Promise.allSettled(S)}}function Et(s,e){return s.isDir(s.lookupPath(e,{follow:!0}).node.mode)}async function j(s,e,t,r){let n;try{n=t.readFile(r,{encoding:"binary"})}catch{return}const i=await s.getFileHandle(e,{create:!0}),a=i.createWritable!==void 0?await i.createWritable():await i.createSyncAccessHandle();try{await a.truncate(0),await a.write(n)}finally{await a.close()}}function pt(s,e,t){const r=[],n=Me.journalFSEvents(s,t,_=>{r.push(_)}),i=new wt(s,e,t);async function a(){const _=await s.semaphore.acquire();try{for(;r.length;)await i.processEntry(r.shift())}finally{_()}}return s.addEventListener("request.end",a),function(){n(),s.removeEventListener("request.end",a)}}class wt{constructor(e,t,r){this.php=e,this.opfs=t,this.memfsRoot=ce(r)}toOpfsPath(e){return ce(e.substring(this.memfsRoot.length))}async processEntry(e){if(!e.path.startsWith(this.memfsRoot)||e.path===this.memfsRoot)return;const t=this.toOpfsPath(e.path),r=await Se(this.opfs,t),n=yt(t);if(n)try{if(e.operation==="DELETE")try{await r.removeEntry(n,{recursive:!0})}catch{}else if(e.operation==="CREATE")e.nodeType==="directory"?await r.getDirectoryHandle(n,{create:!0}):await r.getFileHandle(n,{create:!0});else if(e.operation==="WRITE")await j(r,n,this.php[w.__private__dont__use].FS,e.path);else if(e.operation==="RENAME"&&e.toPath.startsWith(this.memfsRoot)){const i=this.toOpfsPath(e.toPath),a=await Se(this.opfs,i);if(e.nodeType==="directory"){const _=await a.getDirectoryHandle(n,{create:!0});await Le(this.php[w.__private__dont__use].FS,_,e.toPath),await r.removeEntry(n,{recursive:!0})}else{try{await r.removeEntry(n)}catch{}await j(a,N.basename(i),this.php[w.__private__dont__use].FS,e.toPath)}}}catch(i){throw M.logger.log({entry:e,name:n}),M.logger.error(i),i}}}function ce(s){return s.replace(/\/$/,"").replace(/\/\/+/g,"/")}function yt(s){return s.substring(s.lastIndexOf("/")+1)}async function Se(s,e){const t=e.replace(/^\/+|\/+$/g,"").replace(/\/+/,"/");if(!t)return s;const r=t.split("/");let n=s;for(let i=0;i<r.length-1;i++){const a=r[i];n=await n.getDirectoryHandle(a,{create:!0})}return n}function Lt(s,e){let t=0,r,n;return function(...a){n=a;const _=Date.now()-t;if(r===void 0){const c=Math.max(0,e-_);r=setTimeout(()=>{r=void 0,t=Date.now(),s(...n)},c)}}}exports.certificateToPEM=rt;exports.consumeAPI=xe;exports.createDirectoryHandleMountHandler=ft;exports.exposeAPI=qe;exports.fetchWithCorsProxy=ye;exports.generateCertificate=Ee;exports.getPHPLoaderModule=le;exports.loadWebRuntime=At;exports.privateKeyToPEM=nt;exports.setupPostMessageRelay=Ht;exports.spawnPHPWorkerThread=dt;
20
+ `).slice(1)){if(_==="")break;const[c,S]=_.split(": ");a.set(c,S)}return{method:n,path:i,headers:a}}}function tt(s,e){const t=s.length,r=e.length,n=t-r;for(let i=0;i<=n;i++){let a=!0;for(let _=0;_<r;_++)if(s[i+_]!==e[_]){a=!1;break}if(a)return i}return-1}async function rt(s){const e="icudt74l.dat",t=(await import("./shared/icudt74l.js")).dataFilename,r=await(await fetch(t)).arrayBuffer();return{...s,ENV:{...s.ENV,ICU_DATA:"/internal/shared"},onRuntimeInitialized:n=>{s.onRuntimeInitialized&&s.onRuntimeInitialized(n),E.FSHelpers.fileExists(n.FS,`${n.ENV.ICU_DATA}/${e}`)||(n.FS.mkdirTree(n.ENV.ICU_DATA),n.FS.writeFile(`${n.ENV.ICU_DATA}/${e}`,new Uint8Array(r)))}}}const nt=()=>({websocket:{decorator:s=>class extends s{constructor(){try{super()}catch{}}send(){return null}}}});async function st(s,e={}){var i;let t={...nt(),...e.emscriptenOptions||{}};e.tcpOverFetch&&(t=Ze(t,e.tcpOverFetch)),e.withICU&&(t=rt(t));const[r,n]=await Promise.all([_e(s),t]);return(i=e.onPhpLoaderModuleLoaded)==null||i.call(e,r),await E.loadPHPRuntime(r,n)}function it(s,e){window.addEventListener("message",t=>{t.source===s.contentWindow&&(e&&t.origin!==e||typeof t.data!="object"||t.data.type!=="relay"||window.parent.postMessage(t.data,"*"))}),window.addEventListener("message",t=>{var r;t.source===window.parent&&(typeof t.data!="object"||t.data.type!=="relay"||(r=s==null?void 0:s.contentWindow)==null||r.postMessage(t.data))})}async function at(s){const e=new Worker(s,{type:"module"});return new Promise((t,r)=>{e.onerror=i=>{const a=new Error(`WebWorker failed to load at ${s}. ${i.message?`Original error: ${i.message}`:""}`);a.filename=i.filename,r(a)};function n(i){i.data==="worker-script-started"&&(t(e),e.removeEventListener("message",n))}e.addEventListener("message",n)})}function _t(s,e={initialSync:{}}){return e={...e,initialSync:{...e.initialSync,direction:e.initialSync.direction??"opfs-to-memfs"}},async function(t,r,n){return e.initialSync.direction==="opfs-to-memfs"?(E.FSHelpers.fileExists(r,n)&&E.FSHelpers.rmdir(r,n),E.FSHelpers.mkdir(r,n),await ot(r,s,n)):await Ee(r,s,n,e.initialSync.onProgress),St(t,s,n)}}async function ot(s,e,t){E.FSHelpers.mkdir(s,t);const r=new h.Semaphore({concurrency:40}),n=[],i=[[e,t]];for(;i.length>0;){const[a,_]=i.pop();for await(const c of a.values()){const S=r.run(async()=>{const A=h.joinPaths(_,c.name);if(c.kind==="directory"){try{s.mkdir(A)}catch(l){if((l==null?void 0:l.errno)!==20)throw U.logger.error(l),l}i.push([c,A])}else if(c.kind==="file"){const l=await c.getFile(),u=new Uint8Array(await l.arrayBuffer());s.createDataFile(_,c.name,u,!0,!0,!0)}n.splice(n.indexOf(S),1)});n.push(S)}for(;i.length===0&&n.length>0;)await Promise.any(n)}}async function Ee(s,e,t,r){s.mkdirTree(t);const n=[];async function i(A,l){await Promise.all(s.readdir(A).filter(u=>u!=="."&&u!=="..").map(async u=>{const f=h.joinPaths(A,u);if(!ct(s,f)){n.push([l,f,u]);return}const M=await l.getDirectoryHandle(u,{create:!0});return await i(f,M)}))}await i(t,e);let a=0;const _=r&&ht(r,100),c=100,S=new Set;try{for(const[A,l,u]of n){const f=q(A,u,s,l).then(()=>{a++,S.delete(f),_==null||_({files:a,total:n.length})});S.add(f),S.size>=c&&(await Promise.race(S),_==null||_({files:a,total:n.length}))}}finally{await Promise.allSettled(S)}}function ct(s,e){return s.isDir(s.lookupPath(e,{follow:!0}).node.mode)}async function q(s,e,t,r){let n;try{n=t.readFile(r,{encoding:"binary"})}catch{return}const i=await s.getFileHandle(e,{create:!0}),a=i.createWritable!==void 0?await i.createWritable():await i.createSyncAccessHandle();try{await a.truncate(0),await a.write(n)}finally{await a.close()}}function St(s,e,t){const r=[],n=V.journalFSEvents(s,t,_=>{r.push(_)}),i=new Ct(s,e,t);async function a(){if(r.length===0)return;const _=await s.semaphore.acquire(),c=[...r];r.splice(0,c.length);const S=V.normalizeFilesystemOperations(c);try{for(const A of S)await i.processEntry(A)}finally{_()}}return s.addEventListener("request.end",a),function(){n(),s.removeEventListener("request.end",a)}}class Ct{constructor(e,t,r){this.php=e,this.opfs=t,this.memfsRoot=ie(r)}toOpfsPath(e){return ie(e.substring(this.memfsRoot.length))}async processEntry(e){if(!e.path.startsWith(this.memfsRoot)||e.path===this.memfsRoot)return;const t=this.toOpfsPath(e.path),r=await ae(this.opfs,t),n=At(t);if(n)try{if(e.operation==="DELETE")try{await r.removeEntry(n,{recursive:!0})}catch{}else if(e.operation==="CREATE")e.nodeType==="directory"?await r.getDirectoryHandle(n,{create:!0}):await r.getFileHandle(n,{create:!0});else if(e.operation==="WRITE")await q(r,n,this.php[E.__private__dont__use].FS,e.path);else if(e.operation==="RENAME"&&e.toPath.startsWith(this.memfsRoot)){const i=this.toOpfsPath(e.toPath),a=await ae(this.opfs,i);if(e.nodeType==="directory"){const _=await a.getDirectoryHandle(n,{create:!0});await Ee(this.php[E.__private__dont__use].FS,_,e.toPath),await r.removeEntry(n,{recursive:!0})}else{try{await r.removeEntry(n)}catch{}await q(a,h.basename(i),this.php[E.__private__dont__use].FS,e.toPath)}}}catch(i){throw U.logger.log({entry:e,name:n}),U.logger.error(i),i}}}function ie(s){return s.replace(/\/$/,"").replace(/\/\/+/g,"/")}function At(s){return s.substring(s.lastIndexOf("/")+1)}async function ae(s,e){const t=e.replace(/^\/+|\/+$/g,"").replace(/\/+/,"/");if(!t)return s;const r=t.split("/");let n=s;for(let i=0;i<r.length-1;i++){const a=r[i];n=await n.getDirectoryHandle(a,{create:!0})}return n}function ht(s,e){let t=0,r,n;return function(...a){n=a;const _=Date.now()-t;if(r===void 0){const c=Math.max(0,e-_);r=setTimeout(()=>{r=void 0,t=Date.now(),s(...n)},c)}}}Object.defineProperty(exports,"consumeAPI",{enumerable:!0,get:()=>E.consumeAPI});Object.defineProperty(exports,"exposeAPI",{enumerable:!0,get:()=>E.exposeAPI});exports.certificateToPEM=Ge;exports.createDirectoryHandleMountHandler=_t;exports.fetchWithCorsProxy=Te;exports.generateCertificate=ue;exports.getPHPLoaderModule=_e;exports.loadWebRuntime=st;exports.privateKeyToPEM=$e;exports.setupPostMessageRelay=it;exports.spawnPHPWorkerThread=at;
21
21
  //# sourceMappingURL=index.cjs.map