@php-wasm/web 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.cjs +9 -9
- package/index.cjs.map +1 -1
- package/index.js +102 -110
- package/index.js.map +1 -1
- package/lib/tls/utils.d.ts +0 -2
- package/package.json +7 -7
- package/php/asyncify/7_2_34/php_7_2.wasm +0 -0
- package/php/asyncify/7_3_33/php_7_3.wasm +0 -0
- package/php/asyncify/7_4_33/php_7_4.wasm +0 -0
- package/php/asyncify/8_0_30/php_8_0.wasm +0 -0
- package/php/asyncify/8_1_23/php_8_1.wasm +0 -0
- package/php/asyncify/8_2_10/php_8_2.wasm +0 -0
- package/php/asyncify/8_3_0/php_8_3.wasm +0 -0
- package/php/asyncify/8_4_0/php_8_4.wasm +0 -0
- package/php/asyncify/php_7_2.js +2 -2
- package/php/asyncify/php_7_3.js +2 -2
- package/php/asyncify/php_7_4.js +2 -2
- package/php/asyncify/php_8_0.js +2 -2
- package/php/asyncify/php_8_1.js +4 -4
- package/php/asyncify/php_8_2.js +2 -2
- package/php/asyncify/php_8_3.js +2 -2
- package/php/asyncify/php_8_4.js +2 -2
- package/php/jspi/7_2_34/php_7_2.wasm +0 -0
- package/php/jspi/7_3_33/php_7_3.wasm +0 -0
- package/php/jspi/7_4_33/php_7_4.wasm +0 -0
- package/php/jspi/8_0_30/php_8_0.wasm +0 -0
- package/php/jspi/8_1_23/php_8_1.wasm +0 -0
- package/php/jspi/8_2_10/php_8_2.wasm +0 -0
- package/php/jspi/8_3_0/php_8_3.wasm +0 -0
- package/php/jspi/8_4_0/php_8_4.wasm +0 -0
- package/php/jspi/php_7_2.js +2 -2
- package/php/jspi/php_7_3.js +2 -2
- package/php/jspi/php_7_4.js +2 -2
- package/php/jspi/php_8_0.js +2 -2
- package/php/jspi/php_8_1.js +2 -2
- package/php/jspi/php_8_2.js +2 -2
- package/php/jspi/php_8_3.js +2 -2
- package/php/jspi/php_8_4.js +2 -2
package/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
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
|
-
${
|
|
3
|
-
-----END CERTIFICATE-----`}async function
|
|
4
|
-
${
|
|
5
|
-
-----END PRIVATE KEY-----`}class
|
|
6
|
-
`))||s}function
|
|
1
|
+
"use strict";var Ie=Object.create;var z=Object.defineProperty;var De=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var be=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Pe=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of We(e))!Re.call(s,n)&&n!==t&&z(s,n,{get:()=>e[n],enumerable:!(r=De(e,n))||r.enumerable});return s};var H=(s,e,t)=>(t=s!=null?Ie(be(s)):{},Pe(e||!s||!s.__esModule?z(t,"default",{value:s,enumerable:!0}):t,s));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("@php-wasm/universal"),Be=require("comlink"),Ue=require("wasm-feature-detect"),A=require("@php-wasm/util"),v=require("@php-wasm/logger"),V=require("@php-wasm/web-service-worker"),Y=require("@php-wasm/fs-journal");function ve(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=ve(Be);function Me(s,e=void 0){Se();const t=s instanceof Worker?s:p.windowEndpoint(s,e),r=p.wrap(t),n=F(r);return new Proxy(n,{get:(i,a)=>a==="isConnected"?async()=>{for(;;)try{await Ne(r.isConnected(),200);break}catch{}}:r[a]})}async function Ne(s,e){return new Promise((t,r)=>{setTimeout(r,e),s.then(t)})}function xe(s,e){Se();const t=Promise.resolve();let r,n;const i=new Promise((c,S)=>{r=c,n=S}),a=F(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 Se(){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 F(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]:F(e[t]);case"undefined":case"number":case"string":return e[t];default:return p.proxy(e[t])}}})}async function Ce(s=w.LatestSupportedPHPVersion){if(await Ue.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 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 Z(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 M{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},ke=y(P),le={host_name:0},qe=y(le);class Ae{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 le.host_name:i.push({name_type:qe[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 M(4);return t.writeUint16(P.server_name),t.writeUint16(0),t.uint8Array}}const ue={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},X=y(ue),he={secp256r1:23,secp384r1:24,secp521r1:25,x25519:29,x448:30},Q=y(he);class Oe{static decodeFromClient(e){const t=new K(e.buffer);t.readUint16();const r=[];for(;!t.isFinished();){const n=t.readUint16();n in Q&&r.push(Q[n])}return r}static encodeForClient(e){const t=new M(6);return t.writeUint16(P.supported_groups),t.writeUint16(2),t.writeUint16(he[e]),t.uint8Array}}const He={uncompressed:0,ansiX962_compressed_prime:1,ansiX962_compressed_char2:2},ee=y(He);class Fe{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 ee&&n.push(ee[a])}return n}static encodeForClient(e){const t=new M(6);return t.writeUint16(P.ec_point_formats),t.writeUint16(2),t.writeUint8(1),t.writeUint8(He[e]),t.uint8Array}}const j={anonymous:0,rsa:1,dsa:2,ecdsa:3},te=y(j),G={none:0,md5:1,sha1:2,sha224:3,sha256:4,sha384:5,sha512:6},re=y(G);class je{static decodeFromClient(e){const t=new K(e.buffer);t.readUint16();const r=[];for(;!t.isFinished();){const n=t.readUint8(),i=t.readUint8();if(te[i]){if(!re[n]){v.logger.warn(`Unknown hash algorithm: ${n}`);continue}r.push({algorithm:te[i],hash:re[n]})}}return r}static encodeforClient(e,t){const r=new M(6);return r.writeUint16(P.signature_algorithms),r.writeUint16(2),r.writeUint8(G[e]),r.writeUint8(j[t]),r.uint8Array}}const ne={server_name:Ae,signature_algorithms:je,supported_groups:Oe,ec_point_formats:Fe};function Ge(s){const e=new K(s.buffer),t=[];for(;!e.isFinished();){const r=e.offset,n=e.readUint16(),i=ke[n],a=e.readUint16(),_=e.readUint8Array(a);if(!(i in ne))continue;const c=ne[i];t.push({type:i,data:c.decodeFromClient(_),raw:s.slice(r,r+4+a)})}return t}async function q(s,e,t,r){const n=A.concatArrayBuffers([e,t]),i=await crypto.subtle.importKey("raw",s,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]);let a=n;const _=[];for(;A.concatArrayBuffers(_).byteLength<r;){a=await se(i,a);const S=A.concatArrayBuffers([a,n]),l=await se(i,S);_.push(l)}return A.concatArrayBuffers(_).slice(0,r)}async function se(s,e){return await crypto.subtle.sign({name:"HMAC",hash:"SHA-256"},s,e)}const $e={Null:0},ze={Warning:1,Fatal:2},de=y(ze),Ve={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},fe=y(Ve),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},Ye={NamedCurve:3},Je={secp256r1:23};class ie extends Error{}const U=new Uint8Array([3,3]),Ze=crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},!0,["deriveKey","deriveBits"]);class Xe{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:Qe(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,$e.Null)),await this.writeTLSRecord(C.Handshake,D.certificate(t));const i=await Ze,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 q(i,new TextEncoder().encode("master secret"),A.concatUint8Arrays([e,t]),48)),_=await q(a,new TextEncoder().encode("key expansion"),A.concatUint8Arrays([t,e]),40),c=new K(_),S=c.readUint8Array(16),l=c.readUint8Array(16),u=c.readUint8Array(4),h=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:u,serverIV:h}}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 _=de[a.fragment[0]],c=fe[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 ie("TLS connection closed");if(this.receivedBytesBuffer=A.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 ie)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,...U,...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]=A.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=U,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=A.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,...U,...W(t.length)]),_=await crypto.subtle.encrypt({name:"AES-GCM",iv:i,additionalData:a,tagLength:128},this.sessionKeys.serverWriteKey,t);return++this.sentRecordSequenceNumber,A.concatUint8Arrays([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 X&&r.push(X[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:de[e[0]],description:fe[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=Ge(t.readUint8Array(_)),r}static clientKeyExchangePayload(e){return{exchange_keys:e.slice(1,e.length)}}static clientFinishedPayload(e){return{verify_data:e}}}function Qe(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=A.concatUint8Arrays(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([Ye.NamedCurve,...W(Je.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([G.sha256,j.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 Ae.encodeForClient()}}).filter(_=>_!==void 0),i=A.concatUint8Arrays(n),a=new Uint8Array([...U,...t,e.session_id.length,...e.session_id,...W(ue.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",A.concatUint8Arrays(e)),n=new Uint8Array(await q(t,new TextEncoder().encode("server finished"),r,12));return new Uint8Array([f.Finished,...m(n.length),...n])}static changeCipherSpec(){return new Uint8Array([1])}}function Te(s,e){return rt.generateCertificate(s,e)}function et(s){return`-----BEGIN CERTIFICATE-----
|
|
2
|
+
${pe(Ee(s.buffer))}
|
|
3
|
+
-----END CERTIFICATE-----`}async function tt(s){const e=await crypto.subtle.exportKey("pkcs8",s);return`-----BEGIN PRIVATE KEY-----
|
|
4
|
+
${pe(Ee(e))}
|
|
5
|
+
-----END PRIVATE KEY-----`}class rt{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(_e((e==null?void 0:e.notBefore)??new Date))),o.ASN1(d.UTCTime,new TextEncoder().encode(_e((e==null?void 0:e.notAfter)??st(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 nt={"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(nt))if(t===s)return e;throw new Error(`OID not found for name: ${s}`)}const ae=32,d={Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,Utf8String:12,Sequence:16|ae,Set:17|ae,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,A.concatUint8Arrays(e))}static set(e){return o.ASN1(d.Set,A.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 Ee(s){return btoa(String.fromCodePoint(...new Uint8Array(s)))}function pe(s){var e;return((e=s.match(/.{1,64}/g))==null?void 0:e.join(`
|
|
6
|
+
`))||s}function _e(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 st(s,e){const t=new Date(s);return t.setUTCFullYear(t.getUTCFullYear()+e),t}async function we(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 V.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 V.cloneRequest(i,{url:`${t}${r.url}`,...S&&{credentials:"include"}});return await fetch(l,e)}}class it extends TransformStream{constructor(){let e=new Uint8Array(0),t="SCAN_CHUNK_SIZE",r=0;super({transform(n,i){for(e=A.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 at=(s,e)=>({...s,websocket:{url:(t,r,n)=>`ws://playground.internal/?${new URLSearchParams({host:r,port:n}).toString()}`,subprotocol:"binary",decorator:()=>class extends _t{constructor(t,r){super(t,r,{CAroot:e.CAroot,corsProxyUrl:e.corsProxyUrl})}}}});class _t{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=A.concatUint8Arrays([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 Te({subject:{commonName:this.host,organizationName:this.host,countryName:"US"},issuer:this.CAroot.tbsDescription.subject},this.CAroot.keyPair),t=new Xe;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 ot=["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 ot.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 we(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
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
|
|
@@ -13,9 +13,9 @@ Content-Length: 0\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:
|
|
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:x,value:B}=await _.read();if(x){i=!0;break}n=A.concatUint8Arrays([n,B]),a=St(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",u=S.headers.get("Content-Length")!==null?parseInt(S.headers.get("Content-Length"),10):void 0,h=n.slice(a+4);let T;if(S.method!=="GET"){const x=e.getReader();let B=h.length,k=h.slice(-6);const Le=new TextEncoder().encode(`0\r
|
|
17
17
|
\r
|
|
18
|
-
`);T=new ReadableStream({async start(b){
|
|
18
|
+
`);T=new ReadableStream({async start(b){h.length>0&&b.enqueue(h),i&&b.close()},async pull(b){const{done:me,value:I}=await x.read();if(B+=(I==null?void 0:I.length)||0,I&&(b.enqueue(I),k=A.concatUint8Arrays([k,I||new Uint8Array]).slice(-5)),me||l==="content-length"&&u!==void 0&&B>=u||l==="chunked"&&k.every((ge,Ke)=>ge===Le[Ke])){b.close();return}}}),l==="chunked"&&(T=T.pipeThrough(new it))}const N=S.headers.get("Host")??t,$=new URL(S.path,r+"://"+N);return $.pathname=S.path,new Request($.toString(),{method:S.method,headers:S.headers,body:T,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
|
|
20
|
+
`).slice(1)){if(_==="")break;const[c,S]=_.split(": ");a.set(c,S)}return{method:n,path:i,headers:a}}}function St(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 Ct(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 lt=()=>({websocket:{decorator:s=>class extends s{constructor(){try{super()}catch{}}send(){return null}}}});async function At(s,e={}){var i;let t={...lt(),...e.emscriptenOptions||{}};e.tcpOverFetch&&(t=at(t,e.tcpOverFetch)),e.withICU&&(t=Ct(t));const[r,n]=await Promise.all([Ce(s),t]);return(i=e.onPhpLoaderModuleLoaded)==null||i.call(e,r),await w.loadPHPRuntime(r,n)}function ut(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 ht(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 Ht(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 dt(r,s,n)):await ye(r,s,n,e.initialSync.onProgress),Tt(t,s,n)}}async function dt(s,e,t){w.FSHelpers.mkdir(s,t);const r=new A.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=A.joinPaths(_,c.name);if(c.kind==="directory"){try{s.mkdir(l)}catch(u){if((u==null?void 0:u.errno)!==20)throw v.logger.error(u),u}i.push([c,l])}else if(c.kind==="file"){const u=await c.getFile(),h=new Uint8Array(await u.arrayBuffer());s.createDataFile(_,c.name,h,!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 ye(s,e,t,r){s.mkdirTree(t);const n=[];async function i(l,u){await Promise.all(s.readdir(l).filter(h=>h!=="."&&h!=="..").map(async h=>{const T=A.joinPaths(l,h);if(!ft(s,T)){n.push([u,T,h]);return}const N=await u.getDirectoryHandle(h,{create:!0});return await i(T,N)}))}await i(t,e);let a=0;const _=r&&wt(r,100),c=100,S=new Set;try{for(const[l,u,h]of n){const T=O(l,h,s,u).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 ft(s,e){return s.isDir(s.lookupPath(e,{follow:!0}).node.mode)}async function O(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 Tt(s,e,t){const r=[],n=Y.journalFSEvents(s,t,_=>{r.push(_)}),i=new Et(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=Y.normalizeFilesystemOperations(c);try{for(const l of S)await i.processEntry(l)}finally{_()}}return s.addEventListener("request.end",a),function(){n(),s.removeEventListener("request.end",a)}}class Et{constructor(e,t,r){this.php=e,this.opfs=t,this.memfsRoot=oe(r)}toOpfsPath(e){return oe(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 ce(this.opfs,t),n=pt(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 O(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 ce(this.opfs,i);if(e.nodeType==="directory"){const _=await a.getDirectoryHandle(n,{create:!0});await ye(this.php[w.__private__dont__use].FS,_,e.toPath),await r.removeEntry(n,{recursive:!0})}else{try{await r.removeEntry(n)}catch{}await O(a,A.basename(i),this.php[w.__private__dont__use].FS,e.toPath)}}}catch(i){throw v.logger.log({entry:e,name:n}),v.logger.error(i),i}}}function oe(s){return s.replace(/\/$/,"").replace(/\/\/+/g,"/")}function pt(s){return s.substring(s.lastIndexOf("/")+1)}async function ce(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 wt(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=et;exports.consumeAPI=Me;exports.createDirectoryHandleMountHandler=Ht;exports.exposeAPI=xe;exports.fetchWithCorsProxy=we;exports.generateCertificate=Te;exports.getPHPLoaderModule=Ce;exports.loadWebRuntime=At;exports.privateKeyToPEM=tt;exports.setupPostMessageRelay=ut;exports.spawnPHPWorkerThread=ht;
|
|
21
21
|
//# sourceMappingURL=index.cjs.map
|