@pol-studios/db 1.0.30 → 1.0.33

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 (100) hide show
  1. package/dist/{DataLayerContext-Dc7nF2IG.d.ts → DataLayerContext-BwMk4VpG.d.ts} +92 -8
  2. package/dist/{UserMetadataContext-B8gVWGMl.d.ts → UserMetadataContext-pQb3A8_Q.d.ts} +1 -1
  3. package/dist/{UserMetadataContext-DntmpK41.d.ts → UserMetadataContext-yLZQu24J.d.ts} +1 -1
  4. package/dist/auth/context.d.ts +3 -3
  5. package/dist/auth/context.js +5 -10
  6. package/dist/auth/guards.d.ts +9 -9
  7. package/dist/auth/guards.js +2 -3
  8. package/dist/auth/hooks.d.ts +5 -4
  9. package/dist/auth/hooks.js +6 -9
  10. package/dist/auth/index.d.ts +4 -4
  11. package/dist/auth/index.js +7 -12
  12. package/dist/{chunk-EKUDGIQZ.js → chunk-3XCW225W.js} +274 -468
  13. package/dist/chunk-3XCW225W.js.map +1 -0
  14. package/dist/{chunk-OQ7U6EQ3.js → chunk-4EJ6LUH7.js} +3800 -3425
  15. package/dist/chunk-4EJ6LUH7.js.map +1 -0
  16. package/dist/{chunk-FZF26ZRB.js → chunk-7BGDQT5X.js} +29 -16
  17. package/dist/{chunk-FZF26ZRB.js.map → chunk-7BGDQT5X.js.map} +1 -1
  18. package/dist/{chunk-P4UZ7IXC.js → chunk-7D4SUZUM.js} +1 -5
  19. package/dist/{chunk-3PJTNH2L.js → chunk-AKIRHA4Q.js} +2 -2
  20. package/dist/{chunk-5EFDS7SR.js → chunk-DMVUEJG2.js} +7 -2
  21. package/dist/chunk-DMVUEJG2.js.map +1 -0
  22. package/dist/{chunk-KQNOEADH.js → chunk-E64B4PJZ.js} +74 -309
  23. package/dist/chunk-E64B4PJZ.js.map +1 -0
  24. package/dist/{chunk-A7C2FMUF.js → chunk-E6JL3RUF.js} +209 -53
  25. package/dist/chunk-E6JL3RUF.js.map +1 -0
  26. package/dist/{chunk-U5UNPBKB.js → chunk-FI6JAD5G.js} +3 -3
  27. package/dist/{chunk-TKWR5AAY.js → chunk-JOULSXOI.js} +2 -2
  28. package/dist/{chunk-HTJ2FQW5.js → chunk-LF3V3ERS.js} +13 -15
  29. package/dist/{chunk-HTJ2FQW5.js.map → chunk-LF3V3ERS.js.map} +1 -1
  30. package/dist/{chunk-D522CKBU.js → chunk-OUCPYEKC.js} +15 -15
  31. package/dist/{chunk-D522CKBU.js.map → chunk-OUCPYEKC.js.map} +1 -1
  32. package/dist/{chunk-7DJELYBA.js → chunk-PNC6CG5U.js} +43 -82
  33. package/dist/chunk-PNC6CG5U.js.map +1 -0
  34. package/dist/{chunk-CNIGRBRE.js → chunk-QJZUIAHA.js} +43 -19
  35. package/dist/{chunk-CNIGRBRE.js.map → chunk-QJZUIAHA.js.map} +1 -1
  36. package/dist/{chunk-HAWJTZCK.js → chunk-RT4O5H2E.js} +5 -7
  37. package/dist/chunk-RT4O5H2E.js.map +1 -0
  38. package/dist/{chunk-WVF7RUW5.js → chunk-WM25QE7E.js} +3 -3
  39. package/dist/{chunk-H6365JPC.js → chunk-YUX6RGLZ.js} +3 -3
  40. package/dist/{chunk-H6365JPC.js.map → chunk-YUX6RGLZ.js.map} +1 -1
  41. package/dist/{chunk-H3LNH2NT.js → chunk-Z456IHCB.js} +5 -9
  42. package/dist/{chunk-H3LNH2NT.js.map → chunk-Z456IHCB.js.map} +1 -1
  43. package/dist/{chunk-JAATANS3.js → chunk-ZCOFRJQD.js} +3 -3
  44. package/dist/{chunk-JAATANS3.js.map → chunk-ZCOFRJQD.js.map} +1 -1
  45. package/dist/client/index.d.ts +1 -1
  46. package/dist/client/index.js +2 -2
  47. package/dist/core/index.d.ts +54 -31
  48. package/dist/{executor-Br27YZvl.d.ts → executor-YJw4m7Q7.d.ts} +9 -1
  49. package/dist/gen/index.js +1 -1
  50. package/dist/hooks/index.d.ts +3 -22
  51. package/dist/hooks/index.js +5 -4
  52. package/dist/{index-CYFdO0iB.d.ts → index-lveh8qb0.d.ts} +1 -1
  53. package/dist/index.d.ts +38 -10
  54. package/dist/index.js +60 -42
  55. package/dist/index.native.d.ts +19 -13
  56. package/dist/index.native.js +65 -39
  57. package/dist/index.web.d.ts +18 -45
  58. package/dist/index.web.js +58 -52
  59. package/dist/index.web.js.map +1 -1
  60. package/dist/mutation/index.d.ts +2 -2
  61. package/dist/mutation/index.js +5 -5
  62. package/dist/parser/index.js +4 -4
  63. package/dist/powersync-bridge/index.d.ts +18 -3
  64. package/dist/powersync-bridge/index.js +2 -2
  65. package/dist/query/index.d.ts +1 -1
  66. package/dist/query/index.js +7 -8
  67. package/dist/realtime/index.js +7 -9
  68. package/dist/realtime/index.js.map +1 -1
  69. package/dist/{setupAuthContext-Kv-THH-h.d.ts → setupAuthContext-B76nbIP6.d.ts} +23 -17
  70. package/dist/types/index.d.ts +3 -3
  71. package/dist/types/index.js +6 -7
  72. package/dist/{useBatchUpsert-9OYjibLh.d.ts → useBatchUpsert-DAkiCNo3.d.ts} +1 -1
  73. package/dist/{useDbCount-Dk0yCKlT.d.ts → useDbCount-DWfYB2iu.d.ts} +16 -2
  74. package/dist/{useResolveFeedback-C1KucfdQ.d.ts → useResolveFeedback-CxLccZKK.d.ts} +197 -93
  75. package/dist/{useSupabase-DvWVuHHE.d.ts → useSupabase-DSZNeXnF.d.ts} +1 -1
  76. package/dist/with-auth/index.d.ts +3 -3
  77. package/dist/with-auth/index.js +43 -32
  78. package/dist/with-auth/index.js.map +1 -1
  79. package/package.json +18 -8
  80. package/dist/canvas-C4TBBDUL.node +0 -0
  81. package/dist/canvas-ZQNCL7JL.js +0 -1541
  82. package/dist/canvas-ZQNCL7JL.js.map +0 -1
  83. package/dist/chunk-5EFDS7SR.js.map +0 -1
  84. package/dist/chunk-7DJELYBA.js.map +0 -1
  85. package/dist/chunk-A7C2FMUF.js.map +0 -1
  86. package/dist/chunk-EKUDGIQZ.js.map +0 -1
  87. package/dist/chunk-HAWJTZCK.js.map +0 -1
  88. package/dist/chunk-IXBDCSM3.js +0 -3391
  89. package/dist/chunk-IXBDCSM3.js.map +0 -1
  90. package/dist/chunk-KQNOEADH.js.map +0 -1
  91. package/dist/chunk-OQ7U6EQ3.js.map +0 -1
  92. package/dist/dist-NDNRSNOG.js +0 -521
  93. package/dist/dist-NDNRSNOG.js.map +0 -1
  94. package/dist/pdf-PHXP7RHD.js +0 -20336
  95. package/dist/pdf-PHXP7RHD.js.map +0 -1
  96. /package/dist/{chunk-P4UZ7IXC.js.map → chunk-7D4SUZUM.js.map} +0 -0
  97. /package/dist/{chunk-3PJTNH2L.js.map → chunk-AKIRHA4Q.js.map} +0 -0
  98. /package/dist/{chunk-U5UNPBKB.js.map → chunk-FI6JAD5G.js.map} +0 -0
  99. /package/dist/{chunk-TKWR5AAY.js.map → chunk-JOULSXOI.js.map} +0 -0
  100. /package/dist/{chunk-WVF7RUW5.js.map → chunk-WM25QE7E.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["node-file:/Users/jpsaccount/Repos/POL-One/node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/build/Release/canvas.node","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/lib/bindings.js","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/lib/parse-font.js","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/lib/DOMMatrix.js","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/lib/context2d.js","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/lib/pngstream.js","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/lib/pdfstream.js","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/lib/jpegstream.js","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/lib/canvas.js","../../../../node_modules/.pnpm/simple-concat@1.0.1/node_modules/simple-concat/index.js","../../../../node_modules/.pnpm/mimic-response@2.1.0/node_modules/mimic-response/index.js","../../../../node_modules/.pnpm/decompress-response@4.2.1/node_modules/decompress-response/index.js","../../../../node_modules/.pnpm/wrappy@1.0.2/node_modules/wrappy/wrappy.js","../../../../node_modules/.pnpm/once@1.4.0/node_modules/once/once.js","../../../../node_modules/.pnpm/simple-get@3.1.1/node_modules/simple-get/index.js","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/lib/image.js","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/lib/pattern.js","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/package.json","../../../../node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/index.js"],"sourcesContent":["\n import path from \"/Users/jpsaccount/Repos/POL-One/node_modules/.pnpm/canvas@2.11.2_encoding@0.1.13/node_modules/canvas/build/Release/canvas.node\"\n try { module.exports = require(path) }\n catch {}\n ","'use strict'\n\nconst bindings = require('../build/Release/canvas.node')\n\nmodule.exports = bindings\n\nbindings.ImageData.prototype.toString = function () {\n\treturn '[object ImageData]'\n}\n\nbindings.CanvasGradient.prototype.toString = function () {\n\treturn '[object CanvasGradient]'\n}\n","'use strict'\n\n/**\n * Font RegExp helpers.\n */\n\nconst weights = 'bold|bolder|lighter|[1-9]00'\nconst styles = 'italic|oblique'\nconst variants = 'small-caps'\nconst stretches = 'ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded'\nconst units = 'px|pt|pc|in|cm|mm|%|em|ex|ch|rem|q'\nconst string = '\\'([^\\']+)\\'|\"([^\"]+)\"|[\\\\w\\\\s-]+'\n\n// [ [ <‘font-style’> || <font-variant-css21> || <‘font-weight’> || <‘font-stretch’> ]?\n// <‘font-size’> [ / <‘line-height’> ]? <‘font-family’> ]\n// https://drafts.csswg.org/css-fonts-3/#font-prop\nconst weightRe = new RegExp(`(${weights}) +`, 'i')\nconst styleRe = new RegExp(`(${styles}) +`, 'i')\nconst variantRe = new RegExp(`(${variants}) +`, 'i')\nconst stretchRe = new RegExp(`(${stretches}) +`, 'i')\nconst sizeFamilyRe = new RegExp(\n `([\\\\d\\\\.]+)(${units}) *((?:${string})( *, *(?:${string}))*)`)\n\n/**\n * Cache font parsing.\n */\n\nconst cache = {}\n\nconst defaultHeight = 16 // pt, common browser default\n\n/**\n * Parse font `str`.\n *\n * @param {String} str\n * @return {Object} Parsed font. `size` is in device units. `unit` is the unit\n * appearing in the input string.\n * @api private\n */\n\nmodule.exports = str => {\n // Cached\n if (cache[str]) return cache[str]\n\n // Try for required properties first.\n const sizeFamily = sizeFamilyRe.exec(str)\n if (!sizeFamily) return // invalid\n\n // Default values and required properties\n const font = {\n weight: 'normal',\n style: 'normal',\n stretch: 'normal',\n variant: 'normal',\n size: parseFloat(sizeFamily[1]),\n unit: sizeFamily[2],\n family: sizeFamily[3].replace(/[\"']/g, '').replace(/ *, */g, ',')\n }\n\n // Optional, unordered properties.\n let weight, style, variant, stretch\n // Stop search at `sizeFamily.index`\n const substr = str.substring(0, sizeFamily.index)\n if ((weight = weightRe.exec(substr))) font.weight = weight[1]\n if ((style = styleRe.exec(substr))) font.style = style[1]\n if ((variant = variantRe.exec(substr))) font.variant = variant[1]\n if ((stretch = stretchRe.exec(substr))) font.stretch = stretch[1]\n\n // Convert to device units. (`font.unit` is the original unit)\n // TODO: ch, ex\n switch (font.unit) {\n case 'pt':\n font.size /= 0.75\n break\n case 'pc':\n font.size *= 16\n break\n case 'in':\n font.size *= 96\n break\n case 'cm':\n font.size *= 96.0 / 2.54\n break\n case 'mm':\n font.size *= 96.0 / 25.4\n break\n case '%':\n // TODO disabled because existing unit tests assume 100\n // font.size *= defaultHeight / 100 / 0.75\n break\n case 'em':\n case 'rem':\n font.size *= defaultHeight / 0.75\n break\n case 'q':\n font.size *= 96 / 25.4 / 4\n break\n }\n\n return (cache[str] = font)\n}\n","'use strict'\n\nconst util = require('util')\n\n// DOMMatrix per https://drafts.fxtf.org/geometry/#DOMMatrix\n\nclass DOMPoint {\n constructor (x, y, z, w) {\n if (typeof x === 'object' && x !== null) {\n w = x.w\n z = x.z\n y = x.y\n x = x.x\n }\n this.x = typeof x === 'number' ? x : 0\n this.y = typeof y === 'number' ? y : 0\n this.z = typeof z === 'number' ? z : 0\n this.w = typeof w === 'number' ? w : 1\n }\n}\n\n// Constants to index into _values (col-major)\nconst M11 = 0; const M12 = 1; const M13 = 2; const M14 = 3\nconst M21 = 4; const M22 = 5; const M23 = 6; const M24 = 7\nconst M31 = 8; const M32 = 9; const M33 = 10; const M34 = 11\nconst M41 = 12; const M42 = 13; const M43 = 14; const M44 = 15\n\nconst DEGREE_PER_RAD = 180 / Math.PI\nconst RAD_PER_DEGREE = Math.PI / 180\n\nfunction parseMatrix (init) {\n let parsed = init.replace('matrix(', '')\n parsed = parsed.split(',', 7) // 6 + 1 to handle too many params\n if (parsed.length !== 6) throw new Error(`Failed to parse ${init}`)\n parsed = parsed.map(parseFloat)\n return [\n parsed[0], parsed[1], 0, 0,\n parsed[2], parsed[3], 0, 0,\n 0, 0, 1, 0,\n parsed[4], parsed[5], 0, 1\n ]\n}\n\nfunction parseMatrix3d (init) {\n let parsed = init.replace('matrix3d(', '')\n parsed = parsed.split(',', 17) // 16 + 1 to handle too many params\n if (parsed.length !== 16) throw new Error(`Failed to parse ${init}`)\n return parsed.map(parseFloat)\n}\n\nfunction parseTransform (tform) {\n const type = tform.split('(', 1)[0]\n switch (type) {\n case 'matrix':\n return parseMatrix(tform)\n case 'matrix3d':\n return parseMatrix3d(tform)\n // TODO This is supposed to support any CSS transform value.\n default:\n throw new Error(`${type} parsing not implemented`)\n }\n}\n\nclass DOMMatrix {\n constructor (init) {\n this._is2D = true\n this._values = new Float64Array([\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n ])\n\n let i\n\n if (typeof init === 'string') { // parse CSS transformList\n if (init === '') return // default identity matrix\n const tforms = init.split(/\\)\\s+/, 20).map(parseTransform)\n if (tforms.length === 0) return\n init = tforms[0]\n for (i = 1; i < tforms.length; i++) init = multiply(tforms[i], init)\n }\n\n i = 0\n if (init && init.length === 6) {\n setNumber2D(this, M11, init[i++])\n setNumber2D(this, M12, init[i++])\n setNumber2D(this, M21, init[i++])\n setNumber2D(this, M22, init[i++])\n setNumber2D(this, M41, init[i++])\n setNumber2D(this, M42, init[i++])\n } else if (init && init.length === 16) {\n setNumber2D(this, M11, init[i++])\n setNumber2D(this, M12, init[i++])\n setNumber3D(this, M13, init[i++])\n setNumber3D(this, M14, init[i++])\n setNumber2D(this, M21, init[i++])\n setNumber2D(this, M22, init[i++])\n setNumber3D(this, M23, init[i++])\n setNumber3D(this, M24, init[i++])\n setNumber3D(this, M31, init[i++])\n setNumber3D(this, M32, init[i++])\n setNumber3D(this, M33, init[i++])\n setNumber3D(this, M34, init[i++])\n setNumber2D(this, M41, init[i++])\n setNumber2D(this, M42, init[i++])\n setNumber3D(this, M43, init[i++])\n setNumber3D(this, M44, init[i])\n } else if (init !== undefined) {\n throw new TypeError('Expected string or array.')\n }\n }\n\n toString () {\n return this.is2D\n ? `matrix(${this.a}, ${this.b}, ${this.c}, ${this.d}, ${this.e}, ${this.f})`\n : `matrix3d(${this._values.join(', ')})`\n }\n\n multiply (other) {\n return newInstance(this._values).multiplySelf(other)\n }\n\n multiplySelf (other) {\n this._values = multiply(other._values, this._values)\n if (!other.is2D) this._is2D = false\n return this\n }\n\n preMultiplySelf (other) {\n this._values = multiply(this._values, other._values)\n if (!other.is2D) this._is2D = false\n return this\n }\n\n translate (tx, ty, tz) {\n return newInstance(this._values).translateSelf(tx, ty, tz)\n }\n\n translateSelf (tx, ty, tz) {\n if (typeof tx !== 'number') tx = 0\n if (typeof ty !== 'number') ty = 0\n if (typeof tz !== 'number') tz = 0\n this._values = multiply([\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n tx, ty, tz, 1\n ], this._values)\n if (tz !== 0) this._is2D = false\n return this\n }\n\n scale (scaleX, scaleY, scaleZ, originX, originY, originZ) {\n return newInstance(this._values).scaleSelf(scaleX, scaleY, scaleZ, originX, originY, originZ)\n }\n\n scale3d (scale, originX, originY, originZ) {\n return newInstance(this._values).scale3dSelf(scale, originX, originY, originZ)\n }\n\n scale3dSelf (scale, originX, originY, originZ) {\n return this.scaleSelf(scale, scale, scale, originX, originY, originZ)\n }\n\n scaleSelf (scaleX, scaleY, scaleZ, originX, originY, originZ) {\n // Not redundant with translate's checks because we need to negate the values later.\n if (typeof originX !== 'number') originX = 0\n if (typeof originY !== 'number') originY = 0\n if (typeof originZ !== 'number') originZ = 0\n this.translateSelf(originX, originY, originZ)\n if (typeof scaleX !== 'number') scaleX = 1\n if (typeof scaleY !== 'number') scaleY = scaleX\n if (typeof scaleZ !== 'number') scaleZ = 1\n this._values = multiply([\n scaleX, 0, 0, 0,\n 0, scaleY, 0, 0,\n 0, 0, scaleZ, 0,\n 0, 0, 0, 1\n ], this._values)\n this.translateSelf(-originX, -originY, -originZ)\n if (scaleZ !== 1 || originZ !== 0) this._is2D = false\n return this\n }\n\n rotateFromVector (x, y) {\n return newInstance(this._values).rotateFromVectorSelf(x, y)\n }\n\n rotateFromVectorSelf (x, y) {\n if (typeof x !== 'number') x = 0\n if (typeof y !== 'number') y = 0\n const theta = (x === 0 && y === 0) ? 0 : Math.atan2(y, x) * DEGREE_PER_RAD\n return this.rotateSelf(theta)\n }\n\n rotate (rotX, rotY, rotZ) {\n return newInstance(this._values).rotateSelf(rotX, rotY, rotZ)\n }\n\n rotateSelf (rotX, rotY, rotZ) {\n if (rotY === undefined && rotZ === undefined) {\n rotZ = rotX\n rotX = rotY = 0\n }\n if (typeof rotY !== 'number') rotY = 0\n if (typeof rotZ !== 'number') rotZ = 0\n if (rotX !== 0 || rotY !== 0) this._is2D = false\n rotX *= RAD_PER_DEGREE\n rotY *= RAD_PER_DEGREE\n rotZ *= RAD_PER_DEGREE\n let c, s\n c = Math.cos(rotZ)\n s = Math.sin(rotZ)\n this._values = multiply([\n c, s, 0, 0,\n -s, c, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n ], this._values)\n c = Math.cos(rotY)\n s = Math.sin(rotY)\n this._values = multiply([\n c, 0, -s, 0,\n 0, 1, 0, 0,\n s, 0, c, 0,\n 0, 0, 0, 1\n ], this._values)\n c = Math.cos(rotX)\n s = Math.sin(rotX)\n this._values = multiply([\n 1, 0, 0, 0,\n 0, c, s, 0,\n 0, -s, c, 0,\n 0, 0, 0, 1\n ], this._values)\n return this\n }\n\n rotateAxisAngle (x, y, z, angle) {\n return newInstance(this._values).rotateAxisAngleSelf(x, y, z, angle)\n }\n\n rotateAxisAngleSelf (x, y, z, angle) {\n if (typeof x !== 'number') x = 0\n if (typeof y !== 'number') y = 0\n if (typeof z !== 'number') z = 0\n // Normalize axis\n const length = Math.sqrt(x * x + y * y + z * z)\n if (length === 0) return this\n if (length !== 1) {\n x /= length\n y /= length\n z /= length\n }\n angle *= RAD_PER_DEGREE\n const c = Math.cos(angle)\n const s = Math.sin(angle)\n const t = 1 - c\n const tx = t * x\n const ty = t * y\n // NB: This is the generic transform. If the axis is a major axis, there are\n // faster transforms.\n this._values = multiply([\n tx * x + c, tx * y + s * z, tx * z - s * y, 0,\n tx * y - s * z, ty * y + c, ty * z + s * x, 0,\n tx * z + s * y, ty * z - s * x, t * z * z + c, 0,\n 0, 0, 0, 1\n ], this._values)\n if (x !== 0 || y !== 0) this._is2D = false\n return this\n }\n\n skewX (sx) {\n return newInstance(this._values).skewXSelf(sx)\n }\n\n skewXSelf (sx) {\n if (typeof sx !== 'number') return this\n const t = Math.tan(sx * RAD_PER_DEGREE)\n this._values = multiply([\n 1, 0, 0, 0,\n t, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n ], this._values)\n return this\n }\n\n skewY (sy) {\n return newInstance(this._values).skewYSelf(sy)\n }\n\n skewYSelf (sy) {\n if (typeof sy !== 'number') return this\n const t = Math.tan(sy * RAD_PER_DEGREE)\n this._values = multiply([\n 1, t, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n ], this._values)\n return this\n }\n\n flipX () {\n return newInstance(multiply([\n -1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n ], this._values))\n }\n\n flipY () {\n return newInstance(multiply([\n 1, 0, 0, 0,\n 0, -1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n ], this._values))\n }\n\n inverse () {\n return newInstance(this._values).invertSelf()\n }\n\n invertSelf () {\n const m = this._values\n const inv = m.map(v => 0)\n\n inv[0] = m[5] * m[10] * m[15] -\n m[5] * m[11] * m[14] -\n m[9] * m[6] * m[15] +\n m[9] * m[7] * m[14] +\n m[13] * m[6] * m[11] -\n m[13] * m[7] * m[10]\n\n inv[4] = -m[4] * m[10] * m[15] +\n m[4] * m[11] * m[14] +\n m[8] * m[6] * m[15] -\n m[8] * m[7] * m[14] -\n m[12] * m[6] * m[11] +\n m[12] * m[7] * m[10]\n\n inv[8] = m[4] * m[9] * m[15] -\n m[4] * m[11] * m[13] -\n m[8] * m[5] * m[15] +\n m[8] * m[7] * m[13] +\n m[12] * m[5] * m[11] -\n m[12] * m[7] * m[9]\n\n inv[12] = -m[4] * m[9] * m[14] +\n m[4] * m[10] * m[13] +\n m[8] * m[5] * m[14] -\n m[8] * m[6] * m[13] -\n m[12] * m[5] * m[10] +\n m[12] * m[6] * m[9]\n\n // If the determinant is zero, this matrix cannot be inverted, and all\n // values should be set to NaN, with the is2D flag set to false.\n\n const det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12]\n\n if (det === 0) {\n this._values = m.map(v => NaN)\n this._is2D = false\n return this\n }\n\n inv[1] = -m[1] * m[10] * m[15] +\n m[1] * m[11] * m[14] +\n m[9] * m[2] * m[15] -\n m[9] * m[3] * m[14] -\n m[13] * m[2] * m[11] +\n m[13] * m[3] * m[10]\n\n inv[5] = m[0] * m[10] * m[15] -\n m[0] * m[11] * m[14] -\n m[8] * m[2] * m[15] +\n m[8] * m[3] * m[14] +\n m[12] * m[2] * m[11] -\n m[12] * m[3] * m[10]\n\n inv[9] = -m[0] * m[9] * m[15] +\n m[0] * m[11] * m[13] +\n m[8] * m[1] * m[15] -\n m[8] * m[3] * m[13] -\n m[12] * m[1] * m[11] +\n m[12] * m[3] * m[9]\n\n inv[13] = m[0] * m[9] * m[14] -\n m[0] * m[10] * m[13] -\n m[8] * m[1] * m[14] +\n m[8] * m[2] * m[13] +\n m[12] * m[1] * m[10] -\n m[12] * m[2] * m[9]\n\n inv[2] = m[1] * m[6] * m[15] -\n m[1] * m[7] * m[14] -\n m[5] * m[2] * m[15] +\n m[5] * m[3] * m[14] +\n m[13] * m[2] * m[7] -\n m[13] * m[3] * m[6]\n\n inv[6] = -m[0] * m[6] * m[15] +\n m[0] * m[7] * m[14] +\n m[4] * m[2] * m[15] -\n m[4] * m[3] * m[14] -\n m[12] * m[2] * m[7] +\n m[12] * m[3] * m[6]\n\n inv[10] = m[0] * m[5] * m[15] -\n m[0] * m[7] * m[13] -\n m[4] * m[1] * m[15] +\n m[4] * m[3] * m[13] +\n m[12] * m[1] * m[7] -\n m[12] * m[3] * m[5]\n\n inv[14] = -m[0] * m[5] * m[14] +\n m[0] * m[6] * m[13] +\n m[4] * m[1] * m[14] -\n m[4] * m[2] * m[13] -\n m[12] * m[1] * m[6] +\n m[12] * m[2] * m[5]\n\n inv[3] = -m[1] * m[6] * m[11] +\n m[1] * m[7] * m[10] +\n m[5] * m[2] * m[11] -\n m[5] * m[3] * m[10] -\n m[9] * m[2] * m[7] +\n m[9] * m[3] * m[6]\n\n inv[7] = m[0] * m[6] * m[11] -\n m[0] * m[7] * m[10] -\n m[4] * m[2] * m[11] +\n m[4] * m[3] * m[10] +\n m[8] * m[2] * m[7] -\n m[8] * m[3] * m[6]\n\n inv[11] = -m[0] * m[5] * m[11] +\n m[0] * m[7] * m[9] +\n m[4] * m[1] * m[11] -\n m[4] * m[3] * m[9] -\n m[8] * m[1] * m[7] +\n m[8] * m[3] * m[5]\n\n inv[15] = m[0] * m[5] * m[10] -\n m[0] * m[6] * m[9] -\n m[4] * m[1] * m[10] +\n m[4] * m[2] * m[9] +\n m[8] * m[1] * m[6] -\n m[8] * m[2] * m[5]\n\n inv.forEach((v, i) => { inv[i] = v / det })\n this._values = inv\n return this\n }\n\n setMatrixValue (transformList) {\n const temp = new DOMMatrix(transformList)\n this._values = temp._values\n this._is2D = temp._is2D\n return this\n }\n\n transformPoint (point) {\n point = new DOMPoint(point)\n const x = point.x\n const y = point.y\n const z = point.z\n const w = point.w\n const values = this._values\n const nx = values[M11] * x + values[M21] * y + values[M31] * z + values[M41] * w\n const ny = values[M12] * x + values[M22] * y + values[M32] * z + values[M42] * w\n const nz = values[M13] * x + values[M23] * y + values[M33] * z + values[M43] * w\n const nw = values[M14] * x + values[M24] * y + values[M34] * z + values[M44] * w\n return new DOMPoint(nx, ny, nz, nw)\n }\n\n toFloat32Array () {\n return Float32Array.from(this._values)\n }\n\n toFloat64Array () {\n return this._values.slice(0)\n }\n\n static fromMatrix (init) {\n if (!(init instanceof DOMMatrix)) throw new TypeError('Expected DOMMatrix')\n return new DOMMatrix(init._values)\n }\n\n static fromFloat32Array (init) {\n if (!(init instanceof Float32Array)) throw new TypeError('Expected Float32Array')\n return new DOMMatrix(init)\n }\n\n static fromFloat64Array (init) {\n if (!(init instanceof Float64Array)) throw new TypeError('Expected Float64Array')\n return new DOMMatrix(init)\n }\n\n [util.inspect.custom || 'inspect'] (depth, options) {\n if (depth < 0) return '[DOMMatrix]'\n\n return `DOMMatrix [\n a: ${this.a}\n b: ${this.b}\n c: ${this.c}\n d: ${this.d}\n e: ${this.e}\n f: ${this.f}\n m11: ${this.m11}\n m12: ${this.m12}\n m13: ${this.m13}\n m14: ${this.m14}\n m21: ${this.m21}\n m22: ${this.m22}\n m23: ${this.m23}\n m23: ${this.m23}\n m31: ${this.m31}\n m32: ${this.m32}\n m33: ${this.m33}\n m34: ${this.m34}\n m41: ${this.m41}\n m42: ${this.m42}\n m43: ${this.m43}\n m44: ${this.m44}\n is2D: ${this.is2D}\n isIdentity: ${this.isIdentity} ]`\n }\n}\n\n/**\n * Checks that `value` is a number and sets the value.\n */\nfunction setNumber2D (receiver, index, value) {\n if (typeof value !== 'number') throw new TypeError('Expected number')\n return (receiver._values[index] = value)\n}\n\n/**\n * Checks that `value` is a number, sets `_is2D = false` if necessary and sets\n * the value.\n */\nfunction setNumber3D (receiver, index, value) {\n if (typeof value !== 'number') throw new TypeError('Expected number')\n if (index === M33 || index === M44) {\n if (value !== 1) receiver._is2D = false\n } else if (value !== 0) receiver._is2D = false\n return (receiver._values[index] = value)\n}\n\nObject.defineProperties(DOMMatrix.prototype, {\n m11: { get () { return this._values[M11] }, set (v) { return setNumber2D(this, M11, v) } },\n m12: { get () { return this._values[M12] }, set (v) { return setNumber2D(this, M12, v) } },\n m13: { get () { return this._values[M13] }, set (v) { return setNumber3D(this, M13, v) } },\n m14: { get () { return this._values[M14] }, set (v) { return setNumber3D(this, M14, v) } },\n m21: { get () { return this._values[M21] }, set (v) { return setNumber2D(this, M21, v) } },\n m22: { get () { return this._values[M22] }, set (v) { return setNumber2D(this, M22, v) } },\n m23: { get () { return this._values[M23] }, set (v) { return setNumber3D(this, M23, v) } },\n m24: { get () { return this._values[M24] }, set (v) { return setNumber3D(this, M24, v) } },\n m31: { get () { return this._values[M31] }, set (v) { return setNumber3D(this, M31, v) } },\n m32: { get () { return this._values[M32] }, set (v) { return setNumber3D(this, M32, v) } },\n m33: { get () { return this._values[M33] }, set (v) { return setNumber3D(this, M33, v) } },\n m34: { get () { return this._values[M34] }, set (v) { return setNumber3D(this, M34, v) } },\n m41: { get () { return this._values[M41] }, set (v) { return setNumber2D(this, M41, v) } },\n m42: { get () { return this._values[M42] }, set (v) { return setNumber2D(this, M42, v) } },\n m43: { get () { return this._values[M43] }, set (v) { return setNumber3D(this, M43, v) } },\n m44: { get () { return this._values[M44] }, set (v) { return setNumber3D(this, M44, v) } },\n\n a: { get () { return this.m11 }, set (v) { return (this.m11 = v) } },\n b: { get () { return this.m12 }, set (v) { return (this.m12 = v) } },\n c: { get () { return this.m21 }, set (v) { return (this.m21 = v) } },\n d: { get () { return this.m22 }, set (v) { return (this.m22 = v) } },\n e: { get () { return this.m41 }, set (v) { return (this.m41 = v) } },\n f: { get () { return this.m42 }, set (v) { return (this.m42 = v) } },\n\n is2D: { get () { return this._is2D } }, // read-only\n\n isIdentity: {\n get () {\n const values = this._values\n return (values[M11] === 1 && values[M12] === 0 && values[M13] === 0 && values[M14] === 0 &&\n values[M21] === 0 && values[M22] === 1 && values[M23] === 0 && values[M24] === 0 &&\n values[M31] === 0 && values[M32] === 0 && values[M33] === 1 && values[M34] === 0 &&\n values[M41] === 0 && values[M42] === 0 && values[M43] === 0 && values[M44] === 1)\n }\n }\n})\n\n/**\n * Instantiates a DOMMatrix, bypassing the constructor.\n * @param {Float64Array} values Value to assign to `_values`. This is assigned\n * without copying (okay because all usages are followed by a multiply).\n */\nfunction newInstance (values) {\n const instance = Object.create(DOMMatrix.prototype)\n instance.constructor = DOMMatrix\n instance._is2D = true\n instance._values = values\n return instance\n}\n\nfunction multiply (A, B) {\n const dest = new Float64Array(16)\n for (let i = 0; i < 4; i++) {\n for (let j = 0; j < 4; j++) {\n let sum = 0\n for (let k = 0; k < 4; k++) {\n sum += A[i * 4 + k] * B[k * 4 + j]\n }\n dest[i * 4 + j] = sum\n }\n }\n return dest\n}\n\nmodule.exports = { DOMMatrix, DOMPoint }\n","'use strict'\n\n/*!\n * Canvas - Context2d\n * Copyright (c) 2010 LearnBoost <tj@learnboost.com>\n * MIT Licensed\n */\n\nconst bindings = require('./bindings')\nconst parseFont = require('./parse-font')\nconst { DOMMatrix } = require('./DOMMatrix')\n\nbindings.CanvasRenderingContext2dInit(DOMMatrix, parseFont)\nmodule.exports = bindings.CanvasRenderingContext2d\n","'use strict'\n\n/*!\n * Canvas - PNGStream\n * Copyright (c) 2010 LearnBoost <tj@learnboost.com>\n * MIT Licensed\n */\n\nconst { Readable } = require('stream')\nfunction noop () {}\n\nclass PNGStream extends Readable {\n constructor (canvas, options) {\n super()\n\n if (options &&\n options.palette instanceof Uint8ClampedArray &&\n options.palette.length % 4 !== 0) {\n throw new Error('Palette length must be a multiple of 4.')\n }\n this.canvas = canvas\n this.options = options || {}\n }\n\n _read () {\n // For now we're not controlling the c++ code's data emission, so we only\n // call canvas.streamPNGSync once and let it emit data at will.\n this._read = noop\n\n this.canvas.streamPNGSync((err, chunk, len) => {\n if (err) {\n this.emit('error', err)\n } else if (len) {\n this.push(chunk)\n } else {\n this.push(null)\n }\n }, this.options)\n }\n}\n\nmodule.exports = PNGStream\n","'use strict'\n\n/*!\n * Canvas - PDFStream\n */\n\nconst { Readable } = require('stream')\nfunction noop () {}\n\nclass PDFStream extends Readable {\n constructor (canvas, options) {\n super()\n\n this.canvas = canvas\n this.options = options\n }\n\n _read () {\n // For now we're not controlling the c++ code's data emission, so we only\n // call canvas.streamPDFSync once and let it emit data at will.\n this._read = noop\n\n this.canvas.streamPDFSync((err, chunk, len) => {\n if (err) {\n this.emit('error', err)\n } else if (len) {\n this.push(chunk)\n } else {\n this.push(null)\n }\n }, this.options)\n }\n}\n\nmodule.exports = PDFStream\n","'use strict'\n\n/*!\n * Canvas - JPEGStream\n * Copyright (c) 2010 LearnBoost <tj@learnboost.com>\n * MIT Licensed\n */\n\nconst { Readable } = require('stream')\nfunction noop () {}\n\nclass JPEGStream extends Readable {\n constructor (canvas, options) {\n super()\n\n if (canvas.streamJPEGSync === undefined) {\n throw new Error('node-canvas was built without JPEG support.')\n }\n\n this.options = options\n this.canvas = canvas\n }\n\n _read () {\n // For now we're not controlling the c++ code's data emission, so we only\n // call canvas.streamJPEGSync once and let it emit data at will.\n this._read = noop\n\n this.canvas.streamJPEGSync(this.options, (err, chunk) => {\n if (err) {\n this.emit('error', err)\n } else if (chunk) {\n this.push(chunk)\n } else {\n this.push(null)\n }\n })\n }\n};\n\nmodule.exports = JPEGStream\n","'use strict'\n\n/*!\n * Canvas\n * Copyright (c) 2010 LearnBoost <tj@learnboost.com>\n * MIT Licensed\n */\n\nconst bindings = require('./bindings')\nconst Canvas = module.exports = bindings.Canvas\nconst Context2d = require('./context2d')\nconst PNGStream = require('./pngstream')\nconst PDFStream = require('./pdfstream')\nconst JPEGStream = require('./jpegstream')\nconst FORMATS = ['image/png', 'image/jpeg']\nconst util = require('util')\n\n// TODO || is for Node.js pre-v6.6.0\nCanvas.prototype[util.inspect.custom || 'inspect'] = function () {\n return `[Canvas ${this.width}x${this.height}]`\n}\n\nCanvas.prototype.getContext = function (contextType, contextAttributes) {\n if (contextType == '2d') {\n const ctx = this._context2d || (this._context2d = new Context2d(this, contextAttributes))\n this.context = ctx\n ctx.canvas = this\n return ctx\n }\n}\n\nCanvas.prototype.pngStream =\nCanvas.prototype.createPNGStream = function (options) {\n return new PNGStream(this, options)\n}\n\nCanvas.prototype.pdfStream =\nCanvas.prototype.createPDFStream = function (options) {\n return new PDFStream(this, options)\n}\n\nCanvas.prototype.jpegStream =\nCanvas.prototype.createJPEGStream = function (options) {\n return new JPEGStream(this, options)\n}\n\nCanvas.prototype.toDataURL = function (a1, a2, a3) {\n // valid arg patterns (args -> [type, opts, fn]):\n // [] -> ['image/png', null, null]\n // [qual] -> ['image/png', null, null]\n // [undefined] -> ['image/png', null, null]\n // ['image/png'] -> ['image/png', null, null]\n // ['image/png', qual] -> ['image/png', null, null]\n // [fn] -> ['image/png', null, fn]\n // [type, fn] -> [type, null, fn]\n // [undefined, fn] -> ['image/png', null, fn]\n // ['image/png', qual, fn] -> ['image/png', null, fn]\n // ['image/jpeg', fn] -> ['image/jpeg', null, fn]\n // ['image/jpeg', opts, fn] -> ['image/jpeg', opts, fn]\n // ['image/jpeg', qual, fn] -> ['image/jpeg', {quality: qual}, fn]\n // ['image/jpeg', undefined, fn] -> ['image/jpeg', null, fn]\n // ['image/jpeg'] -> ['image/jpeg', null, fn]\n // ['image/jpeg', opts] -> ['image/jpeg', opts, fn]\n // ['image/jpeg', qual] -> ['image/jpeg', {quality: qual}, fn]\n\n let type = 'image/png'\n let opts = {}\n let fn\n\n if (typeof a1 === 'function') {\n fn = a1\n } else {\n if (typeof a1 === 'string' && FORMATS.includes(a1.toLowerCase())) {\n type = a1.toLowerCase()\n }\n\n if (typeof a2 === 'function') {\n fn = a2\n } else {\n if (typeof a2 === 'object') {\n opts = a2\n } else if (typeof a2 === 'number') {\n opts = { quality: Math.max(0, Math.min(1, a2)) }\n }\n\n if (typeof a3 === 'function') {\n fn = a3\n } else if (undefined !== a3) {\n throw new TypeError(`${typeof a3} is not a function`)\n }\n }\n }\n\n if (this.width === 0 || this.height === 0) {\n // Per spec, if the bitmap has no pixels, return this string:\n const str = 'data:,'\n if (fn) {\n setTimeout(() => fn(null, str))\n return\n } else {\n return str\n }\n }\n\n if (fn) {\n this.toBuffer((err, buf) => {\n if (err) return fn(err)\n fn(null, `data:${type};base64,${buf.toString('base64')}`)\n }, type, opts)\n } else {\n return `data:${type};base64,${this.toBuffer(type, opts).toString('base64')}`\n }\n}\n","/*! simple-concat. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = function (stream, cb) {\n var chunks = []\n stream.on('data', function (chunk) {\n chunks.push(chunk)\n })\n stream.once('end', function () {\n if (cb) cb(null, Buffer.concat(chunks))\n cb = null\n })\n stream.once('error', function (err) {\n if (cb) cb(err)\n cb = null\n })\n}\n","'use strict';\n\n// We define these manually to ensure they're always copied\n// even if they would move up the prototype chain\n// https://nodejs.org/api/http.html#http_class_http_incomingmessage\nconst knownProperties = [\n\t'aborted',\n\t'complete',\n\t'destroy',\n\t'headers',\n\t'httpVersion',\n\t'httpVersionMinor',\n\t'httpVersionMajor',\n\t'method',\n\t'rawHeaders',\n\t'rawTrailers',\n\t'setTimeout',\n\t'socket',\n\t'statusCode',\n\t'statusMessage',\n\t'trailers',\n\t'url'\n];\n\nmodule.exports = (fromStream, toStream) => {\n\tconst fromProperties = new Set(Object.keys(fromStream).concat(knownProperties));\n\n\tfor (const property of fromProperties) {\n\t\t// Don't overwrite existing properties.\n\t\tif (property in toStream) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttoStream[property] = typeof fromStream[property] === 'function' ? fromStream[property].bind(fromStream) : fromStream[property];\n\t}\n\n\treturn toStream;\n};\n","'use strict';\nconst {PassThrough: PassThroughStream} = require('stream');\nconst zlib = require('zlib');\nconst mimicResponse = require('mimic-response');\n\nconst decompressResponse = response => {\n\tconst contentEncoding = (response.headers['content-encoding'] || '').toLowerCase();\n\n\tif (!['gzip', 'deflate', 'br'].includes(contentEncoding)) {\n\t\treturn response;\n\t}\n\n\tconst isBrotli = contentEncoding === 'br';\n\tif (isBrotli && typeof zlib.createBrotliDecompress !== 'function') {\n\t\treturn response;\n\t}\n\n\tconst decompress = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip();\n\tconst stream = new PassThroughStream();\n\n\tmimicResponse(response, stream);\n\n\tdecompress.on('error', error => {\n\t\t// Ignore empty response\n\t\tif (error.code === 'Z_BUF_ERROR') {\n\t\t\tstream.end();\n\t\t\treturn;\n\t\t}\n\n\t\tstream.emit('error', error);\n\t});\n\n\tresponse.pipe(decompress).pipe(stream);\n\n\treturn stream;\n};\n\nmodule.exports = decompressResponse;\n// TODO: remove this in the next major version\nmodule.exports.default = decompressResponse;\n","// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n","module.exports = simpleGet\n\nconst concat = require('simple-concat')\nconst decompressResponse = require('decompress-response') // excluded from browser build\nconst http = require('http')\nconst https = require('https')\nconst once = require('once')\nconst querystring = require('querystring')\nconst url = require('url')\n\nconst isStream = o => o !== null && typeof o === 'object' && typeof o.pipe === 'function'\n\nfunction simpleGet (opts, cb) {\n opts = Object.assign({ maxRedirects: 10 }, typeof opts === 'string' ? { url: opts } : opts)\n cb = once(cb)\n\n if (opts.url) {\n const { hostname, port, protocol, auth, path } = url.parse(opts.url) // eslint-disable-line node/no-deprecated-api\n delete opts.url\n if (!hostname && !port && !protocol && !auth) opts.path = path // Relative redirect\n else Object.assign(opts, { hostname, port, protocol, auth, path }) // Absolute redirect\n }\n\n const headers = { 'accept-encoding': 'gzip, deflate' }\n if (opts.headers) Object.keys(opts.headers).forEach(k => (headers[k.toLowerCase()] = opts.headers[k]))\n opts.headers = headers\n\n let body\n if (opts.body) {\n body = opts.json && !isStream(opts.body) ? JSON.stringify(opts.body) : opts.body\n } else if (opts.form) {\n body = typeof opts.form === 'string' ? opts.form : querystring.stringify(opts.form)\n opts.headers['content-type'] = 'application/x-www-form-urlencoded'\n }\n\n if (body) {\n if (!opts.method) opts.method = 'POST'\n if (!isStream(body)) opts.headers['content-length'] = Buffer.byteLength(body)\n if (opts.json && !opts.form) opts.headers['content-type'] = 'application/json'\n }\n delete opts.body; delete opts.form\n\n if (opts.json) opts.headers.accept = 'application/json'\n if (opts.method) opts.method = opts.method.toUpperCase()\n\n const originalHost = opts.hostname // hostname before potential redirect\n const protocol = opts.protocol === 'https:' ? https : http // Support http/https urls\n const req = protocol.request(opts, res => {\n if (opts.followRedirects !== false && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {\n opts.url = res.headers.location // Follow 3xx redirects\n delete opts.headers.host // Discard `host` header on redirect (see #32)\n res.resume() // Discard response\n\n const redirectHost = url.parse(opts.url).hostname // eslint-disable-line node/no-deprecated-api\n // If redirected host is different than original host, drop headers to prevent cookie leak (#73)\n if (redirectHost !== null && redirectHost !== originalHost) {\n delete opts.headers.cookie\n delete opts.headers.authorization\n }\n\n if (opts.method === 'POST' && [301, 302].includes(res.statusCode)) {\n opts.method = 'GET' // On 301/302 redirect, change POST to GET (see #35)\n delete opts.headers['content-length']; delete opts.headers['content-type']\n }\n\n if (opts.maxRedirects-- === 0) return cb(new Error('too many redirects'))\n else return simpleGet(opts, cb)\n }\n\n const tryUnzip = typeof decompressResponse === 'function' && opts.method !== 'HEAD'\n cb(null, tryUnzip ? decompressResponse(res) : res)\n })\n req.on('timeout', () => {\n req.abort()\n cb(new Error('Request timed out'))\n })\n req.on('error', cb)\n\n if (isStream(body)) body.on('error', cb).pipe(req)\n else req.end(body)\n\n return req\n}\n\nsimpleGet.concat = (opts, cb) => {\n return simpleGet(opts, (err, res) => {\n if (err) return cb(err)\n concat(res, (err, data) => {\n if (err) return cb(err)\n if (opts.json) {\n try {\n data = JSON.parse(data.toString())\n } catch (err) {\n return cb(err, res, data)\n }\n }\n cb(null, res, data)\n })\n })\n}\n\n;['get', 'post', 'put', 'patch', 'head', 'delete'].forEach(method => {\n simpleGet[method] = (opts, cb) => {\n if (typeof opts === 'string') opts = { url: opts }\n return simpleGet(Object.assign({ method: method.toUpperCase() }, opts), cb)\n }\n})\n","'use strict'\n\n/*!\n * Canvas - Image\n * Copyright (c) 2010 LearnBoost <tj@learnboost.com>\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nconst bindings = require('./bindings')\nconst Image = module.exports = bindings.Image\nconst util = require('util')\n\n// Lazily loaded simple-get\nlet get\n\nconst { GetSource, SetSource } = bindings\n\nObject.defineProperty(Image.prototype, 'src', {\n /**\n * src setter. Valid values:\n * * `data:` URI\n * * Local file path\n * * HTTP or HTTPS URL\n * * Buffer containing image data (i.e. not a `data:` URI stored in a Buffer)\n *\n * @param {String|Buffer} val filename, buffer, data URI, URL\n * @api public\n */\n set (val) {\n if (typeof val === 'string') {\n if (/^\\s*data:/.test(val)) { // data: URI\n const commaI = val.indexOf(',')\n // 'base64' must come before the comma\n const isBase64 = val.lastIndexOf('base64', commaI) !== -1\n const content = val.slice(commaI + 1)\n setSource(this, Buffer.from(content, isBase64 ? 'base64' : 'utf8'), val)\n } else if (/^\\s*https?:\\/\\//.test(val)) { // remote URL\n const onerror = err => {\n if (typeof this.onerror === 'function') {\n this.onerror(err)\n } else {\n throw err\n }\n }\n\n if (!get) get = require('simple-get')\n\n get.concat({\n url: val,\n headers: { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36' }\n }, (err, res, data) => {\n if (err) return onerror(err)\n\n if (res.statusCode < 200 || res.statusCode >= 300) {\n return onerror(new Error(`Server responded with ${res.statusCode}`))\n }\n\n setSource(this, data)\n })\n } else { // local file path assumed\n setSource(this, val)\n }\n } else if (Buffer.isBuffer(val)) {\n setSource(this, val)\n }\n },\n\n get () {\n // TODO https://github.com/Automattic/node-canvas/issues/118\n return getSource(this)\n },\n\n configurable: true\n})\n\n// TODO || is for Node.js pre-v6.6.0\nImage.prototype[util.inspect.custom || 'inspect'] = function () {\n return '[Image' +\n (this.complete ? ':' + this.width + 'x' + this.height : '') +\n (this.src ? ' ' + this.src : '') +\n (this.complete ? ' complete' : '') +\n ']'\n}\n\nfunction getSource (img) {\n return img._originalSource || GetSource.call(img)\n}\n\nfunction setSource (img, src, origSrc) {\n SetSource.call(img, src)\n img._originalSource = origSrc\n}\n","'use strict'\n\n/*!\n * Canvas - CanvasPattern\n * Copyright (c) 2010 LearnBoost <tj@learnboost.com>\n * MIT Licensed\n */\n\nconst bindings = require('./bindings')\nconst { DOMMatrix } = require('./DOMMatrix')\n\nbindings.CanvasPatternInit(DOMMatrix)\nmodule.exports = bindings.CanvasPattern\n\nbindings.CanvasPattern.prototype.toString = function () {\n\treturn '[object CanvasPattern]'\n}\n","{\n \"name\": \"canvas\",\n \"description\": \"Canvas graphics API backed by Cairo\",\n \"version\": \"2.11.2\",\n \"author\": \"TJ Holowaychuk <tj@learnboost.com>\",\n \"main\": \"index.js\",\n \"browser\": \"browser.js\",\n \"contributors\": [\n \"Nathan Rajlich <nathan@tootallnate.net>\",\n \"Rod Vagg <r@va.gg>\",\n \"Juriy Zaytsev <kangax@gmail.com>\"\n ],\n \"keywords\": [\n \"canvas\",\n \"graphic\",\n \"graphics\",\n \"pixman\",\n \"cairo\",\n \"image\",\n \"images\",\n \"pdf\"\n ],\n \"homepage\": \"https://github.com/Automattic/node-canvas\",\n \"repository\": \"git://github.com/Automattic/node-canvas.git\",\n \"scripts\": {\n \"prebenchmark\": \"node-gyp build\",\n \"benchmark\": \"node benchmarks/run.js\",\n \"lint\": \"standard examples/*.js test/server.js test/public/*.js benchmarks/run.js lib/context2d.js util/has_lib.js browser.js index.js\",\n \"test\": \"mocha test/*.test.js\",\n \"pretest-server\": \"node-gyp build\",\n \"test-server\": \"node test/server.js\",\n \"generate-wpt\": \"node ./test/wpt/generate.js\",\n \"test-wpt\": \"mocha test/wpt/generated/*.js\",\n \"install\": \"node-pre-gyp install --fallback-to-build --update-binary\",\n \"dtslint\": \"dtslint types\"\n },\n \"binary\": {\n \"module_name\": \"canvas\",\n \"module_path\": \"build/Release\",\n \"host\": \"https://github.com/Automattic/node-canvas/releases/download/\",\n \"remote_path\": \"v{version}\",\n \"package_name\": \"{module_name}-v{version}-{node_abi}-{platform}-{libc}-{arch}.tar.gz\"\n },\n \"files\": [\n \"binding.gyp\",\n \"lib/\",\n \"src/\",\n \"util/\",\n \"types/index.d.ts\"\n ],\n \"types\": \"types/index.d.ts\",\n \"dependencies\": {\n \"@mapbox/node-pre-gyp\": \"^1.0.0\",\n \"nan\": \"^2.17.0\",\n \"simple-get\": \"^3.0.3\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^10.12.18\",\n \"assert-rejects\": \"^1.0.0\",\n \"dtslint\": \"^4.0.7\",\n \"express\": \"^4.16.3\",\n \"js-yaml\": \"^4.1.0\",\n \"mocha\": \"^5.2.0\",\n \"pixelmatch\": \"^4.0.2\",\n \"standard\": \"^12.0.1\",\n \"typescript\": \"^4.2.2\"\n },\n \"engines\": {\n \"node\": \">=6\"\n },\n \"license\": \"MIT\"\n}\n","const Canvas = require('./lib/canvas')\nconst Image = require('./lib/image')\nconst CanvasRenderingContext2D = require('./lib/context2d')\nconst CanvasPattern = require('./lib/pattern')\nconst parseFont = require('./lib/parse-font')\nconst packageJson = require('./package.json')\nconst bindings = require('./lib/bindings')\nconst fs = require('fs')\nconst PNGStream = require('./lib/pngstream')\nconst PDFStream = require('./lib/pdfstream')\nconst JPEGStream = require('./lib/jpegstream')\nconst { DOMPoint, DOMMatrix } = require('./lib/DOMMatrix')\n\nfunction createCanvas (width, height, type) {\n return new Canvas(width, height, type)\n}\n\nfunction createImageData (array, width, height) {\n return new bindings.ImageData(array, width, height)\n}\n\nfunction loadImage (src) {\n return new Promise((resolve, reject) => {\n const image = new Image()\n\n function cleanup () {\n image.onload = null\n image.onerror = null\n }\n\n image.onload = () => { cleanup(); resolve(image) }\n image.onerror = (err) => { cleanup(); reject(err) }\n\n image.src = src\n })\n}\n\n/**\n * Resolve paths for registerFont. Must be called *before* creating a Canvas\n * instance.\n * @param src {string} Path to font file.\n * @param fontFace {{family: string, weight?: string, style?: string}} Object\n * specifying font information. `weight` and `style` default to `\"normal\"`.\n */\nfunction registerFont (src, fontFace) {\n // TODO this doesn't need to be on Canvas; it should just be a static method\n // of `bindings`.\n return Canvas._registerFont(fs.realpathSync(src), fontFace)\n}\n\n/**\n * Unload all fonts from pango to free up memory\n */\nfunction deregisterAllFonts () {\n return Canvas._deregisterAllFonts()\n}\n\nexports.Canvas = Canvas\nexports.Context2d = CanvasRenderingContext2D // Legacy/compat export\nexports.CanvasRenderingContext2D = CanvasRenderingContext2D\nexports.CanvasGradient = bindings.CanvasGradient\nexports.CanvasPattern = CanvasPattern\nexports.Image = Image\nexports.ImageData = bindings.ImageData\nexports.PNGStream = PNGStream\nexports.PDFStream = PDFStream\nexports.JPEGStream = JPEGStream\nexports.DOMMatrix = DOMMatrix\nexports.DOMPoint = DOMPoint\n\nexports.registerFont = registerFont\nexports.deregisterAllFonts = deregisterAllFonts\nexports.parseFont = parseFont\n\nexports.createCanvas = createCanvas\nexports.createImageData = createImageData\nexports.loadImage = loadImage\n\nexports.backends = bindings.Backends\n\n/** Library version. */\nexports.version = packageJson.version\n/** Cairo version. */\nexports.cairoVersion = bindings.cairoVersion\n/** jpeglib version. */\nexports.jpegVersion = bindings.jpegVersion\n/** gif_lib version. */\nexports.gifVersion = bindings.gifVersion ? bindings.gifVersion.replace(/[^.\\d]/g, '') : undefined\n/** freetype version. */\nexports.freetypeVersion = bindings.freetypeVersion\n/** rsvg version. */\nexports.rsvgVersion = bindings.rsvgVersion\n/** pango version. */\nexports.pangoVersion = bindings.pangoVersion\n"],"mappings":"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AE,EAAE,IACnB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAClB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAClB,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IACnB,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;AAE3B,YAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IACpB,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IACnB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAClB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAClB,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IACnB,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAE1B,YAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IACpB,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IACnB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAClB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAClB,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IACnB,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAE1B,YAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IACnB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAClB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAClB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAClB,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAClB,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAE1B,YAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IACpB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAClB,EAAE,CAAC,IA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","names":["require_canvas","cb","protocol","err","require_canvas"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/client/config.ts","../src/client/useSupabase.tsx","../src/utils/uuid.ts"],"sourcesContent":["let supabaseUrl = process.env.SUPABASE_URL;\nlet supabaseKey = process.env.SUPABASE_ANON_KEY ?? \"\";\nexport function setSupabaseUrl(url: string) {\n supabaseUrl = url;\n}\nexport function getSupabaseUrl() {\n return supabaseUrl;\n}\nexport function setSupabaseKey(key: string) {\n supabaseKey = key;\n}\nexport function getSupabaseKey() {\n return supabaseKey;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { createContext, ReactNode, useContext, useEffect, useMemo, useState } from \"react\";\nimport { createClient, SupabaseClient, SupabaseClientOptions } from \"@supabase/supabase-js\";\nimport { getSupabaseUrl, getSupabaseKey } from \"./config\";\nimport { generateUUID } from \"../utils/uuid\";\n\n// This interface is augmented by consumers to provide their database types\n// Example: declare module '@pol-studios/db' { interface SupabaseDatabaseTypes { Database: MyDatabaseType } }\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface SupabaseDatabaseTypes {}\nexport type Database = SupabaseDatabaseTypes extends {\n Database: infer D;\n} ? D : any;\nexport type TypedSupabaseClient = SupabaseClient<Database>;\nfunction newUuid(): string {\n return generateUUID();\n}\nfunction isUsable<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n// Client instance ID - for self-change detection and cache keys (static per app instance)\n// NOT the database session ID - just identifies this browser tab/app instance\nexport const ClientInstanceId = newUuid();\n\n// DEPRECATED: Alias for backward compatibility - use ClientInstanceId instead\nexport const UserSessionId = ClientInstanceId;\nlet defaultOptions: any = {\n auth: {\n autoRefreshToken: true,\n persistSession: true,\n detectSessionInUrl: true\n },\n global: {},\n realtime: {}\n};\nexport function createNewSupabaseClient<SchemaName extends string & keyof Database = (\"public\" extends keyof Database ? \"public\" : string & keyof Database)>(options?: SupabaseClientOptions<SchemaName>) {\n const client = createClient<Database, SchemaName>(getSupabaseUrl()!, getSupabaseKey()!, {\n ...defaultOptions,\n ...options\n });\n onSupabaseInitializedAction && onSupabaseInitializedAction(client as any);\n return client;\n}\nlet onSupabaseInitializedAction: ((supabase: SupabaseClient) => any) | undefined = undefined;\nexport function onSupabaseInitialized(afterInitialize: (supabase: SupabaseClient) => any) {\n onSupabaseInitializedAction = afterInitialize;\n}\nexport function setDefaultOptions(options: SupabaseClientOptions<string & keyof Database>) {\n defaultOptions = options;\n}\nexport let typedSupabase: SupabaseClient<Database> = null as SupabaseClient<Database>;\nconst context = createContext({\n supabaseClient: typedSupabase as SupabaseClient<Database> | null\n});\nexport default function useSupabase() {\n const supabaseContext = useContext(context);\n if (isUsable(supabaseContext?.supabaseClient) === false) {\n throw new Error(\"Hook not inside a supabase context provider.\");\n }\n return supabaseContext.supabaseClient;\n}\nexport function SupabaseProvider(t0) {\n const $ = _c(16);\n const {\n children,\n options,\n afterInitialize,\n supabaseClient: supabaseClientProp\n } = t0;\n let t1;\n if ($[0] !== options || $[1] !== supabaseClientProp) {\n t1 = () => supabaseClientProp ?? createNewSupabaseClient({\n ...defaultOptions,\n ...(options ? options : {})\n }) as unknown as SupabaseClient<Database>;\n $[0] = options;\n $[1] = supabaseClientProp;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n const [supabaseClient] = useState(t1);\n const [wasHidden, setWasHidden] = useState(false);\n const [, setConnected] = useState(true);\n let t2;\n if ($[3] !== afterInitialize || $[4] !== supabaseClient) {\n t2 = () => {\n afterInitialize && afterInitialize(supabaseClient);\n };\n $[3] = afterInitialize;\n $[4] = supabaseClient;\n $[5] = t2;\n } else {\n t2 = $[5];\n }\n let t3;\n if ($[6] !== supabaseClient) {\n t3 = [supabaseClient];\n $[6] = supabaseClient;\n $[7] = t3;\n } else {\n t3 = $[7];\n }\n useEffect(t2, t3);\n let t4;\n let t5;\n if ($[8] !== wasHidden) {\n t4 = () => {\n const checkVisibility = async () => {\n if (typeof window.document === \"undefined\") {\n return;\n }\n if (document?.hidden) {\n await delay(60000).then(x => {\n if (document.hidden) {\n setWasHidden(true);\n }\n });\n } else {\n if (wasHidden) {\n setWasHidden(false);\n ;\n try {\n setConnected(true);\n } catch (t6) {\n const error = t6;\n console.error(\"Reconnection failed:\", error);\n setConnected(false);\n }\n }\n }\n };\n const intervalId = setInterval(checkVisibility, 1000);\n return () => {\n clearInterval(intervalId);\n };\n };\n t5 = [wasHidden];\n $[8] = wasHidden;\n $[9] = t4;\n $[10] = t5;\n } else {\n t4 = $[9];\n t5 = $[10];\n }\n useEffect(t4, t5);\n let t6;\n if ($[11] !== supabaseClient) {\n t6 = {\n supabaseClient\n };\n $[11] = supabaseClient;\n $[12] = t6;\n } else {\n t6 = $[12];\n }\n const t7 = t6;\n let t8;\n if ($[13] !== children || $[14] !== t7) {\n t8 = <context.Provider value={t7}>{children}</context.Provider>;\n $[13] = children;\n $[14] = t7;\n $[15] = t8;\n } else {\n t8 = $[15];\n }\n return t8;\n}","/**\n * Generate a UUID that works across all environments\n * (Browser, React Native, Node.js)\n */\nexport function generateUUID(): string {\n // Try Web Crypto API first (browsers, modern Node.js)\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n // Fallback for React Native and older environments\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : r & 0x3 | 0x8;\n return v.toString(16);\n });\n}"],"mappings":"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","names":["t6"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/auth/hooks/useAuth.ts","../src/auth/hooks/usePermission.ts"],"sourcesContent":["import { c as _c } from \"react/compiler-runtime\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useCallback, useContext, useMemo } from \"react\";\nimport { User } from \"@supabase/supabase-js\";\nimport { SetupAuthContext, setupAuthContext } from \"../context/AuthProvider\";\nimport { permissionContext } from \"../context/PermissionContext\";\nimport { EntityAction, EntityType } from \"../types/EntityPermissions\";\n\n/**\n * Hook for authenticated users only.\n * Throws an error if the user is not authenticated.\n * Use useSetupAuth() if you need to handle unauthenticated users.\n *\n * @returns Auth context with guaranteed non-null user and hasAccess helper\n * @throws Error if user is not authenticated\n *\n * @example\n * ```tsx\n * function AuthenticatedComponent() {\n * const { user, hasAccess, profile } = useAuth();\n *\n * // user is guaranteed to be non-null\n * console.log(user.id);\n *\n * if (hasAccess('admin')) {\n * return <AdminDashboard />;\n * }\n *\n * return <UserDashboard />;\n * }\n * ```\n */\nexport function useAuth() {\n const auth = useContext(setupAuthContext);\n if (isUsable(auth.user) === false) {\n console.log({\n auth\n });\n throw new Error(\"User must not be null, use useSetupAuth() to use a nullable user.\");\n } else {\n return auth as any;\n }\n}\n\n/**\n * Hook for handling both authenticated and unauthenticated states.\n * Does not throw if user is not authenticated.\n *\n * @returns Auth context with possibly null user, hasAccess, and hasEntityAccess helpers\n *\n * @example\n * ```tsx\n * function FlexibleComponent() {\n * const { user, hasAccess, hasEntityAccess, isLoading } = useSetupAuth();\n *\n * if (isLoading) {\n * return <Spinner />;\n * }\n *\n * if (!user) {\n * return <LoginPrompt />;\n * }\n *\n * // Check global access\n * const isAdmin = hasAccess('admin');\n *\n * // Check entity-level access\n * const canEditProject = hasEntityAccess('Project', 123, 'edit');\n *\n * return <Dashboard />;\n * }\n * ```\n */\nexport function useSetupAuth() {\n const $ = _c(13);\n const auth = useContext(setupAuthContext);\n const entityPermissions = useContext(permissionContext);\n let t0;\n if ($[0] !== auth.access || $[1] !== auth.isArchived || $[2] !== auth.isSuspended) {\n t0 = key => {\n if (auth.isArchived || auth.isSuspended) {\n return false;\n }\n const accessGiven = auth.access;\n if (isUsable(accessGiven) === false) {\n return false;\n }\n if (accessGiven.includes(\"owner\")) {\n return true;\n }\n if (accessGiven.includes(key)) {\n return true;\n }\n if (isUsable(key) === false) {\n return true;\n }\n return false;\n };\n $[0] = auth.access;\n $[1] = auth.isArchived;\n $[2] = auth.isSuspended;\n $[3] = t0;\n } else {\n t0 = $[3];\n }\n const hasAccess = t0;\n let t1;\n if ($[4] !== auth.access || $[5] !== auth.isArchived || $[6] !== auth.isSuspended || $[7] !== entityPermissions) {\n t1 = (entityType, entityId, action) => {\n if (auth.isArchived || auth.isSuspended) {\n return false;\n }\n if (!entityId || entityId <= 0 || !Number.isInteger(entityId)) {\n return false;\n }\n const accessGiven_0 = auth.access;\n if (isUsable(accessGiven_0) && accessGiven_0.includes(\"owner\")) {\n return true;\n }\n if (!entityPermissions || typeof entityPermissions.checkPermission !== \"function\") {\n return false;\n }\n return entityPermissions.checkPermission(entityType, entityId, action);\n };\n $[4] = auth.access;\n $[5] = auth.isArchived;\n $[6] = auth.isSuspended;\n $[7] = entityPermissions;\n $[8] = t1;\n } else {\n t1 = $[8];\n }\n const hasEntityAccess = t1;\n let t2;\n if ($[9] !== auth || $[10] !== hasAccess || $[11] !== hasEntityAccess) {\n t2 = {\n hasAccess,\n hasEntityAccess,\n ...auth,\n user: auth.user\n };\n $[9] = auth;\n $[10] = hasAccess;\n $[11] = hasEntityAccess;\n $[12] = t2;\n } else {\n t2 = $[12];\n }\n return t2;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useContext, useEffect, useMemo } from \"react\";\nimport { permissionContext } from \"../context/PermissionContext\";\nimport { EntityType, EntityAction, EntityPermissionCheck } from \"../types/EntityPermissions\";\n\n// Re-export types for convenience\nexport type { EntityType, EntityAction, EntityPermissionCheck };\n\n/**\n * Hook to get the full PermissionContext\n * @throws Error if used outside of PermissionProvider\n */\nfunction usePermissionContext() {\n const context = useContext(permissionContext);\n if (!context || Object.keys(context).length === 0) {\n throw new Error(\"usePermission hooks must be used within a PermissionProvider\");\n }\n return context;\n}\n\n/**\n * Hook to get full permission info for a single entity\n * @param entityType - 'Project' | 'Client' | 'ProjectDatabase'\n * @param entityId - The ID of the entity (can be undefined for loading states)\n * @returns EntityPermissionCheck with canView, canEdit, etc. and isLoading\n *\n * @example\n * ```tsx\n * function ProjectHeader({ projectId }: { projectId: number }) {\n * const permission = usePermission('Project', projectId);\n *\n * if (permission.isLoading) {\n * return <Spinner />;\n * }\n *\n * return (\n * <div>\n * {permission.canEdit && <EditButton />}\n * {permission.canDelete && <DeleteButton />}\n * </div>\n * );\n * }\n * ```\n */\nexport function usePermission(entityType, entityId) {\n const $ = _c(5);\n const {\n getPermission\n } = usePermissionContext();\n let t0;\n bb0: {\n if (entityId === undefined) {\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n canView: false,\n canAdminView: false,\n canEdit: false,\n canCreate: false,\n canDelete: false,\n canShare: false,\n permissionLevel: null,\n isLoading: true\n };\n $[0] = t1;\n } else {\n t1 = $[0];\n }\n t0 = t1;\n break bb0;\n }\n let t1;\n if ($[1] !== entityId || $[2] !== entityType || $[3] !== getPermission) {\n t1 = getPermission(entityType, entityId);\n $[1] = entityId;\n $[2] = entityType;\n $[3] = getPermission;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n t0 = t1;\n }\n return t0;\n}\n\n/**\n * Hook to check a single action permission\n * @param entityType - Entity type\n * @param entityId - Entity ID\n * @param action - 'view' | 'adminView' | 'edit' | 'create' | 'delete' | 'share'\n * @returns boolean - true if user has permission for action\n *\n * @example\n * ```tsx\n * function ProjectActions({ projectId }: { projectId: number }) {\n * const canEdit = usePermissionCheck('Project', projectId, 'edit');\n * const canDelete = usePermissionCheck('Project', projectId, 'delete');\n *\n * return (\n * <div>\n * <Button disabled={!canEdit}>Edit</Button>\n * <Button disabled={!canDelete}>Delete</Button>\n * </div>\n * );\n * }\n * ```\n */\nexport function usePermissionCheck(entityType, entityId, action) {\n const $ = _c(5);\n const {\n checkPermission\n } = usePermissionContext();\n let t0;\n bb0: {\n if (entityId === undefined) {\n t0 = false;\n break bb0;\n }\n let t1;\n if ($[0] !== action || $[1] !== checkPermission || $[2] !== entityId || $[3] !== entityType) {\n t1 = checkPermission(entityType, entityId, action);\n $[0] = action;\n $[1] = checkPermission;\n $[2] = entityId;\n $[3] = entityType;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n t0 = t1;\n }\n return t0;\n}\n\n/**\n * Result type for usePermissions batch hook\n */\nexport interface EntityWithPermission {\n type: EntityType;\n id: number;\n permission: EntityPermissionCheck;\n}\n\n/**\n * Hook for batch permission lookup - useful for lists\n * @param entities - Array of { type, id } objects\n * @returns Array of entities with their permissions attached\n *\n * This hook:\n * - Calls prefetchPermissions on mount and when entities change\n * - Returns memoized results\n * - Handles empty arrays gracefully\n *\n * @example\n * ```tsx\n * function ProjectList({ projects }: { projects: Array<{ id: number; name: string }> }) {\n * const entities = projects.map(p => ({ type: 'Project' as const, id: p.id }));\n * const entitiesWithPermissions = usePermissionsBatch(entities);\n *\n * return (\n * <ul>\n * {entitiesWithPermissions.map(({ id, permission }) => {\n * const project = projects.find(p => p.id === id);\n * return (\n * <li key={id}>\n * {project?.name}\n * {permission.canEdit && <EditIcon />}\n * </li>\n * );\n * })}\n * </ul>\n * );\n * }\n * ```\n */\nexport function usePermissionsBatch(entities: Array<{\n type: EntityType;\n id: number;\n}>): EntityWithPermission[] {\n const {\n getPermission,\n prefetchPermissions\n } = usePermissionContext();\n\n // Memoize the entities array to prevent unnecessary re-renders\n const entitiesKey = useMemo(() => entities.map(e => `${e.type}:${e.id}`).sort().join(\",\"), [entities]);\n\n // Prefetch permissions when entities change\n useEffect(() => {\n if (entities.length === 0) {\n return;\n }\n\n // Convert to the format expected by prefetchPermissions\n const entitiesToPrefetch = entities.map(e_0 => ({\n entityType: e_0.type,\n entityId: e_0.id\n }));\n prefetchPermissions(entitiesToPrefetch);\n }, [entities, entitiesKey, prefetchPermissions]);\n\n // Return memoized results\n return useMemo(() => {\n if (entities.length === 0) {\n return [];\n }\n return entities.map(entity => ({\n type: entity.type,\n id: entity.id,\n permission: getPermission(entity.type, entity.id)\n }));\n }, [getPermission, entitiesKey]);\n}\n\n/**\n * Simple boolean hook to check if user can view an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can view the entity\n *\n * @example\n * ```tsx\n * function ProjectPage({ projectId }: { projectId: number }) {\n * const canView = useCanView('Project', projectId);\n *\n * if (!canView) {\n * return <AccessDenied />;\n * }\n *\n * return <ProjectContent projectId={projectId} />;\n * }\n * ```\n */\nexport function useCanView(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"view\");\n}\n\n/**\n * Simple boolean hook to check if user can edit an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can edit the entity\n *\n * @example\n * ```tsx\n * function ProjectEditor({ projectId }: { projectId: number }) {\n * const canEdit = useCanEdit('Project', projectId);\n *\n * return (\n * <form>\n * <input disabled={!canEdit} />\n * <button disabled={!canEdit}>Save</button>\n * </form>\n * );\n * }\n * ```\n */\nexport function useCanEdit(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"edit\");\n}\n\n/**\n * Simple boolean hook to check if user can delete an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can delete the entity\n *\n * @example\n * ```tsx\n * function ProjectActions({ projectId }: { projectId: number }) {\n * const canDelete = useCanDelete('Project', projectId);\n *\n * return (\n * <Button\n * variant=\"destructive\"\n * disabled={!canDelete}\n * onClick={handleDelete}\n * >\n * Delete Project\n * </Button>\n * );\n * }\n * ```\n */\nexport function useCanDelete(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"delete\");\n}\n\n/**\n * Simple boolean hook to check if user can share an entity\n * @param entityType - Entity type\n * @param entityId - Entity ID (can be undefined for loading states)\n * @returns boolean - true if user can share the entity\n *\n * @example\n * ```tsx\n * function ShareButton({ projectId }: { projectId: number }) {\n * const canShare = useCanShare('Project', projectId);\n *\n * if (!canShare) {\n * return null;\n * }\n *\n * return <Button onClick={openShareModal}>Share</Button>;\n * }\n * ```\n */\nexport function useCanShare(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"share\");\n}\n\n/**\n * Simple boolean hook to check if user can create entities of a type\n * Note: For create permission, the entityId should be the parent entity ID\n * (e.g., for creating a ProjectDatabase, pass the Project ID)\n *\n * @param entityType - Entity type\n * @param entityId - Parent entity ID (can be undefined for loading states)\n * @returns boolean - true if user can create entities\n *\n * @example\n * ```tsx\n * function AddDatabaseButton({ projectId }: { projectId: number }) {\n * const canCreate = useCanCreate('ProjectDatabase', projectId);\n *\n * return (\n * <Button disabled={!canCreate} onClick={handleCreate}>\n * Add Database\n * </Button>\n * );\n * }\n * ```\n */\nexport function useCanCreate(entityType, entityId) {\n return usePermissionCheck(entityType, entityId, \"create\");\n}\n\n/**\n * Hook to invalidate permission cache for a specific entity\n * Useful after permission changes (e.g., after sharing an entity)\n *\n * @returns Function to invalidate permission for an entity\n *\n * @example\n * ```tsx\n * function ShareModal({ projectId }: { projectId: number }) {\n * const invalidatePermission = useInvalidatePermission();\n *\n * const handleShare = async (userId: string) => {\n * await shareProject(projectId, userId);\n * invalidatePermission('Project', projectId);\n * };\n *\n * return <ShareForm onShare={handleShare} />;\n * }\n * ```\n */\nexport function useInvalidatePermission() {\n const {\n invalidatePermission\n } = usePermissionContext();\n return invalidatePermission;\n}\n\n/**\n * Hook to get the loading state of the permission context\n * @returns boolean - true if permissions are being fetched\n *\n * @example\n * ```tsx\n * function PermissionAwareComponent() {\n * const isLoadingPermissions = usePermissionLoading();\n *\n * if (isLoadingPermissions) {\n * return <LoadingSpinner />;\n * }\n *\n * return <Content />;\n * }\n * ```\n */\nexport function usePermissionLoading() {\n const {\n isLoading\n } = usePermissionContext();\n return isLoading;\n}"],"mappings":"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","names":["_c","useContext","useMemo","useContext","_c","t1","useMemo"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/errors/TimeoutError.ts","../src/useDbQuery.ts","../src/auth/context/setupAuthContext.tsx","../src/auth/context/PermissionContext.tsx","../src/auth/context/AuthProvider.tsx","../src/auth/context/UserMetadataContext.tsx"],"sourcesContent":["export const TIMEOUT_ERROR_MESSAGE = \"Request timed out\";\nexport const DEFAULT_QUERY_TIMEOUT = 15_000; // 15 seconds\n\nexport function isTimeoutError(error: Error | null | undefined): boolean {\n if (!error) return false;\n return error.name === \"AbortError\" || error.message === TIMEOUT_ERROR_MESSAGE || error.message.toLowerCase().includes(\"timed out\");\n}","import { PostgrestError, PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { useMemo, useRef } from \"react\";\nimport { ItemType } from \"@pol-studios/utils\";\nimport { encode, UseQuerySingleReturn } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { omit } from \"@pol-studios/utils\";\nimport { useQuery, UseQueryOptions } from \"@tanstack/react-query\";\nimport { useDelayedValue } from \"@pol-studios/hooks/state\";\nimport { DEFAULT_QUERY_TIMEOUT, TIMEOUT_ERROR_MESSAGE } from \"./errors/TimeoutError\";\ntype ConfigurationOptions<T> = {\n crossOrganization?: boolean;\n filter?: (item: ItemType<T>) => boolean;\n timeout?: number;\n};\nexport type UseDbQuerySingleReturn<T> = UseQuerySingleReturn<T> & {\n data: T | null | undefined;\n count?: number | null;\n};\nexport function useDbQuery<Result>(query: PromiseLike<PostgrestSingleResponse<Result>> & {\n abortSignal?: (signal: AbortSignal) => PromiseLike<PostgrestSingleResponse<Result>>;\n}, config?: Omit<UseQueryOptions<Result, PostgrestError>, \"queryKey\" | \"queryFn\"> & ConfigurationOptions<Result>) {\n // Debounce query key to prevent rapid query churn during fast navigation\n const queryKey = encode(query, false);\n const queryKeyString = queryKey.join(\"-\");\n const debouncedKeyString = useDelayedValue(queryKeyString, 50);\n\n // Only enable query when key has stabilized (debounced matches current)\n const isKeyStable = queryKeyString === debouncedKeyString;\n const effectiveEnabled = config?.enabled !== false && isKeyStable;\n const timeoutMs = config?.timeout ?? DEFAULT_QUERY_TIMEOUT;\n\n // Track count from Supabase response (for queries with count: \"exact\")\n const countRef = useRef<number | null>(null);\n const request = useQuery(useMemo(() => ({\n queryKey,\n queryFn: async ({\n signal\n }) => {\n const controller = new AbortController();\n signal.addEventListener(\"abort\", () => controller.abort());\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n try {\n // Execute query with abort signal\n const queryWithSignal = query.abortSignal?.(controller.signal) ?? query;\n const result = await queryWithSignal;\n if (result.error) throw result.error;\n // Store count if available (from queries with count: \"exact\")\n countRef.current = result.count ?? null;\n return result.data;\n } catch (err: any) {\n if (err.name === \"AbortError\") {\n throw new Error(TIMEOUT_ERROR_MESSAGE);\n }\n throw err;\n } finally {\n clearTimeout(timeoutId);\n }\n },\n ...omit({\n retry: 1,\n ...config,\n enabled: effectiveEnabled\n }, [\"queryKey\", \"timeout\"])\n }), [queryKey, config, effectiveEnabled, timeoutMs, query]));\n\n // Return request with count property added\n return useMemo(() => ({\n ...request,\n count: countRef.current\n }), [request, countRef.current]) as UseDbQuerySingleReturn<Result>;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * SetupAuthContext - Shared context for auth state\n *\n * This file is separate to avoid circular dependencies between\n * AuthProvider and PermissionContext.\n */\n\nimport { createContext, ReactNode } from \"react\";\nimport { AuthTokenResponsePassword, SignUpWithPasswordCredentials, User } from \"@supabase/supabase-js\";\nexport type ProfileStatus = \"active\" | \"archived\" | \"suspended\";\nexport interface SetupAuthContext {\n user?: User | null | undefined;\n isLoading: boolean;\n profile: Profile | null | undefined;\n access: string[];\n /** Whether the profile is archived */\n isArchived: boolean;\n /** Whether the profile is suspended */\n isSuspended: boolean;\n /** The profile status (active, archived, suspended) */\n profileStatus: ProfileStatus | undefined;\n registerAsync: (register: SignUpWithPasswordCredentials) => Promise<any>;\n signInAsync: (username: string, password: string) => Promise<AuthTokenResponsePassword>;\n signOutAsync: () => Promise<any>;\n refreshAsync: () => Promise<void>;\n onSignOut: (action: () => any) => string;\n removeOnSignOut: (id: string) => any;\n hasAccess?: (key: string) => boolean;\n}\n\n// Profile type - simplified version, the full type is in AuthProvider\nexport interface Profile {\n id: string;\n email?: string;\n fullName?: string;\n status?: ProfileStatus;\n UserAccess?: Array<{\n accessKey: string;\n }>;\n [key: string]: any;\n}\nexport const setupAuthContext = createContext({} as SetupAuthContext);\n\n/**\n * Props for SetupAuthContextProvider\n * A simpler provider that takes pre-computed auth state\n */\nexport interface SetupAuthContextProviderProps {\n children: ReactNode;\n auth: SetupAuthContext;\n}\n\n/**\n * Simple provider that takes auth state and provides it via context.\n * Use this when you already have the auth state and just need to provide it to children.\n *\n * @example\n * ```tsx\n * const auth = useSetupAuth();\n * return (\n * <SetupAuthContextProvider auth={auth}>\n * <MyComponent />\n * </SetupAuthContextProvider>\n * );\n * ```\n */\nexport function SetupAuthContextProvider(t0) {\n const $ = _c(3);\n const {\n children,\n auth\n } = t0;\n let t1;\n if ($[0] !== auth || $[1] !== children) {\n t1 = <setupAuthContext.Provider value={auth}>{children}</setupAuthContext.Provider>;\n $[0] = auth;\n $[1] = children;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n return t1;\n}","import { createContext, ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport useSupabase from \"../../useSupabase\";\nimport { setupAuthContext } from \"./setupAuthContext\";\nimport { EntityType, EntityPermissionLevel, EntityAction, EntityPermissionCheck } from \"../types/EntityPermissions\";\n\n// Cache entry with TTL\ninterface CacheEntry {\n permission: EntityPermissionCheck;\n expiresAt: number;\n}\n\n// Entity identifier for batch lookups\ninterface EntityIdentifier {\n entityType: EntityType;\n entityId: number;\n}\n\n// Cache key helper\nfunction getCacheKey(userId: string | undefined, entityType: EntityType, entityId: number): string {\n return `${userId || \"anon\"}:${entityType}:${entityId}`;\n}\n\n// Default loading state\nconst loadingPermission: EntityPermissionCheck = {\n canView: false,\n canAdminView: false,\n canEdit: false,\n canCreate: false,\n canDelete: false,\n canShare: false,\n permissionLevel: null,\n isLoading: true\n};\n\n// No permission state\nconst noPermission: EntityPermissionCheck = {\n canView: false,\n canAdminView: false,\n canEdit: false,\n canCreate: false,\n canDelete: false,\n canShare: false,\n permissionLevel: null,\n isLoading: false,\n isDenied: false\n};\n\n// Denied permission state - explicitly blocked access\nconst deniedPermission: EntityPermissionCheck = {\n canView: false,\n canAdminView: false,\n canEdit: false,\n canCreate: false,\n canDelete: false,\n canShare: false,\n permissionLevel: null,\n isLoading: false,\n isDenied: true\n};\n\n// Map permission level to permission check\n// If permission is 'denied', it means access was explicitly blocked\n// Handles both legacy formats (ReadOnly, AdminReadOnly, ReadWrite, Admin)\n// and new formats (view, edit, admin, denied)\nfunction mapPermissionLevel(level: EntityPermissionLevel | \"denied\" | string | null): EntityPermissionCheck {\n if (!level) {\n return noPermission;\n }\n\n // Normalize to lowercase for comparison to handle both legacy and new formats\n const normalizedLevel = level.toLowerCase();\n switch (normalizedLevel) {\n // Legacy format: ReadOnly, New format: view\n case \"readonly\":\n case \"view\":\n return {\n canView: true,\n canAdminView: false,\n canEdit: false,\n canCreate: false,\n canDelete: false,\n canShare: false,\n permissionLevel: \"ReadOnly\",\n isLoading: false,\n isDenied: false\n };\n // Legacy format: AdminReadOnly (no new equivalent, keep for backwards compatibility)\n case \"adminreadonly\":\n return {\n canView: true,\n canAdminView: true,\n canEdit: false,\n canCreate: false,\n canDelete: false,\n canShare: false,\n permissionLevel: \"AdminReadOnly\",\n isLoading: false,\n isDenied: false\n };\n // Legacy format: ReadWrite, New format: edit\n case \"readwrite\":\n case \"edit\":\n return {\n canView: true,\n canAdminView: false,\n canEdit: true,\n canCreate: true,\n canDelete: false,\n canShare: false,\n permissionLevel: \"ReadWrite\",\n isLoading: false,\n isDenied: false\n };\n // Legacy format: Admin, New format: admin\n case \"admin\":\n return {\n canView: true,\n canAdminView: true,\n canEdit: true,\n canCreate: true,\n canDelete: true,\n canShare: true,\n permissionLevel: \"Admin\",\n isLoading: false,\n isDenied: false\n };\n // New format: denied - explicit access denial\n case \"denied\":\n return deniedPermission;\n default:\n console.warn(`Unknown permission level: ${level}`);\n return noPermission;\n }\n}\n\n// Context interface\nexport interface PermissionContextValue {\n getPermission: (entityType: EntityType, entityId: number) => EntityPermissionCheck;\n checkPermission: (entityType: EntityType, entityId: number, action: EntityAction) => boolean;\n prefetchPermissions: (entities: EntityIdentifier[]) => Promise<void>;\n invalidatePermission: (entityType: EntityType, entityId: number) => void;\n isLoading: boolean;\n}\n\n/**\n * @deprecated Use permissionContext instead\n */\nexport interface EntityPermissionContextValue extends PermissionContextValue {}\nexport const permissionContext = createContext<PermissionContextValue>({} as PermissionContextValue);\n\n/**\n * @deprecated Use permissionContext instead\n */\nexport const entityPermissionContext = permissionContext;\n\n// TTL for cache entries (5 minutes)\nconst CACHE_TTL_MS = 5 * 60 * 1000;\n\n// TTL for error cache entries (30 seconds) - shorter to allow quick retry\nconst ERROR_CACHE_TTL_MS = 30 * 1000;\n\n// Batch collection delay (50ms)\nconst BATCH_DELAY_MS = 50;\nexport function PermissionProvider({\n children\n}: {\n children: ReactNode;\n}) {\n const supabase = useSupabase();\n const setupAuth = useContext(setupAuthContext);\n const user = setupAuth?.user;\n\n // Permission cache\n const cacheRef = useRef<Map<string, CacheEntry>>(new Map());\n\n // Pending lookups for batching\n const pendingLookupsRef = useRef<Set<string>>(new Set());\n\n // In-flight lookups to prevent duplicate requests during async RPC calls\n const inFlightRef = useRef<Set<string>>(new Set());\n\n // Batch timer ref\n const batchTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Loading state\n const [isLoading, setIsLoading] = useState(false);\n\n // Force re-render trigger\n const [, forceUpdate] = useState(0);\n\n // Clean up expired cache entries\n const cleanupExpiredEntries = useCallback(() => {\n const now = Date.now();\n const cache = cacheRef.current;\n let hasExpired = false;\n for (const [key, entry] of cache.entries()) {\n if (entry.expiresAt < now) {\n cache.delete(key);\n hasExpired = true;\n }\n }\n if (hasExpired) {\n forceUpdate(prev => prev + 1);\n }\n }, []);\n\n // Periodic cleanup of expired entries\n useEffect(() => {\n const cleanupInterval = setInterval(cleanupExpiredEntries, 60 * 1000);\n return () => clearInterval(cleanupInterval);\n }, [cleanupExpiredEntries]);\n\n // Execute batch lookup\n const executeBatchLookup = useCallback(async () => {\n const pending = Array.from(pendingLookupsRef.current);\n pendingLookupsRef.current.clear();\n if (pending.length === 0 || !user?.id) {\n return;\n }\n\n // Move pending keys to in-flight to prevent duplicate requests\n pending.forEach(k => inFlightRef.current.add(k));\n setIsLoading(true);\n try {\n // Parse pending keys back to entities (format: userId:entityType:entityId)\n const entities = pending.map(key_0 => {\n const parts = key_0.split(\":\");\n // Skip the userId part (index 0), use entityType (index 1) and entityId (index 2)\n const entityType = parts[1];\n const entityIdStr = parts[2];\n return {\n entity_type: entityType as EntityType,\n entity_id: parseInt(entityIdStr, 10)\n };\n });\n\n // Call RPC for batch lookup\n // Using 'as any' because the RPC function type isn't in the generated database types\n const {\n data,\n error\n } = await (supabase.rpc as any)(\"get_user_entity_permissions\", {\n p_user_id: user.id,\n p_entities: entities\n });\n if (error) {\n console.error(\"Failed to fetch entity permissions:\", error);\n // Mark all pending as no permission with shorter TTL to allow quick retry\n const cache_0 = cacheRef.current;\n const now_0 = Date.now();\n for (const key_1 of pending) {\n cache_0.set(key_1, {\n permission: noPermission,\n expiresAt: now_0 + ERROR_CACHE_TTL_MS\n });\n }\n } else if (data) {\n // Update cache with results\n const cache_1 = cacheRef.current;\n const now_1 = Date.now();\n\n // Create a map of results for quick lookup\n // Permission can be a standard level or 'denied' for explicit deny\n const resultsMap = new Map<string, EntityPermissionLevel | \"denied\">();\n // Type the data as an array of permission results\n const results = data as Array<{\n entity_type: EntityType;\n entity_id: number;\n permission: EntityPermissionLevel | \"denied\";\n }>;\n for (const result of results) {\n const key_2 = getCacheKey(user?.id, result.entity_type, result.entity_id);\n resultsMap.set(key_2, result.permission);\n }\n\n // Update cache for all pending keys\n for (const key_3 of pending) {\n const permissionLevel = resultsMap.get(key_3) || null;\n cache_1.set(key_3, {\n permission: mapPermissionLevel(permissionLevel),\n expiresAt: now_1 + CACHE_TTL_MS\n });\n }\n }\n forceUpdate(prev_0 => prev_0 + 1);\n } catch (err) {\n console.error(\"Unexpected error fetching entity permissions:\", err);\n } finally {\n // Remove from in-flight after completion (success or error)\n pending.forEach(k => inFlightRef.current.delete(k));\n setIsLoading(false);\n }\n }, [supabase, user?.id]);\n\n // Schedule batch lookup\n const scheduleBatchLookup = useCallback(() => {\n if (batchTimerRef.current) {\n clearTimeout(batchTimerRef.current);\n }\n batchTimerRef.current = setTimeout(() => {\n batchTimerRef.current = null;\n executeBatchLookup();\n }, BATCH_DELAY_MS);\n }, [executeBatchLookup]);\n\n // Get permission for an entity\n const getPermission = useCallback((entityType_0: EntityType, entityId: number): EntityPermissionCheck => {\n const key_4 = getCacheKey(user?.id, entityType_0, entityId);\n const cache_2 = cacheRef.current;\n const cached = cache_2.get(key_4);\n const now_2 = Date.now();\n\n // Return cached if valid\n if (cached && cached.expiresAt > now_2) {\n return cached.permission;\n }\n\n // Don't add if already pending or in-flight to prevent duplicate requests\n if (!pendingLookupsRef.current.has(key_4) && !inFlightRef.current.has(key_4)) {\n pendingLookupsRef.current.add(key_4);\n scheduleBatchLookup();\n }\n return loadingPermission;\n }, [scheduleBatchLookup, user?.id]);\n\n // Check specific permission action\n const checkPermission = useCallback((entityType_1: EntityType, entityId_0: number, action: EntityAction): boolean => {\n const permission = getPermission(entityType_1, entityId_0);\n if (permission.isLoading) {\n return false;\n }\n switch (action) {\n case \"view\":\n return permission.canView;\n case \"adminView\":\n return permission.canAdminView;\n case \"edit\":\n return permission.canEdit;\n case \"create\":\n return permission.canCreate;\n case \"delete\":\n return permission.canDelete;\n case \"share\":\n return permission.canShare;\n default:\n return false;\n }\n }, [getPermission]);\n\n // Prefetch permissions for multiple entities\n const prefetchPermissions = useCallback(async (entities_0: EntityIdentifier[]): Promise<void> => {\n if (!user?.id || entities_0.length === 0) {\n return;\n }\n const cache_3 = cacheRef.current;\n const now_3 = Date.now();\n\n // Filter out already cached entries, items already pending, and items in-flight\n const toFetch = entities_0.filter(entity => {\n const key_5 = getCacheKey(user?.id, entity.entityType, entity.entityId);\n const cached_0 = cache_3.get(key_5);\n const isPending = pendingLookupsRef.current.has(key_5);\n const isInFlight = inFlightRef.current.has(key_5);\n return !isPending && !isInFlight && (!cached_0 || cached_0.expiresAt <= now_3);\n });\n if (toFetch.length === 0) {\n return;\n }\n setIsLoading(true);\n try {\n const entitiesParam = toFetch.map(e => ({\n entity_type: e.entityType,\n entity_id: e.entityId\n }));\n\n // Using 'as any' because the RPC function type isn't in the generated database types\n const {\n data: data_0,\n error: error_0\n } = await (supabase.rpc as any)(\"get_user_entity_permissions\", {\n p_user_id: user.id,\n p_entities: entitiesParam\n });\n if (error_0) {\n console.error(\"Failed to prefetch entity permissions:\", error_0);\n return;\n }\n if (data_0) {\n // Capture timestamp AFTER the RPC call completes\n const cacheTimestamp = Date.now();\n\n // Permission can be a standard level or 'denied' for explicit deny\n const resultsMap_0 = new Map<string, EntityPermissionLevel | \"denied\">();\n // Type the data as an array of permission results\n const results_0 = data_0 as Array<{\n entity_type: EntityType;\n entity_id: number;\n permission: EntityPermissionLevel | \"denied\";\n }>;\n for (const result_0 of results_0) {\n const key_6 = getCacheKey(user?.id, result_0.entity_type, result_0.entity_id);\n resultsMap_0.set(key_6, result_0.permission);\n }\n for (const entity_0 of toFetch) {\n const key_7 = getCacheKey(user?.id, entity_0.entityType, entity_0.entityId);\n const permissionLevel_0 = resultsMap_0.get(key_7) || null;\n cache_3.set(key_7, {\n permission: mapPermissionLevel(permissionLevel_0),\n expiresAt: cacheTimestamp + CACHE_TTL_MS\n });\n }\n forceUpdate(prev_1 => prev_1 + 1);\n }\n } catch (err_0) {\n console.error(\"Unexpected error prefetching entity permissions:\", err_0);\n } finally {\n setIsLoading(false);\n }\n }, [supabase, user?.id]);\n\n // Invalidate a specific permission\n const invalidatePermission = useCallback((entityType_2: EntityType, entityId_1: number): void => {\n const key_8 = getCacheKey(user?.id, entityType_2, entityId_1);\n cacheRef.current.delete(key_8);\n forceUpdate(prev_2 => prev_2 + 1);\n }, [user?.id]);\n\n // Parse scoped access key format: <entity_type>:<entity_id>:<permission_level>\n // Returns null if the key format is invalid\n const parseScopedAccessKey = useCallback((key_9: string): {\n entityType: EntityType;\n entityId: number;\n } | null => {\n if (!key_9 || typeof key_9 !== \"string\") {\n return null;\n }\n const parts_0 = key_9.split(\":\");\n if (parts_0.length < 2) {\n return null;\n }\n const entityType_3 = parts_0[0];\n const entityId_2 = parseInt(parts_0[1], 10);\n if (isNaN(entityId_2)) {\n return null;\n }\n // Use explicit mapping instead of string manipulation\n // This correctly handles \"database\" -> \"ProjectDatabase\" case\n const entityTypeMap: Record<string, EntityType> = {\n client: \"Client\",\n project: \"Project\",\n database: \"ProjectDatabase\",\n projectdatabase: \"ProjectDatabase\"\n };\n const normalizedEntityType = entityTypeMap[entityType_3.toLowerCase()];\n if (!normalizedEntityType) {\n return null;\n }\n return {\n entityType: normalizedEntityType,\n entityId: entityId_2\n };\n }, []);\n\n // Real-time subscription for permission changes\n useEffect(() => {\n if (!user?.id) {\n return;\n }\n\n // Subscribe to changes on UserAccess table for the current user\n // Use unique channel name per user to avoid collisions\n const channel = supabase.channel(`entity-permissions-${user.id}`).on(\"postgres_changes\", {\n event: \"*\",\n schema: \"core\",\n table: \"UserAccess\",\n filter: `userId=eq.${user.id}`\n }, payload => {\n // Parse the scoped access key from the new record\n if (payload.new && typeof payload.new === \"object\" && \"scopedAccessKey\" in payload.new && typeof payload.new.scopedAccessKey === \"string\") {\n const parsed = parseScopedAccessKey(payload.new.scopedAccessKey);\n if (parsed) {\n invalidatePermission(parsed.entityType, parsed.entityId);\n }\n }\n // Parse the scoped access key from the old record (for deletes/updates)\n if (payload.old && typeof payload.old === \"object\" && \"scopedAccessKey\" in payload.old && typeof payload.old.scopedAccessKey === \"string\") {\n const parsed_0 = parseScopedAccessKey(payload.old.scopedAccessKey);\n if (parsed_0) {\n invalidatePermission(parsed_0.entityType, parsed_0.entityId);\n }\n }\n }).subscribe();\n return () => {\n channel.unsubscribe();\n supabase.removeChannel(channel);\n };\n }, [supabase, user?.id, invalidatePermission, parseScopedAccessKey]);\n\n // Clear cache on user change\n useEffect(() => {\n cacheRef.current.clear();\n pendingLookupsRef.current.clear();\n inFlightRef.current.clear();\n if (batchTimerRef.current) {\n clearTimeout(batchTimerRef.current);\n batchTimerRef.current = null;\n }\n forceUpdate(prev_3 => prev_3 + 1);\n }, [user?.id]);\n\n // Cleanup batch timer on unmount\n useEffect(() => {\n return () => {\n if (batchTimerRef.current) {\n clearTimeout(batchTimerRef.current);\n }\n };\n }, []);\n const value = useMemo(() => ({\n getPermission,\n checkPermission,\n prefetchPermissions,\n invalidatePermission,\n isLoading\n }), [getPermission, checkPermission, prefetchPermissions, invalidatePermission, isLoading]);\n return <permissionContext.Provider value={value}>\n {children}\n </permissionContext.Provider>;\n}\nexport function usePermissions() {\n const context = useContext(permissionContext);\n if (!context || Object.keys(context).length === 0) {\n throw new Error(\"usePermissions must be used within a PermissionProvider\");\n }\n return context;\n}","import { useDbQuery as useQuery } from \"../../useDbQuery\";\nimport useSupabase, { typedSupabase } from \"../../useSupabase\";\nimport { isUsable, newUuid } from \"@pol-studios/utils\";\nimport { QueryData, SignUpWithPasswordCredentials, User } from \"@supabase/supabase-js\";\nimport { ReactNode, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { PermissionProvider } from \"./PermissionContext\";\n// Import from shared context to use internally\nimport { setupAuthContext, type ProfileStatus } from \"./setupAuthContext\";\n// Re-export from shared context to maintain API compatibility\nexport { setupAuthContext, SetupAuthContextProvider, type SetupAuthContext, type SetupAuthContextProviderProps, type ProfileStatus } from \"./setupAuthContext\";\nconst profileQuery = typedSupabase?.schema(\"core\").from(\"Profile\").select(\"*, UserAccess(accessKey), status\").single();\nexport type Profile = QueryData<typeof profileQuery>;\nexport interface AuthProviderProps {\n children: ReactNode;\n /**\n * Enable entity-level permissions system (Project, Client, ProjectDatabase access control).\n * When enabled, wraps children with PermissionProvider.\n * @default false\n */\n enableEntityPermissions?: boolean;\n}\nexport function AuthProvider({\n children,\n enableEntityPermissions = false\n}: AuthProviderProps) {\n const supabase = useSupabase();\n const [currentUser, setCurrentUser] = useState<User | null | undefined>(undefined);\n const [userNeedsChange, setUserNeedsChange] = useState(true);\n // Prevents premature isLoading=false during async gap between auth event and session fetch\n const [onSignOutCallbacks, setOnSignOutCallbacks] = useState(new Map<string, () => any>());\n async function registerAsync(register: SignUpWithPasswordCredentials) {\n const response = await supabase.auth.signUp(register);\n setCurrentUser(prev => {\n const newUser = response.data.user;\n if (prev?.id === newUser?.id) {\n return prev;\n }\n return newUser;\n });\n return response;\n }\n async function signInAsync(username: string, password: string) {\n const response_0 = await supabase.auth.signInWithPassword({\n email: username,\n password\n });\n if (response_0.data) {\n setCurrentUser(prev_0 => {\n const newUser_0 = response_0.data.user;\n if (prev_0?.id === newUser_0?.id) {\n return prev_0;\n }\n return newUser_0;\n });\n }\n return response_0;\n }\n async function signOutAsync() {\n const response_1 = await supabase.auth.signOut();\n if (isUsable(response_1.error) === false) {\n Array.from(onSignOutCallbacks.values()).forEach(x => {\n x();\n });\n }\n return response_1;\n }\n function onSignOut(action: () => any) {\n const id = newUuid();\n setOnSignOutCallbacks(x_0 => new Map(x_0).set(id, action));\n return id;\n }\n function removeOnSignOut(id_0: string) {\n setOnSignOutCallbacks(x_1 => {\n const map = new Map(x_1);\n map.delete(id_0);\n return map;\n });\n }\n async function refreshAsync() {}\n useEffect(() => {\n const request = supabase.auth.onAuthStateChange(event => {\n if (event === \"SIGNED_IN\" || event === \"SIGNED_OUT\") {\n setUserNeedsChange(true);\n }\n });\n return () => {\n request.data.subscription.unsubscribe();\n };\n }, [supabase.auth]);\n useEffect(() => {\n if (userNeedsChange === false) return;\n supabase.auth.getSession().then(x_2 => {\n setCurrentUser(prev_1 => {\n const newUser_1 = x_2?.data?.session?.user ?? null;\n if (newUser_1 === null) return null;\n // Only update reference if user actually changed\n if (prev_1?.id === newUser_1?.id) {\n return prev_1;\n }\n return newUser_1;\n });\n setUserNeedsChange(false);\n }).catch(error => {\n console.error(\"Failed to get session:\", error);\n setCurrentUser(prev_2 => prev_2 === null ? prev_2 : null);\n setUserNeedsChange(false);\n });\n }, [userNeedsChange]);\n const profileRequest = useQuery(supabase.schema(\"core\").from(\"Profile\").select(\"*, UserAccess(accessKey), status\").eq(\"id\", currentUser?.id!).limit(1).maybeSingle(), {\n enabled: isUsable(currentUser),\n crossOrganization: true\n });\n\n // Fetch all access keys (direct + group-based) using the database function\n const accessKeysRequest = useQuery(supabase.schema(\"core\").rpc(\"get_user_access_keys\", {\n user_id: currentUser?.id!\n }), {\n enabled: isUsable(currentUser),\n crossOrganization: true\n });\n\n // Stable refetch callback for real-time subscriptions\n const refetchAccessKeys = useCallback(() => {\n accessKeysRequest.refetch();\n }, [accessKeysRequest.refetch]);\n\n // Track user's group IDs for filtering GroupAccessKey changes\n const userGroupIdsRef = useRef<Set<number>>(new Set());\n\n // Update group IDs when access keys change\n useEffect(() => {\n if (accessKeysRequest.data) {\n const groupIds = new Set<number>();\n for (const item of accessKeysRequest.data) {\n if (item.source === \"group\" && item.source_id) {\n groupIds.add(item.source_id);\n }\n }\n userGroupIdsRef.current = groupIds;\n }\n }, [accessKeysRequest.data]);\n\n // Real-time subscription for access key changes (direct + group-based)\n useEffect(() => {\n if (!currentUser?.id) return;\n const channel = supabase.channel(`user-access-keys-${currentUser.id}`)\n // Direct access changes\n .on(\"postgres_changes\", {\n event: \"*\",\n schema: \"core\",\n table: \"UserAccess\",\n filter: `userId=eq.${currentUser.id}`\n }, () => {\n refetchAccessKeys();\n })\n // Group membership changes for this user\n .on(\"postgres_changes\", {\n event: \"*\",\n schema: \"core\",\n table: \"UserGroup\",\n filter: `userId=eq.${currentUser.id}`\n }, () => {\n refetchAccessKeys();\n })\n // Group access key changes (check if user is in affected group)\n .on(\"postgres_changes\", {\n event: \"*\",\n schema: \"core\",\n table: \"GroupAccessKey\"\n }, payload => {\n const groupId = (payload.new as {\n groupId?: number;\n })?.groupId || (payload.old as {\n groupId?: number;\n })?.groupId;\n if (groupId && userGroupIdsRef.current.has(groupId)) {\n refetchAccessKeys();\n }\n })\n // Group activation/deactivation\n .on(\"postgres_changes\", {\n event: \"UPDATE\",\n schema: \"core\",\n table: \"Group\"\n }, payload_0 => {\n const oldActive = (payload_0.old as {\n isActive?: boolean;\n })?.isActive;\n const newActive = (payload_0.new as {\n isActive?: boolean;\n })?.isActive;\n const groupId_0 = (payload_0.new as {\n id?: number;\n })?.id;\n // Refetch if activation status changed and user is in this group\n if (oldActive !== newActive && groupId_0 && userGroupIdsRef.current.has(groupId_0)) {\n refetchAccessKeys();\n }\n }).subscribe();\n return () => {\n channel.unsubscribe();\n supabase.removeChannel(channel);\n };\n }, [supabase, currentUser?.id, refetchAccessKeys]);\n\n // Real-time subscription for profile status changes (force signout if archived/suspended)\n useEffect(() => {\n if (!currentUser?.id) return;\n const profileChannel = supabase.channel(`profile-status-${currentUser.id}`).on(\"postgres_changes\", {\n event: \"UPDATE\",\n schema: \"core\",\n table: \"Profile\",\n filter: `id=eq.${currentUser.id}`\n }, payload_1 => {\n const newStatus = (payload_1.new as {\n status?: string;\n })?.status;\n const oldStatus = (payload_1.old as {\n status?: string;\n })?.status;\n\n // If status changed to archived/suspended, force sign out\n if (oldStatus === \"active\" && (newStatus === \"archived\" || newStatus === \"suspended\")) {\n signOutAsync();\n }\n\n // Refetch profile data to update UI\n profileRequest.refetch();\n }).subscribe();\n return () => {\n profileChannel.unsubscribe();\n supabase.removeChannel(profileChannel);\n };\n }, [supabase, currentUser?.id, profileRequest.refetch]);\n\n // Combine access keys from both sources, preferring the RPC result\n const combinedAccess: string[] = useMemo(() => {\n // If we have the RPC result, use it (includes both direct and group-based)\n if (accessKeysRequest.data) {\n const uniqueKeys = new Set<string>();\n for (const item_0 of accessKeysRequest.data) {\n if (item_0.access_key) {\n uniqueKeys.add(item_0.access_key);\n }\n }\n return Array.from(uniqueKeys);\n }\n // Fallback to direct access only (for backwards compatibility during loading)\n return profileRequest.data?.UserAccess?.map(x_3 => x_3.accessKey) || [];\n }, [accessKeysRequest.data, profileRequest.data?.UserAccess]);\n\n // Compute profile status values\n const profileStatus = profileRequest.data?.status as ProfileStatus | undefined;\n const isArchived = profileStatus === \"archived\";\n const isSuspended = profileStatus === \"suspended\";\n const hasAccess = useCallback((key: string) => {\n // Archived/suspended users have no access\n if (isArchived || isSuspended) {\n return false;\n }\n const accessGiven = combinedAccess;\n if (isUsable(accessGiven) === false) return false;\n if (accessGiven.includes(\"owner\")) return true;\n if (accessGiven.includes(key)) return true;\n if (isUsable(key) === false) return true;\n return false;\n }, [combinedAccess, isArchived, isSuspended]);\n const authStateWithLoading = useMemo(() => ({\n hasAccess,\n user: currentUser,\n profile: profileRequest.data,\n access: combinedAccess,\n profileStatus,\n isArchived,\n isSuspended,\n isLoading: currentUser === null ? false : profileRequest.isLoading || accessKeysRequest.isLoading || currentUser === undefined,\n signInAsync,\n signOutAsync,\n onSignOut,\n removeOnSignOut,\n registerAsync,\n refreshAsync\n }), [profileRequest.data, profileRequest.isLoading, accessKeysRequest.data, accessKeysRequest.isLoading, currentUser, combinedAccess, profileStatus, isArchived, isSuspended, hasAccess]);\n const content = enableEntityPermissions ? <PermissionProvider>{children}</PermissionProvider> : children;\n return <setupAuthContext.Provider value={authStateWithLoading}>\n {content}\n </setupAuthContext.Provider>;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { ReactNode, createContext, useContext, useEffect, useMemo, useState, useCallback, useRef } from \"react\";\nimport { useDbQuery as useQuery } from \"../../useDbQuery\";\nimport { useDbUpsert as useUpsert } from \"../../hooks\";\nimport useSupabase, { Database } from \"../../useSupabase\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { setupAuthContext } from \"./AuthProvider\";\n\n// UserMetadata query constant\nconst UserMetadataQuery = {\n schema: \"core\",\n table: \"UserMetadata\",\n defaultQuery: \"key, userId, value\"\n} as const;\n\n// Type definitions for UserMetadata\nexport type UserMetadataRow = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Row\"];\nexport type UserMetadataInsert = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Insert\"];\nexport type UserMetadataUpdate = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Update\"];\n\n// Context interface\nexport interface UserMetadataContextType {\n metadata: Record<string, string>;\n isLoading: boolean;\n error: Error | null;\n setMetadata: (key: string, value: string) => Promise<void>;\n getMetadata: (key: string) => string | undefined;\n removeMetadata: (key: string) => Promise<void>;\n refreshMetadata: () => Promise<void>;\n}\n\n// Create context\nexport const userMetadataContext = createContext<UserMetadataContextType | null>(null);\n\n// Provider component\nexport function UserMetadataProvider({\n children\n}: {\n children: ReactNode;\n}) {\n const supabase = useSupabase();\n const [metadata, setMetadataState] = useState<Record<string, string>>({});\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n // Get current user ID from auth context\n const setupAuth = useContext(setupAuthContext);\n const userId = setupAuth?.user?.id;\n\n // Query to fetch all user metadata\n const metadataQuery = useQuery(supabase.schema(\"core\").from(\"UserMetadata\").select(UserMetadataQuery.defaultQuery).eq(\"userId\", userId!).order(\"key\"), {\n enabled: isUsable(userId),\n crossOrganization: true\n });\n\n // Upsert mutation for updating metadata\n const upsertMutation = useUpsert(\"UserMetadata\", {\n invalidateTables: [\"UserMetadata\"]\n });\n\n // Ref to hold mutation to avoid infinite loops in useCallback dependencies\n const upsertMutationRef = useRef(upsertMutation);\n upsertMutationRef.current = upsertMutation;\n\n // Update local state when query data changes\n useEffect(() => {\n if (metadataQuery.data) {\n const metadataMap: Record<string, string> = {};\n metadataQuery.data.forEach((item: any) => {\n metadataMap[item.key] = item.value;\n });\n setMetadataState(metadataMap);\n setIsLoading(false);\n setError(null);\n } else if (metadataQuery.error) {\n setError(metadataQuery.error);\n setIsLoading(false);\n } else if (metadataQuery.isLoading) {\n setIsLoading(true);\n }\n }, [metadataQuery.data, metadataQuery.error, metadataQuery.isLoading]);\n\n // Set metadata function\n const setMetadata = useCallback(async (key: string, value: string) => {\n if (!userId) {\n throw new Error(\"User not authenticated\");\n }\n try {\n await upsertMutationRef.current.mutateAsync({\n userId,\n key,\n value\n });\n\n // Update local state optimistically\n setMetadataState(prev => ({\n ...prev,\n [key]: value\n }));\n } catch (err) {\n setError(err as Error);\n throw err;\n }\n }, [userId]);\n\n // Get metadata function\n const getMetadata = useCallback((key_0: string): string | undefined => {\n return metadata[key_0];\n }, [metadata]);\n\n // Remove metadata function\n const removeMetadata = useCallback(async (key_1: string) => {\n if (!userId) {\n throw new Error(\"User not authenticated\");\n }\n try {\n await supabase.schema(\"core\").from(\"UserMetadata\").delete().eq(\"userId\", userId).eq(\"key\", key_1);\n\n // Update local state\n setMetadataState(prev_0 => {\n const newState = {\n ...prev_0\n };\n delete newState[key_1];\n return newState;\n });\n } catch (err_0) {\n setError(err_0 as Error);\n throw err_0;\n }\n }, [userId, supabase]);\n\n // Refresh metadata function\n const refreshMetadata = useCallback(async () => {\n await metadataQuery.refetch();\n }, [metadataQuery]);\n\n // Context value\n const contextValue = useMemo(() => ({\n metadata,\n isLoading,\n error,\n setMetadata,\n getMetadata,\n removeMetadata,\n refreshMetadata\n }), [metadata, isLoading, error, setMetadata, getMetadata, removeMetadata, refreshMetadata]);\n return <userMetadataContext.Provider value={contextValue}>\n {children}\n </userMetadataContext.Provider>;\n}\n\n// Hook to use the context\nexport function useUserMetadata() {\n const context = useContext(userMetadataContext);\n if (!context) {\n throw new Error(\"useUserMetadata must be used within a UserMetadataProvider\");\n }\n return context;\n}\n\n// Convenience hook for getting a specific metadata value\nexport function useUserMetadataValue(key) {\n const $ = _c(3);\n const {\n getMetadata\n } = useUserMetadata();\n let t0;\n if ($[0] !== getMetadata || $[1] !== key) {\n t0 = getMetadata(key);\n $[0] = getMetadata;\n $[1] = key;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return t0;\n}\n\n// Convenience hook for setting a specific metadata value\nexport function useSetUserMetadata() {\n const $ = _c(3);\n const {\n setMetadata,\n removeMetadata\n } = useUserMetadata();\n let t0;\n if ($[0] !== removeMetadata || $[1] !== setMetadata) {\n t0 = {\n setMetadata,\n removeMetadata\n };\n $[0] = removeMetadata;\n $[1] = setMetadata;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return t0;\n}\n\n// Advanced state-like hook with JSON serialization support\nexport function useUserMetadataState(key, defaultValue, options) {\n const $ = _c(11);\n const {\n metadata,\n setMetadata,\n isLoading\n } = useUserMetadata();\n const serialize = options?.serialize ?? _temp;\n const deserialize = options?.deserialize ?? _temp2;\n let t0;\n bb0: {\n const rawValue = metadata[key];\n if (!rawValue) {\n t0 = defaultValue;\n break bb0;\n }\n ;\n try {\n let t2;\n if ($[0] !== deserialize || $[1] !== rawValue) {\n t2 = deserialize(rawValue);\n $[0] = deserialize;\n $[1] = rawValue;\n $[2] = t2;\n } else {\n t2 = $[2];\n }\n t0 = t2;\n } catch (t1) {\n const error = t1;\n console.warn(`Failed to deserialize metadata for key \"${key}\":`, error);\n t0 = defaultValue;\n }\n }\n const currentValue = t0;\n let t1;\n if ($[3] !== key || $[4] !== serialize || $[5] !== setMetadata) {\n t1 = async value_1 => {\n const serializedValue = serialize(value_1);\n await setMetadata(key, serializedValue);\n };\n $[3] = key;\n $[4] = serialize;\n $[5] = setMetadata;\n $[6] = t1;\n } else {\n t1 = $[6];\n }\n const setValue = t1;\n let t2;\n if ($[7] !== currentValue || $[8] !== isLoading || $[9] !== setValue) {\n t2 = [currentValue, setValue, isLoading];\n $[7] = currentValue;\n $[8] = isLoading;\n $[9] = setValue;\n $[10] = t2;\n } else {\n t2 = $[10];\n }\n return t2;\n}\nfunction _temp2(value_0) {\n return JSON.parse(value_0);\n}\nfunction _temp(value) {\n return JSON.stringify(value);\n}"],"mappings":"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","names":["createContext","useMemo","useRef","jsx","createContext","useRef","useMemo","useCallback","useEffect","useMemo","useRef","useState","jsx","useState","useEffect","useCallback","useRef","useMemo","_c","createContext","useContext","useEffect","useMemo","useState","useCallback","useRef","jsx","createContext","useState","useContext","useRef","useEffect","useCallback","useMemo","_c","t2","t1"]}