@epic-web/workshop-app 5.0.1 → 5.0.2

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 (131) hide show
  1. package/build/client/assets/{_-D0Tgngwe.js → _-ZHCWB__B.js} +2 -2
  2. package/build/client/assets/{_-D0Tgngwe.js.map → _-ZHCWB__B.js.map} +1 -1
  3. package/build/client/assets/_exerciseNumber-BFTlBdr4.js +2 -0
  4. package/build/client/assets/_exerciseNumber-BFTlBdr4.js.map +1 -0
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-7kSd_6hH.js → _exerciseNumber_._stepNumber-_687iGFh.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-7kSd_6hH.js.map → _exerciseNumber_._stepNumber-_687iGFh.js.map} +1 -1
  7. package/build/client/assets/_exerciseNumber_.finished-BEfn-nJi.js +2 -0
  8. package/build/client/assets/_exerciseNumber_.finished-BEfn-nJi.js.map +1 -0
  9. package/build/client/assets/{_layout-BwzhY4NI.js → _layout-BLJr2x2F.js} +2 -2
  10. package/build/client/assets/{_layout-BwzhY4NI.js.map → _layout-BLJr2x2F.js.map} +1 -1
  11. package/build/client/assets/_layout-BriOqd2R.js +2 -0
  12. package/build/client/assets/_layout-BriOqd2R.js.map +1 -0
  13. package/build/client/assets/{_layout-BUs3av-e.js → _layout-Cfbi6StB.js} +2 -2
  14. package/build/client/assets/{_layout-BUs3av-e.js.map → _layout-Cfbi6StB.js.map} +1 -1
  15. package/build/client/assets/_layout-frPHZWgR.js +6 -0
  16. package/build/client/assets/_layout-frPHZWgR.js.map +1 -0
  17. package/build/client/assets/{accordion-OfO-5m5D.js → accordion-DuE9VejZ.js} +2 -2
  18. package/build/client/assets/{accordion-OfO-5m5D.js.map → accordion-DuE9VejZ.js.map} +1 -1
  19. package/build/client/assets/{account-BatJhmSV.js → account-DDuV9rZX.js} +2 -2
  20. package/build/client/assets/{account-BatJhmSV.js.map → account-DDuV9rZX.js.map} +1 -1
  21. package/build/client/assets/app-wbMCZEiv.js +2 -0
  22. package/build/client/assets/{app-CJ9ElQg6.js.map → app-wbMCZEiv.js.map} +1 -1
  23. package/build/client/assets/{button-EE0aPg10.js → button-CMkJ8p0a.js} +2 -2
  24. package/build/client/assets/{button-EE0aPg10.js.map → button-CMkJ8p0a.js.map} +1 -1
  25. package/build/client/assets/{components-CME-nGId.js → components-DZ8XIeZ3.js} +2 -2
  26. package/build/client/assets/{components-CME-nGId.js.map → components-DZ8XIeZ3.js.map} +1 -1
  27. package/build/client/assets/diff-B6thd_Sf.js +2 -0
  28. package/build/client/assets/diff-B6thd_Sf.js.map +1 -0
  29. package/build/client/assets/diff-BEk79KPK.js +2 -0
  30. package/build/client/assets/{diff-Cvtc-qzL.js.map → diff-BEk79KPK.js.map} +1 -1
  31. package/build/client/assets/{discord-BRTW4Rnh.js → discord-C9bVfiZ6.js} +2 -2
  32. package/build/client/assets/{discord-BRTW4Rnh.js.map → discord-C9bVfiZ6.js.map} +1 -1
  33. package/build/client/assets/discord-DYeU0QX6.js +2 -0
  34. package/build/client/assets/discord-DYeU0QX6.js.map +1 -0
  35. package/build/client/assets/{entry.client-3M2p-8I3.js → entry.client-CW5CUf_W.js} +2 -2
  36. package/build/client/assets/{entry.client-3M2p-8I3.js.map → entry.client-CW5CUf_W.js.map} +1 -1
  37. package/build/client/assets/{epic-video-yrWoJVFy.js → epic-video-bs7WmhbC.js} +2 -2
  38. package/build/client/assets/{epic-video-yrWoJVFy.js.map → epic-video-bs7WmhbC.js.map} +1 -1
  39. package/build/client/assets/{error-boundary-COkPRBOZ.js → error-boundary-BcGxKpte.js} +2 -2
  40. package/build/client/assets/{error-boundary-COkPRBOZ.js.map → error-boundary-BcGxKpte.js.map} +1 -1
  41. package/build/client/assets/finished-C2dgX1d-.js +2 -0
  42. package/build/client/assets/finished-C2dgX1d-.js.map +1 -0
  43. package/build/client/assets/{index-BwhlO_gF.js → index-BczhSZ3e.js} +2 -2
  44. package/build/client/assets/{index-BwhlO_gF.js.map → index-BczhSZ3e.js.map} +1 -1
  45. package/build/client/assets/{index-CXyf3Reb.js → index-BjNhezSK.js} +2 -2
  46. package/build/client/assets/{index-CXyf3Reb.js.map → index-BjNhezSK.js.map} +1 -1
  47. package/build/client/assets/{index-YNIH4TH8.js → index-BvihEwfB.js} +2 -2
  48. package/build/client/assets/{index-YNIH4TH8.js.map → index-BvihEwfB.js.map} +1 -1
  49. package/build/client/assets/index-C2yr7Uiu.js +2 -0
  50. package/build/client/assets/index-C2yr7Uiu.js.map +1 -0
  51. package/build/client/assets/{index-R-sUGQfT.js → index-CuV1bRbu.js} +2 -2
  52. package/build/client/assets/{index-R-sUGQfT.js.map → index-CuV1bRbu.js.map} +1 -1
  53. package/build/client/assets/{index-Dx5GmdYq.js → index-DBrRQJxF.js} +2 -2
  54. package/build/client/assets/{index-Dx5GmdYq.js.map → index-DBrRQJxF.js.map} +1 -1
  55. package/build/client/assets/{index-1cKOJFpX.js → index-DF_XBInP.js} +2 -2
  56. package/build/client/assets/{index-1cKOJFpX.js.map → index-DF_XBInP.js.map} +1 -1
  57. package/build/client/assets/{index-B-hHvmeV.js → index-YtpQLUzj.js} +2 -2
  58. package/build/client/assets/{index-B-hHvmeV.js.map → index-YtpQLUzj.js.map} +1 -1
  59. package/build/client/assets/{loading-sXkYDMsx.js → loading-Br41_Pbf.js} +2 -2
  60. package/build/client/assets/{loading-sXkYDMsx.js.map → loading-Br41_Pbf.js.map} +1 -1
  61. package/build/client/assets/{login-Cc73KLYm.js → login-kjV7hrVt.js} +2 -2
  62. package/build/client/assets/{login-Cc73KLYm.js.map → login-kjV7hrVt.js.map} +1 -1
  63. package/build/client/assets/manifest-32ad9742.js +1 -0
  64. package/build/client/assets/{mdx-CpyquP9i.js → mdx-CRxPouxB.js} +2 -2
  65. package/build/client/assets/{mdx-CpyquP9i.js.map → mdx-CRxPouxB.js.map} +1 -1
  66. package/build/client/assets/{misc-CxCgA-_O.js → misc-BE75ioh8.js} +2 -2
  67. package/build/client/assets/{misc-CxCgA-_O.js.map → misc-BE75ioh8.js.map} +1 -1
  68. package/build/client/assets/{nav-chevrons-g-C0ilNz.js → nav-chevrons-DYiI8EMU.js} +2 -2
  69. package/build/client/assets/{nav-chevrons-g-C0ilNz.js.map → nav-chevrons-DYiI8EMU.js.map} +1 -1
  70. package/build/client/assets/{onboarding-B7TLVi2l.js → onboarding-B4Z_yevk.js} +2 -2
  71. package/build/client/assets/{onboarding-B7TLVi2l.js.map → onboarding-B4Z_yevk.js.map} +1 -1
  72. package/build/client/assets/{pe-CUZaIcdt.js → pe-CvPIToj6.js} +2 -2
  73. package/build/client/assets/{pe-CUZaIcdt.js.map → pe-CvPIToj6.js.map} +1 -1
  74. package/build/client/assets/{presence-Cr--lRCr.js → presence-Dd98AJ_5.js} +2 -2
  75. package/build/client/assets/{presence-Cr--lRCr.js.map → presence-Dd98AJ_5.js.map} +1 -1
  76. package/build/client/assets/{preview-C7dtR2VR.js → preview-DZcdG4kw.js} +2 -2
  77. package/build/client/assets/{preview-C7dtR2VR.js.map → preview-DZcdG4kw.js.map} +1 -1
  78. package/build/client/assets/{product-BAWG1Vut.js → product-mjsTrqXs.js} +2 -2
  79. package/build/client/assets/{product-BAWG1Vut.js.map → product-mjsTrqXs.js.map} +1 -1
  80. package/build/client/assets/{progress-BFm2U-l5.js → progress-Co-59mG2.js} +2 -2
  81. package/build/client/assets/{progress-BFm2U-l5.js.map → progress-Co-59mG2.js.map} +1 -1
  82. package/build/client/assets/{progress-bar-D3kudPcr.js → progress-bar-F8_2mvYp.js} +2 -2
  83. package/build/client/assets/{progress-bar-D3kudPcr.js.map → progress-bar-F8_2mvYp.js.map} +1 -1
  84. package/build/client/assets/{request-info-CEhUGODY.js → request-info-DGnmXtfj.js} +2 -2
  85. package/build/client/assets/{request-info-CEhUGODY.js.map → request-info-DGnmXtfj.js.map} +1 -1
  86. package/build/client/assets/revalidation-ws-DcvYvzyj.js +2 -0
  87. package/build/client/assets/revalidation-ws-DcvYvzyj.js.map +1 -0
  88. package/build/client/assets/root-Cl86OUog.js +11 -0
  89. package/build/client/assets/root-Cl86OUog.js.map +1 -0
  90. package/build/client/assets/{set-playground-DW0yVaNn.js → set-playground-pMKmtPtz.js} +2 -2
  91. package/build/client/assets/{set-playground-DW0yVaNn.js.map → set-playground-pMKmtPtz.js.map} +1 -1
  92. package/build/client/assets/{support-hcqGIpir.js → support-B0E_F4Zh.js} +2 -2
  93. package/build/client/assets/{support-hcqGIpir.js.map → support-B0E_F4Zh.js.map} +1 -1
  94. package/build/client/assets/test-B6zIK2V6.js +2 -0
  95. package/build/client/assets/{test-DbZkv25C.js.map → test-B6zIK2V6.js.map} +1 -1
  96. package/build/client/assets/{tests-BR7RFlr5.js → tests-BeAEgPAw.js} +2 -2
  97. package/build/client/assets/{tests-BR7RFlr5.js.map → tests-BeAEgPAw.js.map} +1 -1
  98. package/build/client/assets/{tooltip-kD4kSf1i.js → tooltip-6-WS-Xux.js} +2 -2
  99. package/build/client/assets/{tooltip-kD4kSf1i.js.map → tooltip-6-WS-Xux.js.map} +1 -1
  100. package/build/client/assets/{use-event-source-A_0lEOPX.js → use-event-source-CCGBLG92.js} +2 -2
  101. package/build/client/assets/{use-event-source-A_0lEOPX.js.map → use-event-source-CCGBLG92.js.map} +1 -1
  102. package/build/client/assets/{user-DvujSs-t.js → user-Boua6jiU.js} +2 -2
  103. package/build/client/assets/{user-DvujSs-t.js.map → user-Boua6jiU.js.map} +1 -1
  104. package/build/client/assets/{workshop-config-CL4F08kr.js → workshop-config-Ce9sSc3I.js} +2 -2
  105. package/build/client/assets/{workshop-config-CL4F08kr.js.map → workshop-config-Ce9sSc3I.js.map} +1 -1
  106. package/build/server/index.js +768 -692
  107. package/build/server/index.js.map +1 -1
  108. package/dist/server/index.js +83 -34
  109. package/package.json +4 -4
  110. package/build/client/assets/_exerciseNumber-1JworToC.js +0 -2
  111. package/build/client/assets/_exerciseNumber-1JworToC.js.map +0 -1
  112. package/build/client/assets/_exerciseNumber_.finished-B4D2ZAmj.js +0 -2
  113. package/build/client/assets/_exerciseNumber_.finished-B4D2ZAmj.js.map +0 -1
  114. package/build/client/assets/_layout-BPwIOXxN.js +0 -6
  115. package/build/client/assets/_layout-BPwIOXxN.js.map +0 -1
  116. package/build/client/assets/_layout-CKnDy_9Z.js +0 -2
  117. package/build/client/assets/_layout-CKnDy_9Z.js.map +0 -1
  118. package/build/client/assets/app-CJ9ElQg6.js +0 -2
  119. package/build/client/assets/diff-Cvtc-qzL.js +0 -2
  120. package/build/client/assets/diff-jgZ_RGra.js +0 -2
  121. package/build/client/assets/diff-jgZ_RGra.js.map +0 -1
  122. package/build/client/assets/discord-BhzUjmbI.js +0 -2
  123. package/build/client/assets/discord-BhzUjmbI.js.map +0 -1
  124. package/build/client/assets/finished-Ct6I1SZV.js +0 -2
  125. package/build/client/assets/finished-Ct6I1SZV.js.map +0 -1
  126. package/build/client/assets/index-Ccssehd9.js +0 -2
  127. package/build/client/assets/index-Ccssehd9.js.map +0 -1
  128. package/build/client/assets/manifest-f5f44d87.js +0 -1
  129. package/build/client/assets/root-9wVBEzOq.js +0 -68
  130. package/build/client/assets/root-9wVBEzOq.js.map +0 -1
  131. package/build/client/assets/test-DbZkv25C.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"presence-Cr--lRCr.js","sources":["../../../../workshop-presence/src/presence.ts","../../../../../node_modules/@noble/hashes/_assert.js","../../../../../node_modules/@noble/hashes/_u64.js","../../../../../node_modules/@noble/hashes/crypto.js","../../../../../node_modules/@noble/hashes/utils.js","../../../../../node_modules/@noble/hashes/sha3.js","../../../../../node_modules/@paralleldrive/cuid2/src/index.js","../../../../../node_modules/@paralleldrive/cuid2/index.js","../../../../../node_modules/partysocket/dist/chunk-KZ3GGBVP.mjs","../../../../../node_modules/partysocket/dist/chunk-G2EOJEOR.mjs","../../../../../node_modules/partysocket/dist/chunk-G7CWGN4S.mjs","../../../../../node_modules/partysocket/dist/react.mjs","../../../app/utils/presence.tsx"],"sourcesContent":["import { z } from 'zod'\n\nexport const partykitRoom = 'epic-web-presence'\n// export const partykitBaseUrl = `http://127.0.0.1:1999/parties/main/${partykitRoom}`\nexport const partykitBaseUrl = `https://epic-web-presence.kentcdodds.partykit.dev/parties/main/${partykitRoom}`\n\nexport const UserSchema = z.object({\n\tid: z.string(),\n\tavatarUrl: z.string().nullable().optional(),\n\tname: z.string().nullable().optional(),\n\tlocation: z\n\t\t.object({\n\t\t\tworkshopTitle: z.string().nullable().optional(),\n\t\t\torigin: z.string().nullable().optional(),\n\t\t\texercise: z\n\t\t\t\t.object({\n\t\t\t\t\ttype: z\n\t\t\t\t\t\t.union([z.literal('problem'), z.literal('solution')])\n\t\t\t\t\t\t.nullable()\n\t\t\t\t\t\t.optional(),\n\t\t\t\t\texerciseNumber: z.number().nullable().optional(),\n\t\t\t\t\tstepNumber: z.number().nullable().optional(),\n\t\t\t\t})\n\t\t\t\t.nullable()\n\t\t\t\t.optional(),\n\t\t})\n\t\t.nullable()\n\t\t.optional(),\n})\n\nexport const MessageSchema = z\n\t.object({\n\t\ttype: z.literal('remove-user'),\n\t\tpayload: z.object({ id: z.string() }),\n\t})\n\t.or(z.object({ type: z.literal('add-user'), payload: UserSchema }))\n\t.or(\n\t\tz.object({\n\t\t\ttype: z.literal('presence'),\n\t\t\tpayload: z.object({ users: z.array(UserSchema) }),\n\t\t}),\n\t)\n\nexport type Message = z.infer<typeof MessageSchema>\n\nexport type User = z.infer<typeof UserSchema>\n\nexport const PresenceSchema = z.object({ users: z.array(UserSchema) })\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.output = exports.exists = exports.hash = exports.bytes = exports.bool = exports.number = exports.isBytes = void 0;\nfunction number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`positive integer expected, not ${n}`);\n}\nexports.number = number;\nfunction bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`boolean expected, not ${b}`);\n}\nexports.bool = bool;\n// copied from utils\nfunction isBytes(a) {\n return (a instanceof Uint8Array ||\n (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));\n}\nexports.isBytes = isBytes;\nfunction bytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\nexports.bytes = bytes;\nfunction hash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(h.outputLen);\n number(h.blockLen);\n}\nexports.hash = hash;\nfunction exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nexports.exists = exists;\nfunction output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nexports.output = output;\nconst assert = { number, bool, bytes, hash, exists, output };\nexports.default = assert;\n//# sourceMappingURL=_assert.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.add5L = exports.add5H = exports.add4H = exports.add4L = exports.add3H = exports.add3L = exports.add = exports.rotlBL = exports.rotlBH = exports.rotlSL = exports.rotlSH = exports.rotr32L = exports.rotr32H = exports.rotrBL = exports.rotrBH = exports.rotrSL = exports.rotrSH = exports.shrSL = exports.shrSH = exports.toBig = exports.split = exports.fromBig = void 0;\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nexports.fromBig = fromBig;\nfunction split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nexports.split = split;\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\nexports.toBig = toBig;\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nexports.shrSH = shrSH;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.shrSL = shrSL;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexports.rotrSH = rotrSH;\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.rotrSL = rotrSL;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexports.rotrBH = rotrBH;\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\nexports.rotrBL = rotrBL;\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nexports.rotr32H = rotr32H;\nconst rotr32L = (h, _l) => h;\nexports.rotr32L = rotr32L;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexports.rotlSH = rotlSH;\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\nexports.rotlSL = rotlSL;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexports.rotlBH = rotlBH;\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\nexports.rotlBL = rotlBL;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\nexports.add = add;\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexports.add3L = add3L;\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexports.add3H = add3H;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexports.add4L = add4L;\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexports.add4H = add4H;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexports.add5L = add5L;\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\nexports.add5H = add5H;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexports.default = u64;\n//# sourceMappingURL=_u64.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\nexports.crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","\"use strict\";\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.randomBytes = exports.wrapXOFConstructorWithOpts = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.checkOpts = exports.Hash = exports.concatBytes = exports.toBytes = exports.utf8ToBytes = exports.asyncLoop = exports.nextTick = exports.hexToBytes = exports.bytesToHex = exports.byteSwap32 = exports.byteSwapIfBE = exports.byteSwap = exports.isLE = exports.rotl = exports.rotr = exports.createView = exports.u32 = exports.u8 = exports.isBytes = void 0;\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nconst crypto_1 = require(\"@noble/hashes/crypto\");\nconst _assert_js_1 = require(\"./_assert.js\");\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nfunction isBytes(a) {\n return (a instanceof Uint8Array ||\n (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));\n}\nexports.isBytes = isBytes;\n// Cast array to different type\nconst u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexports.u8 = u8;\nconst u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\nexports.u32 = u32;\n// Cast array to view\nconst createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\nexports.createView = createView;\n// The rotate right (circular right shift) operation for uint32\nconst rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\nexports.rotr = rotr;\n// The rotate left (circular left shift) operation for uint32\nconst rotl = (word, shift) => (word << shift) | ((word >>> (32 - shift)) >>> 0);\nexports.rotl = rotl;\nexports.isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// The byte swap operation for uint32\nconst byteSwap = (word) => ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff);\nexports.byteSwap = byteSwap;\n// Conditionally byte swap if on a big-endian platform\nexports.byteSwapIfBE = exports.isLE ? (n) => n : (n) => (0, exports.byteSwap)(n);\n// In place byte swap for Uint32Array\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = (0, exports.byteSwap)(arr[i]);\n }\n}\nexports.byteSwap32 = byteSwap32;\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n (0, _assert_js_1.bytes)(bytes);\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\nexports.bytesToHex = bytesToHex;\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 };\nfunction asciiToBase16(char) {\n if (char >= asciis._0 && char <= asciis._9)\n return char - asciis._0;\n if (char >= asciis._A && char <= asciis._F)\n return char - (asciis._A - 10);\n if (char >= asciis._a && char <= asciis._f)\n return char - (asciis._a - 10);\n return;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2;\n }\n return array;\n}\nexports.hexToBytes = hexToBytes;\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n// Returns control to thread each 'tick' ms to avoid blocking\nasync function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await (0, exports.nextTick)();\n ts += diff;\n }\n}\nexports.asyncLoop = asyncLoop;\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\nexports.utf8ToBytes = utf8ToBytes;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n (0, _assert_js_1.bytes)(data);\n return data;\n}\nexports.toBytes = toBytes;\n/**\n * Copies several Uint8Arrays into one.\n */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n (0, _assert_js_1.bytes)(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexports.concatBytes = concatBytes;\n// For runtime check if class implements interface\nclass Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nexports.Hash = Hash;\nconst toStr = {}.toString;\nfunction checkOpts(defaults, opts) {\n if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexports.checkOpts = checkOpts;\nfunction wrapConstructor(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexports.wrapConstructor = wrapConstructor;\nfunction wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapConstructorWithOpts = wrapConstructorWithOpts;\nfunction wrapXOFConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapXOFConstructorWithOpts = wrapXOFConstructorWithOpts;\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') {\n return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\nexports.randomBytes = randomBytes;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shake256 = exports.shake128 = exports.keccak_512 = exports.keccak_384 = exports.keccak_256 = exports.keccak_224 = exports.sha3_512 = exports.sha3_384 = exports.sha3_256 = exports.sha3_224 = exports.Keccak = exports.keccakP = void 0;\nconst _assert_js_1 = require(\"./_assert.js\");\nconst _u64_js_1 = require(\"./_u64.js\");\nconst utils_js_1 = require(\"./utils.js\");\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n// Various per round constants calculations\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = [];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ (0, _u64_js_1.split)(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? (0, _u64_js_1.rotlBH)(h, l, s) : (0, _u64_js_1.rotlSH)(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? (0, _u64_js_1.rotlBL)(h, l, s) : (0, _u64_js_1.rotlSL)(h, l, s));\n// Same as keccakf1600, but allows to skip some rounds\nfunction keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexports.keccakP = keccakP;\nclass Keccak extends utils_js_1.Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n (0, _assert_js_1.number)(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = (0, utils_js_1.u32)(this.state);\n }\n keccak() {\n if (!utils_js_1.isLE)\n (0, utils_js_1.byteSwap32)(this.state32);\n keccakP(this.state32, this.rounds);\n if (!utils_js_1.isLE)\n (0, utils_js_1.byteSwap32)(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n (0, _assert_js_1.exists)(this);\n const { blockLen, state } = this;\n data = (0, utils_js_1.toBytes)(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n (0, _assert_js_1.exists)(this, false);\n (0, _assert_js_1.bytes)(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n (0, _assert_js_1.number)(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n (0, _assert_js_1.output)(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nexports.Keccak = Keccak;\nconst gen = (suffix, blockLen, outputLen) => (0, utils_js_1.wrapConstructor)(() => new Keccak(blockLen, suffix, outputLen));\nexports.sha3_224 = gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexports.sha3_256 = gen(0x06, 136, 256 / 8);\nexports.sha3_384 = gen(0x06, 104, 384 / 8);\nexports.sha3_512 = gen(0x06, 72, 512 / 8);\nexports.keccak_224 = gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexports.keccak_256 = gen(0x01, 136, 256 / 8);\nexports.keccak_384 = gen(0x01, 104, 384 / 8);\nexports.keccak_512 = gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => (0, utils_js_1.wrapXOFConstructorWithOpts)((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\nexports.shake128 = genShake(0x1f, 168, 128 / 8);\nexports.shake256 = genShake(0x1f, 136, 256 / 8);\n//# sourceMappingURL=sha3.js.map","/* global global, window, module */\nconst { sha3_512: sha3 } = require(\"@noble/hashes/sha3\");\n\nconst defaultLength = 24;\nconst bigLength = 32;\n\nconst createEntropy = (length = 4, random = Math.random) => {\n let entropy = \"\";\n\n while (entropy.length < length) {\n entropy = entropy + Math.floor(random() * 36).toString(36);\n }\n return entropy;\n};\n\n/*\n * Adapted from https://github.com/juanelas/bigint-conversion\n * MIT License Copyright (c) 2018 Juan Hernández Serrano\n */\nfunction bufToBigInt(buf) {\n let bits = 8n;\n\n let value = 0n;\n for (const i of buf.values()) {\n const bi = BigInt(i);\n value = (value << bits) + bi;\n }\n return value;\n}\n\nconst hash = (input = \"\") => {\n // Drop the first character because it will bias the histogram\n // to the left.\n return bufToBigInt(sha3(input)).toString(36).slice(1);\n};\n\nconst alphabet = Array.from({ length: 26 }, (x, i) =>\n String.fromCharCode(i + 97)\n);\n\nconst randomLetter = (random) =>\n alphabet[Math.floor(random() * alphabet.length)];\n\n/*\nThis is a fingerprint of the host environment. It is used to help\nprevent collisions when generating ids in a distributed system.\nIf no global object is available, you can pass in your own, or fall back\non a random string.\n*/\nconst createFingerprint = ({\n globalObj = typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : {},\n random = Math.random,\n} = {}) => {\n const globals = Object.keys(globalObj).toString();\n const sourceString = globals.length\n ? globals + createEntropy(bigLength, random)\n : createEntropy(bigLength, random);\n\n return hash(sourceString).substring(0, bigLength);\n};\n\nconst createCounter = (count) => () => {\n return count++;\n};\n\n// ~22k hosts before 50% chance of initial counter collision\n// with a remaining counter range of 9.0e+15 in JavaScript.\nconst initialCountMax = 476782367;\n\nconst init = ({\n // Fallback if the user does not pass in a CSPRNG. This should be OK\n // because we don't rely solely on the random number generator for entropy.\n // We also use the host fingerprint, current time, and a session counter.\n random = Math.random,\n counter = createCounter(Math.floor(random() * initialCountMax)),\n length = defaultLength,\n fingerprint = createFingerprint({ random }),\n} = {}) => {\n return function cuid2() {\n const firstLetter = randomLetter(random);\n\n // If we're lucky, the `.toString(36)` calls may reduce hashing rounds\n // by shortening the input to the hash function a little.\n const time = Date.now().toString(36);\n const count = counter().toString(36);\n\n // The salt should be long enough to be globally unique across the full\n // length of the hash. For simplicity, we use the same length as the\n // intended id output.\n const salt = createEntropy(length, random);\n const hashInput = `${time + salt + count + fingerprint}`;\n\n return `${firstLetter + hash(hashInput).substring(1, length)}`;\n };\n};\n\nconst createId = init();\n\nconst isCuid = (id, { minLength = 2, maxLength = bigLength } = {}) => {\n const length = id.length;\n const regex = /^[0-9a-z]+$/;\n\n try {\n if (\n typeof id === \"string\" &&\n length >= minLength &&\n length <= maxLength &&\n regex.test(id)\n )\n return true;\n } finally {\n }\n\n return false;\n};\n\nmodule.exports.getConstants = () => ({ defaultLength, bigLength });\nmodule.exports.init = init;\nmodule.exports.createId = createId;\nmodule.exports.bufToBigInt = bufToBigInt;\nmodule.exports.createCounter = createCounter;\nmodule.exports.createFingerprint = createFingerprint;\nmodule.exports.isCuid = isCuid;\n","const { createId, init, getConstants, isCuid } = require(\"./src/index\");\n\nmodule.exports.createId = createId;\nmodule.exports.init = init;\nmodule.exports.getConstants = getConstants;\nmodule.exports.isCuid = isCuid;\n","// src/ws.ts\nif (!globalThis.EventTarget || !globalThis.Event) {\n console.error(`\n PartySocket requires a global 'EventTarget' class to be available!\n You can polyfill this global by adding this to your code before any partysocket imports: \n \n \\`\\`\\`\n import 'partysocket/event-target-polyfill';\n \\`\\`\\`\n Please file an issue at https://github.com/partykit/partykit if you're still having trouble.\n`);\n}\nvar ErrorEvent = class extends Event {\n message;\n error;\n constructor(error, target) {\n super(\"error\", target);\n this.message = error.message;\n this.error = error;\n }\n};\nvar CloseEvent = class extends Event {\n code;\n reason;\n wasClean = true;\n constructor(code = 1e3, reason = \"\", target) {\n super(\"close\", target);\n this.code = code;\n this.reason = reason;\n }\n};\nvar Events = {\n Event,\n ErrorEvent,\n CloseEvent\n};\nfunction assert(condition, msg) {\n if (!condition) {\n throw new Error(msg);\n }\n}\nfunction cloneEventBrowser(e) {\n return new e.constructor(e.type, e);\n}\nfunction cloneEventNode(e) {\n if (\"data\" in e) {\n const evt2 = new MessageEvent(e.type, e);\n return evt2;\n }\n if (\"code\" in e || \"reason\" in e) {\n const evt2 = new CloseEvent(\n // @ts-expect-error we need to fix event/listener types\n e.code || 1999,\n // @ts-expect-error we need to fix event/listener types\n e.reason || \"unknown reason\",\n e\n );\n return evt2;\n }\n if (\"error\" in e) {\n const evt2 = new ErrorEvent(e.error, e);\n return evt2;\n }\n const evt = new Event(e.type, e);\n return evt;\n}\nvar isNode = typeof process !== \"undefined\" && typeof process.versions?.node !== \"undefined\" && typeof document === \"undefined\";\nvar cloneEvent = isNode ? cloneEventNode : cloneEventBrowser;\nvar DEFAULT = {\n maxReconnectionDelay: 1e4,\n minReconnectionDelay: 1e3 + Math.random() * 4e3,\n minUptime: 5e3,\n reconnectionDelayGrowFactor: 1.3,\n connectionTimeout: 4e3,\n maxRetries: Infinity,\n maxEnqueuedMessages: Infinity,\n startClosed: false,\n debug: false\n};\nvar didWarnAboutMissingWebSocket = false;\nvar ReconnectingWebSocket = class _ReconnectingWebSocket extends EventTarget {\n _ws;\n _retryCount = -1;\n _uptimeTimeout;\n _connectTimeout;\n _shouldReconnect = true;\n _connectLock = false;\n _binaryType = \"blob\";\n _closeCalled = false;\n _messageQueue = [];\n _debugLogger = console.log.bind(console);\n _url;\n _protocols;\n _options;\n constructor(url, protocols, options = {}) {\n super();\n this._url = url;\n this._protocols = protocols;\n this._options = options;\n if (this._options.startClosed) {\n this._shouldReconnect = false;\n }\n if (this._options.debugLogger) {\n this._debugLogger = this._options.debugLogger;\n }\n this._connect();\n }\n static get CONNECTING() {\n return 0;\n }\n static get OPEN() {\n return 1;\n }\n static get CLOSING() {\n return 2;\n }\n static get CLOSED() {\n return 3;\n }\n get CONNECTING() {\n return _ReconnectingWebSocket.CONNECTING;\n }\n get OPEN() {\n return _ReconnectingWebSocket.OPEN;\n }\n get CLOSING() {\n return _ReconnectingWebSocket.CLOSING;\n }\n get CLOSED() {\n return _ReconnectingWebSocket.CLOSED;\n }\n get binaryType() {\n return this._ws ? this._ws.binaryType : this._binaryType;\n }\n set binaryType(value) {\n this._binaryType = value;\n if (this._ws) {\n this._ws.binaryType = value;\n }\n }\n /**\n * Returns the number or connection retries\n */\n get retryCount() {\n return Math.max(this._retryCount, 0);\n }\n /**\n * The number of bytes of data that have been queued using calls to send() but not yet\n * transmitted to the network. This value resets to zero once all queued data has been sent.\n * This value does not reset to zero when the connection is closed; if you keep calling send(),\n * this will continue to climb. Read only\n */\n get bufferedAmount() {\n const bytes = this._messageQueue.reduce((acc, message) => {\n if (typeof message === \"string\") {\n acc += message.length;\n } else if (message instanceof Blob) {\n acc += message.size;\n } else {\n acc += message.byteLength;\n }\n return acc;\n }, 0);\n return bytes + (this._ws ? this._ws.bufferedAmount : 0);\n }\n /**\n * The extensions selected by the server. This is currently only the empty string or a list of\n * extensions as negotiated by the connection\n */\n get extensions() {\n return this._ws ? this._ws.extensions : \"\";\n }\n /**\n * A string indicating the name of the sub-protocol the server selected;\n * this will be one of the strings specified in the protocols parameter when creating the\n * WebSocket object\n */\n get protocol() {\n return this._ws ? this._ws.protocol : \"\";\n }\n /**\n * The current state of the connection; this is one of the Ready state constants\n */\n get readyState() {\n if (this._ws) {\n return this._ws.readyState;\n }\n return this._options.startClosed ? _ReconnectingWebSocket.CLOSED : _ReconnectingWebSocket.CONNECTING;\n }\n /**\n * The URL as resolved by the constructor\n */\n get url() {\n return this._ws ? this._ws.url : \"\";\n }\n /**\n * Whether the websocket object is now in reconnectable state\n */\n get shouldReconnect() {\n return this._shouldReconnect;\n }\n /**\n * An event listener to be called when the WebSocket connection's readyState changes to CLOSED\n */\n onclose = null;\n /**\n * An event listener to be called when an error occurs\n */\n onerror = null;\n /**\n * An event listener to be called when a message is received from the server\n */\n onmessage = null;\n /**\n * An event listener to be called when the WebSocket connection's readyState changes to OPEN;\n * this indicates that the connection is ready to send and receive data\n */\n onopen = null;\n /**\n * Closes the WebSocket connection or connection attempt, if any. If the connection is already\n * CLOSED, this method does nothing\n */\n close(code = 1e3, reason) {\n this._closeCalled = true;\n this._shouldReconnect = false;\n this._clearTimeouts();\n if (!this._ws) {\n this._debug(\"close enqueued: no ws instance\");\n return;\n }\n if (this._ws.readyState === this.CLOSED) {\n this._debug(\"close: already closed\");\n return;\n }\n this._ws.close(code, reason);\n }\n /**\n * Closes the WebSocket connection or connection attempt and connects again.\n * Resets retry counter;\n */\n reconnect(code, reason) {\n this._shouldReconnect = true;\n this._closeCalled = false;\n this._retryCount = -1;\n if (!this._ws || this._ws.readyState === this.CLOSED) {\n this._connect();\n } else {\n this._disconnect(code, reason);\n this._connect();\n }\n }\n /**\n * Enqueue specified data to be transmitted to the server over the WebSocket connection\n */\n send(data) {\n if (this._ws && this._ws.readyState === this.OPEN) {\n this._debug(\"send\", data);\n this._ws.send(data);\n } else {\n const { maxEnqueuedMessages = DEFAULT.maxEnqueuedMessages } = this._options;\n if (this._messageQueue.length < maxEnqueuedMessages) {\n this._debug(\"enqueue\", data);\n this._messageQueue.push(data);\n }\n }\n }\n _debug(...args) {\n if (this._options.debug) {\n this._debugLogger(\"RWS>\", ...args);\n }\n }\n _getNextDelay() {\n const {\n reconnectionDelayGrowFactor = DEFAULT.reconnectionDelayGrowFactor,\n minReconnectionDelay = DEFAULT.minReconnectionDelay,\n maxReconnectionDelay = DEFAULT.maxReconnectionDelay\n } = this._options;\n let delay = 0;\n if (this._retryCount > 0) {\n delay = minReconnectionDelay * Math.pow(reconnectionDelayGrowFactor, this._retryCount - 1);\n if (delay > maxReconnectionDelay) {\n delay = maxReconnectionDelay;\n }\n }\n this._debug(\"next delay\", delay);\n return delay;\n }\n _wait() {\n return new Promise((resolve) => {\n setTimeout(resolve, this._getNextDelay());\n });\n }\n _getNextProtocols(protocolsProvider) {\n if (!protocolsProvider)\n return Promise.resolve(null);\n if (typeof protocolsProvider === \"string\" || Array.isArray(protocolsProvider)) {\n return Promise.resolve(protocolsProvider);\n }\n if (typeof protocolsProvider === \"function\") {\n const protocols = protocolsProvider();\n if (!protocols)\n return Promise.resolve(null);\n if (typeof protocols === \"string\" || Array.isArray(protocols)) {\n return Promise.resolve(protocols);\n }\n if (protocols.then) {\n return protocols;\n }\n }\n throw Error(\"Invalid protocols\");\n }\n _getNextUrl(urlProvider) {\n if (typeof urlProvider === \"string\") {\n return Promise.resolve(urlProvider);\n }\n if (typeof urlProvider === \"function\") {\n const url = urlProvider();\n if (typeof url === \"string\") {\n return Promise.resolve(url);\n }\n if (url.then) {\n return url;\n }\n }\n throw Error(\"Invalid URL\");\n }\n _connect() {\n if (this._connectLock || !this._shouldReconnect) {\n return;\n }\n this._connectLock = true;\n const {\n maxRetries = DEFAULT.maxRetries,\n connectionTimeout = DEFAULT.connectionTimeout\n } = this._options;\n if (this._retryCount >= maxRetries) {\n this._debug(\"max retries reached\", this._retryCount, \">=\", maxRetries);\n return;\n }\n this._retryCount++;\n this._debug(\"connect\", this._retryCount);\n this._removeListeners();\n this._wait().then(\n () => Promise.all([\n this._getNextUrl(this._url),\n this._getNextProtocols(this._protocols || null)\n ])\n ).then(([url, protocols]) => {\n if (this._closeCalled) {\n this._connectLock = false;\n return;\n }\n if (!this._options.WebSocket && typeof WebSocket === \"undefined\" && !didWarnAboutMissingWebSocket) {\n console.error(`\\u203C\\uFE0F No WebSocket implementation available. You should define options.WebSocket. \n\nFor example, if you're using node.js, run \\`npm install ws\\`, and then in your code:\n\nimport PartySocket from 'partysocket';\nimport WS from 'ws';\n\nconst partysocket = new PartySocket({\n host: \"127.0.0.1:1999\",\n room: \"test-room\",\n WebSocket: WS\n});\n\n`);\n didWarnAboutMissingWebSocket = true;\n }\n const WS = this._options.WebSocket || WebSocket;\n this._debug(\"connect\", { url, protocols });\n this._ws = protocols ? new WS(url, protocols) : new WS(url);\n this._ws.binaryType = this._binaryType;\n this._connectLock = false;\n this._addListeners();\n this._connectTimeout = setTimeout(\n () => this._handleTimeout(),\n connectionTimeout\n );\n }).catch((err) => {\n this._connectLock = false;\n this._handleError(new Events.ErrorEvent(Error(err.message), this));\n });\n }\n _handleTimeout() {\n this._debug(\"timeout event\");\n this._handleError(new Events.ErrorEvent(Error(\"TIMEOUT\"), this));\n }\n _disconnect(code = 1e3, reason) {\n this._clearTimeouts();\n if (!this._ws) {\n return;\n }\n this._removeListeners();\n try {\n this._ws.close(code, reason);\n this._handleClose(new Events.CloseEvent(code, reason, this));\n } catch (error) {\n }\n }\n _acceptOpen() {\n this._debug(\"accept open\");\n this._retryCount = 0;\n }\n _handleOpen = (event) => {\n this._debug(\"open event\");\n const { minUptime = DEFAULT.minUptime } = this._options;\n clearTimeout(this._connectTimeout);\n this._uptimeTimeout = setTimeout(() => this._acceptOpen(), minUptime);\n assert(this._ws, \"WebSocket is not defined\");\n this._ws.binaryType = this._binaryType;\n this._messageQueue.forEach((message) => this._ws?.send(message));\n this._messageQueue = [];\n if (this.onopen) {\n this.onopen(event);\n }\n this.dispatchEvent(cloneEvent(event));\n };\n _handleMessage = (event) => {\n this._debug(\"message event\");\n if (this.onmessage) {\n this.onmessage(event);\n }\n this.dispatchEvent(cloneEvent(event));\n };\n _handleError = (event) => {\n this._debug(\"error event\", event.message);\n this._disconnect(\n void 0,\n event.message === \"TIMEOUT\" ? \"timeout\" : void 0\n );\n if (this.onerror) {\n this.onerror(event);\n }\n this._debug(\"exec error listeners\");\n this.dispatchEvent(cloneEvent(event));\n this._connect();\n };\n _handleClose = (event) => {\n this._debug(\"close event\");\n this._clearTimeouts();\n if (this._shouldReconnect) {\n this._connect();\n }\n if (this.onclose) {\n this.onclose(event);\n }\n this.dispatchEvent(cloneEvent(event));\n };\n _removeListeners() {\n if (!this._ws) {\n return;\n }\n this._debug(\"removeListeners\");\n this._ws.removeEventListener(\"open\", this._handleOpen);\n this._ws.removeEventListener(\"close\", this._handleClose);\n this._ws.removeEventListener(\"message\", this._handleMessage);\n this._ws.removeEventListener(\"error\", this._handleError);\n }\n _addListeners() {\n if (!this._ws) {\n return;\n }\n this._debug(\"addListeners\");\n this._ws.addEventListener(\"open\", this._handleOpen);\n this._ws.addEventListener(\"close\", this._handleClose);\n this._ws.addEventListener(\"message\", this._handleMessage);\n this._ws.addEventListener(\"error\", this._handleError);\n }\n _clearTimeouts() {\n clearTimeout(this._connectTimeout);\n clearTimeout(this._uptimeTimeout);\n }\n};\n\nexport {\n ErrorEvent,\n CloseEvent,\n ReconnectingWebSocket\n};\n/*!\n * Reconnecting WebSocket\n * by Pedro Ladaria <pedro.ladaria@gmail.com>\n * https://github.com/pladaria/reconnecting-websocket\n * License MIT\n */\n","import {\n ReconnectingWebSocket\n} from \"./chunk-KZ3GGBVP.mjs\";\n\n// src/index.ts\nvar valueIsNotNil = (keyValuePair) => keyValuePair[1] !== null && keyValuePair[1] !== void 0;\nfunction generateUUID() {\n if (typeof crypto !== \"undefined\" && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n let d = (/* @__PURE__ */ new Date()).getTime();\n let d2 = typeof performance !== \"undefined\" && performance.now && performance.now() * 1e3 || 0;\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n let r = Math.random() * 16;\n if (d > 0) {\n r = (d + r) % 16 | 0;\n d = Math.floor(d / 16);\n } else {\n r = (d2 + r) % 16 | 0;\n d2 = Math.floor(d2 / 16);\n }\n return (c === \"x\" ? r : r & 3 | 8).toString(16);\n });\n}\nfunction getPartyInfo(partySocketOptions, defaultProtocol, defaultParams = {}) {\n const {\n host: rawHost,\n path: rawPath,\n protocol: rawProtocol,\n room,\n party,\n query\n } = partySocketOptions;\n let host = rawHost.replace(/^(http|https|ws|wss):\\/\\//, \"\");\n if (host.endsWith(\"/\")) {\n host = host.slice(0, -1);\n }\n if (rawPath && rawPath.startsWith(\"/\")) {\n throw new Error(\"path must not start with a slash\");\n }\n const name = party ?? \"main\";\n const path = rawPath ? `/${rawPath}` : \"\";\n const protocol = rawProtocol || (host.startsWith(\"localhost:\") || host.startsWith(\"127.0.0.1:\") || host.startsWith(\"192.168.\") || host.startsWith(\"10.\") || host.startsWith(\"172.\") && host.split(\".\")[1] >= \"16\" && host.split(\".\")[1] <= \"31\" || host.startsWith(\"[::ffff:7f00:1]:\") ? (\n // http / ws\n defaultProtocol\n ) : (\n // https / wss\n defaultProtocol + \"s\"\n ));\n const baseUrl = `${protocol}://${host}/${party ? `parties/${party}` : \"party\"}/${room}${path}`;\n const makeUrl = (query2 = {}) => `${baseUrl}?${new URLSearchParams([\n ...Object.entries(defaultParams),\n ...Object.entries(query2).filter(valueIsNotNil)\n ])}`;\n const urlProvider = typeof query === \"function\" ? async () => makeUrl(await query()) : makeUrl(query);\n return {\n host,\n path,\n room,\n name,\n protocol,\n partyUrl: baseUrl,\n urlProvider\n };\n}\nvar PartySocket = class extends ReconnectingWebSocket {\n constructor(partySocketOptions) {\n const wsOptions = getWSOptions(partySocketOptions);\n super(wsOptions.urlProvider, wsOptions.protocols, wsOptions.socketOptions);\n this.partySocketOptions = partySocketOptions;\n this.setWSProperties(wsOptions);\n }\n _pk;\n _pkurl;\n name;\n room;\n host;\n path;\n updateProperties(partySocketOptions) {\n const wsOptions = getWSOptions({\n ...this.partySocketOptions,\n ...partySocketOptions,\n host: partySocketOptions.host ?? this.host,\n room: partySocketOptions.room ?? this.room,\n path: partySocketOptions.path ?? this.path\n });\n this._url = wsOptions.urlProvider;\n this._protocols = wsOptions.protocols;\n this._options = wsOptions.socketOptions;\n this.setWSProperties(wsOptions);\n }\n setWSProperties(wsOptions) {\n const { _pk, _pkurl, name, room, host, path } = wsOptions;\n this._pk = _pk;\n this._pkurl = _pkurl;\n this.name = name;\n this.room = room;\n this.host = host;\n this.path = path;\n }\n reconnect(code, reason) {\n if (!this.room || !this.host) {\n throw new Error(\n \"The room and host must be set before connecting, use `updateProperties` method to set them or pass them to the constructor.\"\n );\n }\n super.reconnect(code, reason);\n }\n get id() {\n return this._pk;\n }\n /**\n * Exposes the static PartyKit room URL without applying query parameters.\n * To access the currently connected WebSocket url, use PartySocket#url.\n */\n get roomUrl() {\n return this._pkurl;\n }\n // a `fetch` method that uses (almost) the same options as `PartySocket`\n static async fetch(options, init) {\n const party = getPartyInfo(options, \"http\");\n const url = typeof party.urlProvider === \"string\" ? party.urlProvider : await party.urlProvider();\n const doFetch = options.fetch ?? fetch;\n return doFetch(url, init);\n }\n};\nfunction getWSOptions(partySocketOptions) {\n const {\n id,\n host: _host,\n path: _path,\n party: _party,\n room: _room,\n protocol: _protocol,\n query: _query,\n protocols,\n ...socketOptions\n } = partySocketOptions;\n const _pk = id || generateUUID();\n const party = getPartyInfo(partySocketOptions, \"ws\", { _pk });\n return {\n _pk,\n _pkurl: party.partyUrl,\n name: party.name,\n room: party.room,\n host: party.host,\n path: party.path,\n protocols,\n socketOptions,\n urlProvider: party.urlProvider\n };\n}\n\nexport {\n PartySocket\n};\n","import {\n ReconnectingWebSocket\n} from \"./chunk-KZ3GGBVP.mjs\";\n\n// src/use-handlers.ts\nimport { useEffect, useRef } from \"react\";\nvar useAttachWebSocketEventHandlers = (socket, options) => {\n const handlersRef = useRef(options);\n handlersRef.current = options;\n useEffect(() => {\n const onOpen = (event) => handlersRef.current?.onOpen?.(event);\n const onMessage = (event) => handlersRef.current?.onMessage?.(event);\n const onClose = (event) => handlersRef.current?.onClose?.(event);\n const onError = (event) => handlersRef.current?.onError?.(event);\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"close\", onClose);\n socket.addEventListener(\"error\", onError);\n socket.addEventListener(\"message\", onMessage);\n return () => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"close\", onClose);\n socket.removeEventListener(\"error\", onError);\n socket.removeEventListener(\"message\", onMessage);\n };\n }, [socket]);\n};\n\n// src/use-socket.ts\nimport { useEffect as useEffect2, useMemo, useRef as useRef2, useState } from \"react\";\nvar getOptionsThatShouldCauseRestartWhenChanged = (options) => [\n options.startClosed,\n options.minUptime,\n options.maxRetries,\n options.connectionTimeout,\n options.maxEnqueuedMessages,\n options.maxReconnectionDelay,\n options.minReconnectionDelay,\n options.reconnectionDelayGrowFactor,\n options.debug\n];\nfunction useStableSocket({\n options,\n createSocket,\n createSocketMemoKey: createOptionsMemoKey\n}) {\n const shouldReconnect = createOptionsMemoKey(options);\n const socketOptions = useMemo(() => {\n return options;\n }, [shouldReconnect]);\n const [socket, setSocket] = useState(\n () => (\n // only connect on first mount\n createSocket({ ...socketOptions, startClosed: true })\n )\n );\n const socketInitializedRef = useRef2(null);\n const createSocketRef = useRef2(createSocket);\n createSocketRef.current = createSocket;\n useEffect2(() => {\n if (socketInitializedRef.current === socket) {\n const newSocket = createSocketRef.current({\n ...socketOptions,\n // when reconnecting because of options change, we always reconnect\n // (startClosed only applies to initial mount)\n startClosed: false\n });\n setSocket(newSocket);\n } else {\n if (!socketInitializedRef.current && socketOptions.startClosed !== true) {\n socket.reconnect();\n }\n socketInitializedRef.current = socket;\n return () => {\n socket.close();\n };\n }\n }, [socket, socketOptions]);\n return socket;\n}\n\n// src/use-ws.ts\nfunction useWebSocket(url, protocols, options = {}) {\n const socket = useStableSocket({\n options,\n createSocket: (options2) => new ReconnectingWebSocket(url, protocols, options2),\n createSocketMemoKey: (options2) => JSON.stringify([\n // will reconnect if url or protocols are specified as a string.\n // if they are functions, the WebSocket will handle reconnection\n url,\n protocols,\n ...getOptionsThatShouldCauseRestartWhenChanged(options2)\n ])\n });\n useAttachWebSocketEventHandlers(socket, options);\n return socket;\n}\n\nexport {\n useAttachWebSocketEventHandlers,\n getOptionsThatShouldCauseRestartWhenChanged,\n useStableSocket,\n useWebSocket\n};\n","import {\n PartySocket\n} from \"./chunk-G2EOJEOR.mjs\";\nimport {\n getOptionsThatShouldCauseRestartWhenChanged,\n useAttachWebSocketEventHandlers,\n useStableSocket,\n useWebSocket\n} from \"./chunk-G7CWGN4S.mjs\";\nimport \"./chunk-KZ3GGBVP.mjs\";\n\n// src/react.ts\nfunction usePartySocket(options) {\n const { host, ...otherOptions } = options;\n const socket = useStableSocket({\n options: {\n host: host || (typeof window !== \"undefined\" ? window.location.host : \"dummy-domain.com\"),\n ...otherOptions\n },\n createSocket: (options2) => new PartySocket(options2),\n createSocketMemoKey: (options2) => JSON.stringify([\n // NOTE: if query is defined as a function, the socket\n // won't reconnect when you change the function identity\n options2.query,\n options2.id,\n options2.host,\n options2.room,\n options2.party,\n options2.path,\n options2.protocol,\n options2.protocols,\n ...getOptionsThatShouldCauseRestartWhenChanged(options2)\n ])\n });\n useAttachWebSocketEventHandlers(socket, options);\n return socket;\n}\nexport {\n usePartySocket as default,\n usePartySocket,\n useWebSocket\n};\n","import {\n\tMessageSchema,\n\tpartykitBaseUrl,\n\tpartykitRoom,\n\ttype Message,\n\ttype User,\n} from '@epic-web/workshop-presence/presence'\nimport { createId as cuid } from '@paralleldrive/cuid2'\nimport { useParams, useRouteLoaderData } from '@remix-run/react'\nimport { usePartySocket } from 'partysocket/react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { z } from 'zod'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport { useRequestInfo } from './request-info.ts'\n\nexport * from '@epic-web/workshop-presence/presence'\n\nconst PresenceContext = createContext<ReturnType<\n\ttypeof usePresenceSocket\n> | null>(null)\n\nexport function usePresencePreferences() {\n\tconst data = useRouteLoaderData<typeof rootLoader>('root')\n\treturn data?.preferences?.presence ?? null\n}\n\nexport function useOptionalWorkshopTitle() {\n\tconst data = useRouteLoaderData<typeof rootLoader>('root')\n\treturn data?.workshopTitle ?? null\n}\n\nconst ExerciseAppParamsSchema = z.object({\n\ttype: z.union([z.literal('problem'), z.literal('solution')]).optional(),\n\texerciseNumber: z.coerce.number().finite(),\n\tstepNumber: z.coerce.number().finite().optional(),\n})\n\nexport function usePresenceSocket(user?: User | null) {\n\tconst workshopTitle = useOptionalWorkshopTitle()\n\tconst requestInfo = useRequestInfo()\n\tconst rawParams = useParams()\n\tconst prefs = usePresencePreferences()\n\tconst data = useRouteLoaderData<typeof rootLoader>('root')\n\tconst [users, setUsers] = useState(data?.presence.users ?? [])\n\tconst [clientId] = useState(() => {\n\t\tif (typeof document === 'undefined') return null\n\t\tif (user) return user.id\n\t\tconst clientId = sessionStorage.getItem('clientId')\n\t\tif (clientId) return clientId\n\t\tconst newClientId = cuid()\n\t\tsessionStorage.setItem('clientId', newClientId)\n\t\treturn newClientId\n\t})\n\n\tconst socket = usePartySocket({\n\t\thost: new URL(partykitBaseUrl).host,\n\t\troom: partykitRoom,\n\t\tonMessage(evt: MessageEvent) {\n\t\t\tconst messageResult = MessageSchema.safeParse(\n\t\t\t\tJSON.parse(String(evt.data)),\n\t\t\t)\n\t\t\tif (!messageResult.success) return\n\t\t\tif (messageResult.data.type === 'presence') {\n\t\t\t\tsetUsers(messageResult.data.payload.users)\n\t\t\t}\n\t\t},\n\t})\n\n\tconst paramsResult = ExerciseAppParamsSchema.safeParse(rawParams)\n\tconst params = paramsResult.success ? paramsResult.data : null\n\tconst location = {\n\t\tworkshopTitle,\n\t\torigin: requestInfo.origin,\n\t\t...(params\n\t\t\t? {\n\t\t\t\t\texercise: {\n\t\t\t\t\t\ttype: params.type,\n\t\t\t\t\t\texerciseNumber: params.exerciseNumber,\n\t\t\t\t\t\tstepNumber: params.stepNumber,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: null),\n\t} satisfies User['location']\n\n\tlet message: Message | null = null\n\tif ((!user || prefs?.optOut) && clientId) {\n\t\tif (user) {\n\t\t\tmessage = { type: 'remove-user', payload: { id: user.id } }\n\t\t}\n\t\tmessage = { type: 'add-user', payload: { id: clientId, location } }\n\t} else if (user) {\n\t\tmessage = {\n\t\t\ttype: 'add-user',\n\t\t\tpayload: {\n\t\t\t\tid: user.id,\n\t\t\t\tname: user.name,\n\t\t\t\tavatarUrl: user.avatarUrl,\n\t\t\t\tlocation,\n\t\t\t},\n\t\t}\n\t}\n\n\tconst messageJson = message ? JSON.stringify(message) : null\n\tuseEffect(() => {\n\t\tif (messageJson) socket.send(messageJson)\n\t}, [messageJson, socket])\n\n\tconst scoredUsers = scoreUsers(location, users)\n\n\treturn { users: scoredUsers }\n}\n\nfunction scoreUsers(location: User['location'], users: Array<User>) {\n\tconst scoredUsers = users.map((user) => {\n\t\tlet score = 0\n\t\tconst available = 4\n\t\tif (location?.workshopTitle === user.location?.workshopTitle) {\n\t\t\tscore += 1\n\t\t\tif (\n\t\t\t\tlocation?.exercise?.exerciseNumber &&\n\t\t\t\tlocation.exercise.exerciseNumber ===\n\t\t\t\t\tuser.location?.exercise?.exerciseNumber\n\t\t\t) {\n\t\t\t\tscore += 1\n\t\t\t\tif (\n\t\t\t\t\tlocation.exercise.stepNumber &&\n\t\t\t\t\tlocation.exercise.stepNumber === user.location.exercise.stepNumber\n\t\t\t\t) {\n\t\t\t\t\tscore += 1\n\t\t\t\t\tif (\n\t\t\t\t\t\tlocation.exercise.type &&\n\t\t\t\t\t\tlocation.exercise.type === user.location.exercise.type\n\t\t\t\t\t) {\n\t\t\t\t\t\tscore += 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { user, score: Math.floor((score / available) * 10) / 10 }\n\t})\n\treturn scoredUsers.sort((a, b) => {\n\t\tif (a.score === b.score) return 0\n\t\treturn a.score > b.score ? -1 : 1\n\t})\n}\n\nexport function Presence({\n\tuser,\n\tchildren,\n}: {\n\tuser?: User | null\n\tchildren: React.ReactNode\n}) {\n\treturn (\n\t\t<PresenceContext.Provider value={usePresenceSocket(user)}>\n\t\t\t{children}\n\t\t</PresenceContext.Provider>\n\t)\n}\n\nexport function usePresence() {\n\tconst presence = useContext(PresenceContext)\n\tif (!presence) {\n\t\tthrow new Error('usePresence must be used within a PresenceProvider')\n\t}\n\treturn presence\n}\n"],"names":["partykitRoom","partykitBaseUrl","UserSchema","z","MessageSchema","_assert","number","n","bool","b","isBytes","a","bytes","lengths","hash","h","exists","instance","checkFinished","output","out","min","assert","_u64","U32_MASK64","_32n","fromBig","le","split","lst","Ah","Al","i","l","toBig","shrSH","_l","s","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","rotr32H","_h","rotr32L","rotlSH","rotlSL","rotlBH","rotlBL","add","Bh","Bl","add3L","Cl","add3H","low","Ch","add4L","Dl","add4H","Dh","add5L","El","add5H","Eh","u64","crypto","exports","crypto_1","require$$0","_assert_js_1","require$$1","u8","arr","u32","createView","rotr","word","shift","rotl","byteSwap","byteSwap32","hexes","_","bytesToHex","hex","asciis","asciiToBase16","char","hexToBytes","hl","al","array","ai","hi","n1","n2","nextTick","asyncLoop","iters","tick","cb","ts","diff","utf8ToBytes","str","toBytes","data","concatBytes","arrays","sum","res","pad","Hash","toStr","checkOpts","defaults","opts","wrapConstructor","hashCons","hashC","msg","tmp","wrapConstructorWithOpts","wrapXOFConstructorWithOpts","randomBytes","bytesLength","sha3","_u64_js_1","utils_js_1","require$$2","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_0n","_1n","_2n","_7n","_256n","_0x71n","round","R","x","y","t","j","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","rotlL","keccakP","rounds","B","idx1","idx0","B0","B1","Th","Tl","curH","curL","PI","Keccak","blockLen","suffix","outputLen","enableXOF","state","len","pos","take","bufferOut","to","gen","genShake","defaultLength","bigLength","createEntropy","length","random","entropy","bufToBigInt","buf","bits","value","bi","input","alphabet","randomLetter","createFingerprint","globalObj","global","globals","sourceString","createCounter","count","initialCountMax","init","counter","fingerprint","firstLetter","time","salt","hashInput","createId","isCuid","id","minLength","maxLength","regex","src","getConstants","createId_1","ErrorEvent","error","target","__publicField","CloseEvent","code","reason","Events","condition","cloneEventBrowser","cloneEventNode","isNode","_a","cloneEvent","DEFAULT","didWarnAboutMissingWebSocket","ReconnectingWebSocket","_ReconnectingWebSocket","url","protocols","options","event","minUptime","message","acc","maxEnqueuedMessages","args","reconnectionDelayGrowFactor","minReconnectionDelay","maxReconnectionDelay","delay","resolve","protocolsProvider","urlProvider","maxRetries","connectionTimeout","WS","err","valueIsNotNil","keyValuePair","generateUUID","d","d2","c","r","getPartyInfo","partySocketOptions","defaultProtocol","defaultParams","rawHost","rawPath","rawProtocol","room","party","query","host","name","path","protocol","baseUrl","makeUrl","query2","PartySocket","wsOptions","getWSOptions","_pk","_pkurl","_host","_path","_party","_room","_protocol","_query","socketOptions","useAttachWebSocketEventHandlers","socket","handlersRef","useRef","useEffect","onOpen","_b","onMessage","onClose","onError","getOptionsThatShouldCauseRestartWhenChanged","useStableSocket","createSocket","createOptionsMemoKey","shouldReconnect","useMemo","setSocket","useState","socketInitializedRef","useRef2","createSocketRef","useEffect2","newSocket","usePartySocket","otherOptions","options2","PresenceContext","createContext","usePresencePreferences","useRouteLoaderData","useOptionalWorkshopTitle","ExerciseAppParamsSchema","usePresenceSocket","user","workshopTitle","requestInfo","useRequestInfo","rawParams","useParams","prefs","users","setUsers","clientId","newClientId","cuid","evt","messageResult","paramsResult","params","location","messageJson","scoreUsers","score","available","_d","_c","Presence","children","jsx","usePresence","presence","useContext"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11]}
1
+ {"version":3,"file":"presence-Dd98AJ_5.js","sources":["../../../../workshop-presence/src/presence.ts","../../../../../node_modules/@noble/hashes/_assert.js","../../../../../node_modules/@noble/hashes/_u64.js","../../../../../node_modules/@noble/hashes/crypto.js","../../../../../node_modules/@noble/hashes/utils.js","../../../../../node_modules/@noble/hashes/sha3.js","../../../../../node_modules/@paralleldrive/cuid2/src/index.js","../../../../../node_modules/@paralleldrive/cuid2/index.js","../../../../../node_modules/partysocket/dist/chunk-KZ3GGBVP.mjs","../../../../../node_modules/partysocket/dist/chunk-G2EOJEOR.mjs","../../../../../node_modules/partysocket/dist/chunk-G7CWGN4S.mjs","../../../../../node_modules/partysocket/dist/react.mjs","../../../app/utils/presence.tsx"],"sourcesContent":["import { z } from 'zod'\n\nexport const partykitRoom = 'epic-web-presence'\n// export const partykitBaseUrl = `http://127.0.0.1:1999/parties/main/${partykitRoom}`\nexport const partykitBaseUrl = `https://epic-web-presence.kentcdodds.partykit.dev/parties/main/${partykitRoom}`\n\nexport const UserSchema = z.object({\n\tid: z.string(),\n\tavatarUrl: z.string().nullable().optional(),\n\tname: z.string().nullable().optional(),\n\tlocation: z\n\t\t.object({\n\t\t\tworkshopTitle: z.string().nullable().optional(),\n\t\t\torigin: z.string().nullable().optional(),\n\t\t\texercise: z\n\t\t\t\t.object({\n\t\t\t\t\ttype: z\n\t\t\t\t\t\t.union([z.literal('problem'), z.literal('solution')])\n\t\t\t\t\t\t.nullable()\n\t\t\t\t\t\t.optional(),\n\t\t\t\t\texerciseNumber: z.number().nullable().optional(),\n\t\t\t\t\tstepNumber: z.number().nullable().optional(),\n\t\t\t\t})\n\t\t\t\t.nullable()\n\t\t\t\t.optional(),\n\t\t})\n\t\t.nullable()\n\t\t.optional(),\n})\n\nexport const MessageSchema = z\n\t.object({\n\t\ttype: z.literal('remove-user'),\n\t\tpayload: z.object({ id: z.string() }),\n\t})\n\t.or(z.object({ type: z.literal('add-user'), payload: UserSchema }))\n\t.or(\n\t\tz.object({\n\t\t\ttype: z.literal('presence'),\n\t\t\tpayload: z.object({ users: z.array(UserSchema) }),\n\t\t}),\n\t)\n\nexport type Message = z.infer<typeof MessageSchema>\n\nexport type User = z.infer<typeof UserSchema>\n\nexport const PresenceSchema = z.object({ users: z.array(UserSchema) })\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.output = exports.exists = exports.hash = exports.bytes = exports.bool = exports.number = exports.isBytes = void 0;\nfunction number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`positive integer expected, not ${n}`);\n}\nexports.number = number;\nfunction bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`boolean expected, not ${b}`);\n}\nexports.bool = bool;\n// copied from utils\nfunction isBytes(a) {\n return (a instanceof Uint8Array ||\n (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));\n}\nexports.isBytes = isBytes;\nfunction bytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\nexports.bytes = bytes;\nfunction hash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(h.outputLen);\n number(h.blockLen);\n}\nexports.hash = hash;\nfunction exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nexports.exists = exists;\nfunction output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nexports.output = output;\nconst assert = { number, bool, bytes, hash, exists, output };\nexports.default = assert;\n//# sourceMappingURL=_assert.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.add5L = exports.add5H = exports.add4H = exports.add4L = exports.add3H = exports.add3L = exports.add = exports.rotlBL = exports.rotlBH = exports.rotlSL = exports.rotlSH = exports.rotr32L = exports.rotr32H = exports.rotrBL = exports.rotrBH = exports.rotrSL = exports.rotrSH = exports.shrSL = exports.shrSH = exports.toBig = exports.split = exports.fromBig = void 0;\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nexports.fromBig = fromBig;\nfunction split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nexports.split = split;\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\nexports.toBig = toBig;\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nexports.shrSH = shrSH;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.shrSL = shrSL;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexports.rotrSH = rotrSH;\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.rotrSL = rotrSL;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexports.rotrBH = rotrBH;\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\nexports.rotrBL = rotrBL;\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nexports.rotr32H = rotr32H;\nconst rotr32L = (h, _l) => h;\nexports.rotr32L = rotr32L;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexports.rotlSH = rotlSH;\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\nexports.rotlSL = rotlSL;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexports.rotlBH = rotlBH;\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\nexports.rotlBL = rotlBL;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\nexports.add = add;\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexports.add3L = add3L;\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexports.add3H = add3H;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexports.add4L = add4L;\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexports.add4H = add4H;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexports.add5L = add5L;\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\nexports.add5H = add5H;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexports.default = u64;\n//# sourceMappingURL=_u64.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\nexports.crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","\"use strict\";\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.randomBytes = exports.wrapXOFConstructorWithOpts = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.checkOpts = exports.Hash = exports.concatBytes = exports.toBytes = exports.utf8ToBytes = exports.asyncLoop = exports.nextTick = exports.hexToBytes = exports.bytesToHex = exports.byteSwap32 = exports.byteSwapIfBE = exports.byteSwap = exports.isLE = exports.rotl = exports.rotr = exports.createView = exports.u32 = exports.u8 = exports.isBytes = void 0;\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nconst crypto_1 = require(\"@noble/hashes/crypto\");\nconst _assert_js_1 = require(\"./_assert.js\");\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nfunction isBytes(a) {\n return (a instanceof Uint8Array ||\n (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));\n}\nexports.isBytes = isBytes;\n// Cast array to different type\nconst u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexports.u8 = u8;\nconst u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\nexports.u32 = u32;\n// Cast array to view\nconst createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\nexports.createView = createView;\n// The rotate right (circular right shift) operation for uint32\nconst rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\nexports.rotr = rotr;\n// The rotate left (circular left shift) operation for uint32\nconst rotl = (word, shift) => (word << shift) | ((word >>> (32 - shift)) >>> 0);\nexports.rotl = rotl;\nexports.isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// The byte swap operation for uint32\nconst byteSwap = (word) => ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff);\nexports.byteSwap = byteSwap;\n// Conditionally byte swap if on a big-endian platform\nexports.byteSwapIfBE = exports.isLE ? (n) => n : (n) => (0, exports.byteSwap)(n);\n// In place byte swap for Uint32Array\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = (0, exports.byteSwap)(arr[i]);\n }\n}\nexports.byteSwap32 = byteSwap32;\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n (0, _assert_js_1.bytes)(bytes);\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\nexports.bytesToHex = bytesToHex;\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 };\nfunction asciiToBase16(char) {\n if (char >= asciis._0 && char <= asciis._9)\n return char - asciis._0;\n if (char >= asciis._A && char <= asciis._F)\n return char - (asciis._A - 10);\n if (char >= asciis._a && char <= asciis._f)\n return char - (asciis._a - 10);\n return;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2;\n }\n return array;\n}\nexports.hexToBytes = hexToBytes;\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n// Returns control to thread each 'tick' ms to avoid blocking\nasync function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await (0, exports.nextTick)();\n ts += diff;\n }\n}\nexports.asyncLoop = asyncLoop;\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\nexports.utf8ToBytes = utf8ToBytes;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n (0, _assert_js_1.bytes)(data);\n return data;\n}\nexports.toBytes = toBytes;\n/**\n * Copies several Uint8Arrays into one.\n */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n (0, _assert_js_1.bytes)(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexports.concatBytes = concatBytes;\n// For runtime check if class implements interface\nclass Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nexports.Hash = Hash;\nconst toStr = {}.toString;\nfunction checkOpts(defaults, opts) {\n if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexports.checkOpts = checkOpts;\nfunction wrapConstructor(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexports.wrapConstructor = wrapConstructor;\nfunction wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapConstructorWithOpts = wrapConstructorWithOpts;\nfunction wrapXOFConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapXOFConstructorWithOpts = wrapXOFConstructorWithOpts;\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') {\n return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\nexports.randomBytes = randomBytes;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shake256 = exports.shake128 = exports.keccak_512 = exports.keccak_384 = exports.keccak_256 = exports.keccak_224 = exports.sha3_512 = exports.sha3_384 = exports.sha3_256 = exports.sha3_224 = exports.Keccak = exports.keccakP = void 0;\nconst _assert_js_1 = require(\"./_assert.js\");\nconst _u64_js_1 = require(\"./_u64.js\");\nconst utils_js_1 = require(\"./utils.js\");\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n// Various per round constants calculations\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = [];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ (0, _u64_js_1.split)(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? (0, _u64_js_1.rotlBH)(h, l, s) : (0, _u64_js_1.rotlSH)(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? (0, _u64_js_1.rotlBL)(h, l, s) : (0, _u64_js_1.rotlSL)(h, l, s));\n// Same as keccakf1600, but allows to skip some rounds\nfunction keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexports.keccakP = keccakP;\nclass Keccak extends utils_js_1.Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n (0, _assert_js_1.number)(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = (0, utils_js_1.u32)(this.state);\n }\n keccak() {\n if (!utils_js_1.isLE)\n (0, utils_js_1.byteSwap32)(this.state32);\n keccakP(this.state32, this.rounds);\n if (!utils_js_1.isLE)\n (0, utils_js_1.byteSwap32)(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n (0, _assert_js_1.exists)(this);\n const { blockLen, state } = this;\n data = (0, utils_js_1.toBytes)(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n (0, _assert_js_1.exists)(this, false);\n (0, _assert_js_1.bytes)(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n (0, _assert_js_1.number)(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n (0, _assert_js_1.output)(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nexports.Keccak = Keccak;\nconst gen = (suffix, blockLen, outputLen) => (0, utils_js_1.wrapConstructor)(() => new Keccak(blockLen, suffix, outputLen));\nexports.sha3_224 = gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexports.sha3_256 = gen(0x06, 136, 256 / 8);\nexports.sha3_384 = gen(0x06, 104, 384 / 8);\nexports.sha3_512 = gen(0x06, 72, 512 / 8);\nexports.keccak_224 = gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexports.keccak_256 = gen(0x01, 136, 256 / 8);\nexports.keccak_384 = gen(0x01, 104, 384 / 8);\nexports.keccak_512 = gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => (0, utils_js_1.wrapXOFConstructorWithOpts)((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\nexports.shake128 = genShake(0x1f, 168, 128 / 8);\nexports.shake256 = genShake(0x1f, 136, 256 / 8);\n//# sourceMappingURL=sha3.js.map","/* global global, window, module */\nconst { sha3_512: sha3 } = require(\"@noble/hashes/sha3\");\n\nconst defaultLength = 24;\nconst bigLength = 32;\n\nconst createEntropy = (length = 4, random = Math.random) => {\n let entropy = \"\";\n\n while (entropy.length < length) {\n entropy = entropy + Math.floor(random() * 36).toString(36);\n }\n return entropy;\n};\n\n/*\n * Adapted from https://github.com/juanelas/bigint-conversion\n * MIT License Copyright (c) 2018 Juan Hernández Serrano\n */\nfunction bufToBigInt(buf) {\n let bits = 8n;\n\n let value = 0n;\n for (const i of buf.values()) {\n const bi = BigInt(i);\n value = (value << bits) + bi;\n }\n return value;\n}\n\nconst hash = (input = \"\") => {\n // Drop the first character because it will bias the histogram\n // to the left.\n return bufToBigInt(sha3(input)).toString(36).slice(1);\n};\n\nconst alphabet = Array.from({ length: 26 }, (x, i) =>\n String.fromCharCode(i + 97)\n);\n\nconst randomLetter = (random) =>\n alphabet[Math.floor(random() * alphabet.length)];\n\n/*\nThis is a fingerprint of the host environment. It is used to help\nprevent collisions when generating ids in a distributed system.\nIf no global object is available, you can pass in your own, or fall back\non a random string.\n*/\nconst createFingerprint = ({\n globalObj = typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : {},\n random = Math.random,\n} = {}) => {\n const globals = Object.keys(globalObj).toString();\n const sourceString = globals.length\n ? globals + createEntropy(bigLength, random)\n : createEntropy(bigLength, random);\n\n return hash(sourceString).substring(0, bigLength);\n};\n\nconst createCounter = (count) => () => {\n return count++;\n};\n\n// ~22k hosts before 50% chance of initial counter collision\n// with a remaining counter range of 9.0e+15 in JavaScript.\nconst initialCountMax = 476782367;\n\nconst init = ({\n // Fallback if the user does not pass in a CSPRNG. This should be OK\n // because we don't rely solely on the random number generator for entropy.\n // We also use the host fingerprint, current time, and a session counter.\n random = Math.random,\n counter = createCounter(Math.floor(random() * initialCountMax)),\n length = defaultLength,\n fingerprint = createFingerprint({ random }),\n} = {}) => {\n return function cuid2() {\n const firstLetter = randomLetter(random);\n\n // If we're lucky, the `.toString(36)` calls may reduce hashing rounds\n // by shortening the input to the hash function a little.\n const time = Date.now().toString(36);\n const count = counter().toString(36);\n\n // The salt should be long enough to be globally unique across the full\n // length of the hash. For simplicity, we use the same length as the\n // intended id output.\n const salt = createEntropy(length, random);\n const hashInput = `${time + salt + count + fingerprint}`;\n\n return `${firstLetter + hash(hashInput).substring(1, length)}`;\n };\n};\n\nconst createId = init();\n\nconst isCuid = (id, { minLength = 2, maxLength = bigLength } = {}) => {\n const length = id.length;\n const regex = /^[0-9a-z]+$/;\n\n try {\n if (\n typeof id === \"string\" &&\n length >= minLength &&\n length <= maxLength &&\n regex.test(id)\n )\n return true;\n } finally {\n }\n\n return false;\n};\n\nmodule.exports.getConstants = () => ({ defaultLength, bigLength });\nmodule.exports.init = init;\nmodule.exports.createId = createId;\nmodule.exports.bufToBigInt = bufToBigInt;\nmodule.exports.createCounter = createCounter;\nmodule.exports.createFingerprint = createFingerprint;\nmodule.exports.isCuid = isCuid;\n","const { createId, init, getConstants, isCuid } = require(\"./src/index\");\n\nmodule.exports.createId = createId;\nmodule.exports.init = init;\nmodule.exports.getConstants = getConstants;\nmodule.exports.isCuid = isCuid;\n","// src/ws.ts\nif (!globalThis.EventTarget || !globalThis.Event) {\n console.error(`\n PartySocket requires a global 'EventTarget' class to be available!\n You can polyfill this global by adding this to your code before any partysocket imports: \n \n \\`\\`\\`\n import 'partysocket/event-target-polyfill';\n \\`\\`\\`\n Please file an issue at https://github.com/partykit/partykit if you're still having trouble.\n`);\n}\nvar ErrorEvent = class extends Event {\n message;\n error;\n constructor(error, target) {\n super(\"error\", target);\n this.message = error.message;\n this.error = error;\n }\n};\nvar CloseEvent = class extends Event {\n code;\n reason;\n wasClean = true;\n constructor(code = 1e3, reason = \"\", target) {\n super(\"close\", target);\n this.code = code;\n this.reason = reason;\n }\n};\nvar Events = {\n Event,\n ErrorEvent,\n CloseEvent\n};\nfunction assert(condition, msg) {\n if (!condition) {\n throw new Error(msg);\n }\n}\nfunction cloneEventBrowser(e) {\n return new e.constructor(e.type, e);\n}\nfunction cloneEventNode(e) {\n if (\"data\" in e) {\n const evt2 = new MessageEvent(e.type, e);\n return evt2;\n }\n if (\"code\" in e || \"reason\" in e) {\n const evt2 = new CloseEvent(\n // @ts-expect-error we need to fix event/listener types\n e.code || 1999,\n // @ts-expect-error we need to fix event/listener types\n e.reason || \"unknown reason\",\n e\n );\n return evt2;\n }\n if (\"error\" in e) {\n const evt2 = new ErrorEvent(e.error, e);\n return evt2;\n }\n const evt = new Event(e.type, e);\n return evt;\n}\nvar isNode = typeof process !== \"undefined\" && typeof process.versions?.node !== \"undefined\" && typeof document === \"undefined\";\nvar cloneEvent = isNode ? cloneEventNode : cloneEventBrowser;\nvar DEFAULT = {\n maxReconnectionDelay: 1e4,\n minReconnectionDelay: 1e3 + Math.random() * 4e3,\n minUptime: 5e3,\n reconnectionDelayGrowFactor: 1.3,\n connectionTimeout: 4e3,\n maxRetries: Infinity,\n maxEnqueuedMessages: Infinity,\n startClosed: false,\n debug: false\n};\nvar didWarnAboutMissingWebSocket = false;\nvar ReconnectingWebSocket = class _ReconnectingWebSocket extends EventTarget {\n _ws;\n _retryCount = -1;\n _uptimeTimeout;\n _connectTimeout;\n _shouldReconnect = true;\n _connectLock = false;\n _binaryType = \"blob\";\n _closeCalled = false;\n _messageQueue = [];\n _debugLogger = console.log.bind(console);\n _url;\n _protocols;\n _options;\n constructor(url, protocols, options = {}) {\n super();\n this._url = url;\n this._protocols = protocols;\n this._options = options;\n if (this._options.startClosed) {\n this._shouldReconnect = false;\n }\n if (this._options.debugLogger) {\n this._debugLogger = this._options.debugLogger;\n }\n this._connect();\n }\n static get CONNECTING() {\n return 0;\n }\n static get OPEN() {\n return 1;\n }\n static get CLOSING() {\n return 2;\n }\n static get CLOSED() {\n return 3;\n }\n get CONNECTING() {\n return _ReconnectingWebSocket.CONNECTING;\n }\n get OPEN() {\n return _ReconnectingWebSocket.OPEN;\n }\n get CLOSING() {\n return _ReconnectingWebSocket.CLOSING;\n }\n get CLOSED() {\n return _ReconnectingWebSocket.CLOSED;\n }\n get binaryType() {\n return this._ws ? this._ws.binaryType : this._binaryType;\n }\n set binaryType(value) {\n this._binaryType = value;\n if (this._ws) {\n this._ws.binaryType = value;\n }\n }\n /**\n * Returns the number or connection retries\n */\n get retryCount() {\n return Math.max(this._retryCount, 0);\n }\n /**\n * The number of bytes of data that have been queued using calls to send() but not yet\n * transmitted to the network. This value resets to zero once all queued data has been sent.\n * This value does not reset to zero when the connection is closed; if you keep calling send(),\n * this will continue to climb. Read only\n */\n get bufferedAmount() {\n const bytes = this._messageQueue.reduce((acc, message) => {\n if (typeof message === \"string\") {\n acc += message.length;\n } else if (message instanceof Blob) {\n acc += message.size;\n } else {\n acc += message.byteLength;\n }\n return acc;\n }, 0);\n return bytes + (this._ws ? this._ws.bufferedAmount : 0);\n }\n /**\n * The extensions selected by the server. This is currently only the empty string or a list of\n * extensions as negotiated by the connection\n */\n get extensions() {\n return this._ws ? this._ws.extensions : \"\";\n }\n /**\n * A string indicating the name of the sub-protocol the server selected;\n * this will be one of the strings specified in the protocols parameter when creating the\n * WebSocket object\n */\n get protocol() {\n return this._ws ? this._ws.protocol : \"\";\n }\n /**\n * The current state of the connection; this is one of the Ready state constants\n */\n get readyState() {\n if (this._ws) {\n return this._ws.readyState;\n }\n return this._options.startClosed ? _ReconnectingWebSocket.CLOSED : _ReconnectingWebSocket.CONNECTING;\n }\n /**\n * The URL as resolved by the constructor\n */\n get url() {\n return this._ws ? this._ws.url : \"\";\n }\n /**\n * Whether the websocket object is now in reconnectable state\n */\n get shouldReconnect() {\n return this._shouldReconnect;\n }\n /**\n * An event listener to be called when the WebSocket connection's readyState changes to CLOSED\n */\n onclose = null;\n /**\n * An event listener to be called when an error occurs\n */\n onerror = null;\n /**\n * An event listener to be called when a message is received from the server\n */\n onmessage = null;\n /**\n * An event listener to be called when the WebSocket connection's readyState changes to OPEN;\n * this indicates that the connection is ready to send and receive data\n */\n onopen = null;\n /**\n * Closes the WebSocket connection or connection attempt, if any. If the connection is already\n * CLOSED, this method does nothing\n */\n close(code = 1e3, reason) {\n this._closeCalled = true;\n this._shouldReconnect = false;\n this._clearTimeouts();\n if (!this._ws) {\n this._debug(\"close enqueued: no ws instance\");\n return;\n }\n if (this._ws.readyState === this.CLOSED) {\n this._debug(\"close: already closed\");\n return;\n }\n this._ws.close(code, reason);\n }\n /**\n * Closes the WebSocket connection or connection attempt and connects again.\n * Resets retry counter;\n */\n reconnect(code, reason) {\n this._shouldReconnect = true;\n this._closeCalled = false;\n this._retryCount = -1;\n if (!this._ws || this._ws.readyState === this.CLOSED) {\n this._connect();\n } else {\n this._disconnect(code, reason);\n this._connect();\n }\n }\n /**\n * Enqueue specified data to be transmitted to the server over the WebSocket connection\n */\n send(data) {\n if (this._ws && this._ws.readyState === this.OPEN) {\n this._debug(\"send\", data);\n this._ws.send(data);\n } else {\n const { maxEnqueuedMessages = DEFAULT.maxEnqueuedMessages } = this._options;\n if (this._messageQueue.length < maxEnqueuedMessages) {\n this._debug(\"enqueue\", data);\n this._messageQueue.push(data);\n }\n }\n }\n _debug(...args) {\n if (this._options.debug) {\n this._debugLogger(\"RWS>\", ...args);\n }\n }\n _getNextDelay() {\n const {\n reconnectionDelayGrowFactor = DEFAULT.reconnectionDelayGrowFactor,\n minReconnectionDelay = DEFAULT.minReconnectionDelay,\n maxReconnectionDelay = DEFAULT.maxReconnectionDelay\n } = this._options;\n let delay = 0;\n if (this._retryCount > 0) {\n delay = minReconnectionDelay * Math.pow(reconnectionDelayGrowFactor, this._retryCount - 1);\n if (delay > maxReconnectionDelay) {\n delay = maxReconnectionDelay;\n }\n }\n this._debug(\"next delay\", delay);\n return delay;\n }\n _wait() {\n return new Promise((resolve) => {\n setTimeout(resolve, this._getNextDelay());\n });\n }\n _getNextProtocols(protocolsProvider) {\n if (!protocolsProvider)\n return Promise.resolve(null);\n if (typeof protocolsProvider === \"string\" || Array.isArray(protocolsProvider)) {\n return Promise.resolve(protocolsProvider);\n }\n if (typeof protocolsProvider === \"function\") {\n const protocols = protocolsProvider();\n if (!protocols)\n return Promise.resolve(null);\n if (typeof protocols === \"string\" || Array.isArray(protocols)) {\n return Promise.resolve(protocols);\n }\n if (protocols.then) {\n return protocols;\n }\n }\n throw Error(\"Invalid protocols\");\n }\n _getNextUrl(urlProvider) {\n if (typeof urlProvider === \"string\") {\n return Promise.resolve(urlProvider);\n }\n if (typeof urlProvider === \"function\") {\n const url = urlProvider();\n if (typeof url === \"string\") {\n return Promise.resolve(url);\n }\n if (url.then) {\n return url;\n }\n }\n throw Error(\"Invalid URL\");\n }\n _connect() {\n if (this._connectLock || !this._shouldReconnect) {\n return;\n }\n this._connectLock = true;\n const {\n maxRetries = DEFAULT.maxRetries,\n connectionTimeout = DEFAULT.connectionTimeout\n } = this._options;\n if (this._retryCount >= maxRetries) {\n this._debug(\"max retries reached\", this._retryCount, \">=\", maxRetries);\n return;\n }\n this._retryCount++;\n this._debug(\"connect\", this._retryCount);\n this._removeListeners();\n this._wait().then(\n () => Promise.all([\n this._getNextUrl(this._url),\n this._getNextProtocols(this._protocols || null)\n ])\n ).then(([url, protocols]) => {\n if (this._closeCalled) {\n this._connectLock = false;\n return;\n }\n if (!this._options.WebSocket && typeof WebSocket === \"undefined\" && !didWarnAboutMissingWebSocket) {\n console.error(`\\u203C\\uFE0F No WebSocket implementation available. You should define options.WebSocket. \n\nFor example, if you're using node.js, run \\`npm install ws\\`, and then in your code:\n\nimport PartySocket from 'partysocket';\nimport WS from 'ws';\n\nconst partysocket = new PartySocket({\n host: \"127.0.0.1:1999\",\n room: \"test-room\",\n WebSocket: WS\n});\n\n`);\n didWarnAboutMissingWebSocket = true;\n }\n const WS = this._options.WebSocket || WebSocket;\n this._debug(\"connect\", { url, protocols });\n this._ws = protocols ? new WS(url, protocols) : new WS(url);\n this._ws.binaryType = this._binaryType;\n this._connectLock = false;\n this._addListeners();\n this._connectTimeout = setTimeout(\n () => this._handleTimeout(),\n connectionTimeout\n );\n }).catch((err) => {\n this._connectLock = false;\n this._handleError(new Events.ErrorEvent(Error(err.message), this));\n });\n }\n _handleTimeout() {\n this._debug(\"timeout event\");\n this._handleError(new Events.ErrorEvent(Error(\"TIMEOUT\"), this));\n }\n _disconnect(code = 1e3, reason) {\n this._clearTimeouts();\n if (!this._ws) {\n return;\n }\n this._removeListeners();\n try {\n this._ws.close(code, reason);\n this._handleClose(new Events.CloseEvent(code, reason, this));\n } catch (error) {\n }\n }\n _acceptOpen() {\n this._debug(\"accept open\");\n this._retryCount = 0;\n }\n _handleOpen = (event) => {\n this._debug(\"open event\");\n const { minUptime = DEFAULT.minUptime } = this._options;\n clearTimeout(this._connectTimeout);\n this._uptimeTimeout = setTimeout(() => this._acceptOpen(), minUptime);\n assert(this._ws, \"WebSocket is not defined\");\n this._ws.binaryType = this._binaryType;\n this._messageQueue.forEach((message) => this._ws?.send(message));\n this._messageQueue = [];\n if (this.onopen) {\n this.onopen(event);\n }\n this.dispatchEvent(cloneEvent(event));\n };\n _handleMessage = (event) => {\n this._debug(\"message event\");\n if (this.onmessage) {\n this.onmessage(event);\n }\n this.dispatchEvent(cloneEvent(event));\n };\n _handleError = (event) => {\n this._debug(\"error event\", event.message);\n this._disconnect(\n void 0,\n event.message === \"TIMEOUT\" ? \"timeout\" : void 0\n );\n if (this.onerror) {\n this.onerror(event);\n }\n this._debug(\"exec error listeners\");\n this.dispatchEvent(cloneEvent(event));\n this._connect();\n };\n _handleClose = (event) => {\n this._debug(\"close event\");\n this._clearTimeouts();\n if (this._shouldReconnect) {\n this._connect();\n }\n if (this.onclose) {\n this.onclose(event);\n }\n this.dispatchEvent(cloneEvent(event));\n };\n _removeListeners() {\n if (!this._ws) {\n return;\n }\n this._debug(\"removeListeners\");\n this._ws.removeEventListener(\"open\", this._handleOpen);\n this._ws.removeEventListener(\"close\", this._handleClose);\n this._ws.removeEventListener(\"message\", this._handleMessage);\n this._ws.removeEventListener(\"error\", this._handleError);\n }\n _addListeners() {\n if (!this._ws) {\n return;\n }\n this._debug(\"addListeners\");\n this._ws.addEventListener(\"open\", this._handleOpen);\n this._ws.addEventListener(\"close\", this._handleClose);\n this._ws.addEventListener(\"message\", this._handleMessage);\n this._ws.addEventListener(\"error\", this._handleError);\n }\n _clearTimeouts() {\n clearTimeout(this._connectTimeout);\n clearTimeout(this._uptimeTimeout);\n }\n};\n\nexport {\n ErrorEvent,\n CloseEvent,\n ReconnectingWebSocket\n};\n/*!\n * Reconnecting WebSocket\n * by Pedro Ladaria <pedro.ladaria@gmail.com>\n * https://github.com/pladaria/reconnecting-websocket\n * License MIT\n */\n","import {\n ReconnectingWebSocket\n} from \"./chunk-KZ3GGBVP.mjs\";\n\n// src/index.ts\nvar valueIsNotNil = (keyValuePair) => keyValuePair[1] !== null && keyValuePair[1] !== void 0;\nfunction generateUUID() {\n if (typeof crypto !== \"undefined\" && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n let d = (/* @__PURE__ */ new Date()).getTime();\n let d2 = typeof performance !== \"undefined\" && performance.now && performance.now() * 1e3 || 0;\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n let r = Math.random() * 16;\n if (d > 0) {\n r = (d + r) % 16 | 0;\n d = Math.floor(d / 16);\n } else {\n r = (d2 + r) % 16 | 0;\n d2 = Math.floor(d2 / 16);\n }\n return (c === \"x\" ? r : r & 3 | 8).toString(16);\n });\n}\nfunction getPartyInfo(partySocketOptions, defaultProtocol, defaultParams = {}) {\n const {\n host: rawHost,\n path: rawPath,\n protocol: rawProtocol,\n room,\n party,\n query\n } = partySocketOptions;\n let host = rawHost.replace(/^(http|https|ws|wss):\\/\\//, \"\");\n if (host.endsWith(\"/\")) {\n host = host.slice(0, -1);\n }\n if (rawPath && rawPath.startsWith(\"/\")) {\n throw new Error(\"path must not start with a slash\");\n }\n const name = party ?? \"main\";\n const path = rawPath ? `/${rawPath}` : \"\";\n const protocol = rawProtocol || (host.startsWith(\"localhost:\") || host.startsWith(\"127.0.0.1:\") || host.startsWith(\"192.168.\") || host.startsWith(\"10.\") || host.startsWith(\"172.\") && host.split(\".\")[1] >= \"16\" && host.split(\".\")[1] <= \"31\" || host.startsWith(\"[::ffff:7f00:1]:\") ? (\n // http / ws\n defaultProtocol\n ) : (\n // https / wss\n defaultProtocol + \"s\"\n ));\n const baseUrl = `${protocol}://${host}/${party ? `parties/${party}` : \"party\"}/${room}${path}`;\n const makeUrl = (query2 = {}) => `${baseUrl}?${new URLSearchParams([\n ...Object.entries(defaultParams),\n ...Object.entries(query2).filter(valueIsNotNil)\n ])}`;\n const urlProvider = typeof query === \"function\" ? async () => makeUrl(await query()) : makeUrl(query);\n return {\n host,\n path,\n room,\n name,\n protocol,\n partyUrl: baseUrl,\n urlProvider\n };\n}\nvar PartySocket = class extends ReconnectingWebSocket {\n constructor(partySocketOptions) {\n const wsOptions = getWSOptions(partySocketOptions);\n super(wsOptions.urlProvider, wsOptions.protocols, wsOptions.socketOptions);\n this.partySocketOptions = partySocketOptions;\n this.setWSProperties(wsOptions);\n }\n _pk;\n _pkurl;\n name;\n room;\n host;\n path;\n updateProperties(partySocketOptions) {\n const wsOptions = getWSOptions({\n ...this.partySocketOptions,\n ...partySocketOptions,\n host: partySocketOptions.host ?? this.host,\n room: partySocketOptions.room ?? this.room,\n path: partySocketOptions.path ?? this.path\n });\n this._url = wsOptions.urlProvider;\n this._protocols = wsOptions.protocols;\n this._options = wsOptions.socketOptions;\n this.setWSProperties(wsOptions);\n }\n setWSProperties(wsOptions) {\n const { _pk, _pkurl, name, room, host, path } = wsOptions;\n this._pk = _pk;\n this._pkurl = _pkurl;\n this.name = name;\n this.room = room;\n this.host = host;\n this.path = path;\n }\n reconnect(code, reason) {\n if (!this.room || !this.host) {\n throw new Error(\n \"The room and host must be set before connecting, use `updateProperties` method to set them or pass them to the constructor.\"\n );\n }\n super.reconnect(code, reason);\n }\n get id() {\n return this._pk;\n }\n /**\n * Exposes the static PartyKit room URL without applying query parameters.\n * To access the currently connected WebSocket url, use PartySocket#url.\n */\n get roomUrl() {\n return this._pkurl;\n }\n // a `fetch` method that uses (almost) the same options as `PartySocket`\n static async fetch(options, init) {\n const party = getPartyInfo(options, \"http\");\n const url = typeof party.urlProvider === \"string\" ? party.urlProvider : await party.urlProvider();\n const doFetch = options.fetch ?? fetch;\n return doFetch(url, init);\n }\n};\nfunction getWSOptions(partySocketOptions) {\n const {\n id,\n host: _host,\n path: _path,\n party: _party,\n room: _room,\n protocol: _protocol,\n query: _query,\n protocols,\n ...socketOptions\n } = partySocketOptions;\n const _pk = id || generateUUID();\n const party = getPartyInfo(partySocketOptions, \"ws\", { _pk });\n return {\n _pk,\n _pkurl: party.partyUrl,\n name: party.name,\n room: party.room,\n host: party.host,\n path: party.path,\n protocols,\n socketOptions,\n urlProvider: party.urlProvider\n };\n}\n\nexport {\n PartySocket\n};\n","import {\n ReconnectingWebSocket\n} from \"./chunk-KZ3GGBVP.mjs\";\n\n// src/use-handlers.ts\nimport { useEffect, useRef } from \"react\";\nvar useAttachWebSocketEventHandlers = (socket, options) => {\n const handlersRef = useRef(options);\n handlersRef.current = options;\n useEffect(() => {\n const onOpen = (event) => handlersRef.current?.onOpen?.(event);\n const onMessage = (event) => handlersRef.current?.onMessage?.(event);\n const onClose = (event) => handlersRef.current?.onClose?.(event);\n const onError = (event) => handlersRef.current?.onError?.(event);\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"close\", onClose);\n socket.addEventListener(\"error\", onError);\n socket.addEventListener(\"message\", onMessage);\n return () => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"close\", onClose);\n socket.removeEventListener(\"error\", onError);\n socket.removeEventListener(\"message\", onMessage);\n };\n }, [socket]);\n};\n\n// src/use-socket.ts\nimport { useEffect as useEffect2, useMemo, useRef as useRef2, useState } from \"react\";\nvar getOptionsThatShouldCauseRestartWhenChanged = (options) => [\n options.startClosed,\n options.minUptime,\n options.maxRetries,\n options.connectionTimeout,\n options.maxEnqueuedMessages,\n options.maxReconnectionDelay,\n options.minReconnectionDelay,\n options.reconnectionDelayGrowFactor,\n options.debug\n];\nfunction useStableSocket({\n options,\n createSocket,\n createSocketMemoKey: createOptionsMemoKey\n}) {\n const shouldReconnect = createOptionsMemoKey(options);\n const socketOptions = useMemo(() => {\n return options;\n }, [shouldReconnect]);\n const [socket, setSocket] = useState(\n () => (\n // only connect on first mount\n createSocket({ ...socketOptions, startClosed: true })\n )\n );\n const socketInitializedRef = useRef2(null);\n const createSocketRef = useRef2(createSocket);\n createSocketRef.current = createSocket;\n useEffect2(() => {\n if (socketInitializedRef.current === socket) {\n const newSocket = createSocketRef.current({\n ...socketOptions,\n // when reconnecting because of options change, we always reconnect\n // (startClosed only applies to initial mount)\n startClosed: false\n });\n setSocket(newSocket);\n } else {\n if (!socketInitializedRef.current && socketOptions.startClosed !== true) {\n socket.reconnect();\n }\n socketInitializedRef.current = socket;\n return () => {\n socket.close();\n };\n }\n }, [socket, socketOptions]);\n return socket;\n}\n\n// src/use-ws.ts\nfunction useWebSocket(url, protocols, options = {}) {\n const socket = useStableSocket({\n options,\n createSocket: (options2) => new ReconnectingWebSocket(url, protocols, options2),\n createSocketMemoKey: (options2) => JSON.stringify([\n // will reconnect if url or protocols are specified as a string.\n // if they are functions, the WebSocket will handle reconnection\n url,\n protocols,\n ...getOptionsThatShouldCauseRestartWhenChanged(options2)\n ])\n });\n useAttachWebSocketEventHandlers(socket, options);\n return socket;\n}\n\nexport {\n useAttachWebSocketEventHandlers,\n getOptionsThatShouldCauseRestartWhenChanged,\n useStableSocket,\n useWebSocket\n};\n","import {\n PartySocket\n} from \"./chunk-G2EOJEOR.mjs\";\nimport {\n getOptionsThatShouldCauseRestartWhenChanged,\n useAttachWebSocketEventHandlers,\n useStableSocket,\n useWebSocket\n} from \"./chunk-G7CWGN4S.mjs\";\nimport \"./chunk-KZ3GGBVP.mjs\";\n\n// src/react.ts\nfunction usePartySocket(options) {\n const { host, ...otherOptions } = options;\n const socket = useStableSocket({\n options: {\n host: host || (typeof window !== \"undefined\" ? window.location.host : \"dummy-domain.com\"),\n ...otherOptions\n },\n createSocket: (options2) => new PartySocket(options2),\n createSocketMemoKey: (options2) => JSON.stringify([\n // NOTE: if query is defined as a function, the socket\n // won't reconnect when you change the function identity\n options2.query,\n options2.id,\n options2.host,\n options2.room,\n options2.party,\n options2.path,\n options2.protocol,\n options2.protocols,\n ...getOptionsThatShouldCauseRestartWhenChanged(options2)\n ])\n });\n useAttachWebSocketEventHandlers(socket, options);\n return socket;\n}\nexport {\n usePartySocket as default,\n usePartySocket,\n useWebSocket\n};\n","import {\n\tMessageSchema,\n\tpartykitBaseUrl,\n\tpartykitRoom,\n\ttype Message,\n\ttype User,\n} from '@epic-web/workshop-presence/presence'\nimport { createId as cuid } from '@paralleldrive/cuid2'\nimport { useParams, useRouteLoaderData } from '@remix-run/react'\nimport { usePartySocket } from 'partysocket/react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { z } from 'zod'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport { useRequestInfo } from './request-info.ts'\n\nexport * from '@epic-web/workshop-presence/presence'\n\nconst PresenceContext = createContext<ReturnType<\n\ttypeof usePresenceSocket\n> | null>(null)\n\nexport function usePresencePreferences() {\n\tconst data = useRouteLoaderData<typeof rootLoader>('root')\n\treturn data?.preferences?.presence ?? null\n}\n\nexport function useOptionalWorkshopTitle() {\n\tconst data = useRouteLoaderData<typeof rootLoader>('root')\n\treturn data?.workshopTitle ?? null\n}\n\nconst ExerciseAppParamsSchema = z.object({\n\ttype: z.union([z.literal('problem'), z.literal('solution')]).optional(),\n\texerciseNumber: z.coerce.number().finite(),\n\tstepNumber: z.coerce.number().finite().optional(),\n})\n\nexport function usePresenceSocket(user?: User | null) {\n\tconst workshopTitle = useOptionalWorkshopTitle()\n\tconst requestInfo = useRequestInfo()\n\tconst rawParams = useParams()\n\tconst prefs = usePresencePreferences()\n\tconst data = useRouteLoaderData<typeof rootLoader>('root')\n\tconst [users, setUsers] = useState(data?.presence.users ?? [])\n\tconst [clientId] = useState(() => {\n\t\tif (typeof document === 'undefined') return null\n\t\tif (user) return user.id\n\t\tconst clientId = sessionStorage.getItem('clientId')\n\t\tif (clientId) return clientId\n\t\tconst newClientId = cuid()\n\t\tsessionStorage.setItem('clientId', newClientId)\n\t\treturn newClientId\n\t})\n\n\tconst socket = usePartySocket({\n\t\thost: new URL(partykitBaseUrl).host,\n\t\troom: partykitRoom,\n\t\tonMessage(evt: MessageEvent) {\n\t\t\tconst messageResult = MessageSchema.safeParse(\n\t\t\t\tJSON.parse(String(evt.data)),\n\t\t\t)\n\t\t\tif (!messageResult.success) return\n\t\t\tif (messageResult.data.type === 'presence') {\n\t\t\t\tsetUsers(messageResult.data.payload.users)\n\t\t\t}\n\t\t},\n\t})\n\n\tconst paramsResult = ExerciseAppParamsSchema.safeParse(rawParams)\n\tconst params = paramsResult.success ? paramsResult.data : null\n\tconst location = {\n\t\tworkshopTitle,\n\t\torigin: requestInfo.origin,\n\t\t...(params\n\t\t\t? {\n\t\t\t\t\texercise: {\n\t\t\t\t\t\ttype: params.type,\n\t\t\t\t\t\texerciseNumber: params.exerciseNumber,\n\t\t\t\t\t\tstepNumber: params.stepNumber,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: null),\n\t} satisfies User['location']\n\n\tlet message: Message | null = null\n\tif ((!user || prefs?.optOut) && clientId) {\n\t\tif (user) {\n\t\t\tmessage = { type: 'remove-user', payload: { id: user.id } }\n\t\t}\n\t\tmessage = { type: 'add-user', payload: { id: clientId, location } }\n\t} else if (user) {\n\t\tmessage = {\n\t\t\ttype: 'add-user',\n\t\t\tpayload: {\n\t\t\t\tid: user.id,\n\t\t\t\tname: user.name,\n\t\t\t\tavatarUrl: user.avatarUrl,\n\t\t\t\tlocation,\n\t\t\t},\n\t\t}\n\t}\n\n\tconst messageJson = message ? JSON.stringify(message) : null\n\tuseEffect(() => {\n\t\tif (messageJson) socket.send(messageJson)\n\t}, [messageJson, socket])\n\n\tconst scoredUsers = scoreUsers(location, users)\n\n\treturn { users: scoredUsers }\n}\n\nfunction scoreUsers(location: User['location'], users: Array<User>) {\n\tconst scoredUsers = users.map((user) => {\n\t\tlet score = 0\n\t\tconst available = 4\n\t\tif (location?.workshopTitle === user.location?.workshopTitle) {\n\t\t\tscore += 1\n\t\t\tif (\n\t\t\t\tlocation?.exercise?.exerciseNumber &&\n\t\t\t\tlocation.exercise.exerciseNumber ===\n\t\t\t\t\tuser.location?.exercise?.exerciseNumber\n\t\t\t) {\n\t\t\t\tscore += 1\n\t\t\t\tif (\n\t\t\t\t\tlocation.exercise.stepNumber &&\n\t\t\t\t\tlocation.exercise.stepNumber === user.location.exercise.stepNumber\n\t\t\t\t) {\n\t\t\t\t\tscore += 1\n\t\t\t\t\tif (\n\t\t\t\t\t\tlocation.exercise.type &&\n\t\t\t\t\t\tlocation.exercise.type === user.location.exercise.type\n\t\t\t\t\t) {\n\t\t\t\t\t\tscore += 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { user, score: Math.floor((score / available) * 10) / 10 }\n\t})\n\treturn scoredUsers.sort((a, b) => {\n\t\tif (a.score === b.score) return 0\n\t\treturn a.score > b.score ? -1 : 1\n\t})\n}\n\nexport function Presence({\n\tuser,\n\tchildren,\n}: {\n\tuser?: User | null\n\tchildren: React.ReactNode\n}) {\n\treturn (\n\t\t<PresenceContext.Provider value={usePresenceSocket(user)}>\n\t\t\t{children}\n\t\t</PresenceContext.Provider>\n\t)\n}\n\nexport function usePresence() {\n\tconst presence = useContext(PresenceContext)\n\tif (!presence) {\n\t\tthrow new Error('usePresence must be used within a PresenceProvider')\n\t}\n\treturn presence\n}\n"],"names":["partykitRoom","partykitBaseUrl","UserSchema","z","MessageSchema","_assert","number","n","bool","b","isBytes","a","bytes","lengths","hash","h","exists","instance","checkFinished","output","out","min","assert","_u64","U32_MASK64","_32n","fromBig","le","split","lst","Ah","Al","i","l","toBig","shrSH","_l","s","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","rotr32H","_h","rotr32L","rotlSH","rotlSL","rotlBH","rotlBL","add","Bh","Bl","add3L","Cl","add3H","low","Ch","add4L","Dl","add4H","Dh","add5L","El","add5H","Eh","u64","crypto","exports","crypto_1","require$$0","_assert_js_1","require$$1","u8","arr","u32","createView","rotr","word","shift","rotl","byteSwap","byteSwap32","hexes","_","bytesToHex","hex","asciis","asciiToBase16","char","hexToBytes","hl","al","array","ai","hi","n1","n2","nextTick","asyncLoop","iters","tick","cb","ts","diff","utf8ToBytes","str","toBytes","data","concatBytes","arrays","sum","res","pad","Hash","toStr","checkOpts","defaults","opts","wrapConstructor","hashCons","hashC","msg","tmp","wrapConstructorWithOpts","wrapXOFConstructorWithOpts","randomBytes","bytesLength","sha3","_u64_js_1","utils_js_1","require$$2","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_0n","_1n","_2n","_7n","_256n","_0x71n","round","R","x","y","t","j","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","rotlL","keccakP","rounds","B","idx1","idx0","B0","B1","Th","Tl","curH","curL","PI","Keccak","blockLen","suffix","outputLen","enableXOF","state","len","pos","take","bufferOut","to","gen","genShake","defaultLength","bigLength","createEntropy","length","random","entropy","bufToBigInt","buf","bits","value","bi","input","alphabet","randomLetter","createFingerprint","globalObj","global","globals","sourceString","createCounter","count","initialCountMax","init","counter","fingerprint","firstLetter","time","salt","hashInput","createId","isCuid","id","minLength","maxLength","regex","src","getConstants","createId_1","ErrorEvent","error","target","__publicField","CloseEvent","code","reason","Events","condition","cloneEventBrowser","cloneEventNode","isNode","_a","cloneEvent","DEFAULT","didWarnAboutMissingWebSocket","ReconnectingWebSocket","_ReconnectingWebSocket","url","protocols","options","event","minUptime","message","acc","maxEnqueuedMessages","args","reconnectionDelayGrowFactor","minReconnectionDelay","maxReconnectionDelay","delay","resolve","protocolsProvider","urlProvider","maxRetries","connectionTimeout","WS","err","valueIsNotNil","keyValuePair","generateUUID","d","d2","c","r","getPartyInfo","partySocketOptions","defaultProtocol","defaultParams","rawHost","rawPath","rawProtocol","room","party","query","host","name","path","protocol","baseUrl","makeUrl","query2","PartySocket","wsOptions","getWSOptions","_pk","_pkurl","_host","_path","_party","_room","_protocol","_query","socketOptions","useAttachWebSocketEventHandlers","socket","handlersRef","useRef","useEffect","onOpen","_b","onMessage","onClose","onError","getOptionsThatShouldCauseRestartWhenChanged","useStableSocket","createSocket","createOptionsMemoKey","shouldReconnect","useMemo","setSocket","useState","socketInitializedRef","useRef2","createSocketRef","useEffect2","newSocket","usePartySocket","otherOptions","options2","PresenceContext","createContext","usePresencePreferences","useRouteLoaderData","useOptionalWorkshopTitle","ExerciseAppParamsSchema","usePresenceSocket","user","workshopTitle","requestInfo","useRequestInfo","rawParams","useParams","prefs","users","setUsers","clientId","newClientId","cuid","evt","messageResult","paramsResult","params","location","messageJson","scoreUsers","score","available","_d","_c","Presence","children","jsx","usePresence","presence","useContext"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11]}
@@ -1,2 +1,2 @@
1
- import{j as e,r as a}from"./index-1cKOJFpX.js";import{u as ae,b as Q,I,c as ie,a as X}from"./misc-CxCgA-_O.js";import{z as t,u as Z}from"./request-info-CEhUGODY.js";import{B as C}from"./button-EE0aPg10.js";import{L as ee}from"./loading-sXkYDMsx.js";import{s as O}from"./progress-bar-D3kudPcr.js";import{u as z}from"./pe-CUZaIcdt.js";import{a as q,b as oe,F as le}from"./components-CME-nGId.js";import{T as ce,a as v,b as E,c as B}from"./tooltip-kD4kSf1i.js";import{u as ue}from"./index-YNIH4TH8.js";function de({name:o}){var i;const r=q(),l=z(),c=(i=r.formData)==null?void 0:i.get("intent"),u=c==="stop"?"Stopping App":c==="restart"?"Restarting App":null,m=ae();return e.jsxs(r.Form,{method:"POST",action:"/start",children:[l,O,e.jsx("input",{type:"hidden",name:"name",value:o}),e.jsx("button",{type:"submit",name:"intent",value:m?"restart":"stop",className:"h-full border-r px-3 py-4 font-mono text-xs uppercase leading-none",children:u||(m?"Restart App":"Stop App")})]})}function te({port:o}){const r=q(),l=z();return e.jsxs(r.Form,{method:"POST",action:"/start",children:[l,O,e.jsx("input",{type:"hidden",name:"port",value:o}),e.jsx(C,{varient:"mono",type:"submit",name:"intent",value:"stop-port",children:r.state==="idle"?"Stop Port":"Stopping Port"})]})}function he({name:o}){var c;const r=q(),l=z();return((c=r.data)==null?void 0:c.status)==="app-not-started"?r.data.error==="port-unavailable"?e.jsxs("div",{children:["The port is unavailable. Would you like to stop whatever is running on that port and try again?",e.jsx(te,{port:r.data.port})]}):e.jsx("div",{children:"An unknown error has happened."}):e.jsxs(r.Form,{method:"POST",action:"/start",children:[l,O,e.jsx("input",{type:"hidden",name:"name",value:o}),r.state==="idle"?e.jsx(C,{type:"submit",name:"intent",value:"start",varient:"mono",children:"Start App"}):e.jsx("div",{children:e.jsx(ee,{children:"Starting App"})})]})}const fe=t.intersection(t.object({type:t.literal("epicshop:history-call")}),t.union([t.object({method:t.literal("pushState"),args:t.union([t.tuple([t.object({}).passthrough(),t.unknown()]),t.tuple([t.object({}).passthrough(),t.unknown(),t.string()])])}),t.object({method:t.literal("replaceState"),args:t.union([t.tuple([t.object({}).passthrough(),t.unknown()]),t.tuple([t.object({}).passthrough(),t.unknown(),t.string()])])}),t.object({method:t.literal("go"),args:t.tuple([t.number().optional()])}),t.object({method:t.literal("forward"),args:t.tuple([])}),t.object({method:t.literal("back"),args:t.tuple([])}),t.object({method:t.literal("popstate"),pathname:t.string(),delta:t.number()})])),me=t.object({type:t.literal("epicshop:loaded"),url:t.string()}),pe=t.union([fe,me]);function J(o,r,l){return Math.min(Math.max(o+r,0),l)}const xe=a.forwardRef(ge);function ge({name:o,port:r,portIsAvailable:l,isRunning:c,baseUrl:u,id:m,initialRoute:i},p){const b=Z();return c?e.jsx(je,{baseUrl:u,id:m,name:o,ref:p,initialRoute:i}):l===!1?e.jsxs("div",{className:"flex flex-col items-center justify-center",children:[e.jsxs("p",{className:"max-w-xs pb-5 text-center",role:"status",children:["The port for this app is unavailable. It could be that you're running it ",e.jsx("a",{href:Q({domain:b.domain,port:r}),className:"underline",children:"elsewhere"}),"?"]}),e.jsx(te,{port:r})]}):e.jsx(he,{name:o})}const je=a.forwardRef(we);function we({baseUrl:o,id:r,name:l,initialRoute:c},u){const[m,i]=oe(),p=m.get("pathname")??c,[b,N]=a.useState(0),x=r+b,y=a.useRef("new"),L=a.useRef(null),[g,T]=a.useState({history:[p],index:0}),[H,U]=a.useState(p),A=a.useRef(null),j=new URL(p,o),M=a.useRef(j);a.useEffect(()=>{M.current=j});const[W,_]=a.useState(j),F=a.useRef(r);F.current!==r&&(F.current=r,_(M.current)),a.useEffect(()=>{F.current=r}),a.useEffect(()=>{function n(d){var Y;if(d.source!==((Y=A.current)==null?void 0:Y.contentWindow))return;const P=pe.safeParse(d.data,{path:["messageEvent","data"]});if(!P.success)return;const{data:h}=P;if(h.type==="epicshop:loaded"){T(s=>{const w=S=>J(s.index,S,s.history.length-1);if(y.current==="back")return{...s,index:w(-1)};if(y.current==="forward")return{...s,index:w(1)};if(y.current==="new"){const S=s.history[s.index],f=new URL(h.url),k=f.pathname+f.search;if(S===k)return s;const $=[...s.history.slice(0,s.index+1),k];return{history:$,index:$.length-1}}else throw new Error("Unexpected lastDirectionRef value")});return}const{method:ne}=h;T(s=>{const w=f=>J(s.index,f,s.history.length-1),S=s.history[s.index];switch(ne){case"popstate":return{...s,index:w(h.delta)};case"forward":return{...s,index:w(1)};case"back":return{...s,index:w(-1)};case"pushState":{const f=h.args[2]??S,k=[...s.history.slice(0,s.index+1),f].filter(Boolean);return{...s,history:k,index:k.length-1}}case"replaceState":{const f=h.args[2]??S;return{...s,history:[...s.history.slice(0,s.index),f,...s.history.slice(s.index+1)].filter(Boolean)}}case"go":{const[f=0]=h.args;return{...s,index:w(f)}}}})}return window.addEventListener("message",n),()=>{window.removeEventListener("message",n)}},[]);const K=a.useRef(i);a.useEffect(()=>{K.current=i},[i]);const R=g.history[g.index];a.useEffect(()=>{if(!R)return;U(R);const n=new URLSearchParams(window.location.search);R==="/"?n.delete("pathname"):n.set("pathname",R),`?${n.toString()}`!==window.location.search&&K.current(n,{replace:!0})},[R]);const D=(...n)=>{var P,h;const d=n[0];typeof d=="number"?y.current=d>0?"forward":"back":y.current="new",L.current&&clearTimeout(L.current),L.current=setTimeout(()=>{y.current="new"},100),(h=(P=A.current)==null?void 0:P.contentWindow)==null||h.postMessage({type:"epicshop:navigate-call",params:n},"*")};function G(n=H){U(n);const d=g.history[g.index];D(n,{replace:d===n})}a.useImperativeHandle(u,()=>({handleExtrnalNavigation:G}));const re=g.index===g.history.length-1,se=g.index<=0,V=[];for(const[n,d]of m.entries())n!=="pathname"&&V.push(e.jsx("input",{type:"hidden",name:n,value:d},n));return e.jsx(ce,{children:e.jsxs("div",{className:"flex h-full flex-grow flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b pl-1.5",children:[e.jsxs("div",{className:"mr-2 flex items-center justify-center gap-2 px-1",children:[e.jsxs(v,{children:[e.jsx(E,{asChild:!0,children:e.jsx("button",{type:"button",className:"hidden aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40 sm:flex",disabled:se,onClick:()=>D(-1),children:e.jsx(I,{name:"ArrowLeft","aria-hidden":"true"})})}),e.jsx(B,{children:"Go back"})]}),e.jsxs(v,{children:[e.jsx(E,{asChild:!0,children:e.jsx("button",{type:"button",className:"hidden aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40 sm:flex",disabled:re,onClick:()=>D(1),children:e.jsx(I,{name:"ArrowRight","aria-hidden":"true"})})}),e.jsx(B,{children:"Go forward"})]}),e.jsxs(v,{children:[e.jsx(E,{asChild:!0,children:e.jsx("button",{type:"button",className:"flex aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40",onClick:()=>{_(j),N(b+1),T({history:[j.pathname],index:0})},children:e.jsx(I,{name:"Refresh","aria-hidden":"true"})})}),e.jsx(B,{children:"Refresh"})]})]}),e.jsxs(le,{method:"get",replace:!0,className:"flex flex-1 gap-2",onSubmit:()=>G(),children:[V,e.jsxs("div",{className:"flex flex-1 items-center border-x bg-background p-3 leading-none text-foreground",children:[e.jsx("a",{href:j.toString(),target:"_blank",rel:"noreferrer",children:W.host}),e.jsx("input",{"aria-label":"pathname",className:"w-full flex-1 bg-background focus-visible:outline-none",value:H,name:"pathname",onChange:n=>U(n.currentTarget.value)})]})]}),e.jsx(de,{name:l}),e.jsxs(v,{children:[e.jsx(E,{asChild:!0,children:e.jsx("a",{href:j.toString(),target:"_blank",rel:"noreferrer",className:ie("flex aspect-square items-center justify-center px-3.5"),children:e.jsx(I,{name:"ExternalLink"})})}),e.jsx(B,{children:"Open in new tab"})]})]}),e.jsx("div",{className:"flex h-full w-full flex-grow dark:bg-white",children:e.jsx("iframe",{title:l,ref:A,src:W.toString(),className:"h-full w-full flex-grow bg-white"},x)})]})})}function Le({id:o,appInfo:r,inBrowserBrowserRef:l}){const c=Z(),u=ue();if(!r)return e.jsx("p",{children:"No app here. Sorry."});const{isRunning:m,dev:i,name:p,portIsAvailable:b,title:N}=r;if(ENV.EPICSHOP_DEPLOYED&&r.stackBlitzUrl){const x=new URL(r.stackBlitzUrl);return x.searchParams.set("embed","1"),x.searchParams.set("theme",u),e.jsx(be,{title:N,url:x.toString(),loadingContent:e.jsx(ee,{children:e.jsxs("span",{children:["Loading"," ",e.jsxs("a",{className:"underline",href:r.stackBlitzUrl,children:['"',N,'"']})]})})})}if(i.type==="script"){const x=Q({domain:c.domain,port:i.portNumber});return e.jsx(xe,{ref:l,isRunning:m,id:o??p,name:p,portIsAvailable:b,port:i.portNumber,baseUrl:x,initialRoute:i.initialRoute})}else return i.type==="browser"?e.jsxs("div",{className:"relative h-full flex-grow overflow-y-auto scrollbar-thin scrollbar-thumb-scrollbar",children:[e.jsxs("a",{href:i.pathname,target:"_blank",rel:"noreferrer",className:X("absolute bottom-5 right-5 flex items-center justify-center rounded-full bg-gray-100 p-2.5 transition hover:bg-gray-200 dark:bg-gray-800 hover:dark:bg-gray-600"),children:[e.jsx(I,{name:"ExternalLink","aria-hidden":"true"}),e.jsx("span",{className:"sr-only",children:"Open in New Window"})]}),e.jsx("iframe",{title:N,src:i.pathname,className:"h-full w-full flex-grow bg-white"})]}):e.jsx("div",{className:"flex h-full items-center justify-center text-lg",children:e.jsxs("p",{children:["Preview for dev type of ",e.jsx("code",{children:i.type})," not supported."]})})}function be({url:o,title:r,loadingContent:l}){const[c,u]=a.useState(!1);return e.jsxs("div",{className:"h-full w-full flex-grow",children:[c?null:e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:l}),e.jsx("iframe",{onLoad:()=>u(!0),onError:()=>u(!0),src:o,className:X("h-full w-full flex-grow transition-opacity duration-300",c?"opacity-100":"opacity-0"),title:r,sandbox:"allow-forms allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox"})]})}export{Le as P};
2
- //# sourceMappingURL=preview-C7dtR2VR.js.map
1
+ import{j as e,r as a}from"./index-DF_XBInP.js";import{u as ae,b as Q,I,c as ie,a as X}from"./misc-BE75ioh8.js";import{z as t,u as Z}from"./request-info-DGnmXtfj.js";import{B as C}from"./button-CMkJ8p0a.js";import{L as ee}from"./loading-Br41_Pbf.js";import{s as O}from"./progress-bar-F8_2mvYp.js";import{u as z}from"./pe-CvPIToj6.js";import{a as q,b as oe,F as le}from"./components-DZ8XIeZ3.js";import{T as ce,a as v,b as E,c as B}from"./tooltip-6-WS-Xux.js";import{u as ue}from"./index-BvihEwfB.js";function de({name:o}){var i;const r=q(),l=z(),c=(i=r.formData)==null?void 0:i.get("intent"),u=c==="stop"?"Stopping App":c==="restart"?"Restarting App":null,m=ae();return e.jsxs(r.Form,{method:"POST",action:"/start",children:[l,O,e.jsx("input",{type:"hidden",name:"name",value:o}),e.jsx("button",{type:"submit",name:"intent",value:m?"restart":"stop",className:"h-full border-r px-3 py-4 font-mono text-xs uppercase leading-none",children:u||(m?"Restart App":"Stop App")})]})}function te({port:o}){const r=q(),l=z();return e.jsxs(r.Form,{method:"POST",action:"/start",children:[l,O,e.jsx("input",{type:"hidden",name:"port",value:o}),e.jsx(C,{varient:"mono",type:"submit",name:"intent",value:"stop-port",children:r.state==="idle"?"Stop Port":"Stopping Port"})]})}function he({name:o}){var c;const r=q(),l=z();return((c=r.data)==null?void 0:c.status)==="app-not-started"?r.data.error==="port-unavailable"?e.jsxs("div",{children:["The port is unavailable. Would you like to stop whatever is running on that port and try again?",e.jsx(te,{port:r.data.port})]}):e.jsx("div",{children:"An unknown error has happened."}):e.jsxs(r.Form,{method:"POST",action:"/start",children:[l,O,e.jsx("input",{type:"hidden",name:"name",value:o}),r.state==="idle"?e.jsx(C,{type:"submit",name:"intent",value:"start",varient:"mono",children:"Start App"}):e.jsx("div",{children:e.jsx(ee,{children:"Starting App"})})]})}const fe=t.intersection(t.object({type:t.literal("epicshop:history-call")}),t.union([t.object({method:t.literal("pushState"),args:t.union([t.tuple([t.object({}).passthrough(),t.unknown()]),t.tuple([t.object({}).passthrough(),t.unknown(),t.string()])])}),t.object({method:t.literal("replaceState"),args:t.union([t.tuple([t.object({}).passthrough(),t.unknown()]),t.tuple([t.object({}).passthrough(),t.unknown(),t.string()])])}),t.object({method:t.literal("go"),args:t.tuple([t.number().optional()])}),t.object({method:t.literal("forward"),args:t.tuple([])}),t.object({method:t.literal("back"),args:t.tuple([])}),t.object({method:t.literal("popstate"),pathname:t.string(),delta:t.number()})])),me=t.object({type:t.literal("epicshop:loaded"),url:t.string()}),pe=t.union([fe,me]);function J(o,r,l){return Math.min(Math.max(o+r,0),l)}const xe=a.forwardRef(ge);function ge({name:o,port:r,portIsAvailable:l,isRunning:c,baseUrl:u,id:m,initialRoute:i},p){const b=Z();return c?e.jsx(je,{baseUrl:u,id:m,name:o,ref:p,initialRoute:i}):l===!1?e.jsxs("div",{className:"flex flex-col items-center justify-center",children:[e.jsxs("p",{className:"max-w-xs pb-5 text-center",role:"status",children:["The port for this app is unavailable. It could be that you're running it ",e.jsx("a",{href:Q({domain:b.domain,port:r}),className:"underline",children:"elsewhere"}),"?"]}),e.jsx(te,{port:r})]}):e.jsx(he,{name:o})}const je=a.forwardRef(we);function we({baseUrl:o,id:r,name:l,initialRoute:c},u){const[m,i]=oe(),p=m.get("pathname")??c,[b,N]=a.useState(0),x=r+b,y=a.useRef("new"),L=a.useRef(null),[g,T]=a.useState({history:[p],index:0}),[H,U]=a.useState(p),A=a.useRef(null),j=new URL(p,o),M=a.useRef(j);a.useEffect(()=>{M.current=j});const[W,_]=a.useState(j),F=a.useRef(r);F.current!==r&&(F.current=r,_(M.current)),a.useEffect(()=>{F.current=r}),a.useEffect(()=>{function n(d){var Y;if(d.source!==((Y=A.current)==null?void 0:Y.contentWindow))return;const P=pe.safeParse(d.data,{path:["messageEvent","data"]});if(!P.success)return;const{data:h}=P;if(h.type==="epicshop:loaded"){T(s=>{const w=S=>J(s.index,S,s.history.length-1);if(y.current==="back")return{...s,index:w(-1)};if(y.current==="forward")return{...s,index:w(1)};if(y.current==="new"){const S=s.history[s.index],f=new URL(h.url),k=f.pathname+f.search;if(S===k)return s;const $=[...s.history.slice(0,s.index+1),k];return{history:$,index:$.length-1}}else throw new Error("Unexpected lastDirectionRef value")});return}const{method:ne}=h;T(s=>{const w=f=>J(s.index,f,s.history.length-1),S=s.history[s.index];switch(ne){case"popstate":return{...s,index:w(h.delta)};case"forward":return{...s,index:w(1)};case"back":return{...s,index:w(-1)};case"pushState":{const f=h.args[2]??S,k=[...s.history.slice(0,s.index+1),f].filter(Boolean);return{...s,history:k,index:k.length-1}}case"replaceState":{const f=h.args[2]??S;return{...s,history:[...s.history.slice(0,s.index),f,...s.history.slice(s.index+1)].filter(Boolean)}}case"go":{const[f=0]=h.args;return{...s,index:w(f)}}}})}return window.addEventListener("message",n),()=>{window.removeEventListener("message",n)}},[]);const K=a.useRef(i);a.useEffect(()=>{K.current=i},[i]);const R=g.history[g.index];a.useEffect(()=>{if(!R)return;U(R);const n=new URLSearchParams(window.location.search);R==="/"?n.delete("pathname"):n.set("pathname",R),`?${n.toString()}`!==window.location.search&&K.current(n,{replace:!0})},[R]);const D=(...n)=>{var P,h;const d=n[0];typeof d=="number"?y.current=d>0?"forward":"back":y.current="new",L.current&&clearTimeout(L.current),L.current=setTimeout(()=>{y.current="new"},100),(h=(P=A.current)==null?void 0:P.contentWindow)==null||h.postMessage({type:"epicshop:navigate-call",params:n},"*")};function G(n=H){U(n);const d=g.history[g.index];D(n,{replace:d===n})}a.useImperativeHandle(u,()=>({handleExtrnalNavigation:G}));const re=g.index===g.history.length-1,se=g.index<=0,V=[];for(const[n,d]of m.entries())n!=="pathname"&&V.push(e.jsx("input",{type:"hidden",name:n,value:d},n));return e.jsx(ce,{children:e.jsxs("div",{className:"flex h-full flex-grow flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b pl-1.5",children:[e.jsxs("div",{className:"mr-2 flex items-center justify-center gap-2 px-1",children:[e.jsxs(v,{children:[e.jsx(E,{asChild:!0,children:e.jsx("button",{type:"button",className:"hidden aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40 sm:flex",disabled:se,onClick:()=>D(-1),children:e.jsx(I,{name:"ArrowLeft","aria-hidden":"true"})})}),e.jsx(B,{children:"Go back"})]}),e.jsxs(v,{children:[e.jsx(E,{asChild:!0,children:e.jsx("button",{type:"button",className:"hidden aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40 sm:flex",disabled:re,onClick:()=>D(1),children:e.jsx(I,{name:"ArrowRight","aria-hidden":"true"})})}),e.jsx(B,{children:"Go forward"})]}),e.jsxs(v,{children:[e.jsx(E,{asChild:!0,children:e.jsx("button",{type:"button",className:"flex aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40",onClick:()=>{_(j),N(b+1),T({history:[j.pathname],index:0})},children:e.jsx(I,{name:"Refresh","aria-hidden":"true"})})}),e.jsx(B,{children:"Refresh"})]})]}),e.jsxs(le,{method:"get",replace:!0,className:"flex flex-1 gap-2",onSubmit:()=>G(),children:[V,e.jsxs("div",{className:"flex flex-1 items-center border-x bg-background p-3 leading-none text-foreground",children:[e.jsx("a",{href:j.toString(),target:"_blank",rel:"noreferrer",children:W.host}),e.jsx("input",{"aria-label":"pathname",className:"w-full flex-1 bg-background focus-visible:outline-none",value:H,name:"pathname",onChange:n=>U(n.currentTarget.value)})]})]}),e.jsx(de,{name:l}),e.jsxs(v,{children:[e.jsx(E,{asChild:!0,children:e.jsx("a",{href:j.toString(),target:"_blank",rel:"noreferrer",className:ie("flex aspect-square items-center justify-center px-3.5"),children:e.jsx(I,{name:"ExternalLink"})})}),e.jsx(B,{children:"Open in new tab"})]})]}),e.jsx("div",{className:"flex h-full w-full flex-grow dark:bg-white",children:e.jsx("iframe",{title:l,ref:A,src:W.toString(),className:"h-full w-full flex-grow bg-white"},x)})]})})}function Le({id:o,appInfo:r,inBrowserBrowserRef:l}){const c=Z(),u=ue();if(!r)return e.jsx("p",{children:"No app here. Sorry."});const{isRunning:m,dev:i,name:p,portIsAvailable:b,title:N}=r;if(ENV.EPICSHOP_DEPLOYED&&r.stackBlitzUrl){const x=new URL(r.stackBlitzUrl);return x.searchParams.set("embed","1"),x.searchParams.set("theme",u),e.jsx(be,{title:N,url:x.toString(),loadingContent:e.jsx(ee,{children:e.jsxs("span",{children:["Loading"," ",e.jsxs("a",{className:"underline",href:r.stackBlitzUrl,children:['"',N,'"']})]})})})}if(i.type==="script"){const x=Q({domain:c.domain,port:i.portNumber});return e.jsx(xe,{ref:l,isRunning:m,id:o??p,name:p,portIsAvailable:b,port:i.portNumber,baseUrl:x,initialRoute:i.initialRoute})}else return i.type==="browser"?e.jsxs("div",{className:"relative h-full flex-grow overflow-y-auto scrollbar-thin scrollbar-thumb-scrollbar",children:[e.jsxs("a",{href:i.pathname,target:"_blank",rel:"noreferrer",className:X("absolute bottom-5 right-5 flex items-center justify-center rounded-full bg-gray-100 p-2.5 transition hover:bg-gray-200 dark:bg-gray-800 hover:dark:bg-gray-600"),children:[e.jsx(I,{name:"ExternalLink","aria-hidden":"true"}),e.jsx("span",{className:"sr-only",children:"Open in New Window"})]}),e.jsx("iframe",{title:N,src:i.pathname,className:"h-full w-full flex-grow bg-white"})]}):e.jsx("div",{className:"flex h-full items-center justify-center text-lg",children:e.jsxs("p",{children:["Preview for dev type of ",e.jsx("code",{children:i.type})," not supported."]})})}function be({url:o,title:r,loadingContent:l}){const[c,u]=a.useState(!1);return e.jsxs("div",{className:"h-full w-full flex-grow",children:[c?null:e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:l}),e.jsx("iframe",{onLoad:()=>u(!0),onError:()=>u(!0),src:o,className:X("h-full w-full flex-grow transition-opacity duration-300",c?"opacity-100":"opacity-0"),title:r,sandbox:"allow-forms allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox"})]})}export{Le as P};
2
+ //# sourceMappingURL=preview-DZcdG4kw.js.map