@roster-lock/match-agent 0.1.0 → 0.2.0

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 (107) hide show
  1. package/client/dist/assets/index-DeYshswm.js +125 -0
  2. package/client/dist/assets/index-gxAuIfGQ.css +1 -0
  3. package/client/dist/index.html +13 -0
  4. package/client/index.html +12 -0
  5. package/client/node_modules/.bin/terser +17 -0
  6. package/client/node_modules/.bin/tsc +17 -0
  7. package/client/node_modules/.bin/vite +17 -0
  8. package/client/node_modules/.vite/deps/@rjsf_core.js +6609 -0
  9. package/client/node_modules/.vite/deps/@rjsf_core.js.map +7 -0
  10. package/client/node_modules/.vite/deps/@rjsf_validator-ajv8.js +13 -0
  11. package/client/node_modules/.vite/deps/@rjsf_validator-ajv8.js.map +7 -0
  12. package/client/node_modules/.vite/deps/@roster-lock_ts-client.js +419 -0
  13. package/client/node_modules/.vite/deps/@roster-lock_ts-client.js.map +7 -0
  14. package/client/node_modules/.vite/deps/@roster-lock_types.js +5 -0
  15. package/client/node_modules/.vite/deps/@roster-lock_types.js.map +7 -0
  16. package/client/node_modules/.vite/deps/@roster-lock_utils.js +5 -0
  17. package/client/node_modules/.vite/deps/@roster-lock_utils.js.map +7 -0
  18. package/client/node_modules/.vite/deps/_metadata.json +97 -0
  19. package/client/node_modules/.vite/deps/chunk-4D2L7OBZ.js +16039 -0
  20. package/client/node_modules/.vite/deps/chunk-4D2L7OBZ.js.map +7 -0
  21. package/client/node_modules/.vite/deps/chunk-5KLROPUR.js +292 -0
  22. package/client/node_modules/.vite/deps/chunk-5KLROPUR.js.map +7 -0
  23. package/client/node_modules/.vite/deps/chunk-77TXW5ZT.js +280 -0
  24. package/client/node_modules/.vite/deps/chunk-77TXW5ZT.js.map +7 -0
  25. package/client/node_modules/.vite/deps/chunk-I55GDNGV.js +1004 -0
  26. package/client/node_modules/.vite/deps/chunk-I55GDNGV.js.map +7 -0
  27. package/client/node_modules/.vite/deps/chunk-IIDO6PKU.js +2337 -0
  28. package/client/node_modules/.vite/deps/chunk-IIDO6PKU.js.map +7 -0
  29. package/client/node_modules/.vite/deps/chunk-NE7PXY4V.js +466 -0
  30. package/client/node_modules/.vite/deps/chunk-NE7PXY4V.js.map +7 -0
  31. package/client/node_modules/.vite/deps/chunk-WMTNK64S.js +52 -0
  32. package/client/node_modules/.vite/deps/chunk-WMTNK64S.js.map +7 -0
  33. package/client/node_modules/.vite/deps/package.json +3 -0
  34. package/client/node_modules/.vite/deps/react-dom.js +6 -0
  35. package/client/node_modules/.vite/deps/react-dom.js.map +7 -0
  36. package/client/node_modules/.vite/deps/react-dom_client.js +20217 -0
  37. package/client/node_modules/.vite/deps/react-dom_client.js.map +7 -0
  38. package/client/node_modules/.vite/deps/react-router-dom.js +14702 -0
  39. package/client/node_modules/.vite/deps/react-router-dom.js.map +7 -0
  40. package/client/node_modules/.vite/deps/react.js +5 -0
  41. package/client/node_modules/.vite/deps/react.js.map +7 -0
  42. package/client/node_modules/.vite/deps/react_jsx-dev-runtime.js +278 -0
  43. package/client/node_modules/.vite/deps/react_jsx-dev-runtime.js.map +7 -0
  44. package/client/node_modules/.vite/deps/react_jsx-runtime.js +6 -0
  45. package/client/node_modules/.vite/deps/react_jsx-runtime.js.map +7 -0
  46. package/client/node_modules/.vite/deps_temp_ab51ebe9/package.json +3 -0
  47. package/client/package.json +30 -0
  48. package/client/src/App.tsx +56 -0
  49. package/client/src/NavBar.tsx +13 -0
  50. package/client/src/api/matchAgent.ts +159 -0
  51. package/client/src/bridge/hostBridge.ts +149 -0
  52. package/client/src/components/GameLauncherSettingsForm.tsx +140 -0
  53. package/client/src/components/InstallGameLauncherLightbox.tsx +31 -0
  54. package/client/src/components/Lightbox.tsx +15 -0
  55. package/client/src/components/RequireConnection.tsx +9 -0
  56. package/client/src/components/Selection/PieceCard.tsx +36 -0
  57. package/client/src/components/Selection/PieceTypeSection.tsx +112 -0
  58. package/client/src/components/Selection/PieceTypeTabs.tsx +31 -0
  59. package/client/src/components/Selection/PlayerSelectionPanel.tsx +40 -0
  60. package/client/src/components/Selection/index.tsx +147 -0
  61. package/client/src/components/Selection/selectionPlan.ts +75 -0
  62. package/client/src/context/DownloadSessionContext.tsx +48 -0
  63. package/client/src/context/IdentityContext.tsx +53 -0
  64. package/client/src/context/JoinSettingsContext.tsx +83 -0
  65. package/client/src/context/MatchAgentContext.tsx +85 -0
  66. package/client/src/hooks/useCursorInput.ts +55 -0
  67. package/client/src/hooks/useGamepads.ts +31 -0
  68. package/client/src/main.tsx +10 -0
  69. package/client/src/pages/Connect/index.tsx +46 -0
  70. package/client/src/pages/Download/index.tsx +175 -0
  71. package/client/src/pages/Game/index.tsx +65 -0
  72. package/client/src/pages/GameLauncher/Detail.tsx +12 -0
  73. package/client/src/pages/GameLauncher/index.tsx +32 -0
  74. package/client/src/pages/JoinSettings/index.tsx +58 -0
  75. package/client/src/pages/MatchMaking/index.tsx +190 -0
  76. package/client/src/styles/global.css +355 -0
  77. package/client/tsconfig.json +17 -0
  78. package/client/tsconfig.tsbuildinfo +1 -0
  79. package/client/vite.config.ts +33 -0
  80. package/dist/config/manage.js.map +1 -1
  81. package/dist/handle-room/version-1/game-launcher.js +181 -0
  82. package/dist/handle-room/version-1/game-launcher.js.map +1 -0
  83. package/dist/handle-room/version-1/index.js +15 -2
  84. package/dist/handle-room/version-1/index.js.map +1 -1
  85. package/dist/handle-room/version-1/piece-sort.js +1 -0
  86. package/dist/handle-room/version-1/piece-sort.js.map +1 -1
  87. package/dist/index.js +7 -4
  88. package/dist/index.js.map +1 -1
  89. package/dist/serve-client.js +88 -0
  90. package/dist/serve-client.js.map +1 -0
  91. package/dist/server.js +1 -1
  92. package/dist/server.js.map +1 -1
  93. package/package.json +12 -6
  94. package/src/config/manage.ts +5 -1
  95. package/src/handle-room/version-1/game-launcher.ts +263 -0
  96. package/src/handle-room/version-1/globals/types.ts +24 -0
  97. package/src/handle-room/version-1/index.ts +23 -3
  98. package/src/handle-room/version-1/piece-sort.ts +1 -1
  99. package/src/index.ts +25 -5
  100. package/src/serve-client.ts +100 -0
  101. package/src/server.ts +1 -1
  102. package/tests/integration/game-launcher-list.test.ts +77 -0
  103. package/tests/integration/game-launcher-settings.test.ts +138 -0
  104. package/tests/integration/game-launcher-start.test.ts +81 -0
  105. package/tests/integration/helpers/fakePluginRuntime.ts +26 -1
  106. package/tests/integration/helpers/server.ts +8 -2
  107. package/src/index.old.ts +0 -71
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../utils/src/array/LinkedList.ts", "../../../../../utils/src/array/duplicate-iterable.ts", "../../../../../utils/src/array/index.ts", "../../../../../utils/src/buffer.ts", "../../../../../utils/src/string.ts", "../../../../../utils/src/JSON.ts", "../../../../../utils/src/crypto/encryption/symmetric.ts", "../../../../../utils/src/crypto/encryption/index.ts", "../../../../../utils/src/crypto/signature/asymmetric.ts", "../../../../../utils/src/crypto/signature/symmetric.ts", "../../../../../utils/src/crypto/signature/index.ts", "../../../../../utils/src/crypto/sha.ts", "../../../../../utils/src/crypto/index.ts", "../../../../../utils/src/MessageBridge/types.ts", "../../../../../utils/src/MessageBridge/event.ts", "../../../../../utils/src/MessageBridge/request.ts", "../../../../../utils/src/SimpleEvent.ts", "../../../../../utils/src/MessageBridge/stream.ts", "../../../../../utils/src/MessageBridge/index.ts", "../../../../../utils/src/Promise/withResolvers.ts", "../../../../../utils/src/Promise/SimpleEvent.ts", "../../../../../utils/src/Promise/waitForBridgeEvent.ts", "../../../../../utils/src/Promise/index.ts", "../../../../../../node_modules/.pnpm/path-to-regexp@8.4.2/node_modules/path-to-regexp/src/index.ts", "../../../../../utils/src/async.ts", "../../../../../utils/src/Router/Generic.ts", "../../../../../utils/src/Router/index.ts", "../../../../../utils/dist/SimpleMessenger/types.js", "../../../../../utils/src/SimpleMessenger/request.ts", "../../../../../utils/src/SimpleMessenger/trigger.ts", "../../../../../utils/src/SimpleMessenger/index.ts", "../../../../../utils/src/tree/index.ts", "../../../../../utils/src/fetch.ts", "../../../../../utils/src/index.ts"],
4
+ "sourcesContent": ["// LinkedList Node\nclass ListNode<T> {\n constructor(\n public value: T,\n public next: ListNode<T> | null = null,\n public prev: ListNode<T> | null = null\n ){}\n}\n\nexport class LinkedList<T> {\n private head: ListNode<T> | null = null;\n private tail: ListNode<T> | null = null;\n private _length = 0;\n\n push(value: T){\n const node = new ListNode(value);\n if(!this.tail) {\n this.head = this.tail = node;\n } else {\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n this._length++;\n }\n\n pop(): T | undefined{\n if(!this.tail) return undefined;\n const value = this.tail.value;\n this._length--;\n if(!this.tail.prev){\n this.head = null;\n this.tail = null;\n } else {\n this.tail = this.tail.prev;\n this.tail.next = null;\n }\n return value;\n }\n\n shift(): T | undefined{\n if(!this.head) return undefined;\n const value = this.head.value;\n this._length--;\n if(!this.head.next){\n this.head = null;\n this.tail = null;\n } else {\n this.head = this.head.next;\n this.head.prev = null;\n }\n return value;\n }\n\n unshift(value: T){\n const node = new ListNode(value);\n if(!this.head) {\n this.head = this.tail = node;\n } else {\n this.head.prev = node;\n node.next = this.head;\n this.head = node;\n }\n this._length++;\n }\n\n peekStart(): T | undefined{\n return this.head?.value;\n }\n\n peekEnd(): T | undefined{\n return this.tail?.value;\n }\n\n isEmpty(): boolean{\n return this._length === 0;\n }\n\n get length(): number{\n return this._length;\n }\n\n [Symbol.iterator](): Iterator<T>{\n let current = this.head;\n return {\n next: ()=>{\n if(!current) return { done: true, value: undefined };\n const value = current.value;\n current = current.next;\n return { done: false, value };\n },\n };\n }\n\n clear(){\n this.head = this.tail = null;\n this._length = 0;\n }\n}\n", "import { LinkedList } from \"./LinkedList\";\n\nexport function duplicateIterable<T>(iterable: AsyncIterable<T> | Iterable<T>, numberOfTimes: number){\n if(numberOfTimes === 0) throw new Error(\"Number of Iterables should be at least 1\")\n\n const streams: Array<BackPressureStream<T>> = []\n for(let i = 0; i < numberOfTimes; i++){\n streams.push(new BackPressureStream());\n }\n\n return {\n streams, start: async ()=>{\n try {\n for await (const item of iterable){\n for(const stream of streams){\n stream.push(item)\n }\n }\n for(const stream of streams){\n stream.end()\n }\n }catch(e){\n for(const stream of streams){\n stream.fail(e);\n }\n }\n }\n }\n\n}\n\nexport class BackPressureStream<T> {\n buffer: LinkedList<T> = new LinkedList();\n finished: null | { success: true } | { success: false, error: any } = null;\n waiting: null | (()=>any) = null;\n push(newItem: T){\n if(this.finished) throw new Error(\"Already Closed\")\n this.buffer.push(newItem);\n this.#restartLoop();\n }\n end(){\n if(this.finished) throw new Error(\"Already Closed\")\n this.finished = { success: true }\n this.#restartLoop();\n }\n fail(error: any){\n if(this.finished) throw new Error(\"Already Closed\")\n this.finished = { success: false, error }\n this.#restartLoop()\n }\n #restartLoop(){\n if(!this.waiting) return;\n const waiting = this.waiting\n this.waiting = null\n waiting();\n }\n async *[Symbol.asyncIterator]() {\n while(!this.finished || this.buffer.length){\n while(this.buffer.length){\n yield this.buffer.shift()\n }\n if(this.finished) break;\n await new Promise<void>((res)=>{\n this.waiting = res;\n })\n }\n if(!this.finished.success){\n throw this.finished.error\n }\n }\n}\n", "\nexport * from \"./duplicate-iterable\";\nexport * from \"./LinkedList\"", "\nexport function mergeBuffers(parts: Uint8Array[]): Uint8Array<ArrayBuffer> {\n const out = new Uint8Array(parts.reduce((n, p) => n + p.length, 0));\n let i = 0;\n for (const p of parts) { out.set(p, i); i += p.length; }\n return out;\n}\n", "\nlet ID_COUNTER = 0;\nexport function uniqueId(){\n return [\n padString(Date.now().toString(32), 8),\n padString((ID_COUNTER++).toString(32), 8),\n padString(Math.random().toString(32).substring(2, 10), 8),\n ].join(\"-\");\n}\n\nexport function padString(str: string, length: number, padChar: string = \"0\"){\n if(str.length >= length) return str.slice(0, length);\n return padChar.repeat(length - str.length) + str;\n}\n\nexport function strToBuffer(str: string) {\n return new TextEncoder().encode(str);\n}\n\nexport function bufferToStr(buffer: Uint8Array){\n return new TextDecoder().decode(buffer);\n}\n\nexport function uint8ArrayToHex(array: Uint8Array){\n return Array.from(array)\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('');\n}\n\nexport function hexToUint8Array(hexStr: string){\n return Uint8Array.from(\n hexStr.match(/.{2}/g)!,\n b => parseInt(b, 16)\n );\n}\n\n\nexport function fileExtension(filepath: string){\n const normalized = filepath.replaceAll(\"\\\\\", \"/\");\n const fileName = normalized.split(\"/\").pop();\n if(!fileName) return;\n const lastDot = fileName.lastIndexOf(\".\");\n if(lastDot === -1) return;\n if(lastDot === 0) return;\n return fileName.slice(lastDot)\n}\n", "\nexport type JSON_Primitive = string | number | boolean | null;\nexport type JSON_Array = Array<JSON_Primitive | JSON_Array | JSON_Object>;\nexport type JSON_Object = { [key: string]: JSON_Primitive | JSON_Array | JSON_Object | undefined };\nexport type JSON_Unknown = JSON_Primitive | JSON_Array | JSON_Object;\n\nexport function cloneJSON<T extends JSON_Unknown>(value: T): T {\n return JSON.parse(JSON.stringify(value));\n}\n\nexport function compareJSON(a: JSON_Unknown, b: JSON_Unknown): boolean {\n return canonicalJSONStringify(a) === canonicalJSONStringify(b);\n}\n\n// Stringifies JSON in a predictable way for signing\nexport function canonicalJSONStringify(value: any): string {\n // Early exit if value is not an object\n if(typeof value !== 'object') return JSON.stringify(value);\n // Early exit if value is null\n if(value === null) return JSON.stringify(value);\n\n if (Array.isArray(value)) {\n // Arrays: preserve order of elements\n const elems = value.map(v => canonicalJSONStringify(v)).join(',');\n return `[${elems}]`;\n }\n\n // Objects: sort keys\n const keys = Object.keys(value).sort();\n const props = keys.map(key => {\n const k = JSON.stringify(key);\n const v = canonicalJSONStringify(value[key]);\n return `${k}:${v}`;\n }).join(',');\n return `{${props}}`;\n}\n\nexport function isJSONObject(value: any): value is JSON_Object {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n", "import { uint8ArrayToHex, hexToUint8Array, strToBuffer } from \"../../string\";\nimport { canonicalJSONStringify } from \"../../JSON\";\n\nexport type SymmetricEncryptionKey = string & { readonly __brand: \"EncryptionKey\" };\n\n\nexport const ENCRYPT_SYMMETRIC = {\n generateKey: generateSymmetricEncryptionKey,\n encryptValue: encryptValue,\n decryptValue: decryptValue,\n}\n\nexport function generateSymmetricEncryptionKey(length = 32): SymmetricEncryptionKey {\n const bytes = crypto.getRandomValues(new Uint8Array(length));\n return uint8ArrayToHex(bytes) as SymmetricEncryptionKey;\n}\n\nexport async function encryptValue(\n masterKey: SymmetricEncryptionKey,\n value: any,\n): Promise<string> {\n const valueString = canonicalJSONStringify(value);\n const keyData = hexToUint8Array(masterKey);\n const iv = crypto.getRandomValues(new Uint8Array(12)); // GCM uses 12 bytes\n\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'AES-GCM' },\n false,\n ['encrypt']\n );\n\n const encryptedBuffer = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv },\n cryptoKey,\n strToBuffer(valueString)\n );\n\n // Return: iv:encrypted (both as hex)\n return `${uint8ArrayToHex(iv)}:${uint8ArrayToHex(new Uint8Array(encryptedBuffer))}`;\n}\n\nexport async function decryptValue(\n masterKey: SymmetricEncryptionKey,\n encryptedData: string,\n): Promise<unknown> {\n const [ivHex, encryptedHex] = encryptedData.split(':');\n const keyData = hexToUint8Array(masterKey);\n const iv = hexToUint8Array(ivHex);\n const encrypted = hexToUint8Array(encryptedHex);\n\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'AES-GCM' },\n false,\n ['decrypt']\n );\n\n const decryptedBuffer = await crypto.subtle.decrypt(\n { name: 'AES-GCM', iv },\n cryptoKey,\n encrypted\n );\n\n const decoder = new TextDecoder();\n const valueString = decoder.decode(decryptedBuffer);\n return JSON.parse(valueString);\n}\n", "import { ENCRYPT_SYMMETRIC } from \"./symmetric\";\n\nexport * from \"./symmetric\";\nexport const ENCRYPTION = {\n SYMMETRIC: ENCRYPT_SYMMETRIC\n}\n", "import { canonicalJSONStringify } from \"../../JSON\";\nimport { strToBuffer, uint8ArrayToHex, hexToUint8Array } from \"../../string\";\nimport { mergeBuffers } from \"../../buffer\";\n\ntype PublicKey = string & { readonly __brand: \"SignaturePublicKey\" };\ntype PrivateKey = string & { readonly __brand: \"SignaturePrivateKey\" };\n\nexport interface AsymmetricSignatureKeyPair {\n privateSigningKey: PrivateKey;\n publicVerificationKey: PublicKey;\n}\n\nexport const SIGNATURE_ASYMMETRIC = {\n generateKeyPair: generateAsymmetricSignatureKeyPair,\n createSignature: createAsymmetricMessageSignature,\n verifySignature: verifyAsymmetricMessageSignature\n};\n\n// ASN.1 DER wrappers for raw 32-byte Ed25519 keys (RFC 8410)\nconst PKCS8_HEADER = new Uint8Array([\n 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06,\n 0x03, 0x2b, 0x65, 0x70, 0x04, 0x22, 0x04, 0x20,\n]);\nconst SPKI_HEADER = new Uint8Array([\n 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65,\n 0x70, 0x03, 0x21, 0x00,\n]);\n\nconst ED25519 = { name: \"Ed25519\" } as const;\n\nfunction base64urlToBytes(b64url: string): Uint8Array {\n const b64 = b64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n return Uint8Array.from(atob(b64), c => c.charCodeAt(0));\n}\n\nasync function importPrivKey(raw: Uint8Array) {\n return crypto.subtle.importKey(\"pkcs8\", mergeBuffers([PKCS8_HEADER, raw]), ED25519, false, [\"sign\"]);\n}\n\nasync function importPubKey(raw: Uint8Array) {\n return crypto.subtle.importKey(\"spki\", mergeBuffers([SPKI_HEADER, raw]), ED25519, false, [\"verify\"]);\n}\n\nexport async function generateAsymmetricSignatureKeyPair(): Promise<AsymmetricSignatureKeyPair> {\n const keyPair = await crypto.subtle.generateKey(ED25519, true, [\"sign\", \"verify\"]);\n if (!(\"privateKey\" in keyPair)) throw new Error(\"Ed25519 generateKey did not return a key pair\");\n const privJwk = await crypto.subtle.exportKey(\"jwk\", keyPair.privateKey) as { d: string };\n const pubJwk = await crypto.subtle.exportKey(\"jwk\", keyPair.publicKey) as { x: string };\n return {\n privateSigningKey: uint8ArrayToHex(base64urlToBytes(privJwk.d)) as PrivateKey,\n publicVerificationKey: uint8ArrayToHex(base64urlToBytes(pubJwk.x)) as PublicKey,\n };\n}\n\nexport async function createAsymmetricMessageSignature(\n privateSigningKey: PrivateKey,\n message: any,\n): Promise<string> {\n const privKey = await importPrivKey(hexToUint8Array(privateSigningKey));\n const messageBytes = strToBuffer(canonicalJSONStringify(message));\n const signature = await crypto.subtle.sign(ED25519, privKey, messageBytes);\n return uint8ArrayToHex(new Uint8Array(signature));\n}\n\nexport async function verifyAsymmetricMessageSignature(\n publicVerificationKey: PublicKey,\n signature: string,\n message: any,\n): Promise<boolean> {\n try {\n const pubKey = await importPubKey(hexToUint8Array(publicVerificationKey));\n const messageBytes = strToBuffer(canonicalJSONStringify(message));\n return await crypto.subtle.verify(ED25519, pubKey, hexToUint8Array(signature), messageBytes);\n } catch(e) {\n return false;\n }\n}\n\n/*\n// Types Test\n(async()=>{\n const keys = await ASYMMETRIC_SIGNATURE.generateKeyPair();\n const value = { hello: \"world\" };\n const signature = await ASYMMETRIC_SIGNATURE.createSignature(\n keys.privateSigningKey, value\n )\n const valid = await ASYMMETRIC_SIGNATURE.verifySignature(\n keys.publicVerificationKey, signature, value\n )\n})()\n*/\n", "\nimport { strToBuffer, uint8ArrayToHex, hexToUint8Array } from \"../../string\";\n\n// Use HMAC\n\nexport type SymmetricSignatureKey = string & { readonly __brand: \"SignatureKey\" };\n\nexport const SIGNATURE_SYMMETRIC = {\n generateKey: generateSymmetricSignatureKey,\n createSignature: createSymmetricMessageSignature,\n verifySignature: verifySymmetricMessageSignature,\n}\n\nexport function generateSymmetricSignatureKey(): SymmetricSignatureKey {\n const bytes = crypto.getRandomValues(new Uint8Array(32));\n return uint8ArrayToHex(bytes) as SymmetricSignatureKey;\n}\n\n\nexport async function createSymmetricMessageSignature(\n key: SymmetricSignatureKey,\n message: string\n): Promise<string> {\n const keyData = hexToUint8Array(key);\n const messageData = strToBuffer(message);\n \n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n \n const signatureBuffer = await crypto.subtle.sign(\n 'HMAC',\n cryptoKey,\n messageData\n );\n \n return uint8ArrayToHex(new Uint8Array(signatureBuffer))\n}\n\n\nexport async function verifySymmetricMessageSignature(\n key: SymmetricSignatureKey,\n message: string,\n signature: string\n): Promise<boolean> {\n const expectedSignature = await createSymmetricMessageSignature(key, message);\n \n // Constant-time comparison\n if (signature.length !== expectedSignature.length) {\n return false;\n }\n \n let result = 0;\n for (let i = 0; i < signature.length; i++) {\n result |= signature.charCodeAt(i) ^ expectedSignature.charCodeAt(i);\n }\n \n return result === 0;\n}\n", "import { SIGNATURE_ASYMMETRIC } from \"./asymmetric\";\nimport { SIGNATURE_SYMMETRIC } from \"./symmetric\";\n\nexport * from \"./asymmetric\";\nexport * from \"./symmetric\";\nexport const SIGNATURE = {\n ASYMMETRIC: SIGNATURE_ASYMMETRIC,\n SYMMETRIC: SIGNATURE_SYMMETRIC\n}", "import { strToBuffer, uint8ArrayToHex } from \"../string\";\nimport { canonicalJSONStringify } from \"../JSON\";\nimport { mergeBuffers } from \"../buffer\";\n\nexport function createShaFromJSON(value: any){\n return createShaFromString(canonicalJSONStringify(value));\n}\n\nexport async function createShaFromString(value: string){\n return createShaFromBuffer(strToBuffer(value));\n}\n\nexport async function createShaFromBuffer(value: Uint8Array){\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", value as Uint8Array<ArrayBuffer>);\n return uint8ArrayToHex(new Uint8Array(hashBuffer));\n}\n\nexport async function createShaFromTextStream(value: AsyncIterable<string> | Iterable<string>){\n const parts: Uint8Array[] = [];\n for await (const chunk of value) parts.push(strToBuffer(chunk));\n return createShaFromBuffer(mergeBuffers(parts));\n}\n\nexport async function createShaFromUintStream(value: AsyncIterable<Uint8Array> | Iterable<Uint8Array>){\n const parts: Uint8Array[] = [];\n for await (const chunk of value) parts.push(chunk);\n return createShaFromBuffer(mergeBuffers(parts));\n}\n", "\nexport * from \"./encryption\";\nexport * from \"./signature\";\nexport * from \"./sha\";\n", "\nexport interface ProtocolHandler {\n handleMessage(message: MessageBridgeMessage): boolean\n}\n\n\nexport type EventMessage = {\n messageType: \"event\",\n path: string,\n value: any,\n};\n\nexport type RequestMessage = {\n id: string,\n messageType: \"request\",\n path: string,\n value: any,\n};\n\nexport type ResponseMessage = {\n id: string,\n messageType: \"response\",\n valueType: \"result\" | \"error\",\n value: any,\n};\n\nexport type StreamAttemptMessage = {\n id: string,\n messageType: \"stream-attempt\"\n path: string,\n}\n\nexport type StreamResponseMessage = {\n id: string,\n messageType: \"stream-response\",\n value: \"start\" | \"error\"\n}\n\nexport type StreamDataMessage = {\n id: string,\n messageType: \"stream-data\",\n value: any\n}\n\nexport type StreamEndMessage = {\n id: string,\n messageType: \"stream-end\"\n}\n\n\nexport type MessageBridgeMessage = (\n | EventMessage\n | RequestMessage\n | ResponseMessage\n | StreamAttemptMessage\n | StreamResponseMessage\n | StreamDataMessage\n | StreamEndMessage\n);\n\nexport function castMessage(message: any): MessageBridgeMessage{\n if(typeof message !== \"object\"){\n throw new Error(\"expecting a complex type\");\n }\n if(Array.isArray(message)){\n throw new Error(\"expecting a complex type\");\n }\n if(message === null){\n throw new Error(\"expecting a complex type\");\n }\n\n if(typeof message.messageType !== \"string\"){\n throw new Error(\"expecting a message type\");\n }\n\n if(message.messageType === \"event\"){\n if(typeof message.path !== \"string\"){\n throw new Error(\"expecting a path\");\n }\n if(typeof message.value === \"undefined\"){\n throw new Error(\"expecting a value\");\n }\n return { messageType: \"event\", path: message.path, value: message.value };\n }\n\n if(message.messageType === \"request\"){\n if(typeof message.id !== \"string\"){\n throw new Error(\"expecting an id\");\n }\n if(typeof message.path !== \"string\"){\n throw new Error(\"expecting a path\");\n }\n if(typeof message.value === \"undefined\"){\n throw new Error(\"expecting a value\");\n }\n return { id: message.id, messageType: \"request\", path: message.path, value: message.value };\n }\n\n if(message.messageType === \"response\"){\n if(typeof message.id !== \"string\"){\n throw new Error(\"expecting an id\");\n }\n if(typeof message.valueType !== \"string\"){\n throw new Error(\"expecting a value type\");\n }\n if(message.valueType !== \"result\" && message.valueType !== \"error\"){\n throw new Error(\"invalid value type\");\n }\n if(typeof message.value === \"undefined\"){\n throw new Error(\"expecting a value\");\n }\n return { id: message.id, messageType: \"response\", valueType: message.valueType, value: message.value };\n }\n\n if(message.messageType === \"stream-attempt\"){\n if(typeof message.id !== \"string\"){\n throw new Error(\"expecting an id\");\n }\n if(typeof message.path !== \"string\"){\n throw new Error(\"expecting a path\");\n }\n return { id: message.id, messageType: \"stream-attempt\", path: message.path }\n }\n if(message.messageType === \"stream-response\"){\n if(typeof message.id !== \"string\"){\n throw new Error(\"expecting an id\");\n }\n if(![\"start\", \"error\"].includes(message.value)){\n throw new Error(\"expecting a value as \\\"start\\\" or \\\"error\\\"\");\n }\n return { id: message.id, messageType: \"stream-response\", value: message.value }\n }\n if(message.messageType === \"stream-data\"){\n if(typeof message.id !== \"string\"){\n throw new Error(\"expecting an id\");\n }\n if(typeof message.value === \"undefined\"){\n throw new Error(\"expecting a value\");\n }\n return { id: message.id, messageType: \"stream-data\", value: message.value }\n }\n if(message.messageType === \"stream-end\"){\n if(typeof message.id !== \"string\"){\n throw new Error(\"expecting an id\");\n }\n return { id: message.id, messageType: \"stream-end\" }\n }\n\n throw new Error(\"invalid message type\");\n}\n", "import {\n MessageBridgeMessage,\n} from \"./types\";\n\nexport class EventHandler {\n listeners: Record<string, Array<(message: MessageBridgeMessage) => any>> = {};\n\n constructor(\n private sendMessage: (message: MessageBridgeMessage)=>void,\n private debug: boolean,\n ){}\n\n handleMessage(message: MessageBridgeMessage): boolean {\n switch(message.messageType){\n case \"event\": {\n try {\n const handlers = this.listeners[message.path];\n if(!handlers) throw new Error(`no event listener at ${message.path}`);\n Promise.resolve().then(async ()=>{\n for(const handler of handlers) {\n await handler(message.value);\n }\n })\n }catch(e) {\n this.debug && console.error(\"error handling message\", e);\n }\n return true;\n }\n }\n return false;\n }\n\n sendEvent(path: string, body: any){\n this.sendMessage({\n path,\n messageType: \"event\",\n value: body\n });\n }\n\n onEvent(path: string, handler: (data: any) => any){\n const listeners = this.listeners[path] || [];\n listeners.push(handler);\n this.listeners[path] = listeners;\n return () => {\n this.listeners[path] = (this.listeners[path] || []).filter(l => l !== handler);\n };\n }\n\n}", "import { uniqueId } from \"../string\";\nimport { MessageBridgeMessage } from \"./types\";\n\nexport class RequestHandler {\n listeners: Record<string, (message: unknown) => any> = {};\n pending: Record<string, {\n resolve: (value: any) => void,\n reject: (reason: any) => void,\n }> = {};\n\n constructor(\n private sendMessage: (message: MessageBridgeMessage)=>void,\n private debug: boolean,\n ){}\n\n handleMessage(message: MessageBridgeMessage){\n switch(message.messageType){\n case \"request\": {\n try {\n const handler = this.listeners[message.path];\n if(!handler) throw new Error(`no request listener at ${message.path}`);\n Promise.resolve().then(async ()=>{\n try {\n const result = await handler(message.value);\n this.sendMessage({\n id: message.id,\n messageType: \"response\",\n valueType: \"result\",\n value: result\n });\n }catch(e){\n this.sendMessage({\n id: message.id,\n messageType: \"response\",\n valueType: \"error\",\n value: typeof e === \"string\" ? e : e instanceof Error ? e.message : \"Unknown Error\"\n });\n }\n })\n }catch(e) {\n this.sendMessage({\n id: message.id,\n messageType: \"response\",\n valueType: \"error\",\n value: typeof e === \"string\" ? e : e instanceof Error ? e.message : \"Unknown Error\"\n });\n }\n return true;\n }\n case \"response\": {\n try {\n const pending = this.pending[message.id];\n if(!pending) throw new Error(`no pending request for ${message.id}`);\n delete this.pending[message.id];\n if(message.valueType === \"error\"){\n pending.reject(message.value);\n } else {\n pending.resolve(message.value);\n }\n }catch(e) {\n this.debug && console.error(\"error handling message\", e);\n }\n return true;\n }\n }\n return false;\n }\n\n sendRequest(path: string, body: any): Promise<any>{\n return new Promise((resolve, reject)=>{\n const id = uniqueId();\n this.pending[id] = { resolve, reject };\n this.sendMessage({\n id,\n path,\n messageType: \"request\",\n value: body\n });\n });\n }\n\n onRequest(path: string, handler: (data: any) => any){\n if(path in this.listeners){\n throw new Error(`Duplicate Path: ${path}`);\n }\n this.listeners[path] = handler;\n return () => {\n if(this.listeners[path] === handler) delete this.listeners[path];\n };\n }\n}\n", "\ntype Listener<Args extends Array<any>> = (...args: Args)=>void;\n\ninterface ISimpleEventEmitterContext<Args extends Array<any>> {\n config: {\n allowDuplicateCallback: boolean,\n maximumListeners: number,\n suppressErrors: boolean,\n }\n listeners: Array<Listener<Args>>\n}\n\nexport interface ISimpleEventEmitter<Args extends Array<any>> extends ISimpleEventEmitterContext<Args> {\n config: {\n allowDuplicateCallback: boolean,\n maximumListeners: number,\n suppressErrors: boolean,\n }\n listeners: Array<Listener<Args>>\n (cb: Listener<Args>): ()=>boolean\n onReturnOff(cb: Listener<Args>): ()=>boolean\n\n on(cb: Listener<Args>): void\n off(cb: Listener<Args>): boolean\n emit(...args: Args): void\n\n filter(filterFn: (...args: Args)=>boolean): ISimpleEventEmitter<Args>\n}\n\nexport function createSimpleEmitter<Args extends Array<any>>(\n config = {\n allowDuplicateCallback: false,\n maximumListeners: Number.POSITIVE_INFINITY,\n suppressErrors: true,\n }\n): ISimpleEventEmitter<Args>{\n\n if(config.maximumListeners <= 0){\n throw new Error(\"maximumListeners can't be less than or equal to 0\");\n }\n\n const context: ISimpleEventEmitterContext<Args> = {\n config,\n listeners: [],\n }\n\n const emitter = SimpleEmitter.bind(context as ISimpleEventEmitter<Args>) as ISimpleEventEmitter<Args>;\n\n emitter.onReturnOff = emitter;\n emitter.on = addListener.bind(context as ISimpleEventEmitter<Args>);\n emitter.off = removeListener.bind(context as ISimpleEventEmitter<Args>);\n emitter.emit = emitEvent.bind(context as ISimpleEventEmitter<Args>);\n emitter.filter = filterEvent.bind(context as ISimpleEventEmitter<Args>);\n\n (context as any).on = emitter.on;\n (context as any).off = emitter.off;\n\n return emitter;\n}\n\nfunction SimpleEmitter<Args extends Array<any>>(\n this: ISimpleEventEmitter<Args>, cb: Listener<Args>\n){\n this.on(cb);\n return ()=>(this.off(cb));\n}\n\nfunction addListener<Args extends Array<any>>(\n this: ISimpleEventEmitter<Args>, cb: Listener<Args>\n){\n if(this.config.maximumListeners === this.listeners.length){\n throw new Error(\"Hit Maximum Listeners\")\n }\n if(!this.config.allowDuplicateCallback){\n for(const listener of this.listeners){\n if(listener === cb){\n throw new Error(\"Can't add listener multiple times\")\n }\n }\n }\n this.listeners.push(cb);\n}\n\nfunction removeListener<Args extends Array<any>>(\n this: ISimpleEventEmitter<Args>, cb: Listener<Args>\n){\n const offset = this.listeners.indexOf(cb);\n if(offset === -1){\n return false;\n }\n this.listeners.splice(offset, 1);\n return true;\n}\n\nfunction emitEvent<Args extends Array<any>>(\n this: ISimpleEventEmitter<Args>, ...args: Args\n){\n for(const listener of this.listeners){\n try {\n listener(...args);\n }catch(e){\n if(!this.config.suppressErrors) throw e;\n }\n }\n}\n\nfunction filterEvent<Args extends Array<any>>(\n this: ISimpleEventEmitter<Args>, filter: (...args: Args)=>boolean\n){\n const newEmitter = createSimpleEmitter(this.config);\n const weakRef = new WeakRef(newEmitter);\n\n const listener = (...args: Args)=>{\n const newEmitter = weakRef.deref();\n if(!newEmitter) return this.off(listener);\n if(filter(...args)) newEmitter.emit(...args);\n }\n this.on(listener);\n return newEmitter;\n}\n", "import { createSimpleEmitter } from \"../SimpleEvent\"\nimport { uniqueId } from \"../string\";\nimport { MessageBridgeMessage } from \"./types\";\n\nexport class SimpleStream {\n state: \"setup\" | \"failed\" | \"active\" | \"closed\" = \"setup\"\n onData = createSimpleEmitter<[unknown]>()\n onEnd = createSimpleEmitter()\n constructor(\n private _sendData: (data: unknown)=>void,\n private _sendEnd: ()=>void,\n ){\n this.onEnd(()=>{\n if(this.state === \"active\"){\n this.state = \"closed\"\n }\n })\n }\n sendData(data: any){\n if(this.state === \"setup\") throw new Error(\n 'Cannot send on stream during setup. Defer with Promise.resolve().then(() => stream.sendData(...))'\n );\n if(this.state === \"failed\") throw new Error(\n 'Cannot send on stream after failed to connect.'\n )\n if(this.state === \"closed\") throw new Error(\n 'Cannot send on stream after closed.'\n )\n this._sendData(data);\n }\n\n sendEnd(){\n if(this.state === \"setup\") throw new Error(\n 'Cannot send on stream during setup. Defer with Promise.resolve().then(() => stream.sendEnd())'\n );\n if(this.state === \"failed\") throw new Error(\n 'Cannot end on stream after failed to connect.'\n )\n if(this.state === \"closed\") throw new Error(\n 'Cannot end on stream after closed.'\n )\n this._sendEnd();\n this.onEnd.emit();\n }\n}\n\nexport class StreamRequest extends SimpleStream {\n waitForOpen: Promise<void>;\n _resolveOpen!: () => void;\n _rejectOpen!: (reason: any) => void;\n\n constructor(sendData: (data: any)=>void, sendEnd: ()=>void){\n super(sendData, sendEnd);\n this.waitForOpen = new Promise((resolve, reject) => {\n this._resolveOpen = resolve;\n this._rejectOpen = reject;\n });\n }\n}\n\n\nexport class StreamHandler {\n listeners: Record<string, (message: SimpleStream) => any> = {};\n pending: Record<string, {\n stream: SimpleStream,\n resolve: (value: any) => void,\n reject: (reason: any) => void,\n }> = {};\n active: Record<string, SimpleStream> = {}\n\n constructor(\n private sendMessage: (message: MessageBridgeMessage)=>void,\n private debug: boolean,\n ){}\n\n handleMessage(message: MessageBridgeMessage){\n switch(message.messageType){\n case \"stream-attempt\": {\n try {\n if(this.active[message.id])\n throw new Error(\"Duplicate Stream Id\")\n const handler = this.listeners[message.path];\n if(!handler)\n throw new Error(`no request listener at ${message.path}`);\n\n // handler runs now so it can attach listeners (onData/onEnd)\n // before the peer is told it's safe to send anything.\n const stream = this.createStream(message.id);\n const result = handler(stream);\n stream.state = \"active\";\n this.active[message.id] = stream;\n this.sendMessage({\n id: message.id,\n messageType: \"stream-response\",\n value: \"start\"\n });\n Promise.resolve(result).catch((e)=>{\n this.debug && console.warn(\"stream error handling suppressed\", e);\n });\n }catch(e) {\n this.sendMessage({\n id: message.id,\n messageType: \"stream-response\",\n value: \"error\"\n });\n }\n return true;\n }\n case \"stream-response\": {\n const pending = this.pending[message.id];\n if(!pending)\n throw new Error(`no pending stream for ${message.id}`);\n if(this.active[message.id])\n throw new Error(\"Duplicate Stream Id\")\n delete this.pending[message.id];\n if(message.value === \"error\"){\n pending.reject(\"Failed to establish stream\");\n return true;\n }\n this.active[message.id] = pending.stream;\n pending.resolve(pending.stream);\n return true;\n }\n case \"stream-data\": {\n const active = this.active[message.id];\n if(!active) throw new Error(`no active stream for ${message.id}`);\n active.onData.emit(message.value);\n return true;\n }\n case \"stream-end\": {\n const active = this.active[message.id];\n if(!active) throw new Error(`no active stream for ${message.id}`);\n delete this.active[message.id]\n active.onEnd.emit();\n return true;\n }\n }\n return false;\n\n }\n private createStreamRequest(streamId: string){\n const stream = new StreamRequest(\n (data)=>{\n if(!(streamId in this.active)){\n throw new Error(\"Stream isn't active\")\n }\n this.sendMessage({\n id: streamId,\n messageType: \"stream-data\",\n value: data\n })\n },\n ()=>{\n if(!(streamId in this.active)){\n throw new Error(\"Stream isn't active\")\n }\n delete this.active[streamId];\n this.sendMessage({\n id: streamId,\n messageType: \"stream-end\"\n });\n }\n );\n return stream;\n }\n private createStream(streamId: string){\n const stream = new SimpleStream(\n (data)=>{\n if(!(streamId in this.active)){\n throw new Error(\"Stream isn't active\")\n }\n this.sendMessage({\n id: streamId,\n messageType: \"stream-data\",\n value: data\n })\n },\n ()=>{\n if(!(streamId in this.active)){\n throw new Error(\"Stream isn't active\")\n }\n delete this.active[streamId];\n this.sendMessage({\n id: streamId,\n messageType: \"stream-end\"\n });\n }\n );\n return stream;\n }\n\n sendStream(path: string): StreamRequest {\n const id = uniqueId();\n const stream = this.createStreamRequest(id);\n stream.state = \"setup\";\n this.pending[id] = {\n stream,\n resolve: ()=>{\n stream.state = \"active\";\n stream._resolveOpen();\n },\n reject: (reason)=>{\n stream.state = \"failed\";\n stream._rejectOpen(reason);\n }\n };\n Promise.resolve().then(()=>this.sendMessage({ id, path, messageType: 'stream-attempt' }));\n return stream;\n }\n onStream(path: string, handler: (stream: SimpleStream)=>any){\n if(path in this.listeners){\n throw new Error(`Duplicate Path: ${path}`);\n }\n this.listeners[path] = handler;\n return () => {\n if(this.listeners[path] === handler) delete this.listeners[path];\n };\n }\n}\n\n", "\nimport {\n MessageBridgeMessage,\n castMessage,\n} from \"./types\";\n\nexport type { MessageBridgeMessage } from \"./types\";\nimport { EventHandler } from \"./event\";\nimport { RequestHandler } from \"./request\";\nimport { SimpleStream, StreamHandler, StreamRequest } from \"./stream\";\n\nexport class MessageBridge {\n private _destroyed = false;\n private eventHandler: EventHandler\n private requestHandler: RequestHandler;\n private streamHandler: StreamHandler\n\n constructor(\n private sendMessage: (message: MessageBridgeMessage) => void,\n protected debug: boolean = false\n ){\n this.eventHandler = new EventHandler(sendMessage, debug);\n this.requestHandler = new RequestHandler(sendMessage, debug);\n this.streamHandler = new StreamHandler(sendMessage, debug);\n }\n\n async handleMessage(messageRaw: any): Promise<void>{\n const message = castMessage(messageRaw);\n if(this.eventHandler.handleMessage(message)) return;\n if(this.requestHandler.handleMessage(message)) return;\n if(this.streamHandler.handleMessage(message)) return;\n }\n destroy(){\n if(this._destroyed) return;\n this._destroyed = true;\n const error = new Error('Bridge destroyed');\n for(const pending of Object.values(this.requestHandler.pending)){\n pending.reject(error);\n }\n this.requestHandler.pending = {};\n for(const pending of Object.values(this.streamHandler.pending)){\n pending.reject(error);\n }\n this.streamHandler.pending = {};\n for(const stream of Object.values(this.streamHandler.active)){\n stream.onEnd.emit();\n }\n this.streamHandler.active = {};\n }\n\n sendBridge(path: string): BridgeRequest {\n if(this._destroyed) throw new Error('Bridge destroyed');\n return new BridgeRequest(this.sendStream(path), this.debug);\n }\n\n onBridge(path: string, handler: (session: BridgedSession)=>any){\n if(this._destroyed) throw new Error('Bridge destroyed');\n return this.onStream(path, (stream)=>{\n const session = new BridgedSession(stream, this.debug);\n return handler(session);\n });\n }\n\n sendStream(path: string): StreamRequest {\n if(this._destroyed) throw new Error('Bridge destroyed');\n return this.streamHandler.sendStream(path)\n }\n\n onStream(path: string, handler: (stream: SimpleStream)=>any){\n if(this._destroyed) throw new Error('Bridge destroyed');\n return this.streamHandler.onStream(path, handler)\n }\n\n sendRequest(path: string, body: any): Promise<any>{\n if(this._destroyed) throw new Error('Bridge destroyed');\n return this.requestHandler.sendRequest(path, body);\n }\n\n onRequest(path: string, handler: (data: any) => any){\n if(this._destroyed) throw new Error('Bridge destroyed');\n return this.requestHandler.onRequest(path, handler);\n }\n\n sendEvent(path: string, body: any){\n if(this._destroyed) throw new Error('Bridge destroyed');\n return this.eventHandler.sendEvent(path, body);\n }\n\n onEvent(path: string, handler: (data: any) => any){\n if(this._destroyed) throw new Error('Bridge destroyed');\n return this.eventHandler.onEvent(path, handler);\n }\n}\n\nexport class BridgedSession extends MessageBridge {\n protected _stream: SimpleStream;\n\n constructor(stream: SimpleStream, debug?: boolean){\n super((msg)=>stream.sendData(msg), debug);\n this._stream = stream;\n stream.onData((data)=>this.handleMessage(data));\n stream.onEnd(()=>this.destroy());\n }\n\n get onEnd(){ return this._stream.onEnd; }\n sendEnd(){ this._stream.sendEnd(); }\n}\n\nexport class BridgeRequest extends BridgedSession {\n private _request: StreamRequest;\n\n constructor(stream: StreamRequest, debug?: boolean){\n super(stream, debug);\n this._request = stream;\n stream.waitForOpen.catch(()=>{\n this.destroy();\n })\n }\n\n get waitForOpen(){ return this._request.waitForOpen; }\n}\n\n", "\nexport function promiseWithResolvers<T>(){\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason?: any) => void;\n const promise = new Promise<T>((res, rej) => { resolve = res; reject = rej; });\n return { promise, resolve, reject };\n};\n", "\nimport { promiseWithResolvers } from \"./withResolvers\";\nimport { ISimpleEventEmitter } from \"../SimpleEvent\";\nexport function waitForEvent<Args extends Array<any>>(event: ISimpleEventEmitter<Args>, abortSignal?: AbortSignal){\n if(abortSignal?.aborted){\n return Promise.reject(new Error(\"Aborted\"));\n }\n\n const { promise, resolve, reject } = promiseWithResolvers<Args>();\n const off = event(((...args: Args)=>{\n resolve(args);\n }));\n\n promise.finally(()=>{\n off();\n });\n\n if(abortSignal){\n abortSignal.addEventListener(\"abort\", ()=>(\n reject(new Error(\"Aborted\"))\n ));\n }\n return promise;\n}\n\nexport function waitForEventTimeout(event: ISimpleEventEmitter<any[]>, timeout: number, abortSignal?: AbortSignal){\n if(abortSignal?.aborted){\n return Promise.reject(new Error(\"Aborted\"));\n }\n\n const { promise, resolve, reject } = promiseWithResolvers<void>();\n const eventTimedOut = ()=>(resolve());\n\n let to = setTimeout(eventTimedOut, timeout);\n const off = event(((...args: any[])=>{\n clearTimeout(to);\n to = setTimeout(eventTimedOut, timeout);\n }));\n\n promise.finally(()=>{\n off(); clearTimeout(to);\n });\n\n if(abortSignal){\n abortSignal.addEventListener(\"abort\", ()=>(\n reject(new Error(\"Aborted\"))\n ));\n }\n\n return promise;\n}\n", "import { MessageBridge } from \"../MessageBridge\";\nimport { promiseWithResolvers } from \"./withResolvers\";\n\nexport function waitForBridgeEvent<T>(bridge: MessageBridge, event: string, timeout: number){\n const { resolve, reject, promise } = promiseWithResolvers();\n\n const to = setTimeout(()=>{\n reject(new Error(\"Timeout\"));\n }, timeout);\n\n bridge.onEvent(event, (data)=>{\n resolve(data as T);\n });\n\n // promise.finally() returns its own derived promise that adopts the same\n // rejection - since that derived promise isn't returned or stored anywhere,\n // it's a second, floating unhandled-rejection source independent of what\n // the caller does with the returned `promise` below. Swallow it here.\n promise.finally(()=>{\n clearTimeout(to);\n }).catch(()=>{});\n\n return promise;\n}\n", "\nexport * from \"./SimpleEvent\";\nexport * from \"./waitForBridgeEvent\";\nexport * from \"./withResolvers\";\n\nexport function delay(ms: number){\n return new Promise(resolve=>setTimeout(resolve, ms));\n}\n", "const DEFAULT_DELIMITER = \"/\";\nconst NOOP_VALUE = (value: string) => value;\nconst ID_START = /^[$_\\p{ID_Start}]$/u;\nconst ID_CONTINUE = /^[$\\u200c\\u200d\\p{ID_Continue}]$/u;\nconst ID = /^[$_\\p{ID_Start}][$\\u200c\\u200d\\p{ID_Continue}]*$/u;\n\n/**\n * Encode a string into another string.\n */\nexport type Encode = (value: string) => string;\n\n/**\n * Decode a string into another string.\n */\nexport type Decode = (value: string) => string;\n\nexport interface ParseOptions {\n /**\n * A function for encoding input strings.\n */\n encodePath?: Encode;\n}\n\nexport interface PathToRegexpOptions {\n /**\n * Matches the path completely without trailing characters. (default: `true`)\n */\n end?: boolean;\n /**\n * Allows optional trailing delimiter to match. (default: `true`)\n */\n trailing?: boolean;\n /**\n * Match will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * The default delimiter for segments. (default: `'/'`)\n */\n delimiter?: string;\n}\n\nexport interface MatchOptions extends PathToRegexpOptions {\n /**\n * Function for decoding strings for params, or `false` to disable entirely. (default: `decodeURIComponent`)\n */\n decode?: Decode | false;\n}\n\nexport interface CompileOptions {\n /**\n * Function for encoding input strings for output into the path, or `false` to disable entirely. (default: `encodeURIComponent`)\n */\n encode?: Encode | false;\n /**\n * The default delimiter for segments. (default: `'/'`)\n */\n delimiter?: string;\n}\n\n/**\n * Escape text for stringify to path.\n */\nfunction escapeText(str: string) {\n return str.replace(/[{}()\\[\\]+?!:*\\\\]/g, \"\\\\$&\");\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escape(str: string) {\n return str.replace(/[.+*?^${}()[\\]|/\\\\]/g, \"\\\\$&\");\n}\n\n/**\n * Plain text.\n */\nexport interface Text {\n type: \"text\";\n value: string;\n}\n\n/**\n * A parameter designed to match arbitrary text within a segment.\n */\nexport interface Parameter {\n type: \"param\";\n name: string;\n}\n\n/**\n * A wildcard parameter designed to match multiple segments.\n */\nexport interface Wildcard {\n type: \"wildcard\";\n name: string;\n}\n\n/**\n * A set of possible tokens to expand when matching.\n */\nexport interface Group {\n type: \"group\";\n tokens: Token[];\n}\n\n/**\n * A token that corresponds with a regexp capture.\n */\nexport type Key = Parameter | Wildcard;\n\n/**\n * A sequence of `path-to-regexp` keys that match capturing groups.\n */\nexport type Keys = Array<Key>;\n\n/**\n * A sequence of path match characters.\n */\nexport type Token = Text | Parameter | Wildcard | Group;\n\n/**\n * Tokenized path instance.\n */\nexport class TokenData {\n constructor(\n public readonly tokens: Token[],\n public readonly originalPath?: string,\n ) {}\n}\n\n/**\n * ParseError is thrown when there is an error processing the path.\n */\nexport class PathError extends TypeError {\n constructor(\n message: string,\n public readonly originalPath: string | undefined,\n ) {\n let text = message;\n if (originalPath) text += `: ${originalPath}`;\n text += `; visit https://git.new/pathToRegexpError for info`;\n super(text);\n }\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): TokenData {\n const { encodePath = NOOP_VALUE } = options;\n const chars = [...str];\n let index = 0;\n\n function consumeUntil(end: string): Token[] {\n const output: Token[] = [];\n let path = \"\";\n\n function writePath() {\n if (!path) return;\n output.push({\n type: \"text\",\n value: encodePath(path),\n });\n path = \"\";\n }\n\n while (index < chars.length) {\n const value = chars[index++];\n\n if (value === end) {\n writePath();\n return output;\n }\n\n if (value === \"\\\\\") {\n if (index === chars.length) {\n throw new PathError(`Unexpected end after \\\\ at index ${index}`, str);\n }\n\n path += chars[index++];\n continue;\n }\n\n if (value === \":\" || value === \"*\") {\n const type = value === \":\" ? \"param\" : \"wildcard\";\n let name = \"\";\n\n if (ID_START.test(chars[index])) {\n do {\n name += chars[index++];\n } while (ID_CONTINUE.test(chars[index]));\n } else if (chars[index] === '\"') {\n let quoteStart = index;\n\n while (index < chars.length) {\n if (chars[++index] === '\"') {\n index++;\n quoteStart = 0;\n break;\n }\n\n // Increment over escape characters.\n if (chars[index] === \"\\\\\") index++;\n\n name += chars[index];\n }\n\n if (quoteStart) {\n throw new PathError(\n `Unterminated quote at index ${quoteStart}`,\n str,\n );\n }\n }\n\n if (!name) {\n throw new PathError(`Missing parameter name at index ${index}`, str);\n }\n\n writePath();\n output.push({ type, name });\n continue;\n }\n\n if (value === \"{\") {\n writePath();\n output.push({\n type: \"group\",\n tokens: consumeUntil(\"}\"),\n });\n continue;\n }\n\n if (\n value === \"}\" ||\n value === \"(\" ||\n value === \")\" ||\n value === \"[\" ||\n value === \"]\" ||\n value === \"+\" ||\n value === \"?\" ||\n value === \"!\"\n ) {\n throw new PathError(`Unexpected ${value} at index ${index - 1}`, str);\n }\n\n path += value;\n }\n\n if (end) {\n throw new PathError(\n `Unexpected end at index ${index}, expected ${end}`,\n str,\n );\n }\n\n writePath();\n return output;\n }\n\n return new TokenData(consumeUntil(\"\"), str);\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile<P extends ParamData = ParamData>(\n path: Path,\n options: CompileOptions & ParseOptions = {},\n) {\n const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } =\n options;\n const data = typeof path === \"object\" ? path : parse(path, options);\n const fn = tokensToFunction(data.tokens, delimiter, encode);\n\n return function path(params: P = {} as P) {\n const missing: string[] = [];\n const path = fn(params, missing);\n\n if (missing.length) {\n throw new TypeError(`Missing parameters: ${missing.join(\", \")}`);\n }\n\n return path;\n };\n}\n\nexport type ParamData = Partial<Record<string, string | string[]>>;\nexport type PathFunction<P extends ParamData> = (data?: P) => string;\n\n/**\n * Internal path builder function.\n */\ntype TokenEncoder = (data: ParamData, missing: string[]) => string;\n\nfunction tokensToFunction(\n tokens: Token[],\n delimiter: string,\n encode: Encode | false,\n): TokenEncoder {\n const encoders = tokens.map((token) =>\n tokenToFunction(token, delimiter, encode),\n );\n\n return (data: ParamData, missing: string[]) => {\n let result = \"\";\n\n for (const encoder of encoders) {\n result += encoder(data, missing);\n }\n\n return result;\n };\n}\n\n/**\n * Convert a single token into a path building function.\n */\nfunction tokenToFunction(\n token: Token,\n delimiter: string,\n encode: Encode | false,\n): TokenEncoder {\n if (token.type === \"text\") return () => token.value;\n\n if (token.type === \"group\") {\n const fn = tokensToFunction(token.tokens, delimiter, encode);\n\n return (data, missing) => {\n const len = missing.length;\n const value = fn(data, missing);\n if (missing.length === len) return value;\n\n missing.length = len; // Reset optional group.\n return \"\";\n };\n }\n\n const encodeValue = encode || NOOP_VALUE;\n\n if (token.type === \"wildcard\" && encode !== false) {\n return (data, missing) => {\n const value = data[token.name];\n if (value == null) {\n missing.push(token.name);\n return \"\";\n }\n\n if (!Array.isArray(value) || value.length === 0) {\n throw new TypeError(`Expected \"${token.name}\" to be a non-empty array`);\n }\n\n let result = \"\";\n\n for (let i = 0; i < value.length; i++) {\n if (typeof value[i] !== \"string\") {\n throw new TypeError(`Expected \"${token.name}/${i}\" to be a string`);\n }\n\n if (i > 0) result += delimiter;\n result += encodeValue(value[i]);\n }\n\n return result;\n };\n }\n\n return (data, missing) => {\n const value = data[token.name];\n if (value == null) {\n missing.push(token.name);\n return \"\";\n }\n\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected \"${token.name}\" to be a string`);\n }\n\n return encodeValue(value);\n };\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult<P extends ParamData> {\n path: string;\n params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match<P extends ParamData> = false | MatchResult<P>;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction<P extends ParamData> = (path: string) => Match<P>;\n\n/**\n * Supported path types.\n */\nexport type Path = string | TokenData;\n\n/**\n * Transform a path into a match function.\n */\nexport function match<P extends ParamData>(\n path: Path | Path[],\n options: MatchOptions & ParseOptions = {},\n): MatchFunction<P> {\n const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } =\n options;\n const { regexp, keys } = pathToRegexp(path, options);\n\n const decoders = keys.map((key) => {\n if (decode === false) return NOOP_VALUE;\n if (key.type === \"param\") return decode;\n return (value: string) => value.split(delimiter).map(decode);\n });\n\n return function match(input: string) {\n const m = regexp.exec(input);\n if (!m) return false;\n\n const path = m[0];\n const params = Object.create(null);\n\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n const decoder = decoders[i - 1];\n params[key.name] = decoder(m[i]);\n }\n\n return { path, params };\n };\n}\n\n/**\n * Transform a path into a regular expression and capture keys.\n */\nexport function pathToRegexp(\n path: Path | Path[],\n options: PathToRegexpOptions & ParseOptions = {},\n) {\n const {\n delimiter = DEFAULT_DELIMITER,\n end = true,\n sensitive = false,\n trailing = true,\n } = options;\n const keys: Keys = [];\n let source = \"\";\n let combinations = 0;\n\n function process(path: Path | Path[]) {\n if (Array.isArray(path)) {\n for (const p of path) process(p);\n return;\n }\n\n const data = typeof path === \"object\" ? path : parse(path, options);\n flatten(data.tokens, 0, [], (tokens) => {\n if (combinations >= 256) {\n throw new PathError(\"Too many path combinations\", data.originalPath);\n }\n\n if (combinations > 0) source += \"|\";\n source += toRegExpSource(tokens, delimiter, keys, data.originalPath);\n combinations++;\n });\n }\n\n process(path);\n\n let pattern = `^(?:${source})`;\n if (trailing) pattern += \"(?:\" + escape(delimiter) + \"$)?\";\n pattern += end ? \"$\" : \"(?=\" + escape(delimiter) + \"|$)\";\n\n return { regexp: new RegExp(pattern, sensitive ? \"\" : \"i\"), keys };\n}\n\n/**\n * Generate a flat list of sequence tokens from the given tokens.\n */\nfunction flatten(\n tokens: Token[],\n index: number,\n result: Exclude<Token, Group>[],\n callback: (result: Exclude<Token, Group>[]) => void,\n): void {\n while (index < tokens.length) {\n const token = tokens[index++];\n\n if (token.type === \"group\") {\n const len = result.length;\n flatten(token.tokens, 0, result, (seq) =>\n flatten(tokens, index, seq, callback),\n );\n result.length = len;\n continue;\n }\n\n result.push(token);\n }\n\n callback(result);\n}\n\n/**\n * Transform a flat sequence of tokens into a regular expression.\n */\nfunction toRegExpSource(\n tokens: Exclude<Token, Group>[],\n delimiter: string,\n keys: Keys,\n originalPath: string | undefined,\n): string {\n let result = \"\";\n let backtrack = \"\";\n let wildcardBacktrack = \"\";\n let prevCaptureType: 0 | 1 | 2 = 0;\n let hasSegmentCapture = 0;\n let index = 0;\n\n function hasInSegment(index: number, type: Token[\"type\"]) {\n while (index < tokens.length) {\n const token = tokens[index++];\n if (token.type === type) return true;\n if (token.type === \"text\") {\n if (token.value.includes(delimiter)) break;\n }\n }\n return false;\n }\n\n function peekText(index: number) {\n let result = \"\";\n while (index < tokens.length) {\n const token = tokens[index++];\n if (token.type !== \"text\") break;\n result += token.value;\n }\n return result;\n }\n\n while (index < tokens.length) {\n const token = tokens[index++];\n\n if (token.type === \"text\") {\n result += escape(token.value);\n backtrack += token.value;\n if (prevCaptureType === 2) wildcardBacktrack += token.value;\n if (token.value.includes(delimiter)) hasSegmentCapture = 0;\n continue;\n }\n\n if (token.type === \"param\" || token.type === \"wildcard\") {\n if (prevCaptureType && !backtrack) {\n throw new PathError(\n `Missing text before \"${token.name}\" ${token.type}`,\n originalPath,\n );\n }\n\n if (token.type === \"param\") {\n result +=\n hasSegmentCapture & 2 // Seen wildcard in segment.\n ? `(${negate(delimiter, backtrack)}+)`\n : hasInSegment(index, \"wildcard\") // See wildcard later in segment.\n ? `(${negate(delimiter, peekText(index))}+)`\n : hasSegmentCapture & 1 // Seen parameter in segment.\n ? `(${negate(delimiter, backtrack)}+|${escape(backtrack)})`\n : `(${negate(delimiter, \"\")}+)`;\n\n hasSegmentCapture |= prevCaptureType = 1;\n } else {\n result +=\n hasSegmentCapture & 2 // Seen wildcard in segment.\n ? `(${negate(backtrack, \"\")}+)`\n : wildcardBacktrack // No capture in segment, seen wildcard in path.\n ? `(${negate(wildcardBacktrack, \"\")}+|${negate(delimiter, \"\")}+)`\n : `([^]+)`;\n\n wildcardBacktrack = \"\";\n hasSegmentCapture |= prevCaptureType = 2;\n }\n\n keys.push(token);\n backtrack = \"\";\n continue;\n }\n\n throw new TypeError(`Unknown token type: ${(token as any).type}`);\n }\n\n return result;\n}\n\n/**\n * Block backtracking on previous text/delimiter.\n */\nfunction negate(a: string, b: string): string {\n if (b.length > a.length) return negate(b, a); // Longest string first.\n\n if (a === b) b = \"\"; // Cleaner regex strings, no duplication.\n if (b.length > 1) return `(?:(?!${escape(a)}|${escape(b)})[^])`;\n if (a.length > 1) return `(?:(?!${escape(a)})[^${escape(b)}])`;\n return `[^${escape(a + b)}]`;\n}\n\n/**\n * Stringify an array of tokens into a path string.\n */\nfunction stringifyTokens(tokens: Token[], index: number): string {\n let value = \"\";\n\n while (index < tokens.length) {\n const token = tokens[index++];\n\n if (token.type === \"text\") {\n value += escapeText(token.value);\n continue;\n }\n\n if (token.type === \"group\") {\n value += \"{\" + stringifyTokens(token.tokens, 0) + \"}\";\n continue;\n }\n\n if (token.type === \"param\") {\n value += \":\" + stringifyName(token.name, tokens[index]);\n continue;\n }\n\n if (token.type === \"wildcard\") {\n value += \"*\" + stringifyName(token.name, tokens[index]);\n continue;\n }\n\n throw new TypeError(`Unknown token type: ${(token as any).type}`);\n }\n\n return value;\n}\n\n/**\n * Stringify token data into a path string.\n */\nexport function stringify(data: TokenData): string {\n return stringifyTokens(data.tokens, 0);\n}\n\n/**\n * Stringify a parameter name, escaping when it cannot be emitted directly.\n */\nfunction stringifyName(name: string, next: Token | undefined): string {\n if (!ID.test(name)) return JSON.stringify(name);\n\n if (next?.type === \"text\" && ID_CONTINUE.test(next.value[0])) {\n return JSON.stringify(name);\n }\n\n return name;\n}\n", "\nexport function eachSeries<T>(\n values: Array<T>,\n iterator: (value: T, next: (err?: any)=>void)=>void,\n finishedCB: (err?: any)=>void\n){\n let index = 0;\n function next(err?: any){\n if(err) return finishedCB(err);\n if(index >= values.length) return finishedCB();\n iterator(values[index++], next);\n }\n next();\n}", "\nimport { match } from \"path-to-regexp\";\nimport { eachSeries } from \"../async\";\n\nexport type RouterConfig = { mergeParams?: boolean };\n\ntype Matcher = ReturnType<typeof match>;\ntype RouteInfo = {\n url: URL,\n params: Record<string, string>,\n}\n\nexport type GenericHandlerCallback<RequestType> = (request: RequestType, params: RouteInfo, callback: (err?: any)=>void)=>any;\nexport type GenericRouterCallbackArg<RequestType> = (\n | GenericRouter<RequestType>\n | GenericHandlerCallback<RequestType>\n)\n\nexport class GenericRouter<RequestType> {\n handlers: Array<{\n method: string,\n path: string,\n matcher: Matcher,\n callbacks: Array<GenericHandlerCallback<RequestType>>,\n isPrefix: boolean,\n }> = [];\n constructor(\n private getRequestURL: (request: RequestType)=>URL,\n private getRequestMethod: (request: RequestType)=>string,\n private config: RouterConfig = {}\n ){}\n use(path: string, ...callbacks: Array<GenericRouterCallbackArg<RequestType>>){\n return this.addHandler(\"*\", path, true, ...callbacks);\n }\n all(path: string, ...callbacks: Array<GenericRouterCallbackArg<RequestType>>){\n return this.addHandler(\"*\", path, false, ...callbacks);\n }\n protected addHandler(\n method: string, path: string, isPrefix: boolean,\n ...callbacks: Array<GenericRouterCallbackArg<RequestType>>\n ){\n const matcher = match(path, { end: !isPrefix, decode: decodeURIComponent });\n const realCallbacks: Array<GenericHandlerCallback<RequestType>> = callbacks.map((callback)=>(\n (callback instanceof GenericRouter) ? (request, params, cb)=>(callback.handleRequest(request, cb, params)) :\n callback\n ));\n this.handlers.push({\n method: method,\n path: path,\n matcher: matcher,\n callbacks: realCallbacks,\n isPrefix: isPrefix,\n });\n return this;\n }\n handleRequest(request: RequestType, callback: (err?: any)=>void, parentRoute?: RouteInfo){\n if(!parentRoute){\n parentRoute = {\n url: new URL(this.getRequestURL(request).href, \"ws://localhost:80\"),\n params: {},\n }\n } else {\n parentRoute = {\n url: new URL(parentRoute.url.href),\n params: !this.config.mergeParams ? {} : { ...parentRoute.params },\n }\n }\n\n const pathname = parentRoute.url.pathname;\n if(pathname === null){\n Promise.resolve(new Error(\"no pathname in request\")).then(callback);\n return;\n }\n const method = this.getRequestMethod(request);\n\n eachSeries(this.handlers, (handler, nextHandler)=>{\n if(handler.method !== method && handler.method !== \"*\") return nextHandler();\n const matchResult = handler.matcher(pathname);\n if(matchResult === false) return nextHandler();\n\n const { params, path: matchedPath } = matchResult;\n\n const nextInfo: RouteInfo = {\n url: new URL(parentRoute.url.toString()),\n params: { ...parentRoute.params, ...(params as Record<string, string>) },\n };\n\n if(handler.isPrefix){\n nextInfo.url.pathname = nextInfo.url.pathname.slice(matchedPath.length) || \"/\";\n }\n\n eachSeries(handler.callbacks, async (fn, nextFn)=>{\n let callbacks = 0\n let failed = false;\n try {\n await fn(request, nextInfo, (err?: any)=>{\n callbacks++;\n if(callbacks > 1){\n console.error(\"Callback called multiple times\", callbacks);\n console.trace();\n return;\n }\n if(failed){\n console.error(\"Callback called after error\", callbacks);\n console.trace();\n return;\n }\n nextFn(err);\n });\n }catch(e){\n if(callbacks > 0){\n console.error(\"Error occured after callback called\");\n console.trace();\n return;\n }\n failed = true;\n nextFn(e);\n }\n }, nextHandler);\n }, callback);\n }\n}\n\n", "\nexport * from \"./Generic\";\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=types.js.map", "import { JSON_Unknown } from \"../JSON\";\nimport { uniqueId } from \"../string\";\n\nimport { promiseWithResolvers } from \"../Promise/withResolvers\";\nimport { SimpleMessenger } from \"./types\"\n\ntype RequestMessage = {\n type: \"request\",\n path: string,\n id: string,\n data: unknown\n}\n\nfunction castRequest(message: unknown): message is RequestMessage {\n if(typeof message !== \"object\") return false\n if(Array.isArray(message) || message === null) return false;\n if(!(\"type\" in message) || message.type !== \"request\") return false;\n if(!(\"path\" in message) || typeof message.path !== \"string\") return false;\n if(!(\"id\" in message) || typeof message.id !== \"string\") return false;\n if(!(\"data\" in message)) return false;\n return true;\n}\n\nexport function handleRequest(\n messager: SimpleMessenger, path: string, handler: (data: undefined | JSON_Unknown)=>Promise<JSON_Unknown>\n){\n messager.onMessage(async (message)=>{\n if(!castRequest(message)){\n return console.log(\"Ignoring Message, Invalid Request Message\", message);\n }\n const { path: messagePath, id: messageId, data } = message;\n if(messagePath !== path){\n return console.warn(\"Ignoring Message, different path\");\n };\n try {\n const result = await handler(data as undefined | JSON_Unknown);\n messager.sendMessage({\n type: \"response\",\n path, id: messageId,\n responseType: \"result\", data: result\n });\n }catch(e: unknown){\n if(!(e instanceof Error)){\n e = new Error(\"Unkown Error\");\n }\n messager.sendMessage({\n type: \"response\",\n path, id: messageId,\n responseType: \"error\",\n data: { message: (e as Error).message }\n });\n }\n })\n}\n\ntype ResponseMessage = {\n type: \"response\",\n path: string,\n id: string,\n responseType: \"result\" | \"error\",\n data: unknown\n}\n\nfunction castResponse(message: unknown): message is ResponseMessage {\n if(typeof message !== \"object\") return false\n if(Array.isArray(message) || message === null) return false;\n if(!(\"type\" in message) || message.type !== \"response\") return false;\n if(!(\"path\" in message) || typeof message.path !== \"string\") return false;\n if(!(\"id\" in message) || typeof message.id !== \"string\") return false;\n if(\n !(\"responseType\" in message) ||\n typeof message.responseType !== \"string\" ||\n [\"result\", \"error\"].includes(message.responseType)\n ) return false;\n if(!(\"data\" in message)) return false;\n return true;\n}\n\nexport function makeRequest(\n messager: SimpleMessenger, path: string, data: undefined | JSON_Unknown\n): Promise<JSON_Unknown>{\n const originalId = uniqueId();\n const { resolve, reject, promise } = promiseWithResolvers<JSON_Unknown>();\n const off = messager.onMessage(async (message)=>{\n try {\n if(!castResponse(message)){\n return console.log(\"Ignoring Message, Invalid Response Message\", message);\n }\n const { path: messagePath, id: messageId, responseType, data: dataUncasted } = message;\n if(messagePath !== path){\n return console.warn(\"Ignoring Message, different path\");\n };\n if(originalId !== messageId){\n return console.warn(\"Ignoring Message, different ids\");\n }\n const data = dataUncasted as JSON_Unknown;\n if(responseType === \"error\"){\n throw new ResponseError(\"Response Failed\", data);\n }\n off();\n resolve(data);\n }catch(e){\n off();\n reject(e);\n }\n });\n messager.sendMessage({ type: \"request\", path, id: originalId, ...(data ? { data } : {}) });\n return promise;\n}\n\n\nclass ResponseError extends Error {\n constructor(message: string, public data: JSON_Unknown){\n super(message);\n }\n}", "import { JSON_Unknown } from \"../JSON\";\n\nimport { SimpleMessenger } from \"./types\"\n\n\ntype TriggerMessage = {\n type: \"trigger\",\n path: string,\n data: unknown\n}\n\nfunction castTrigger(message: unknown): message is TriggerMessage {\n if(typeof message !== \"object\") return false\n if(Array.isArray(message) || message === null) return false;\n if(!(\"type\" in message) || message.type !== \"trigger\") return false;\n if(!(\"path\" in message) || typeof message.path !== \"string\") return false;\n if(!(\"data\" in message)) return false;\n return true;\n}\n\nexport function handleTrigger(\n messager: SimpleMessenger, path: string, handler: (data: undefined | JSON_Unknown)=>any\n){\n messager.onMessage(async (message)=>{\n if(!castTrigger(message)){\n return console.log(\"Ignoring Message, Invalid Trigger Message\", message);\n }\n const { path: messagePath, data } = message;\n if(messagePath !== path){\n return console.warn(\"Ignoring Message, different path\");\n };\n handler(data as undefined | JSON_Unknown);\n })\n}\n\nexport function makeTrigger(\n messager: SimpleMessenger, path: string, data: undefined | JSON_Unknown\n){\n return messager.sendMessage({\n type: \"trigger\",\n path,\n ...(data ? { data } : {})\n });\n}\n", "import { JSON_Unknown } from \"../JSON\";\nimport { ISimpleEventEmitter } from \"../SimpleEvent\";\nimport { uniqueId } from \"../string\";\n\nexport * from \"./types\"\nexport * from \"./request\"\nexport * from \"./trigger\"\n", "enum State {\n Unchecked,\n Checking,\n NoProblems,\n}\n\nexport function treeHasCycle(keys: Array<string>, getRequires: (key: string) => Array<string>): null | Array<string> {\n const checkState = new Map<string, State>();\n let activeError: null | string = null;\n\n // Initialize all as unvisited\n for (const name of keys) {\n checkState.set(name, State.Unchecked);\n }\n\n // If we have a cycle, return true\n function checkDependencies(name: string, depChain: Array<string>): null | Array<string> {\n checkState.set(name, State.Checking); // Currently visiting\n depChain.push(name);\n\n const requireList = getRequires(name);\n for (const required of requireList) {\n if(!checkState.has(required)){\n activeError = `Missing required ${required} for ${name}`;\n return null;\n }\n const requiredState = checkState.get(required);\n\n // If the required node has already been considered clean, we're ok\n if (requiredState === State.NoProblems) continue;\n // If the required node has been visited in this branch, we have a cycle\n if (requiredState === State.Checking){\n depChain.push(required);\n return depChain;\n }\n // Otherwise this is a new node we need to check\n const descendantChain = checkDependencies(required, depChain)\n if (descendantChain) return descendantChain;\n }\n\n // all dependencies are clean so this is clean\n checkState.set(name, State.NoProblems);\n depChain.pop();\n return null;\n }\n\n for (const name of keys) {\n // If we haven't visited this node yet, visit it\n if (checkState.get(name) === State.Unchecked) {\n const chain = checkDependencies(name, [])\n if (chain) return chain;\n }\n if(activeError) break;\n }\n\n if(activeError) throw new Error(activeError);\n\n return null;\n}\n\n\nenum FindAllState {\n Unchecked,\n Checking,\n Finished,\n}\ntype Cycle = Array<string>;\nexport function findAllCycles(keys: Array<string>, getRequires: (key: string) => Array<string>): Array<Cycle> {\n const checkState = new Map<string, FindAllState>();\n const cycles: Array<Cycle> = [];\n let activeError: null | string = null;\n\n // Initialize all as unvisited\n for (const name of keys) {\n checkState.set(name, FindAllState.Unchecked);\n }\n\n // If we have a cycle, return true\n function checkDependencies(name: string, depChain: Array<string>) {\n checkState.set(name, FindAllState.Checking); // Currently visiting\n depChain.push(name);\n\n const requireList = getRequires(name);\n for (const required of requireList) {\n if(!checkState.has(required)){\n activeError = `Missing required ${required} for ${name}`;\n return;\n }\n const requiredState = checkState.get(required);\n\n // If the required node has already been considered clean, we're ok\n if (requiredState === FindAllState.Finished) continue;\n // If the required node has been visited in this branch, we have a cycle\n if (requiredState === FindAllState.Checking){\n const newCycle = [...depChain, required];\n // The start of the dependency chain may not be the start of the cycle\n // For each cycle, rotate the elements until the start of the cycle is the first element\n while(newCycle[0] !== newCycle.at(-1)) newCycle.shift();\n cycles.push(newCycle)\n continue;\n }\n // Otherwise this is a new node we need to check\n checkDependencies(required, depChain)\n if(activeError) return;\n }\n\n // all dependencies are clean so this is clean\n checkState.set(name, FindAllState.Finished);\n depChain.pop();\n return;\n }\n\n for (const name of keys) {\n // If we haven't visited this node yet, visit it\n if (checkState.get(name) === FindAllState.Unchecked) {\n checkDependencies(name, [])\n }\n if(activeError) break;\n }\n\n if(activeError) throw new Error(activeError);\n\n return cycles;\n}\n\n\nexport function getCyclesUsingKey(key: string, allCycles: Array<Cycle>){\n const pieceCycles = [];\n for(const cycleMutable of allCycles){\n if(!cycleMutable.includes(key)) continue\n const cycle = [...cycleMutable];\n if(cycle[0] === key){\n pieceCycles.push(cycle);\n continue;\n }\n cycle.shift();\n while(cycle[0] !== key){\n const first = cycle.shift();\n if(!first) throw new Error(\"Empty cycle, shouldn't happen\");\n cycle.push(first);\n }\n cycle.push(key);\n pieceCycles.push(cycle);\n }\n return pieceCycles;\n}\n", "\nimport { JSON_Unknown } from \"./JSON\";\n\nexport function fetchBody(method: string, body: JSON_Unknown): RequestInit {\n return {\n method,\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n }\n }\n}\n\nexport async function handleFetch<T extends JSON_Unknown>(fetched: ReturnType<typeof fetch>): Promise<T>{\n const response = await fetched;\n const json = await response.json();\n\n if(!response.ok){\n throw new FetchError(\"Fetch Failed\", response, json as JSON_Unknown);\n }\n return json as T;\n}\n\n\nclass FetchError extends Error {\n url: string;\n statusCode: number;\n constructor(\n message: string,\n public response: Response,\n public body?: JSON_Unknown,\n ){\n super(message);\n this.url = response.url;\n this.statusCode = response.status;\n }\n}\n", "\nexport * from \"./array\";\nexport * from \"./buffer\";\nexport * from \"./crypto\";\nexport * from \"./MessageBridge\";\nexport * from \"./Promise\";\nexport * from \"./Router\";\nexport * from \"./SimpleMessenger\";\nexport * from \"./tree\";\nexport * from \"./async\";\nexport * from \"./fetch\";\nexport * from \"./JSON\";\nexport * from \"./SimpleEvent\";\nexport * from \"./string\";\n"],
5
+ "mappings": "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",
6
+ "names": ["newEmitter", "path", "match", "index", "result", "require_types", "data", "State", "FindAllState"]
7
+ }