@riverbankcms/sdk 0.3.0 → 0.4.1

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 (142) hide show
  1. package/README.md +255 -1
  2. package/dist/cli/index.js +249 -40
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/client/bookings.js +15 -1
  5. package/dist/client/bookings.js.map +1 -1
  6. package/dist/client/bookings.mjs +15 -1
  7. package/dist/client/bookings.mjs.map +1 -1
  8. package/dist/client/client.d.mts +2 -2
  9. package/dist/client/client.d.ts +2 -2
  10. package/dist/client/client.js +33 -5
  11. package/dist/client/client.js.map +1 -1
  12. package/dist/client/client.mjs +33 -5
  13. package/dist/client/client.mjs.map +1 -1
  14. package/dist/client/hooks.d.mts +2 -2
  15. package/dist/client/hooks.d.ts +2 -2
  16. package/dist/client/rendering/client.js +31 -33
  17. package/dist/client/rendering/client.js.map +1 -1
  18. package/dist/client/rendering/client.mjs +31 -33
  19. package/dist/client/rendering/client.mjs.map +1 -1
  20. package/dist/client/usePage-BcjWPXvh.d.mts +6388 -0
  21. package/dist/client/usePage-C3ZKNwY7.d.mts +6393 -0
  22. package/dist/client/usePage-CyYpOJud.d.ts +6388 -0
  23. package/dist/client/usePage-gpVaeWDy.d.ts +6393 -0
  24. package/dist/server/{Layout-CsAQ-0Fv.d.mts → Layout-B_zUr9ci.d.mts} +1 -1
  25. package/dist/server/{Layout-BM_KmCxO.d.ts → Layout-CHG77dhK.d.ts} +1 -1
  26. package/dist/server/blockKinds-B6MWzNWp.d.mts +16 -0
  27. package/dist/server/blockKinds-B6MWzNWp.d.ts +16 -0
  28. package/dist/server/{chunk-GWBMJPLH.mjs → chunk-A2FZMRDW.mjs} +3 -2
  29. package/dist/server/chunk-A2FZMRDW.mjs.map +1 -0
  30. package/dist/server/chunk-BOHTTHY5.mjs +406 -0
  31. package/dist/server/chunk-BOHTTHY5.mjs.map +1 -0
  32. package/dist/server/{chunk-5R4NMVXA.js → chunk-BUCJWG6G.js} +5 -5
  33. package/dist/server/chunk-BUCJWG6G.js.map +1 -0
  34. package/dist/server/chunk-D2QLTPUJ.mjs +33 -0
  35. package/dist/server/chunk-D2QLTPUJ.mjs.map +1 -0
  36. package/dist/server/chunk-GERCMTPQ.js +33 -0
  37. package/dist/server/chunk-GERCMTPQ.js.map +1 -0
  38. package/dist/server/{chunk-SF63XAX7.js → chunk-IT5ICP43.js} +24 -4
  39. package/dist/server/chunk-IT5ICP43.js.map +1 -0
  40. package/dist/server/{chunk-QFFQTOY3.mjs → chunk-N3PX76AP.mjs} +11 -3
  41. package/dist/server/{chunk-QFFQTOY3.mjs.map → chunk-N3PX76AP.mjs.map} +1 -1
  42. package/dist/server/{chunk-O5DC7MYW.mjs → chunk-NKXS4TBK.mjs} +24 -4
  43. package/dist/server/chunk-NKXS4TBK.mjs.map +1 -0
  44. package/dist/server/{chunk-INWKF3IC.js → chunk-P6CDRJN3.js} +8 -8
  45. package/dist/server/{chunk-INWKF3IC.js.map → chunk-P6CDRJN3.js.map} +1 -1
  46. package/dist/server/{chunk-UFVCBGBY.js → chunk-R5B6IOFQ.js} +11 -3
  47. package/dist/server/chunk-R5B6IOFQ.js.map +1 -0
  48. package/dist/server/{chunk-FK64TZBT.mjs → chunk-SFQ7VF3G.mjs} +2 -2
  49. package/dist/server/{chunk-62ZJI564.js → chunk-SWPHIUVE.js} +7 -6
  50. package/dist/server/chunk-SWPHIUVE.js.map +1 -0
  51. package/dist/server/{chunk-PN3CHDVX.mjs → chunk-XK2YIISA.mjs} +2 -2
  52. package/dist/server/chunk-XK2YIISA.mjs.map +1 -0
  53. package/dist/server/{chunk-YXDDFG3N.js → chunk-Y7347JMZ.js} +3 -2
  54. package/dist/server/chunk-Y7347JMZ.js.map +1 -0
  55. package/dist/server/{chunk-JTAERCX2.mjs → chunk-ZEAJW6T3.mjs} +5 -4
  56. package/dist/server/chunk-ZEAJW6T3.mjs.map +1 -0
  57. package/dist/server/chunk-ZIM53VP6.js +406 -0
  58. package/dist/server/chunk-ZIM53VP6.js.map +1 -0
  59. package/dist/server/{components-CI3JiOYA.d.mts → components-Bo3LPpVb.d.mts} +3 -3
  60. package/dist/server/{components-DJBLu_yc.d.ts → components-ClFs4PUa.d.ts} +3 -3
  61. package/dist/server/components.d.mts +7 -6
  62. package/dist/server/components.d.ts +7 -6
  63. package/dist/server/components.js +3 -3
  64. package/dist/server/components.mjs +2 -2
  65. package/dist/server/config-validation.d.mts +5 -300
  66. package/dist/server/config-validation.d.ts +5 -300
  67. package/dist/server/config-validation.js +6 -3
  68. package/dist/server/config-validation.js.map +1 -1
  69. package/dist/server/config-validation.mjs +5 -2
  70. package/dist/server/config.d.mts +43 -4
  71. package/dist/server/config.d.ts +43 -4
  72. package/dist/server/config.js +27 -3
  73. package/dist/server/config.js.map +1 -1
  74. package/dist/server/config.mjs +26 -2
  75. package/dist/server/config.mjs.map +1 -1
  76. package/dist/server/data.d.mts +8 -5
  77. package/dist/server/data.d.ts +8 -5
  78. package/dist/server/data.js +2 -2
  79. package/dist/server/data.mjs +1 -1
  80. package/dist/server/{index-Dus2gkY6.d.ts → index-DbSfrRA0.d.ts} +1 -1
  81. package/dist/server/{index-DoX3ELQn.d.mts → index-Dj7VKH34.d.mts} +1 -1
  82. package/dist/server/index.d.mts +5 -4
  83. package/dist/server/index.d.ts +5 -4
  84. package/dist/server/index.js +6 -2
  85. package/dist/server/index.js.map +1 -1
  86. package/dist/server/index.mjs +5 -1
  87. package/dist/server/{loadContent-CdXDGsJM.d.ts → loadContent-C2SwqmXy.d.ts} +4 -4
  88. package/dist/server/{loadContent-v2n6pOlO.d.mts → loadContent-C_FipaAC.d.mts} +4 -4
  89. package/dist/server/loadPage-DUHBXDEW.js +11 -0
  90. package/dist/server/{loadPage-3ECPF426.js.map → loadPage-DUHBXDEW.js.map} +1 -1
  91. package/dist/server/{loadPage-LW273NYO.mjs → loadPage-LYVKY3WZ.mjs} +3 -3
  92. package/dist/server/{loadPage-en10WQrt.d.mts → loadPage-mavT3Jae.d.mts} +22 -3
  93. package/dist/server/{loadPage-bejlajm9.d.ts → loadPage-naVvoua8.d.ts} +22 -3
  94. package/dist/server/metadata.d.mts +5 -4
  95. package/dist/server/metadata.d.ts +5 -4
  96. package/dist/server/navigation.d.mts +2 -2
  97. package/dist/server/navigation.d.ts +2 -2
  98. package/dist/server/rendering/server.d.mts +8 -7
  99. package/dist/server/rendering/server.d.ts +8 -7
  100. package/dist/server/rendering/server.js +4 -4
  101. package/dist/server/rendering/server.mjs +3 -3
  102. package/dist/server/rendering.d.mts +9 -8
  103. package/dist/server/rendering.d.ts +9 -8
  104. package/dist/server/rendering.js +6 -6
  105. package/dist/server/rendering.mjs +5 -5
  106. package/dist/server/routing.d.mts +5 -4
  107. package/dist/server/routing.d.ts +5 -4
  108. package/dist/server/routing.js +1 -1
  109. package/dist/server/routing.mjs +1 -1
  110. package/dist/server/server.d.mts +7 -6
  111. package/dist/server/server.d.ts +7 -6
  112. package/dist/server/server.js +4 -4
  113. package/dist/server/server.mjs +3 -3
  114. package/dist/server/theme-bridge.js +7 -7
  115. package/dist/server/theme-bridge.mjs +1 -1
  116. package/dist/server/{types-Cc7lyPkN.d.ts → types-5XdVD2J1.d.ts} +2 -0
  117. package/dist/server/{types-nVerjjdv.d.mts → types-BA-J9K8r.d.mts} +2 -0
  118. package/dist/server/{types-CLusapsM.d.mts → types-BC9eB2KH.d.mts} +65 -17
  119. package/dist/server/{types-Ls6BkLKg.d.ts → types-CAnC529E.d.ts} +65 -17
  120. package/dist/server/{types-D-rqOU5I.d.ts → types-CMqVHYLG.d.ts} +264 -2
  121. package/dist/server/{types-Bq3520hK.d.mts → types-CYfHxUhe.d.mts} +264 -2
  122. package/dist/server/{types-_nDnPHpv.d.mts → types-CbagRQ_7.d.mts} +19 -1
  123. package/dist/server/{types-_nDnPHpv.d.ts → types-DuQCNVV0.d.ts} +19 -1
  124. package/dist/server/validation-C7W2Fe0i.d.ts +459 -0
  125. package/dist/server/validation-hg1sqhrt.d.mts +459 -0
  126. package/package.json +2 -1
  127. package/dist/server/chunk-5R4NMVXA.js.map +0 -1
  128. package/dist/server/chunk-62ZJI564.js.map +0 -1
  129. package/dist/server/chunk-BPKYRPCQ.mjs +0 -215
  130. package/dist/server/chunk-BPKYRPCQ.mjs.map +0 -1
  131. package/dist/server/chunk-GWBMJPLH.mjs.map +0 -1
  132. package/dist/server/chunk-JTAERCX2.mjs.map +0 -1
  133. package/dist/server/chunk-O5DC7MYW.mjs.map +0 -1
  134. package/dist/server/chunk-PN3CHDVX.mjs.map +0 -1
  135. package/dist/server/chunk-SF63XAX7.js.map +0 -1
  136. package/dist/server/chunk-UFVCBGBY.js.map +0 -1
  137. package/dist/server/chunk-XLVL5WPH.js +0 -215
  138. package/dist/server/chunk-XLVL5WPH.js.map +0 -1
  139. package/dist/server/chunk-YXDDFG3N.js.map +0 -1
  140. package/dist/server/loadPage-3ECPF426.js +0 -11
  141. /package/dist/server/{chunk-FK64TZBT.mjs.map → chunk-SFQ7VF3G.mjs.map} +0 -0
  142. /package/dist/server/{loadPage-LW273NYO.mjs.map → loadPage-LYVKY3WZ.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-UFVCBGBY.js","../../../api/src/endpoints.ts","../../../api/src/url.ts","../../../api/src/request.ts","../../../api/src/aiPlayground.ts","../../src/client/cache.ts","../../src/client/index.ts"],"names":["buildEndpointURL"],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACA;ACFA,IAAM,qBAAA,EAAuB;AAAA;AAAA,EAE3B,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,yBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA;AAAA,IACZ,IAAA,EAAM,CAAC,cAAc,CAAA;AAAA,IACrB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,mBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,uCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,6BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,IAAA,EAAM,wCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,2BAAA,EAA6B;AAAA,IAC3B,IAAA,EAAM,0CAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,+BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,8BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,KAAA;AAAA;AAAA,IACZ,IAAA,EAAM,CAAC,UAAU,CAAA;AAAA,IACjB,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,oCAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,mBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,mBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,0BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,CAAC,eAAA,EAAiB,UAAU,CAAA;AAAA,IAClC,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,0BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,CAAC,eAAA,EAAiB,UAAU,CAAA;AAAA,IAClC,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,kCAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,CAAC,eAAA,EAAiB,UAAU,CAAA;AAAA,IAClC,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,kCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,CAAC,eAAA,EAAiB,UAAA,EAAY,aAAa,CAAA;AAAA,IACjD,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,6CAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,CAAC,eAAA,EAAiB,UAAA,EAAY,aAAa,CAAA;AAAA,IACjD,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,IAAA,EAAM,sCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,CAAC,eAAA,EAAiB,UAAA,EAAY,aAAa,CAAA;AAAA,IACjD,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,mCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,mCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,oCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,IAAA,EAAM,oCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,iDAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,IAAA,EAAM,iDAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,IAAA,EAAM,iDAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,IAAA,EAAM,mCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,mCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,+CAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,+CAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,+CAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,+BAAA,EAAiC;AAAA,IAC/B,IAAA,EAAM,6CAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gCAAA,EAAkC;AAAA,IAChC,IAAA,EAAM,8CAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAGA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,0DAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,0DAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,yDAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,yDAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAGA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,8DAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,8DAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,uEAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,2DAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,2DAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,wEAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,6CAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,uCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAGA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA;AAAA,IACZ,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA;AAAA,IACZ,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,IACb,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA;AAAA,IACZ,IAAA,EAAM,CAAC,MAAA,EAAQ,aAAa,CAAA;AAAA,IAC5B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA;AAAA,IACZ,IAAA,EAAM,CAAC,MAAA,EAAQ,sBAAsB,CAAA;AAAA,IACrC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,MAAM,CAAA;AAAA,IACtB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,IACb,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,IACb,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,IACb,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAA,EAAQ,eAAe,CAAA;AAAA,IAC9B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,yBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,uBAAuB,CAAA;AAAA,IAC/C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,yBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,uBAAuB,CAAA;AAAA,IAC/C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,oCAAA;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,uBAAA,EAAyB,wBAAwB,CAAA;AAAA,IACzE,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,oBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,qBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,qBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,IACb,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,gCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,cAAc,CAAA;AAAA,IACtC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,kCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,cAAc,CAAA;AAAA,IACtC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,gCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,cAAc,CAAA;AAAA,IACtC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,gCAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,cAAc,CAAA;AAAA,IACtC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,4BAAA,EAA8B;AAAA,IAC5B,IAAA,EAAM,qCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,cAAc,CAAA;AAAA,IACtC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,oCAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,uBAAA,EAAyB,wBAAwB,CAAA;AAAA,IACzE,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,oDAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,uBAAA,EAAyB,4BAA4B,CAAA;AAAA,IAC7E,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,uBAAuB,CAAA;AAAA,IAC/C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,gCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,yBAAyB,CAAA;AAAA,IACjD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,+CAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,kCAAkC,CAAA;AAAA,IAC1D,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,0BAAA,EAA4B;AAAA,IAC1B,IAAA,EAAM,gEAAA;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,kCAAA,EAAoC,kCAAkC,CAAA;AAAA,IAC9F,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,IAAA,EAAM,sDAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,kCAAkC,CAAA;AAAA,IAC1D,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kCAAA,EAAoC;AAAA,IAClC,IAAA,EAAM,yEAAA;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,kCAAA,EAAoC,kCAAkC,CAAA;AAAA,IAC9F,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,sDAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,kCAAkC,CAAA;AAAA,IAC1D,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,gEAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,kCAAA,EAAoC,kCAAkC,CAAA;AAAA,IAC9F,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,8DAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,kCAAkC,CAAA;AAAA,IAC1D,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,aAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,YAAY,CAAA;AAAA,IACnB,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,gCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,yBAAyB,CAAA;AAAA,IACjD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,0CAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,yBAAA,EAA2B,yBAAyB,CAAA;AAAA,IAC5E,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,0CAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,yBAAA,EAA2B,yBAAyB,CAAA;AAAA,IAC5E,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,IAAA,EAAM,kDAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,yBAAA,EAA2B,yBAAyB,CAAA;AAAA,IAC5E,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,2CAAA;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,iBAAiB,CAAA;AAAA,IACzC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,kDAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,yBAAA,EAA2B,yBAAyB,CAAA;AAAA,IAC5E,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,kDAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,yBAAA,EAA2B,yBAAyB,CAAA;AAAA,IAC5E,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,oDAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,yBAAA,EAA2B,yBAAyB,CAAA;AAAA,IAC5E,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,+BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,eAAe,CAAA;AAAA,IACvC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,eAAA,EAAiB,oBAAoB,CAAA;AAAA,IAC7D,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,2CAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,eAAA,EAAiB,oBAAoB,CAAA;AAAA,IAC7D,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,0CAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,yBAAA,EAA2B,yBAAyB,CAAA;AAAA,IAC5E,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,IAAA,EAAM,kCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,wBAAwB,CAAA;AAAA,IAChD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,iCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,wBAAwB,CAAA;AAAA,IAChD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,iCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,wBAAwB,CAAA;AAAA,IAChD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,sCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,wBAAwB,CAAA;AAAA,IAChD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,IAAA,EAAM,sCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,wBAAwB,CAAA;AAAA,IAChD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,mCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,eAAe,CAAA;AAAA,IACvC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,IAChB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,IAChB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,mBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,IAChB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,4BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,SAAA,EAAW,mBAAmB,CAAA;AAAA,IACrC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,IAAA,EAAM,4BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,eAAe,CAAA;AAAA,IAC/B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,eAAe,CAAA;AAAA,IAC/B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,qBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,OAAO,CAAA;AAAA,IACvB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,qBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,OAAO,CAAA;AAAA,IACvB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,qBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,SAAS,CAAA;AAAA,IACzB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,sBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,IAChB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,KAAK,CAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,KAAK,CAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,yBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,KAAK,CAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,8BAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,KAAK,CAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,wBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,KAAK,CAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,+BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,KAAK,CAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,wBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,KAAK,CAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,KAAK,CAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,wBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,KAAK,CAAA;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,0BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,IAChB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,0BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,IAChB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,gBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,SAAS,CAAA;AAAA,IACzB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,gBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,SAAS,CAAA;AAAA,IACzB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,SAAS,CAAA;AAAA,IACzB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,OAAO,CAAA;AAAA,IACvB,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,IAAA,EAAM,wBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACjC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,wBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACjC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,mCAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACjC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,qBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAA,EAAQ,QAAQ,CAAA;AAAA,IACvB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,kBAAkB,CAAA;AAAA,IACzB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,kCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,YAAY,CAAA;AAAA,IACpC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,kCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,YAAY,CAAA;AAAA,IACpC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,2CAAA;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,YAAA,EAAc,0BAA0B,CAAA;AAAA,IAChE,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,2CAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,YAAA,EAAc,0BAA0B,CAAA;AAAA,IAChE,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,iDAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,YAAA,EAAc,0BAA0B,CAAA;AAAA,IAChE,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,0DAAA;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,YAAA,EAAc,0BAAA,EAA4B,0BAA0B,CAAA;AAAA,IAC5F,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,0DAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,YAAA,EAAc,0BAAA,EAA4B,0BAA0B,CAAA;AAAA,IAC5F,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,yDAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,YAAA,EAAc,0BAA0B,CAAA;AAAA,IAChE,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,kCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,2BAA2B,CAAA;AAAA,IACnD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,gDAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,gCAAgC,CAAA;AAAA,IACvC,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,yCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,yBAAyB,CAAA;AAAA,IAChC,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,IAAA,EAAM,uCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,2BAA2B,CAAA;AAAA,IAClC,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,mBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,UAAA,EAAY,MAAM,CAAA;AAAA,IACzB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA;AAAA,IACZ,IAAA,EAAM,CAAC,OAAA,EAAS,UAAU,CAAA;AAAA,IAC1B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,2BAAA,EAA6B;AAAA,IAC3B,IAAA,EAAM,iCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,aAAa,CAAA;AAAA,IAC7B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,4BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,OAAO,CAAA;AAAA,IAC/B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,aAAa,CAAA;AAAA,IAC7B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,IACb,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,kBAAkB,CAAA;AAAA,IACzB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,kCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,oBAAoB,CAAA;AAAA,IAC5C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,8BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,uBAAuB,CAAA;AAAA,IAC/C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,oBAAoB,CAAA;AAAA,IAC5C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,6BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,sBAAsB,CAAA;AAAA,IAC9C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,sCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,+BAA+B,CAAA;AAAA,IACvD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,kBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACjC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,kBAAA;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACjC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,kBAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACjC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,oBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,6BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACjC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,cAAc,CAAA;AAAA,IAC9B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,IACvB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,IACvB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,cAAc,CAAA;AAAA,IACrB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACjC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,oBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,IAAA,EAAM,aAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,IAAA,EAAM,qBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,IACd,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,8BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAA,EAAQ,SAAS,CAAA;AAAA,IACxB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,iBAAA,EAAmB,SAAS,CAAA;AAAA,IAC5C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,iBAAA,EAAmB,SAAS,CAAA;AAAA,IAC5C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,uCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,eAAA,EAAiB,QAAQ,CAAA;AAAA,IACjD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,+CAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,eAAA,EAAiB,QAAQ,CAAA;AAAA,IACjD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,iDAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,eAAA,EAAiB,QAAQ,CAAA;AAAA,IACjD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,uCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,eAAA,EAAiB,QAAQ,CAAA;AAAA,IACjD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,iBAAA,EAAmB,SAAS,CAAA;AAAA,IACnC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,mBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA;AAAA,IACZ,IAAA,EAAM,CAAC,WAAW,CAAA;AAAA,IAClB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,gCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,GAAA;AAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,eAAe,CAAA;AAAA,IACvC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,2BAA2B,CAAA;AAAA,IACnD,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,IACtB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,OAAO,CAAA;AAAA,IAC/B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,gCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,OAAO,CAAA;AAAA,IAC/B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EAEA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,OAAO,CAAA;AAAA,IAC/B,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,8BAAA;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,OAAA,EAAS,aAAa,CAAA;AAAA,IAC9C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,8BAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,OAAA,EAAS,aAAa,CAAA;AAAA,IAC9C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,0CAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,aAAA,EAAe,yBAAyB,CAAA;AAAA,IAChE,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,eAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,cAAc,CAAA;AAAA,IACrB,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,wBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,IACtB,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,2BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,IACtB,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,8BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,IAAA,EAAM,+BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,wBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,+BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,wBAAwB,CAAA;AAAA,IAC/B,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,wCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,wBAAA,EAA0B,oBAAoB,CAAA;AAAA,IACrD,IAAA,EAAM,QAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,+BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,wBAAwB,CAAA;AAAA,IAChD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,8CAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA,IACZ,IAAA,EAAM,CAAC,eAAA,EAAiB,uBAAuB,CAAA;AAAA,IAC/C,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,+BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,wBAAwB,CAAA;AAAA,IAChD,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,8CAAA;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,uBAAA,EAAyB,wBAAwB,CAAA;AAAA,IACzE,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM,8CAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,uBAAA,EAAyB,wBAAwB,CAAA;AAAA,IACzE,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,wDAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,uBAAA,EAAyB,wBAAwB,CAAA;AAAA,IACzE,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,OAAO,CAAA;AAAA,IACvB,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,oCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,YAAY,CAAA;AAAA,IACpC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,sBAAA,EAAwB;AAAA,IACtB,IAAA,EAAM,2CAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,gBAAgB,CAAA;AAAA,IACxC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,IAAA,EAAM,wCAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,gBAAgB,CAAA;AAAA,IACxC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,gBAAgB,CAAA;AAAA,IACxC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,gBAAA,EAAkB;AAAA,IAChB,IAAA,EAAM,+BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,eAAA,EAAiB,QAAQ,CAAA;AAAA,IAChC,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,aAAA,EAAe;AAAA,IACb,IAAA,EAAM,iBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,IACf,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,6BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,MAAA,EAAQ,QAAQ,CAAA;AAAA,IACvB,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA;AAAA,EAEA,qBAAA,EAAuB;AAAA,IACrB,IAAA,EAAM,+BAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,SAAA,EAAW,gBAAgB,CAAA;AAAA,IAC3C,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,+BAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,SAAA,EAAW,gBAAgB,CAAA;AAAA,IAC3C,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB,CAAA;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,IAAA,EAAM,+BAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAM,CAAC,OAAA,EAAS,SAAA,EAAW,gBAAgB,CAAA;AAAA,IAC3C,IAAA,EAAM,OAAA;AAAA,IACN,YAAA,EAAc;AAAA,EAChB;AACF,CAAA;AAEO,IAAM,cAAA,EAAgB,oBAAA;AA+BtB,SAAS,gBAAA,CAAiB,OAAA,EAAiB,QAAA,EAAsC;AACtF,EAAA,OAAO,QAAA,EAAU,aAAA,CAAc,QAAQ,CAAA,CAAE,IAAA;AAC3C;ADpBA;AACA;AErhDO,SAAS,YAAA,CAAA,EAAuB;AAGrC,EAAA,GAAA,CAAI,OAAO,OAAA,IAAW,WAAA,EAAa;AACjC,IAAA,OAAO,MAAA;AAAA,EACT;AAGA,EAAA,MAAM,YAAA,EAAc,OAAA,CAAQ,GAAA,CAAI,WAAA;AAChC,EAAA,GAAA,CAAI,WAAA,EAAa;AACf,IAAA,OAAO,WAAA,CAAY,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,EACtC;AAGA,EAAA,MAAM,aAAA,EAAe,OAAA,CAAQ,GAAA,CAAI,yBAAA;AACjC,EAAA,GAAA,CAAI,YAAA,EAAc;AAChB,IAAA,MAAM,KAAA,EAAO,YAAA,CAAa,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAC3C,IAAA,OAAO,CAAA,EAAA;AACT,EAAA;AAGM,EAAA;AACF,EAAA;AACK,IAAA;AACT,EAAA;AAEU,EAAA;AACR,IAAA;AAEF,EAAA;AACF;AAMgB;AACP,EAAA;AACT;AFwgDY;AACA;AGhlDR;AAEO;AACL,EAAA;AACI,IAAA;AACN,IAAA;AACM,EAAA;AAEN,IAAA;AACF,EAAA;AACF;AAkBa;AASX,EAAA;AACQ,IAAA;AACD,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACP,EAAA;AACF;AAGSA;AACA,EAAA;AACT;AAKS;AAEH,EAAA;AAEC,EAAA;AAEC,IAAA;AACA,IAAA;AACF,MAAA;AACE,QAAA;AACD,MAAA;AACH,IAAA;AAEI,IAAA;AACF,MAAA;AACM,IAAA;AAER,IAAA;AACD,EAAA;AACH;AAEA;AACQ,EAAA;AACA,EAAA;AACF,EAAA;AACE,IAAA;AACF,MAAA;AACM,IAAA;AAER,IAAA;AACF,EAAA;AAEI,EAAA;AACI,IAAA;AACC,IAAA;AACD,EAAA;AACC,IAAA;AACT,EAAA;AACF;AAEA;AAKQ,EAAA;AACA,EAAA;AACA,EAAA;AAEE,EAAA;AACD,IAAA;AACC,MAAA;AACF,QAAA;AACF,MAAA;AAEM,MAAA;AACD,MAAA;AACH,QAAA;AACF,MAAA;AAEI,MAAA;AACF,QAAA;AACF,MAAA;AACE,QAAA;AACE,UAAA;AACA,UAAA;AACE,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACK,IAAA;AACH,MAAA;AACF,IAAA;AACK,IAAA;AACG,MAAA;AACD,MAAA;AACH,QAAA;AACE,UAAA;AACA,UAAA;AACE,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACA,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACM,MAAA;AACN,MAAA;AACF,IAAA;AACK,IAAA;AACH,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACF,IAAA;AACF,EAAA;AACF;AAYS;AAC+B,EAAA;AACpC,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACyC,EAAA;AACnC,IAAA;AACF,IAAA;AACE,IAAA;AAGA,IAAA;AACF,IAAA;AACF,MAAA;AACE,QAAA;AACI,QAAA;AAEF,UAAA;AACF,QAAA;AAEE,UAAA;AACF,QAAA;AACD,MAAA;AACH,IAAA;AAEM,IAAA;AACA,IAAA;AACA,IAAA;AAGF,IAAA;AACI,MAAA;AAGN,MAAA;AACM,QAAA;AACF,UAAA;AACF,QAAA;AACD,MAAA;AAGG,MAAA;AACF,QAAA;AACE,UAAA;AACE,YAAA;AACF,UAAA;AACD,QAAA;AACH,MAAA;AAEM,MAAA;AACF,MAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AAEM,IAAA;AAGA,IAAA;AAEJ,IAAA;AAIA,MAAA;AACF,IAAA;AACI,IAAA;AAEF,MAAA;AACM,QAAA;AACA,QAAA;AACF,UAAA;AACE,YAAA;AACD,UAAA;AACH,QAAA;AACA,QAAA;AACD,MAAA;AACH,IAAA;AAEM,IAAA;AACJ,MAAA;AACG,MAAA;AAAA;AAEG,MAAA;AACN,MAAA;AACK,QAAA;AACA,QAAA;AAAA;AAEC,QAAA;AACN,MAAA;AAAA;AAEM,MAAA;AACR,IAAA;AAGM,IAAA;AAGD,IAAA;AACG,MAAA;AACN,MAAA;AACM,QAAA;AACF,UAAA;AACF,QAAA;AACA,QAAA;AACD,MAAA;AACH,IAAA;AAEO,IAAA;AACT,EAAA;AACF;AAES;AACA,EAAA;AACC,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AAED,IAAA;AACG,MAAA;AACA,MAAA;AACA,MAAA;AACJ,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AAEO,IAAA;AACT,EAAA;AACF;AAEgB;AACP,EAAA;AACT;AAmBgB;AACR,EAAA;AACJ,IAAA;AACF,EAAA;AACO,EAAA;AACT;AHs+CY;AACA;AIr0DH;AAOI;AAA4C;AAE9C,EAAA;AACD,IAAA;AACE,IAAA;AACD,IAAA;AACR,EAAA;AACQ,EAAA;AACD,IAAA;AACE,IAAA;AACT,EAAA;AACQ,EAAA;AACD,IAAA;AACE,IAAA;AACD,IAAA;AACR,EAAA;AACQ,EAAA;AACD,IAAA;AACE,IAAA;AACA,IAAA;AACT,EAAA;AACQ,EAAA;AACD,IAAA;AACE,IAAA;AACA,IAAA;AACT,EAAA;AAAA;AAEQ,EAAA;AACD,IAAA;AACN,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACD,EAAA;AACQ,EAAA;AACD,IAAA;AACN,IAAA;AACA,IAAA;AACD,EAAA;AACQ,EAAA;AACD,IAAA;AACN,IAAA;AACA,IAAA;AACA,IAAA;AACD,EAAA;AACF;AAEY;AACF,EAAA;AACT,EAAA;AACA,EAAA;AACO,EAAA;AACP,EAAA;AACA,EAAA;AACD;AAEY;AACF,EAAA;AACT,EAAA;AACD;AAEY;AACF,EAAA;AACV;AAEY;AACF,EAAA;AACT,EAAA;AACA,EAAA;AACS,IAAA;AACC,IAAA;AACR,IAAA;AACD,EAAA;AACF;AAGY;AACD,EAAA;AACD,EAAA;AAAoB;AAC7B,EAAA;AACA,EAAA;AACO,EAAA;AACP,EAAA;AACA,EAAA;AACD;AAEY;AACF,EAAA;AACT,EAAA;AACA,EAAA;AACA,EAAA;AACD;AJ2zDW;AACA;AK35DC;AAKX,EAAA;AAJQ,IAAA;AAKD,IAAA;AACA,IAAA;AACP,EAAA;AAEgC,EAAA;AACxB,IAAA;AACD,IAAA;AAGD,IAAA;AACG,MAAA;AACL,MAAA;AACF,IAAA;AAEO,IAAA;AACT,EAAA;AAEiB,EAAA;AAEX,IAAA;AACI,MAAA;AACF,MAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AAEK,IAAA;AACH,MAAA;AACA,MAAA;AACD,IAAA;AACH,EAAA;AAEc,EAAA;AACP,IAAA;AACP,EAAA;AAE0B,EAAA;AACjB,IAAA;AACT,EAAA;AACF;ALi5DY;AACA;AM36DI;AACT,EAAA;AACG,IAAA;AACJ,MAAA;AAEF,IAAA;AACF,EAAA;AAGK,EAAA;AACG,IAAA;AACJ,MAAA;AAEF,IAAA;AACF,EAAA;AAEM,EAAA;AACA,EAAA;AACA,EAAA;AAGA,EAAA;AAGA,EAAA;AACJ,IAAA;AACK,IAAA;AACN,EAAA;AAKD,EAAA;AAMM,IAAA;AACI,MAAA;AACF,MAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AAGM,IAAA;AAGF,IAAA;AACI,MAAA;AACR,IAAA;AAEO,IAAA;AACT,EAAA;AAEO,EAAA;AACC,IAAA;AACE,MAAA;AAED,MAAA;AACH,QAAA;AACE,UAAA;AAEF,QAAA;AACF,MAAA;AAEM,MAAA;AAEN,MAAA;AAEE,QAAA;AACI,QAAA;AACA,QAAA;AACA,QAAA;AACJ,QAAA;AACD,MAAA;AACH,IAAA;AAEM,IAAA;AACE,MAAA;AACA,MAAA;AAEN,MAAA;AACE,QAAA;AACD,MAAA;AACH,IAAA;AAEM,IAAA;AACE,MAAA;AAGA,MAAA;AACA,MAAA;AAEN,MAAA;AAEE,QAAA;AACE,UAAA;AACA,UAAA;AACF,QAAA;AAGI,QAAA;AACF,UAAA;AACF,QAAA;AAII,QAAA;AACF,UAAA;AACF,QAAA;AACE,UAAA;AACF,QAAA;AACE,UAAA;AACF,QAAA;AAII,QAAA;AACF,UAAA;AACF,QAAA;AAGI,QAAA;AACF,UAAA;AACA,UAAA;AACF,QAAA;AAEA,QAAA;AACD,MAAA;AACH,IAAA;AAEM,IAAA;AACE,MAAA;AACA,MAAA;AAEN,MAAA;AACE,QAAA;AACD,MAAA;AACH,IAAA;AAEM,IAAA;AACE,MAAA;AACD,MAAA;AACH,QAAA;AACF,MAAA;AACM,MAAA;AACN,MAAA;AACE,QAAA;AACD,MAAA;AACH,IAAA;AAEM,IAAA;AACE,MAAA;AACD,MAAA;AACH,QAAA;AACF,MAAA;AACM,MAAA;AACN,MAAA;AACE,QAAA;AACI,QAAA;AACJ,QAAA;AACD,MAAA;AACH,IAAA;AAEM,IAAA;AACE,MAAA;AACD,MAAA;AACH,QAAA;AACF,MAAA;AACM,MAAA;AACN,MAAA;AACE,QAAA;AACI,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACJ,QAAA;AACD,MAAA;AACH,IAAA;AAEA,IAAA;AACQ,MAAA;AACR,IAAA;AACF,EAAA;AACF;ANw3DY;AACA;AACA;AACA;AACA;AACA","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-UFVCBGBY.js","sourcesContent":[null,"import type { APIEndpoints } from \"./types\";\n\nconst ENDPOINT_DEFINITIONS = {\n // AI endpoints - no cache due to dynamic nature\n aiContentUpdateChat: {\n path: \"/ai/content-update-chat\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'stream',\n },\n aiChat: {\n path: \"/ai/chat\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'stream',\n },\n applySeoChanges: {\n path: \"/seo/apply\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n aiCreateBriefChat: {\n path: \"/ai/chat/create-brief\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n aiPrototypeChat: {\n path: \"/ai/chat/create-prototype\",\n method: \"POST\",\n revalidate: 30, // Short cache for AI responses to avoid duplicate calls\n tags: [\"ai-prototype\"],\n auth: 'user',\n responseKind: 'json',\n },\n aiPatchDryRun: {\n path: \"/ai/patch/dry-run\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n aiPatchApply: {\n path: \"/ai/patch/apply\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n aiPlaygroundPropose: {\n path: \"/sites/{siteId}/ai/playground/propose\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n // Admin SEO\n listGscPropertiesAdmin: {\n path: \"/admin/seo/gsc/properties\",\n method: \"GET\",\n auth: 'admin',\n responseKind: 'json',\n },\n adminSetGscPersist: {\n path: \"/admin/seo/gsc/meta/persist\",\n method: \"POST\",\n auth: 'admin',\n responseKind: 'json',\n },\n adminStartGscVerification: {\n path: \"/admin/seo/gsc/properties/verify/start\",\n method: \"POST\",\n auth: 'admin',\n responseKind: 'json',\n },\n adminConfirmGscVerification: {\n path: \"/admin/seo/gsc/properties/verify/confirm\",\n method: \"POST\",\n auth: 'admin',\n responseKind: 'json',\n },\n adminRunGscIngest: {\n path: \"/admin/seo/ingest/run\",\n method: \"POST\",\n auth: 'admin',\n responseKind: 'json',\n },\n getSeoVerificationMeta: {\n path: \"/public/seo/verification/meta\",\n method: \"GET\",\n auth: 'public',\n responseKind: 'json',\n },\n checkRedirect: {\n path: \"/api/public/content/redirect\",\n method: \"GET\",\n revalidate: 86400, // 24 hours - redirects rarely change\n tags: ['redirect'],\n auth: 'public',\n responseKind: 'json',\n },\n listRedirectRules: {\n path: \"/sites/{siteId}/redirects\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n createRedirectRule: {\n path: \"/sites/{siteId}/redirects\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n deleteRedirectRule: {\n path: \"/sites/{siteId}/redirects/{ruleId}\",\n method: \"DELETE\",\n auth: 'user',\n responseKind: 'json',\n },\n // API Keys (Account-level - DEPRECATED, use site-scoped endpoints)\n listApiKeys: {\n path: \"/account/api-keys\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n createApiKey: {\n path: \"/account/api-keys\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n revokeApiKey: {\n path: \"/account/api-keys/{keyId}\",\n method: \"DELETE\",\n auth: 'user',\n responseKind: 'json',\n },\n // API Keys (Site-scoped - preferred)\n listSiteApiKeys: {\n path: \"/sites/{siteId}/api-keys\",\n method: \"GET\",\n auth: 'user',\n tags: ['site-{siteId}', 'api-keys'],\n responseKind: 'json',\n },\n createSiteApiKey: {\n path: \"/sites/{siteId}/api-keys\",\n method: \"POST\",\n auth: 'user',\n tags: ['site-{siteId}', 'api-keys'],\n responseKind: 'json',\n },\n revokeSiteApiKey: {\n path: \"/sites/{siteId}/api-keys/{keyId}\",\n method: \"DELETE\",\n auth: 'user',\n tags: ['site-{siteId}', 'api-keys'],\n responseKind: 'json',\n },\n getSitePreviewKey: {\n path: \"/sites/{siteId}/api-keys/preview\",\n method: \"GET\",\n auth: 'user',\n tags: ['site-{siteId}', 'api-keys', 'preview-key'],\n responseKind: 'json',\n },\n regenerateSitePreviewKey: {\n path: \"/sites/{siteId}/api-keys/preview/regenerate\",\n method: \"POST\",\n auth: 'user',\n tags: ['site-{siteId}', 'api-keys', 'preview-key'],\n responseKind: 'json',\n },\n getSiteApiKeyAccessLogs: {\n path: \"/sites/{siteId}/api-keys/access-logs\",\n method: \"GET\",\n auth: 'user',\n tags: ['site-{siteId}', 'api-keys', 'access-logs'],\n responseKind: 'json',\n },\n getBookingSettings: {\n path: \"/sites/{siteId}/bookings/settings\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n updateBookingSettings: {\n path: \"/sites/{siteId}/bookings/settings\",\n method: \"PUT\",\n auth: 'user',\n responseKind: 'json',\n },\n listAppointmentResources: {\n path: \"/sites/{siteId}/bookings/resources\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n createAppointmentResource: {\n path: \"/sites/{siteId}/bookings/resources\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n getAppointmentResource: {\n path: \"/sites/{siteId}/bookings/resources/{resourceId}\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n updateAppointmentResource: {\n path: \"/sites/{siteId}/bookings/resources/{resourceId}\",\n method: \"PUT\",\n auth: 'user',\n responseKind: 'json',\n },\n deleteAppointmentResource: {\n path: \"/sites/{siteId}/bookings/resources/{resourceId}\",\n method: \"DELETE\",\n auth: 'user',\n responseKind: 'json',\n },\n listAppointmentServices: {\n path: \"/sites/{siteId}/bookings/services\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n createAppointmentService: {\n path: \"/sites/{siteId}/bookings/services\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n getAppointmentService: {\n path: \"/sites/{siteId}/bookings/services/{serviceId}\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n updateAppointmentService: {\n path: \"/sites/{siteId}/bookings/services/{serviceId}\",\n method: \"PUT\",\n auth: 'user',\n responseKind: 'json',\n },\n deleteAppointmentService: {\n path: \"/sites/{siteId}/bookings/services/{serviceId}\",\n method: \"DELETE\",\n auth: 'user',\n responseKind: 'json',\n },\n getAppointmentServicesReference: {\n path: \"/sites/{siteId}/bookings/services/reference\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n getAppointmentResourcesReference: {\n path: \"/sites/{siteId}/bookings/resources/reference\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n\n // Service-Resource linking\n getResourceServices: {\n path: \"/sites/{siteId}/bookings/resources/{resourceId}/services\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n updateResourceServices: {\n path: \"/sites/{siteId}/bookings/resources/{resourceId}/services\",\n method: \"PUT\",\n auth: 'user',\n responseKind: 'json',\n },\n getServiceResources: {\n path: \"/sites/{siteId}/bookings/services/{serviceId}/resources\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n updateServiceResources: {\n path: \"/sites/{siteId}/bookings/services/{serviceId}/resources\",\n method: \"PUT\",\n auth: 'user',\n responseKind: 'json',\n },\n\n // Availability management\n listAvailabilityRules: {\n path: \"/sites/{siteId}/bookings/resources/{resourceId}/availability\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n upsertAvailabilityRule: {\n path: \"/sites/{siteId}/bookings/resources/{resourceId}/availability\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n deleteAvailabilityRule: {\n path: \"/sites/{siteId}/bookings/resources/{resourceId}/availability/{ruleId}\",\n method: \"DELETE\",\n auth: 'user',\n responseKind: 'json',\n },\n listBlackouts: {\n path: \"/sites/{siteId}/bookings/resources/{resourceId}/blackouts\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n createBlackout: {\n path: \"/sites/{siteId}/bookings/resources/{resourceId}/blackouts\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n deleteBlackout: {\n path: \"/sites/{siteId}/bookings/resources/{resourceId}/blackouts/{blackoutId}\",\n method: \"DELETE\",\n auth: 'user',\n responseKind: 'json',\n },\n getAvailableSlots: {\n path: \"/sites/{siteId}/bookings/availability/slots\",\n method: \"GET\",\n auth: 'user',\n responseKind: 'json',\n },\n createAppointment: {\n path: \"/sites/{siteId}/bookings/appointments\",\n method: \"POST\",\n auth: 'user',\n responseKind: 'json',\n },\n\n // Data retrieval endpoints - good candidates for caching\n getBrief: {\n path: \"/briefs\",\n method: \"GET\",\n revalidate: 120, // 2 minutes\n tags: [\"brief\"],\n auth: 'user',\n responseKind: 'json',\n },\n // Unified site data endpoint - use this for all site lookups\n getSite: {\n path: \"/sites\",\n method: \"GET\",\n revalidate: 900, // 15 minutes - site data changes less frequently\n tags: [\"site\"],\n auth: 'user',\n responseKind: 'json',\n },\n // DEPRECATED: Use getSite with ?slug={slug} instead\n getSiteBySlug: {\n path: \"/sites/by-slug/{slug}\",\n method: \"GET\",\n revalidate: 900, // 15 minutes - site data changes less frequently\n tags: [\"site\", \"site-{slug}\"],\n auth: 'user',\n responseKind: 'json',\n },\n // DEPRECATED: Use getSite with ?domain={domain} instead\n getSiteByDomain: {\n path: \"/sites/by-domain/{domain}\",\n method: \"GET\",\n revalidate: 900, // 15 minutes - site data changes less frequently\n tags: [\"site\", \"site-domain-{domain}\"],\n auth: 'user',\n responseKind: 'json',\n },\n createBriefTurn: {\n path: \"/brief-turns\",\n method: \"POST\",\n tags: [\"brief\"], // Tags for invalidation after mutation\n auth: 'user',\n responseKind: 'json',\n },\n upsertBrief: {\n path: \"/briefs\",\n method: \"PUT\",\n tags: [\"brief\"],\n auth: 'user',\n responseKind: 'json',\n },\n aiBriefToSpec: {\n path: \"/ai/actions/brief-to-spec\",\n method: \"POST\",\n tags: [\"brief\", \"spec\"],\n auth: 'user',\n responseKind: 'json',\n },\n createSite: {\n path: \"/sites\",\n method: \"POST\",\n tags: [\"site\"],\n auth: 'user',\n responseKind: 'json',\n },\n createSiteManual: {\n path: \"/sites/manual\",\n method: \"POST\",\n tags: [\"site\"],\n auth: 'user',\n responseKind: 'json',\n },\n updateSite: {\n path: '/sites',\n method: 'PUT',\n tags: [\"site\"],\n auth: 'user',\n responseKind: 'json',\n },\n deleteSite: {\n path: '/sites/{siteId}',\n method: 'DELETE',\n tags: ['site', 'site-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n listSiteMembers: {\n path: '/sites/{siteId}/members',\n method: 'GET',\n tags: ['site-{siteId}', 'site-members-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n inviteSiteMember: {\n path: '/sites/{siteId}/members',\n method: 'POST',\n tags: ['site-{siteId}', 'site-members-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n updateSiteMemberRole: {\n path: '/sites/{siteId}/members/{memberId}',\n method: 'PATCH',\n tags: ['site-{siteId}', 'site-members-{siteId}', 'site-member-{memberId}'],\n auth: 'user',\n responseKind: 'json',\n },\n authLogin: {\n path: '/auth/login/submit',\n method: 'POST',\n tags: ['auth'],\n auth: 'public',\n responseKind: 'json',\n },\n authForgotPassword: {\n path: '/auth/forgot/submit',\n method: 'POST',\n tags: ['auth'],\n auth: 'public',\n responseKind: 'json',\n },\n authRegister: {\n path: '/auth/register/submit',\n method: 'POST',\n tags: ['auth'],\n auth: 'public',\n responseKind: 'json',\n },\n authReauthenticate: {\n path: '/auth/reauth/submit',\n method: 'POST',\n tags: ['auth'],\n auth: 'public',\n responseKind: 'json',\n },\n lookupSiteDomains: {\n path: '/sites/{siteId}/domains/lookup',\n method: 'POST',\n tags: ['site-{siteId}', 'site-domains'],\n auth: 'user',\n responseKind: 'json',\n },\n registerSiteDomain: {\n path: '/sites/{siteId}/domains/register',\n method: 'POST',\n tags: ['site-{siteId}', 'site-domains'],\n auth: 'user',\n responseKind: 'json',\n },\n addCustomDomain: {\n path: '/sites/{siteId}/domains/custom',\n method: 'POST',\n tags: ['site-{siteId}', 'site-domains'],\n auth: 'user',\n responseKind: 'json',\n },\n removeCustomDomain: {\n path: '/sites/{siteId}/domains/custom',\n method: 'DELETE',\n tags: ['site-{siteId}', 'site-domains'],\n auth: 'user',\n responseKind: 'json',\n },\n syncCustomDomainToEdgeConfig: {\n path: '/sites/{siteId}/domains/custom/sync',\n method: 'POST',\n tags: ['site-{siteId}', 'site-domains'],\n auth: 'user',\n responseKind: 'json',\n },\n removeSiteMember: {\n path: '/sites/{siteId}/members/{memberId}',\n method: 'DELETE',\n tags: ['site-{siteId}', 'site-members-{siteId}', 'site-member-{memberId}'],\n auth: 'user',\n responseKind: 'json',\n },\n revokeSiteInvitation: {\n path: '/sites/{siteId}/members/invitations/{invitationId}',\n method: 'DELETE',\n tags: ['site-{siteId}', 'site-members-{siteId}', 'site-invite-{invitationId}'],\n auth: 'user',\n responseKind: 'json',\n },\n transferSiteOwnership: {\n path: '/sites/{siteId}/members/transfer-ownership',\n method: 'POST',\n tags: ['site-{siteId}', 'site-members-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n listContentEntries: {\n path: '/sites/{siteId}/content/{type}',\n method: 'GET',\n revalidate: 60,\n tags: ['site-{siteId}', 'content-{siteId}-{type}'],\n auth: 'user',\n responseKind: 'json',\n },\n getContentTemplate: {\n path: '/sites/{siteId}/content/types/{type}/template',\n method: 'GET',\n revalidate: 60,\n tags: ['site-{siteId}', 'content-template-{siteId}-{type}'],\n auth: 'user',\n responseKind: 'json',\n },\n updateContentTemplateBlock: {\n path: '/sites/{siteId}/content/types/{type}/template/blocks/{blockId}',\n method: 'PATCH',\n tags: ['site-{siteId}', 'content-template-{siteId}-{type}', 'content-template-block-{blockId}'],\n auth: 'user',\n responseKind: 'json',\n },\n applyContentTemplateAddon: {\n path: '/sites/{siteId}/content/types/{type}/template/addons',\n method: 'POST',\n tags: ['site-{siteId}', 'content-template-{siteId}-{type}'],\n auth: 'user',\n responseKind: 'json',\n },\n updateContentTemplateBlockBindings: {\n path: '/sites/{siteId}/content/types/{type}/template/blocks/{blockId}/bindings',\n method: 'PATCH',\n tags: ['site-{siteId}', 'content-template-{siteId}-{type}', 'content-template-block-{blockId}'],\n auth: 'user',\n responseKind: 'json',\n },\n createTemplateBlock: {\n path: '/sites/{siteId}/content/types/{type}/template/blocks',\n method: 'POST',\n tags: ['site-{siteId}', 'content-template-{siteId}-{type}'],\n auth: 'user',\n responseKind: 'json',\n },\n deleteTemplateBlock: {\n path: '/sites/{siteId}/content/types/{type}/template/blocks/{blockId}',\n method: 'DELETE',\n tags: ['site-{siteId}', 'content-template-{siteId}-{type}', 'content-template-block-{blockId}'],\n auth: 'user',\n responseKind: 'json',\n },\n reorderTemplateBlocks: {\n path: '/sites/{siteId}/content/types/{type}/template/blocks/reorder',\n method: 'POST',\n tags: ['site-{siteId}', 'content-template-{siteId}-{type}'],\n auth: 'user',\n responseKind: 'json',\n },\n getTransforms: {\n path: '/transforms',\n method: 'GET',\n revalidate: 3600,\n tags: ['transforms'],\n auth: 'public',\n responseKind: 'json',\n },\n createContentEntry: {\n path: '/sites/{siteId}/content/{type}',\n method: 'POST',\n tags: ['site-{siteId}', 'content-{siteId}-{type}'],\n auth: 'user',\n responseKind: 'json',\n },\n getContentEntry: {\n path: '/sites/{siteId}/content/{type}/{entryId}',\n method: 'GET',\n tags: ['site-{siteId}', 'content-{siteId}-{type}', 'content-entry-{entryId}'],\n auth: 'user',\n responseKind: 'json',\n },\n updateContentEntry: {\n path: '/sites/{siteId}/content/{type}/{entryId}',\n method: 'PUT',\n tags: ['site-{siteId}', 'content-{siteId}-{type}', 'content-entry-{entryId}'],\n auth: 'user',\n responseKind: 'json',\n },\n updateContentEntryContent: {\n path: '/sites/{siteId}/content/{type}/{entryId}/content',\n method: 'PUT',\n tags: ['site-{siteId}', 'content-{siteId}-{type}', 'content-entry-{entryId}'],\n auth: 'user',\n responseKind: 'json',\n },\n updateRouteMetadata: {\n path: '/sites/{siteId}/routes/{routeId}/metadata',\n method: 'PATCH',\n tags: ['site-{siteId}', 'route-{routeId}'],\n auth: 'user',\n responseKind: 'json',\n },\n publishContentEntry: {\n path: '/sites/{siteId}/content/{type}/{entryId}/publish',\n method: 'POST',\n tags: ['site-{siteId}', 'content-{siteId}-{type}', 'content-entry-{entryId}'],\n auth: 'user',\n responseKind: 'json',\n },\n discardContentEntry: {\n path: '/sites/{siteId}/content/{type}/{entryId}/discard',\n method: 'POST',\n tags: ['site-{siteId}', 'content-{siteId}-{type}', 'content-entry-{entryId}'],\n auth: 'user',\n responseKind: 'json',\n },\n unpublishContentEntry: {\n path: '/sites/{siteId}/content/{type}/{entryId}/unpublish',\n method: 'POST',\n tags: ['site-{siteId}', 'content-{siteId}-{type}', 'content-entry-{entryId}'],\n auth: 'user',\n responseKind: 'json',\n },\n // Content types: enable + setup\n listContentTypes: {\n path: '/sites/{siteId}/content-types',\n method: 'GET',\n revalidate: 120, // 2 minutes\n tags: ['site-{siteId}', 'content-types'],\n auth: 'user',\n responseKind: 'json',\n },\n enableContentType: {\n path: '/sites/{siteId}/content-types/{key}/enable',\n method: 'POST',\n tags: ['site-{siteId}', 'content-types', 'content-type-{key}'],\n auth: 'user',\n responseKind: 'json',\n },\n setupContentType: {\n path: '/sites/{siteId}/content-types/{key}/setup',\n method: 'POST',\n tags: ['site-{siteId}', 'content-types', 'content-type-{key}'],\n auth: 'user',\n responseKind: 'json',\n },\n deleteContentEntry: {\n path: '/sites/{siteId}/content/{type}/{entryId}',\n method: 'DELETE',\n tags: ['site-{siteId}', 'content-{siteId}-{type}', 'content-entry-{entryId}'],\n auth: 'user',\n responseKind: 'json',\n },\n updateSiteGeneralSettings: {\n path: '/sites/{siteId}/settings/general',\n method: 'POST',\n tags: ['site-{siteId}', 'site-settings-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n getSiteLayoutSettings: {\n path: '/sites/{siteId}/settings/layout',\n method: 'GET',\n revalidate: 120,\n tags: ['site-{siteId}', 'site-settings-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n updateSiteLayoutSettings: {\n path: '/sites/{siteId}/settings/layout',\n method: 'POST',\n tags: ['site-{siteId}', 'site-settings-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n getMaintenanceSettings: {\n path: '/sites/{siteId}/settings/maintenance',\n method: 'GET',\n revalidate: 120,\n tags: ['site-{siteId}', 'site-settings-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n updateMaintenanceSettings: {\n path: '/sites/{siteId}/settings/maintenance',\n method: 'POST',\n tags: ['site-{siteId}', 'site-settings-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n setHomepage: {\n path: '/sites/{siteId}/settings/homepage',\n method: 'POST',\n tags: ['site-{siteId}', 'site-homepage'],\n auth: 'user',\n responseKind: 'json',\n },\n listAccountDomains: {\n path: '/domains',\n method: 'GET',\n tags: ['domains'],\n auth: 'user',\n responseKind: 'json',\n },\n searchDomains: {\n path: '/domains/search',\n method: 'POST',\n tags: ['domains'],\n auth: 'user',\n responseKind: 'json',\n },\n registerDomain: {\n path: '/domains/register',\n method: 'POST',\n tags: ['domains'],\n auth: 'user',\n responseKind: 'json',\n },\n assignDomain: {\n path: '/domains/{domainId}/assign',\n method: 'POST',\n tags: ['domains', 'domain-{domainId}'],\n auth: 'user',\n responseKind: 'json',\n },\n adminStartImpersonation: {\n path: '/admin/impersonation/start',\n method: 'POST',\n tags: ['admin', 'impersonation'],\n auth: 'user',\n responseKind: 'json',\n },\n adminStopImpersonation: {\n path: '/admin/impersonation/stop',\n method: 'POST',\n tags: ['admin', 'impersonation'],\n auth: 'user',\n responseKind: 'json',\n },\n adminAssignRole: {\n path: '/admin/roles/assign',\n method: 'POST',\n tags: ['admin', 'roles'],\n auth: 'user',\n responseKind: 'json',\n },\n adminRevokeRole: {\n path: '/admin/roles/revoke',\n method: 'POST',\n tags: ['admin', 'roles'],\n auth: 'user',\n responseKind: 'json',\n },\n adminChangePlan: {\n path: '/admin/billing/plan',\n method: 'POST',\n tags: ['admin', 'billing'],\n auth: 'user',\n responseKind: 'json',\n },\n changePlan: {\n path: '/billing/plan/change',\n method: 'POST',\n tags: ['billing'],\n auth: 'user',\n responseKind: 'json',\n },\n mfaTotpEnroll: {\n path: '/auth/mfa/totp/enroll',\n method: 'POST',\n tags: ['mfa'],\n auth: 'user',\n responseKind: 'json',\n },\n mfaTotpVerify: {\n path: '/auth/mfa/totp/verify',\n method: 'POST',\n tags: ['mfa'],\n auth: 'user',\n responseKind: 'json',\n },\n mfaTotpActivate: {\n path: '/auth/mfa/totp/activate',\n method: 'POST',\n tags: ['mfa'],\n auth: 'user',\n responseKind: 'json',\n },\n mfaDeleteFactor: {\n path: '/auth/mfa/factors/{factorId}',\n method: 'DELETE',\n tags: ['mfa'],\n auth: 'user',\n responseKind: 'json',\n },\n mfaBackupCodesGet: {\n path: '/auth/mfa/backup-codes',\n method: 'GET',\n tags: ['mfa'],\n auth: 'user',\n responseKind: 'json',\n },\n mfaBackupCodesRotate: {\n path: '/auth/mfa/backup-codes/rotate',\n method: 'POST',\n tags: ['mfa'],\n auth: 'user',\n responseKind: 'json',\n },\n mfaPhoneEnroll: {\n path: '/auth/mfa/phone/enroll',\n method: 'POST',\n tags: ['mfa'],\n auth: 'user',\n responseKind: 'json',\n },\n mfaPhoneChallenge: {\n path: '/auth/mfa/phone/challenge',\n method: 'POST',\n tags: ['mfa'],\n auth: 'user',\n responseKind: 'json',\n },\n mfaPhoneVerify: {\n path: '/auth/mfa/phone/verify',\n method: 'POST',\n tags: ['mfa'],\n auth: 'user',\n responseKind: 'json',\n },\n accountUpdatePassword: {\n path: '/account/password/update',\n method: 'POST',\n tags: ['account'],\n auth: 'user',\n responseKind: 'json',\n },\n accountRevokeSessions: {\n path: '/account/sessions/revoke',\n method: 'POST',\n tags: ['account'],\n auth: 'user',\n responseKind: 'json',\n },\n adminListInvites: {\n path: '/admin/invites',\n method: 'GET',\n tags: ['admin', 'invites'],\n auth: 'user',\n responseKind: 'json',\n },\n adminCreateInvite: {\n path: '/admin/invites',\n method: 'POST',\n tags: ['admin', 'invites'],\n auth: 'user',\n responseKind: 'json',\n },\n adminRevokeInvite: {\n path: '/admin/invites/{inviteId}',\n method: 'DELETE',\n tags: ['admin', 'invites'],\n auth: 'user',\n responseKind: 'json',\n },\n adminCreateUser: {\n path: '/admin/users',\n method: 'POST',\n tags: ['admin', 'users'],\n auth: 'admin',\n responseKind: 'json',\n },\n adminListAllowedDomains: {\n path: '/admin/allowed-domains',\n method: 'GET',\n tags: ['admin', 'allowed-domains'],\n auth: 'user',\n responseKind: 'json',\n },\n adminAddAllowedDomain: {\n path: '/admin/allowed-domains',\n method: 'POST',\n tags: ['admin', 'allowed-domains'],\n auth: 'user',\n responseKind: 'json',\n },\n adminDeleteAllowedDomain: {\n path: '/admin/allowed-domains/{domainId}',\n method: 'DELETE',\n tags: ['admin', 'allowed-domains'],\n auth: 'user',\n responseKind: 'json',\n },\n authAcceptInvite: {\n path: '/auth/invite/accept',\n method: 'POST',\n tags: ['auth', 'invite'],\n auth: 'user',\n responseKind: 'json',\n },\n acceptSiteInvitation: {\n path: '/sites/invitations/accept',\n method: 'POST',\n tags: ['site-invitations'],\n auth: 'user',\n responseKind: 'json',\n },\n getNavigationMenus: {\n path: '/sites/{siteId}/navigation/menus',\n method: 'GET',\n tags: ['site-{siteId}', 'navigation'],\n auth: 'user',\n responseKind: 'json',\n },\n createNavigationMenu: {\n path: '/sites/{siteId}/navigation/menus',\n method: 'POST',\n tags: ['site-{siteId}', 'navigation'],\n auth: 'user',\n responseKind: 'json',\n },\n updateNavigationMenu: {\n path: '/sites/{siteId}/navigation/menus/{menuId}',\n method: 'PATCH',\n tags: ['site-{siteId}', 'navigation', 'navigation-menu-{menuId}'],\n auth: 'user',\n responseKind: 'json',\n },\n deleteNavigationMenu: {\n path: '/sites/{siteId}/navigation/menus/{menuId}',\n method: 'DELETE',\n tags: ['site-{siteId}', 'navigation', 'navigation-menu-{menuId}'],\n auth: 'user',\n responseKind: 'json',\n },\n createNavigationItem: {\n path: '/sites/{siteId}/navigation/menus/{menuId}/items',\n method: 'POST',\n tags: ['site-{siteId}', 'navigation', 'navigation-menu-{menuId}'],\n auth: 'user',\n responseKind: 'json',\n },\n updateNavigationItem: {\n path: '/sites/{siteId}/navigation/menus/{menuId}/items/{itemId}',\n method: 'PATCH',\n tags: ['site-{siteId}', 'navigation', 'navigation-menu-{menuId}', 'navigation-item-{itemId}'],\n auth: 'user',\n responseKind: 'json',\n },\n deleteNavigationItem: {\n path: '/sites/{siteId}/navigation/menus/{menuId}/items/{itemId}',\n method: 'DELETE',\n tags: ['site-{siteId}', 'navigation', 'navigation-menu-{menuId}', 'navigation-item-{itemId}'],\n auth: 'user',\n responseKind: 'json',\n },\n reorderNavigationItems: {\n path: '/sites/{siteId}/navigation/menus/{menuId}/items/reorder',\n method: 'POST',\n tags: ['site-{siteId}', 'navigation', 'navigation-menu-{menuId}'],\n auth: 'user',\n responseKind: 'json',\n },\n getRoutableContent: {\n path: '/sites/{siteId}/routable-content',\n method: 'GET',\n revalidate: 60,\n tags: ['site-{siteId}', 'routable-content-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n // Generic public content preview (preferred)\n getPublishedEntryPreview: {\n path: '/public/content/{siteId}/{type}/{slug}/preview',\n method: 'GET',\n revalidate: 60,\n tags: ['content-{siteId}-{type}-{slug}'],\n auth: 'public',\n responseKind: 'json',\n },\n listPublishedEntries: {\n path: '/public/content/{siteId}/{type}/entries',\n method: 'GET',\n revalidate: 60,\n tags: ['content-{siteId}-{type}'],\n auth: 'public',\n responseKind: 'json',\n },\n getPublishedPostPreview: {\n path: '/public/posts/{siteId}/{slug}/preview',\n method: 'GET',\n revalidate: 60,\n tags: ['blog-post:{siteId}:{slug}'],\n auth: 'public',\n responseKind: 'json',\n },\n proposalsSelect: {\n path: '/proposals/select',\n method: 'POST',\n tags: [\"proposal\", \"site\"],\n auth: 'user',\n responseKind: 'json',\n },\n createTheme: {\n path: '/ai/chat/create-theme',\n method: 'POST',\n revalidate: 60, // 1 minute cache for theme creation to avoid duplicate requests\n tags: [\"theme\", \"ai-theme\"],\n auth: 'user',\n responseKind: 'json',\n },\n generateThemes: {\n path: '/theme/generate',\n method: 'POST',\n tags: [\"theme\"],\n auth: 'user',\n responseKind: 'json',\n },\n extractThemeFromInspiration: {\n path: '/theme/extract-from-inspiration',\n method: 'POST',\n tags: [\"theme\", \"preferences\"],\n auth: 'user',\n responseKind: 'json',\n },\n saveSiteTheme: {\n path: '/sites/{siteId}/theme/save',\n method: 'POST',\n tags: ['site-{siteId}', 'theme'],\n auth: 'user',\n responseKind: 'json',\n },\n uploadSiteLogo: {\n path: '/storage/upload-site-logo',\n method: 'POST',\n tags: [\"site\", \"logo\"],\n auth: 'user',\n responseKind: 'json',\n },\n upsertThemePreferences: {\n path: '/theme-preferences/upsert',\n method: 'POST',\n tags: [\"theme\", \"preferences\"],\n auth: 'user',\n responseKind: 'json',\n },\n finalizeSite: {\n path: '/sites/finalize',\n method: 'POST',\n tags: [\"site\"],\n auth: 'user',\n responseKind: 'json',\n },\n instagramUploadZip: {\n path: '/api/instagram/upload-zip',\n method: 'POST',\n tags: ['instagram-import'],\n auth: 'user',\n responseKind: 'json',\n },\n getAnalyticsReport: {\n path: '/sites/{siteId}/analytics/report',\n method: 'GET',\n revalidate: 300,\n tags: ['site-{siteId}', 'analytics-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n getSeoOverview: {\n path: '/sites/{siteId}/seo/overview',\n method: 'GET',\n revalidate: 300,\n tags: ['site-{siteId}', 'seo-overview-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n getSeoPages: {\n path: '/sites/{siteId}/seo/pages',\n method: 'GET',\n revalidate: 300,\n tags: ['site-{siteId}', 'seo-pages-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n getSeoQueries: {\n path: '/sites/{siteId}/seo/queries',\n method: 'GET',\n revalidate: 300,\n tags: ['site-{siteId}', 'seo-queries-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n getPerformanceOverview: {\n path: '/sites/{siteId}/performance/overview',\n method: 'GET',\n revalidate: 300,\n tags: ['site-{siteId}', 'performance-overview-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n createMediaAsset: {\n path: '/media',\n method: 'POST',\n tags: ['media'],\n auth: 'user',\n responseKind: 'json',\n },\n mediaList: {\n path: '/media',\n method: 'GET',\n tags: ['media'],\n auth: 'user',\n responseKind: 'json',\n },\n mediaGet: {\n path: '/media/{assetId}',\n method: 'GET',\n tags: ['media', 'media-{assetId}'],\n auth: 'user',\n responseKind: 'json',\n },\n mediaUpdate: {\n path: '/media/{assetId}',\n method: 'PATCH',\n tags: ['media', 'media-{assetId}'],\n auth: 'user',\n responseKind: 'json',\n },\n mediaDelete: {\n path: '/media/{assetId}',\n method: 'DELETE',\n tags: ['media', 'media-{assetId}'],\n auth: 'user',\n responseKind: 'void',\n },\n mediaBulkDelete: {\n path: '/media/bulk-delete',\n method: 'POST',\n tags: ['media'],\n auth: 'user',\n responseKind: 'json',\n },\n mediaGetSignedUrl: {\n path: '/media/{assetId}/signed-url',\n method: 'GET',\n tags: ['media', 'media-{assetId}'],\n auth: 'user',\n responseKind: 'json',\n },\n mediaUpload: {\n path: '/media/upload',\n method: 'POST',\n tags: ['media'],\n auth: 'user',\n responseKind: 'json',\n },\n getMediaLabels: {\n path: '/media/labels',\n method: 'GET',\n tags: ['media', 'media-labels'],\n auth: 'user',\n responseKind: 'json',\n },\n getMediaSettings: {\n path: '/media/settings',\n method: 'GET',\n tags: ['media-settings'],\n auth: 'user',\n responseKind: 'json',\n },\n updateMediaSettings: {\n path: '/media/settings',\n method: 'POST',\n tags: ['media-settings'],\n auth: 'user',\n responseKind: 'json',\n },\n // Media endpoints\n mediaSearch: {\n path: '/media/search',\n method: 'POST',\n tags: ['media-search'],\n auth: 'user',\n responseKind: 'json',\n },\n classifyMediaAsset: {\n path: '/media/{assetId}/classify',\n method: 'POST',\n tags: ['media', 'media-{assetId}'],\n auth: 'user',\n responseKind: 'json',\n },\n classifyMediaBatch: {\n path: '/media/classify',\n method: 'POST',\n tags: ['media'],\n auth: 'user',\n responseKind: 'json',\n },\n mediaJobsStatus: {\n path: '/media/jobs/status',\n method: 'GET',\n tags: ['media'],\n auth: 'user',\n responseKind: 'json',\n },\n enqueueMediaClassifyJob: {\n path: '/media/jobs',\n method: 'POST',\n tags: ['media'],\n auth: 'user',\n responseKind: 'json',\n },\n runMediaClassifyJob: {\n path: '/media/jobs/run',\n method: 'POST',\n tags: ['media'],\n auth: 'user',\n responseKind: 'json',\n },\n runAllMediaClassifyJobs: {\n path: '/media/jobs/run-all',\n method: 'POST',\n tags: ['media'],\n auth: 'user',\n responseKind: 'json',\n },\n initSiteContent: {\n path: '/sites/{siteId}/content/init',\n method: 'POST',\n tags: [\"site\", \"content\"],\n auth: 'user',\n responseKind: 'json',\n },\n updateBlockContent: {\n path: '/blocks/{blockId}/content',\n method: 'POST',\n tags: ['block', 'block-{blockId}', 'content'],\n auth: 'user',\n responseKind: 'json',\n },\n saveBlockContent: {\n path: '/blocks/{blockId}/content',\n method: 'POST',\n tags: ['block', 'block-{blockId}', 'content'],\n auth: 'user',\n responseKind: 'json',\n },\n createBlock: {\n path: '/sites/{siteId}/pages/{pageId}/blocks',\n method: 'POST',\n tags: ['site-{siteId}', 'page-{pageId}', 'blocks'],\n auth: 'user',\n responseKind: 'json',\n },\n reorderBlocks: {\n path: '/sites/{siteId}/pages/{pageId}/blocks/reorder',\n method: 'POST',\n tags: ['site-{siteId}', 'page-{pageId}', 'blocks'],\n auth: 'user',\n responseKind: 'json',\n },\n deleteBlock: {\n path: '/sites/{siteId}/pages/{pageId}/blocks/{blockId}',\n method: 'DELETE',\n tags: ['site-{siteId}', 'page-{pageId}', 'blocks'],\n auth: 'user',\n responseKind: 'json',\n },\n listBlocks: {\n path: '/sites/{siteId}/pages/{pageId}/blocks',\n method: 'GET',\n tags: ['site-{siteId}', 'page-{pageId}', 'blocks'],\n auth: 'user',\n responseKind: 'json',\n },\n getBlockContent: {\n path: '/blocks/{blockId}/content',\n method: 'GET',\n tags: ['block-{blockId}', 'content'],\n auth: 'user',\n responseKind: 'json',\n },\n // DEPRECATED: Use getSite with ?id={id} instead\n getSiteById: {\n path: '/sites/by-id/{id}',\n method: 'GET',\n revalidate: 900, // 15 minutes\n tags: ['site-{id}'],\n auth: 'user',\n responseKind: 'json',\n },\n // Page data endpoints\n getPageById: {\n path: '/sites/{siteId}/pages/{pageId}',\n method: 'GET',\n revalidate: 900, // 15 minutes\n tags: ['site-{siteId}', 'page-{pageId}'],\n auth: 'user',\n responseKind: 'json',\n },\n getContentByPath: {\n path: '/sites/{siteId}/pages',\n method: 'GET',\n tags: ['site-{siteId}', 'routable-content-{siteId}'],\n auth: 'public',\n responseKind: 'json',\n },\n getPageByPath: {\n path: '/sites/{siteId}/pages',\n method: 'GET',\n tags: ['site-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n // Forms CRUD\n listForms: {\n path: '/sites/{siteId}/forms',\n method: 'GET',\n tags: ['site-{siteId}', 'forms'],\n auth: 'user',\n responseKind: 'json',\n },\n listBookingForms: {\n path: '/sites/{siteId}/bookings/forms',\n method: 'GET',\n tags: ['site-{siteId}', 'forms'],\n auth: 'user',\n responseKind: 'json',\n },\n \n createForm: {\n path: '/sites/{siteId}/forms',\n method: 'POST',\n tags: ['site-{siteId}', 'forms'],\n auth: 'user',\n responseKind: 'json',\n },\n updateForm: {\n path: '/sites/{siteId}/forms/{slug}',\n method: 'PATCH',\n tags: ['site-{siteId}', 'forms', 'form-{slug}'],\n auth: 'user',\n responseKind: 'json',\n },\n deleteForm: {\n path: '/sites/{siteId}/forms/{slug}',\n method: 'DELETE',\n tags: ['site-{siteId}', 'forms', 'form-{slug}'],\n auth: 'user',\n responseKind: 'json',\n },\n listFormSubmissions: {\n path: '/sites/{siteId}/forms/{slug}/submissions',\n method: 'GET',\n revalidate: 30,\n tags: ['site-{siteId}', 'form-{slug}', 'form-submissions-{slug}'],\n auth: 'user',\n responseKind: 'json',\n },\n // Public submit\n submitForm: {\n path: '/forms/submit',\n method: 'POST',\n tags: ['forms-submit'],\n auth: 'public',\n responseKind: 'json',\n },\n // Public forms\n getPublicFormById: {\n path: '/public/forms/{formId}',\n method: 'GET',\n revalidate: 60,\n tags: ['form-{formId}'],\n auth: 'public',\n responseKind: 'json',\n },\n // Public booking services\n getPublicBookingServices: {\n path: '/public/bookings/services',\n method: 'GET',\n revalidate: 60,\n tags: ['site-{siteId}'],\n auth: 'public',\n responseKind: 'json',\n },\n devToolsImpersonateAdmin: {\n path: '/dev-tools/impersonate/admin',\n method: 'POST',\n auth: 'admin',\n responseKind: 'json',\n },\n devToolsImpersonateRandom: {\n path: '/dev-tools/impersonate/random',\n method: 'POST',\n auth: 'admin',\n responseKind: 'json',\n },\n devToolsSeedDemoData: {\n path: '/dev-tools/seed',\n method: 'POST',\n auth: 'admin',\n responseKind: 'json',\n },\n // Public analytics collection endpoint\n analyticsCollect: {\n path: '/api/analytics/collect',\n method: 'POST',\n auth: 'public',\n responseKind: 'json',\n },\n // Public events for event calendar block\n listPublicEvents: {\n path: '/public/sites/{siteId}/events',\n method: 'GET',\n revalidate: 60,\n tags: ['public-events-{siteId}'],\n auth: 'public',\n responseKind: 'json',\n },\n // Public event registration\n registerForEvent: {\n path: '/public/sites/{siteId}/events/register',\n method: 'POST',\n tags: ['public-events-{siteId}', 'event-registration'],\n auth: 'public',\n responseKind: 'json',\n },\n // Content Types CRUD\n listSiteContentTypes: {\n path: '/sites/{siteId}/content-types',\n method: 'GET',\n revalidate: 60,\n tags: ['site-{siteId}', 'content-types-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n getContentType: {\n path: '/sites/{siteId}/content-types/by-id/{typeId}',\n method: 'GET',\n revalidate: 60,\n tags: ['site-{siteId}', 'content-type-{typeId}'],\n auth: 'user',\n responseKind: 'json',\n },\n createContentType: {\n path: '/sites/{siteId}/content-types',\n method: 'POST',\n tags: ['site-{siteId}', 'content-types-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n updateContentType: {\n path: '/sites/{siteId}/content-types/by-id/{typeId}',\n method: 'PATCH',\n tags: ['site-{siteId}', 'content-type-{typeId}', 'content-types-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n deleteContentType: {\n path: '/sites/{siteId}/content-types/by-id/{typeId}',\n method: 'DELETE',\n tags: ['site-{siteId}', 'content-type-{typeId}', 'content-types-{sideId}'],\n auth: 'user',\n responseKind: 'json',\n },\n duplicateContentType: {\n path: '/sites/{siteId}/content-types/by-id/{typeId}/duplicate',\n method: 'POST',\n tags: ['site-{siteId}', 'content-type-{typeId}', 'content-types-{siteId}'],\n auth: 'user',\n responseKind: 'json',\n },\n // Admin site creation\n adminCreateSite: {\n path: '/admin/sites',\n method: 'POST',\n tags: ['admin', 'sites'],\n auth: 'admin',\n responseKind: 'json',\n },\n // SDK Config\n refreshSdkConfig: {\n path: '/sites/{siteId}/refresh-sdk-config',\n method: 'POST',\n tags: ['site-{siteId}', 'sdk-config'],\n auth: 'user',\n responseKind: 'json',\n },\n // Stripe Connect - Site billing\n stripeConnectAuthorize: {\n path: '/sites/{siteId}/billing/connect/authorize',\n method: 'POST',\n tags: ['site-{siteId}', 'stripe-connect'],\n auth: 'user',\n responseKind: 'json',\n },\n stripeConnectStatus: {\n path: '/sites/{siteId}/billing/connect/status',\n method: 'GET',\n tags: ['site-{siteId}', 'stripe-connect'],\n auth: 'user',\n responseKind: 'json',\n },\n stripeConnectDisconnect: {\n path: '/sites/{siteId}/billing/connect/disconnect',\n method: 'DELETE',\n tags: ['site-{siteId}', 'stripe-connect'],\n auth: 'user',\n responseKind: 'json',\n },\n // Backup\n importSiteBackup: {\n path: '/sites/{siteId}/backup/import',\n method: 'POST',\n tags: ['site-{siteId}', 'backup'],\n auth: 'user',\n responseKind: 'json',\n },\n previewBackup: {\n path: '/backup/preview',\n method: 'POST',\n tags: ['backup'],\n auth: 'user',\n responseKind: 'json',\n },\n importBackupAsNewSite: {\n path: '/sites/backup/import-as-new',\n method: 'POST',\n tags: ['site', 'backup'],\n auth: 'user',\n responseKind: 'json',\n },\n // Admin billing price overrides\n adminGetPriceOverride: {\n path: '/admin/billing/price-override',\n method: 'GET',\n tags: ['admin', 'billing', 'price-override'],\n auth: 'admin',\n responseKind: 'json',\n },\n adminUpsertPriceOverride: {\n path: '/admin/billing/price-override',\n method: 'POST',\n tags: ['admin', 'billing', 'price-override'],\n auth: 'admin',\n responseKind: 'json',\n },\n adminDeletePriceOverride: {\n path: '/admin/billing/price-override',\n method: 'DELETE',\n tags: ['admin', 'billing', 'price-override'],\n auth: 'admin',\n responseKind: 'json',\n },\n} as const satisfies APIEndpoints;\n\nexport const API_ENDPOINTS = ENDPOINT_DEFINITIONS;\n\ntype IsUnknown<T> = unknown extends T ? ([T] extends [unknown] ? true : false) : false;\n\ntype MissingResponseTypes = {\n [K in keyof APIEndpoints]: IsUnknown<NonNullable<APIEndpoints[K]['response']>> extends true ? K : never;\n}[keyof APIEndpoints];\n\ntype MissingResponseKindMetadata = {\n [K in keyof typeof ENDPOINT_DEFINITIONS]: typeof ENDPOINT_DEFINITIONS[K] extends { responseKind: infer RK }\n ? RK extends import('./types').ApiResponseKind\n ? never\n : K\n : K;\n}[keyof typeof ENDPOINT_DEFINITIONS];\n\ntype MissingAuthMetadata = {\n [K in keyof typeof ENDPOINT_DEFINITIONS]: typeof ENDPOINT_DEFINITIONS[K] extends { auth: infer A }\n ? A extends import('./types').ApiAuthRequirement\n ? never\n : K\n : K;\n}[keyof typeof ENDPOINT_DEFINITIONS];\n\ntype AssertTrue<T extends true> = T;\n\ntype _EnsureResponseTypes = AssertTrue<MissingResponseTypes extends never ? true : false>;\ntype _EnsureResponseKindMetadata = AssertTrue<MissingResponseKindMetadata extends never ? true : false>;\ntype _EnsureAuthMetadata = AssertTrue<MissingAuthMetadata extends never ? true : false>;\n\n// Helper function to build full URL\nexport function buildEndpointURL(baseURL: string, endpoint: keyof APIEndpoints): string {\n return baseURL + API_ENDPOINTS[endpoint].path;\n}\n","/**\n * URL construction helpers for dashboard and API URLs.\n *\n * These functions ensure consistent URL construction across the codebase\n * and derive the API URL from the dashboard URL to avoid duplicate env vars.\n */\n\n/**\n * Get the base dashboard URL from environment\n * @returns Dashboard base URL (e.g., 'http://dashboard.local:4000')\n * @throws Error if neither NEXT_PUBLIC_DASHBOARD_URL nor NEXT_PUBLIC_CMS_API_URL is configured\n */\nexport function getDashboardBaseUrl(): string {\n const internalUrl = process.env.CMS_API_URL;\n if (internalUrl) {\n return internalUrl.replace(/\\/api\\/?$/, '').replace(/\\/$/, '');\n }\n\n const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL;\n\n if (dashboardUrl) {\n // Remove trailing slash for consistency\n return dashboardUrl.replace(/\\/$/, '');\n }\n\n // Legacy fallback: derive from NEXT_PUBLIC_CMS_API_URL\n const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL;\n if (legacyApiUrl) {\n // Strip /api suffix if present\n return legacyApiUrl.replace(/\\/$/, '').replace(/\\/api$/, '');\n }\n\n throw new Error(\n 'NEXT_PUBLIC_DASHBOARD_URL is not configured. ' +\n 'Set it to your dashboard URL (e.g., http://dashboard.local:4000)'\n );\n}\n\n/**\n * Get the CMS API URL by appending /api to the dashboard URL\n * @returns API base URL (e.g., 'http://dashboard.local:4000/api' or '/api' in browser)\n * @throws Error if neither NEXT_PUBLIC_DASHBOARD_URL nor NEXT_PUBLIC_CMS_API_URL is configured (server-side only)\n */\nexport function getCmsApiUrl(): string {\n // In browser, always use relative URL to avoid CORS issues\n // (e.g., www.example.com calling example.com/api would be cross-origin)\n if (typeof window !== 'undefined') {\n return '/api';\n }\n\n // Server-side: use explicit URLs for SSR/API routes\n const internalUrl = process.env.CMS_API_URL;\n if (internalUrl) {\n return internalUrl.replace(/\\/$/, '');\n }\n\n // Check for NEXT_PUBLIC_DASHBOARD_URL first (new standard)\n const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL;\n if (dashboardUrl) {\n const base = dashboardUrl.replace(/\\/$/, '');\n return `${base}/api`;\n }\n\n // Legacy: Use NEXT_PUBLIC_CMS_API_URL directly if available\n const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL;\n if (legacyApiUrl) {\n return legacyApiUrl.replace(/\\/$/, '');\n }\n\n throw new Error(\n 'NEXT_PUBLIC_DASHBOARD_URL is not configured. ' +\n 'Set it to your dashboard URL (e.g., http://dashboard.local:4000)'\n );\n}\n\n/**\n * Legacy: Get API URL, supporting old NEXT_PUBLIC_CMS_API_URL env var\n * @deprecated Use getCmsApiUrl() instead - this function is maintained for backwards compatibility\n */\nexport function resolveApiBaseUrl(): string {\n return getCmsApiUrl();\n}\n","import SupabaseClient from \"@supabase/supabase-js/dist/module/SupabaseClient\";\nimport { API_ENDPOINTS } from \"./endpoints\";\nimport { AuthHeaders, getAuthHeaders } from \"./token\";\nimport { APICallParams, APIEndpoints, ApiAuthRequirement, ApiResponseKind, HTTPMethod } from \"./types\";\nimport { resolveApiBaseUrl } from \"./url\";\nimport { normalizeCmsApiKey } from \"./env\";\n\n// Optional Next.js imports - only available when Next.js is present\n// Next.js 16 requires a cacheLife profile as the second argument\ntype RevalidateTagFn = (tag: string, cacheLifeProfile: string) => void;\nlet revalidateTag: RevalidateTagFn | null = null;\n// Only attempt to import Next.js cache helpers on the server\nif (typeof window === 'undefined') {\n try {\n const nextCache = require(\"next/cache\");\n revalidateTag = nextCache.revalidateTag as RevalidateTagFn;\n } catch {\n // Next.js not available - revalidation functions will be no-ops\n revalidateTag = null;\n }\n}\n\ntype RawApiClient = <E extends keyof APIEndpoints>(params: APICallParams<E>) => Promise<Response>;\ntype EndpointResponse<E extends keyof APIEndpoints> = APIEndpoints[E]['response'];\ntype ApiResponseFor<E extends keyof APIEndpoints> =\n EndpointResponse<E> extends undefined ? void : NonNullable<EndpointResponse<E>>;\nexport type ApiClient = <E extends keyof APIEndpoints>(params: APICallParams<E>) => Promise<ApiResponseFor<E>>;\n\nexport interface ApiRequestErrorOptions {\n endpoint: keyof APIEndpoints;\n status: number;\n method: HTTPMethod;\n auth?: ApiAuthRequirement;\n requestId?: string;\n body?: unknown;\n cause?: unknown;\n}\n\nexport class ApiRequestError extends Error {\n readonly endpoint: keyof APIEndpoints;\n readonly status: number;\n readonly method: HTTPMethod;\n readonly auth?: ApiAuthRequirement;\n readonly requestId?: string;\n readonly body?: unknown;\n readonly cause?: unknown;\n\n constructor(message: string, options: ApiRequestErrorOptions) {\n super(message);\n this.name = 'ApiRequestError';\n this.endpoint = options.endpoint;\n this.status = options.status;\n this.method = options.method;\n this.auth = options.auth;\n this.requestId = options.requestId;\n this.body = options.body;\n this.cause = options.cause;\n }\n}\n\n// Helper function to build full URL\nfunction buildEndpointURL(baseURL: string, endpoint: keyof APIEndpoints): string {\n return baseURL + API_ENDPOINTS[endpoint].path;\n}\n\nexport const getApiUrl = (endpoint: keyof APIEndpoints) => buildEndpointURL(resolveApiBaseUrl(), endpoint);\n\n// Simple cache invalidation helper\nfunction invalidateCacheTags(tags?: string[], params?: Record<string, string | number>): void {\n // Only run on the server, and only when Next.js provides a revalidateTag function\n if (typeof window !== 'undefined' || !revalidateTag || !tags) return;\n\n tags.forEach(tag => {\n // Replace parameter placeholders in tags\n let processedTag = tag;\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n processedTag = processedTag.replace(`{${key}}`, String(value));\n });\n }\n\n try {\n revalidateTag(processedTag, 'max');\n } catch {\n // If static generation store is not available in this context, skip\n }\n });\n}\n\nexport async function parseErrorBody(response: Response): Promise<unknown> {\n const clone = response.clone();\n const contentType = clone.headers.get('content-type') ?? '';\n if (contentType.includes('application/json')) {\n try {\n return await clone.json();\n } catch {\n // fall through to attempt plain text parsing\n }\n }\n\n try {\n const text = await clone.text();\n return text.length ? text : null;\n } catch {\n return null;\n }\n}\n\nexport async function parseSuccessResponse<E extends keyof APIEndpoints>(\n endpoint: E,\n response: Response,\n config: APIEndpoints[E],\n): Promise<ApiResponseFor<E>> {\n const responseKind: ApiResponseKind = config.responseKind ?? 'json';\n const auth = config.auth ?? 'user';\n const requestId = response.headers.get('x-request-id') ?? undefined;\n\n switch (responseKind) {\n case 'json': {\n if (response.status === 204 || response.status === 205 || response.status === 304) {\n return undefined as ApiResponseFor<E>;\n }\n\n const raw = await response.text();\n if (!raw.trim()) {\n return undefined as ApiResponseFor<E>;\n }\n\n try {\n return JSON.parse(raw) as ApiResponseFor<E>;\n } catch (cause) {\n throw new ApiRequestError(\n `Failed to parse JSON response for endpoint ${String(endpoint)}`,\n {\n endpoint,\n status: response.status,\n method: config.method,\n auth,\n requestId,\n body: raw,\n cause,\n },\n );\n }\n }\n case 'text': {\n return (await response.text()) as ApiResponseFor<E>;\n }\n case 'stream': {\n const body = response.body;\n if (!body) {\n throw new ApiRequestError(\n `Expected a streamed body for endpoint ${String(endpoint)}`,\n {\n endpoint,\n status: response.status,\n method: config.method,\n auth,\n requestId,\n },\n );\n }\n const stream = body as ReadableStream<Uint8Array>;\n return stream as unknown as ApiResponseFor<E>;\n }\n case 'void': {\n return undefined as ApiResponseFor<E>;\n }\n default: {\n return undefined as ApiResponseFor<E>;\n }\n }\n}\n\nexport async function createAuthenticatedApiClient(supabase: SupabaseClient): Promise<ApiClient> {\n const authHeaders = await getAuthHeaders(supabase)\n\n if (!authHeaders) {\n throw new Error('No authentication token available')\n }\n \n return createCMSClient(authHeaders);\n}\n\nfunction createRawCMSClient(headers: AuthHeaders | {} = {}, baseUrl?: string): RawApiClient {\n return <E extends keyof APIEndpoints>({\n endpoint,\n body,\n params,\n options = {}\n }: APICallParams<E>): Promise<Response> => {\n const resolvedBaseUrl = baseUrl ?? resolveApiBaseUrl();\n let url = buildEndpointURL(resolvedBaseUrl, endpoint);\n const originalPath = API_ENDPOINTS[endpoint].path;\n\n // Handle URL path parameters and collect unused params for query string\n const unusedParams: Record<string, string> = {};\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n const placeholder = `{${key}}`;\n if (originalPath.includes(placeholder)) {\n // This param is used in the path - substitute it\n url = url.replace(placeholder, value);\n } else {\n // This param is not used in the path - save for query string\n unusedParams[key] = value;\n }\n });\n }\n\n const endpointConfig = API_ENDPOINTS[endpoint];\n const method = endpointConfig.method as HTTPMethod;\n const isGetOrHead = method === 'GET' || method === 'HEAD';\n\n // For GET/HEAD requests, convert body and unused params to query parameters\n if (isGetOrHead) {\n const queryParams = new URLSearchParams();\n\n // Add unused params (not used in path) to query string\n Object.entries(unusedParams).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n queryParams.append(key, String(value));\n }\n });\n\n // Add body params to query string\n if (body) {\n Object.entries(body as Record<string, any>).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n queryParams.append(key, String(value));\n }\n });\n }\n\n const queryString = queryParams.toString();\n if (queryString) {\n url += (url.includes('?') ? '&' : '?') + queryString;\n }\n }\n // Detect if body is FormData (for file uploads)\n const isFormData = typeof FormData !== 'undefined' && body instanceof FormData;\n \n // Build Next.js cache options for read operations\n const nextOptions: { revalidate?: number; tags?: string[] } = {};\n if (\n isGetOrHead &&\n 'revalidate' in endpointConfig &&\n typeof endpointConfig.revalidate === 'number'\n ) {\n nextOptions.revalidate = endpointConfig.revalidate;\n }\n if ('tags' in endpointConfig && Array.isArray(endpointConfig.tags)) {\n // Process tags with parameter replacement\n nextOptions.tags = endpointConfig.tags.map<string>((tag) => {\n let processedTag = tag as string;\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n processedTag = processedTag.replace(`{${key}}`, String(value));\n });\n }\n return processedTag;\n });\n }\n \n const requestInit: RequestInit & { next?: { revalidate?: number; tags?: string[] } } = {\n method,\n ...options,\n // Don't include body for GET/HEAD requests\n body: isGetOrHead ? undefined : (isFormData ? (body as unknown as BodyInit) : (body ? JSON.stringify(body) : undefined)),\n headers: {\n ...options.headers,\n ...headers,\n // Don't set Content-Type for GET/HEAD requests without body\n ...(isGetOrHead ? {} : (isFormData ? {} : { 'Content-Type': 'application/json' })),\n },\n // Add Next.js caching options\n next: Object.keys(nextOptions).length > 0 ? nextOptions : undefined,\n };\n\n // Make the fetch request\n const fetchPromise = fetch(url, requestInit);\n \n // For mutation requests, invalidate cache after successful response\n if (!isGetOrHead && 'tags' in endpointConfig && Array.isArray(endpointConfig.tags)) {\n const tags = endpointConfig.tags.map((tag) => tag as string);\n return fetchPromise.then(response => {\n if (response.ok) {\n invalidateCacheTags(tags, params);\n }\n return response;\n });\n }\n \n return fetchPromise;\n }\n}\n\nfunction createParsedClient(rawClient: RawApiClient): ApiClient {\n return async <E extends keyof APIEndpoints>(params: APICallParams<E>) => {\n const response = await rawClient(params);\n const endpoint = params.endpoint;\n const config = API_ENDPOINTS[endpoint];\n const auth = config.auth ?? 'user';\n\n if (!response.ok) {\n const body = await parseErrorBody(response);\n const requestId = response.headers.get('x-request-id') ?? undefined;\n throw new ApiRequestError(\n `Request to ${String(endpoint)} failed with status ${response.status}`,\n {\n endpoint,\n status: response.status,\n method: config.method,\n auth,\n requestId,\n body,\n },\n );\n }\n\n return parseSuccessResponse(endpoint, response, config);\n };\n}\n\nexport function createCMSClient(headers: AuthHeaders | {} = {}, baseUrl?: string): ApiClient {\n return createParsedClient(createRawCMSClient(headers, baseUrl));\n}\n\nexport const createServerAPIClient = (apiKey: string, baseUrl?: string): ApiClient => {\n const normalizedApiKey = normalizeCmsApiKey(apiKey);\n\n if (!normalizedApiKey) {\n throw new Error('No API key provided for server API client')\n }\n const authHeaders = {\n Authorization: `Bearer ${normalizedApiKey}`,\n }\n return createCMSClient(authHeaders, baseUrl);\n}\n\nexport function createInternalAPIClient(baseUrl?: string): ApiClient {\n return createCMSClient({}, baseUrl);\n}\n\n// Bearer-token client for preview-auth flows\nexport function createBearerAPIClient(token: string, baseUrl?: string): ApiClient {\n const authHeaders = {\n Authorization: `Bearer ${token}`,\n };\n return createCMSClient(authHeaders, baseUrl);\n}\n","import { z } from 'zod';\n\n/**\n * RFC-6902 JSON Patch Operations\n * Standard JSON Patch format for AI Playground content updates\n */\n\nexport const Rfc6902PatchOp = z.discriminatedUnion('op', [\n // Standard RFC-6902 operations\n z.object({\n op: z.literal('add'),\n path: z.string(),\n value: z.unknown(),\n }),\n z.object({\n op: z.literal('remove'),\n path: z.string(),\n }),\n z.object({\n op: z.literal('replace'),\n path: z.string(),\n value: z.unknown(),\n }),\n z.object({\n op: z.literal('move'),\n from: z.string(),\n path: z.string(),\n }),\n z.object({\n op: z.literal('copy'),\n from: z.string(),\n path: z.string(),\n }),\n // Block-level operations (Phase 2)\n z.object({\n op: z.literal('add_block'),\n blockKind: z.string(),\n afterBlockId: z.string().nullable(),\n content: z.record(z.string(), z.unknown()),\n rationale: z.string(),\n }),\n z.object({\n op: z.literal('delete_block'),\n blockId: z.string(),\n rationale: z.string(),\n }),\n z.object({\n op: z.literal('reorder_block'),\n blockId: z.string(),\n afterBlockId: z.string().nullable(),\n rationale: z.string(),\n }),\n]);\n\nexport const PatchEnvelope = z.object({\n blockId: z.string(),\n blockKind: z.string().optional(),\n blockPurpose: z.string().optional().nullable(),\n ops: z.array(Rfc6902PatchOp),\n rationale: z.string(),\n currentContent: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const ContentUpdateResponse = z.object({\n patches: z.array(PatchEnvelope),\n assistantMessage: z.string(),\n});\n\nexport const PlaygroundProposeRequest = z.object({\n request: z.string().min(1).max(2000),\n});\n\nexport const PlaygroundProposeResponse = z.object({\n patches: z.array(PatchEnvelope),\n assistantMessage: z.string(),\n validation: z.object({\n valid: z.boolean(),\n issues: z.array(z.string()),\n filtered: z.number(),\n }),\n});\n\n// Multi-page schemas (Phase 2)\nexport const MultiPagePatchEnvelope = z.object({\n pageId: z.string(),\n blockId: z.string().optional(), // Not present for page-level ops\n blockKind: z.string().optional(),\n blockPurpose: z.string().optional().nullable(),\n ops: z.array(Rfc6902PatchOp),\n rationale: z.string(),\n currentContent: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const MultiPageUpdateResponse = z.object({\n patches: z.array(MultiPagePatchEnvelope),\n assistantMessage: z.string(),\n pagesModified: z.number(),\n toolCallsUsed: z.number(),\n});\n\n// Stream event types for real-time updates\nexport type StreamEvent =\n | { type: 'status'; message: string; detail?: string }\n | { type: 'tool_call'; tool: string; args: unknown }\n | { type: 'tool_result'; tool: string; summary: string }\n | { type: 'patch_group'; envelope: MultiPagePatchEnvelope }\n | { type: 'complete'; response: MultiPageUpdateResponse };\n\n// Types - export both the schemas and the inferred types\nexport type Rfc6902PatchOp = z.infer<typeof Rfc6902PatchOp>;\nexport type PatchEnvelope = z.infer<typeof PatchEnvelope>;\nexport type ContentUpdateResponse = z.infer<typeof ContentUpdateResponse>;\nexport type PlaygroundProposeRequest = z.infer<typeof PlaygroundProposeRequest>;\nexport type PlaygroundProposeResponse = z.infer<typeof PlaygroundProposeResponse>;\nexport type MultiPagePatchEnvelope = z.infer<typeof MultiPagePatchEnvelope>;\nexport type MultiPageUpdateResponse = z.infer<typeof MultiPageUpdateResponse>;\n\n// Re-export schemas for runtime validation\nexport {\n Rfc6902PatchOp as Rfc6902PatchOpSchema,\n PatchEnvelope as PatchEnvelopeSchema,\n ContentUpdateResponse as ContentUpdateResponseSchema,\n PlaygroundProposeRequest as PlaygroundProposeRequestSchema,\n PlaygroundProposeResponse as PlaygroundProposeResponseSchema,\n MultiPagePatchEnvelope as MultiPagePatchEnvelopeSchema,\n MultiPageUpdateResponse as MultiPageUpdateResponseSchema,\n};\n\n// Page context types for building AI prompts\nexport type AllowedField = {\n path: string;\n type: 'richtext' | 'plaintext' | 'url' | 'number' | 'boolean';\n};\n\nexport type BlockContext = {\n id: string;\n kind: string;\n purpose: string | null;\n orderIndex: number;\n allowedPaths: string[]; // Legacy, kept for backward compat\n allowedFields?: AllowedField[]; // New structured format with types\n content: Record<string, unknown>;\n};\n\nexport type PageContext = {\n site: {\n id: string;\n title: string;\n primaryDomain: string | null;\n };\n page: {\n id: string;\n path: string;\n title: string;\n slug: string | null;\n metaTitle: string | null;\n metaDescription: string | null;\n blocks: BlockContext[];\n };\n};\n","/**\n * Simple in-memory cache with TTL support\n */\nexport class SimpleCache<T> {\n private cache = new Map<string, { value: T; expires: number }>();\n private maxSize: number;\n private ttl: number;\n\n constructor(options: { maxSize?: number; ttl?: number } = {}) {\n this.maxSize = options.maxSize ?? 100;\n this.ttl = options.ttl ?? 300000; // 5 minutes in milliseconds\n }\n\n get(key: string): T | undefined {\n const entry = this.cache.get(key);\n if (!entry) return undefined;\n\n // Check if expired\n if (Date.now() > entry.expires) {\n this.cache.delete(key);\n return undefined;\n }\n\n return entry.value;\n }\n\n set(key: string, value: T): void {\n // Enforce max size with simple FIFO eviction\n if (this.cache.size >= this.maxSize) {\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n\n this.cache.set(key, {\n value,\n expires: Date.now() + this.ttl,\n });\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n has(key: string): boolean {\n return this.get(key) !== undefined;\n }\n}\n","import { createBearerAPIClient } from '@riverbankcms/api';\nimport type {\n RiverbankClient,\n RiverbankClientConfig,\n PublicBookingServicesResponse,\n PublicEventsResponse,\n PublicFormResponse,\n} from './types';\nimport { SimpleCache } from './cache';\n\n/**\n * Create a Riverbank CMS client for fetching content\n *\n * @example\n * ```ts\n * const client = createRiverbankClient({\n * apiKey: 'bld_live_sk_...',\n * baseUrl: 'https://dashboard.example.com/api',\n * });\n *\n * const site = await client.getSite({ slug: 'my-site' });\n * ```\n */\nexport function createRiverbankClient(config: RiverbankClientConfig): RiverbankClient {\n if (!config.baseUrl) {\n throw new Error(\n 'baseUrl is required when creating a Builder client. ' +\n 'Expected format: https://dashboard.example.com/api (must include /api path)'\n );\n }\n\n // Validate baseUrl format\n if (!config.baseUrl.endsWith('/api')) {\n throw new Error(\n `baseUrl must end with '/api'. Received: ${config.baseUrl}. ` +\n 'Expected format: https://dashboard.example.com/api'\n );\n }\n\n const cacheEnabled = config.cache?.enabled ?? true;\n const cacheTTL = (config.cache?.ttl ?? 300) * 1000; // Convert seconds to milliseconds\n const cacheMaxSize = config.cache?.maxSize ?? 100;\n\n // Create internal API client with Bearer token auth\n const apiClient = createBearerAPIClient(config.apiKey, config.baseUrl);\n\n // Create cache instance\n const cache = new SimpleCache<unknown>({\n maxSize: cacheMaxSize,\n ttl: cacheTTL,\n });\n\n /**\n * Helper to cache API calls\n */\n async function cachedFetch<T>(\n cacheKey: string,\n fetcher: () => Promise<T>,\n options?: { force?: boolean }\n ): Promise<T> {\n // Check cache unless force is true\n if (cacheEnabled && !options?.force) {\n const cached = cache.get(cacheKey) as T | undefined;\n if (cached !== undefined) {\n return cached;\n }\n }\n\n // Fetch fresh data\n const data = await fetcher();\n\n // Store in cache\n if (cacheEnabled) {\n cache.set(cacheKey, data);\n }\n\n return data;\n }\n\n return {\n async getSite(params) {\n const { slug, domain, id } = params;\n\n if (!slug && !domain && !id) {\n throw new Error(\n 'getSite() requires at least one identifier: slug, domain, or id. ' +\n `Received: ${JSON.stringify(params)}`\n );\n }\n\n const cacheKey = `site:${slug || domain || id}`;\n\n return cachedFetch(cacheKey, async () => {\n // Convert params to string record for API client\n const apiParams: Record<string, string> = {};\n if (params.slug) apiParams.slug = params.slug;\n if (params.domain) apiParams.domain = params.domain;\n if (params.id) apiParams.id = params.id;\n return await apiClient({ endpoint: 'getSite', params: apiParams });\n });\n },\n\n async getPage(params) {\n const { siteId, path, preview = false } = params;\n const cacheKey = `page:${siteId}:${path}:${preview}`;\n\n return cachedFetch(cacheKey, async () => {\n return await apiClient({ endpoint: 'getContentByPath', params: { siteId }, body: { path, preview } });\n });\n },\n\n async getEntries(params) {\n const { siteId, contentType, limit, order, preview = false, mode, entryIds } = params;\n\n // Include all params in cache key to ensure different queries are cached separately\n const entryIdsCacheKey = mode === 'manual' && entryIds?.length ? entryIds.join(',') : '';\n const cacheKey = `entries:${siteId}:${contentType}:${limit ?? ''}:${order ?? ''}:${preview}:${mode ?? ''}:${entryIdsCacheKey}`;\n\n return cachedFetch(cacheKey, async () => {\n // Build API params\n const apiParams: Record<string, string> = {\n siteId,\n type: contentType,\n };\n\n // Add optional pagination\n if (typeof limit === 'number') {\n apiParams.limit = String(limit);\n }\n\n // Convert user-friendly order to API format\n // 'order' means custom ordering - we don't pass an order param (API default)\n if (order === 'newest') {\n apiParams.order = 'published_at.desc';\n } else if (order === 'oldest') {\n apiParams.order = 'published_at.asc';\n } else if (order === 'title') {\n apiParams.order = 'title.asc';\n }\n // 'order' or undefined: don't set order param, use API default\n\n // Add preview stage if enabled\n if (preview) {\n apiParams.stage = 'preview';\n }\n\n // Manual mode - pass entry IDs for hydration\n if (mode === 'manual' && entryIds?.length) {\n apiParams.mode = 'manual';\n apiParams.entryIds = JSON.stringify(entryIds);\n }\n\n return await apiClient({ endpoint: 'listPublishedEntries', params: apiParams });\n });\n },\n\n async getEntry(params) {\n const { siteId, contentType, slug } = params;\n const cacheKey = `entry:${siteId}:${contentType}:${slug}`;\n\n return cachedFetch(cacheKey, async () => {\n return await apiClient({ endpoint: 'getPublishedEntryPreview', params: { siteId, type: contentType, slug } });\n });\n },\n\n async getPublicFormById(params) {\n const { formId } = params;\n if (!formId) {\n throw new Error('getPublicFormById() requires formId');\n }\n const cacheKey = `public-form:${formId}`;\n return cachedFetch(cacheKey, async () => {\n return await apiClient({ endpoint: 'getPublicFormById', params: { formId } }) as PublicFormResponse;\n });\n },\n\n async getPublicBookingServices(params) {\n const { siteId, ids } = params;\n if (!siteId) {\n throw new Error('getPublicBookingServices() requires siteId');\n }\n const cacheKey = `public-booking-services:${siteId}:${ids ?? ''}`;\n return cachedFetch(cacheKey, async () => {\n const apiParams: Record<string, string> = { siteId };\n if (ids) apiParams.ids = ids;\n return await apiClient({ endpoint: 'getPublicBookingServices', params: apiParams }) as PublicBookingServicesResponse;\n });\n },\n\n async listPublicEvents(params) {\n const { siteId, limit, from, to, stage } = params;\n if (!siteId) {\n throw new Error('listPublicEvents() requires siteId');\n }\n const cacheKey = `public-events:${siteId}:${limit ?? ''}:${from ?? ''}:${to ?? ''}:${stage ?? ''}`;\n return cachedFetch(cacheKey, async () => {\n const apiParams: Record<string, string> = { siteId };\n if (typeof limit === 'number') apiParams.limit = String(limit);\n if (from) apiParams.from = from;\n if (to) apiParams.to = to;\n if (stage) apiParams.stage = stage;\n return await apiClient({ endpoint: 'listPublicEvents', params: apiParams }) as PublicEventsResponse;\n });\n },\n\n clearCache() {\n cache.clear();\n },\n };\n}\n\n// Re-export types\nexport type { RiverbankClient, RiverbankClientConfig } from './types';\n"]}
@@ -1,215 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
-
3
- var _chunkHOY77YBFjs = require('./chunk-HOY77YBF.js');
4
-
5
-
6
-
7
-
8
- var _chunkEGTDJ4PLjs = require('./chunk-EGTDJ4PL.js');
9
-
10
- // src/config/validation.ts
11
- var _zod = require('zod');
12
- var sdkThemePaletteSchema = _zod.z.record(_zod.z.string(), _zod.z.string());
13
- var sdkThemeConfigSchema = _zod.z.object({
14
- palette: sdkThemePaletteSchema
15
- });
16
- var sectionBackgroundSchema = _zod.z.object({
17
- id: _zod.z.string(),
18
- label: _zod.z.string(),
19
- token: _zod.z.string()
20
- // Reference to theme palette token
21
- });
22
- var sectionSpacingSchema = _zod.z.enum(["compact", "default", "spacious"]);
23
- var containerMaxWidthSchema = _zod.z.enum(["narrow", "default", "wide", "full"]);
24
- var containerAlignmentSchema = _zod.z.enum(["left", "center", "right"]);
25
- var sectionOptionsSchema = _zod.z.object({
26
- backgroundColor: _zod.z.boolean().optional(),
27
- backgroundImage: _zod.z.boolean().optional(),
28
- backgroundGradient: _zod.z.boolean().optional(),
29
- spacing: _zod.z.union([
30
- _zod.z.array(sectionSpacingSchema),
31
- _zod.z.boolean()
32
- ]).optional(),
33
- textColor: _zod.z.boolean().optional()
34
- }).optional();
35
- var containerOptionsSchema = _zod.z.object({
36
- maxWidth: _zod.z.union([
37
- _zod.z.array(containerMaxWidthSchema),
38
- _zod.z.boolean()
39
- ]).optional(),
40
- alignment: _zod.z.union([
41
- _zod.z.array(containerAlignmentSchema),
42
- _zod.z.boolean()
43
- ]).optional()
44
- }).optional();
45
- var siteStyleConfigSchema = _zod.z.object({
46
- sectionBackgrounds: _zod.z.array(sectionBackgroundSchema).optional(),
47
- sectionOptions: sectionOptionsSchema,
48
- containerOptions: containerOptionsSchema
49
- }).optional();
50
- var sdkLoaderEndpointSchema = _zod.z.enum(_chunkHOY77YBFjs.SUPPORTED_LOADER_ENDPOINTS);
51
- var loaderParamBindingSchema = _zod.z.object({
52
- $bind: _zod.z.object({
53
- from: _zod.z.string().min(1, "Binding path is required"),
54
- fallback: _zod.z.string().optional()
55
- })
56
- });
57
- var loaderParamValueSchema = _zod.z.union([
58
- _zod.z.string(),
59
- _zod.z.number(),
60
- _zod.z.boolean(),
61
- loaderParamBindingSchema
62
- ]);
63
- var sdkConfigLoaderSchema = _zod.z.object({
64
- endpoint: sdkLoaderEndpointSchema,
65
- params: _zod.z.record(_zod.z.string(), loaderParamValueSchema),
66
- mode: _zod.z.enum(["server", "client"]).default("server")
67
- });
68
- var sdkDataLoadersSchema = _zod.z.record(_zod.z.string(), sdkConfigLoaderSchema).refine(
69
- (loaders) => Object.keys(loaders).length <= 5,
70
- { message: "Maximum 5 data loaders per block" }
71
- ).optional();
72
- var fieldSelectOptionSchema = _zod.z.object({
73
- value: _zod.z.string().min(1, "Option value is required"),
74
- label: _zod.z.string().min(1, "Option label is required")
75
- });
76
- var blockFieldConfigSchema = _zod.z.object({
77
- options: _zod.z.array(fieldSelectOptionSchema).min(1, "At least one option is required").optional()
78
- });
79
- var blockFieldOptionsSchema = _zod.z.record(
80
- _zod.z.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
81
- message: "Block ID must be 'block.*' or 'custom.*' format"
82
- }),
83
- _zod.z.record(
84
- _zod.z.string().min(1, "Field ID is required"),
85
- blockFieldConfigSchema
86
- )
87
- ).optional();
88
- var blockFieldExtensionSchema = _zod.z.object({
89
- fields: _chunkEGTDJ4PLjs.fieldSchema.array().min(1, "At least one field is required")
90
- }).refine(
91
- (data) => {
92
- return data.fields.every((field) => {
93
- if (!field.required) return true;
94
- return field.defaultValue !== void 0;
95
- });
96
- },
97
- {
98
- message: "Required fields must have a defaultValue to support existing blocks"
99
- }
100
- );
101
- var blockFieldExtensionsSchema = _zod.z.record(
102
- _zod.z.string().regex(/^block\.[a-z][a-zA-Z0-9]*$/, {
103
- message: "Block ID must be 'block.*' format (system blocks only)"
104
- }),
105
- blockFieldExtensionSchema
106
- ).optional();
107
- function validateFieldIdConflicts(blockFieldExtensions) {
108
- if (!blockFieldExtensions) return [];
109
- const conflicts = [];
110
- for (const [blockId, extension] of Object.entries(blockFieldExtensions)) {
111
- const definition = _chunkEGTDJ4PLjs.getBlockDefinition.call(void 0, blockId);
112
- if (!definition) {
113
- conflicts.push({
114
- blockId,
115
- fieldId: "",
116
- message: `Unknown block type: ${blockId}`
117
- });
118
- continue;
119
- }
120
- const existingFieldIds = /* @__PURE__ */ new Set();
121
- const collectFieldIds = (fields) => {
122
- if (!fields) return;
123
- for (const field of fields) {
124
- existingFieldIds.add(field.id);
125
- if (field.type === "group" || field.type === "modal") {
126
- collectFieldIds(_optionalChain([field, 'access', _ => _.schema, 'optionalAccess', _2 => _2.fields]));
127
- } else if (field.type === "repeater" && _optionalChain([field, 'access', _3 => _3.schema, 'optionalAccess', _4 => _4.fields])) {
128
- collectFieldIds(field.schema.fields);
129
- } else if (field.type === "tabGroup") {
130
- for (const tab of _nullishCoalesce(field.tabs, () => ( []))) {
131
- collectFieldIds(tab.fields);
132
- }
133
- }
134
- }
135
- };
136
- collectFieldIds(definition.manifest.fields);
137
- for (const field of extension.fields) {
138
- if (existingFieldIds.has(field.id)) {
139
- conflicts.push({
140
- blockId,
141
- fieldId: field.id,
142
- message: `Field ID "${field.id}" conflicts with existing field in ${blockId}`
143
- });
144
- }
145
- }
146
- }
147
- return conflicts;
148
- }
149
- var sdkCustomBlockSchema = _zod.z.object({
150
- // Block ID must start with 'custom.'
151
- id: _zod.z.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
152
- message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
153
- }),
154
- title: _zod.z.string().min(1, "Title is required"),
155
- titleSource: _zod.z.string().optional(),
156
- description: _zod.z.string().optional(),
157
- category: _chunkEGTDJ4PLjs.blockCategoryEnum,
158
- icon: _zod.z.string().optional(),
159
- tags: _zod.z.array(_zod.z.string()).optional(),
160
- // Reuse the exact field schema from @riverbankcms/blocks - all field types supported
161
- fields: _chunkEGTDJ4PLjs.fieldSchema.array().min(1, "Custom blocks must have at least one field"),
162
- // Data loaders for CMS endpoints
163
- dataLoaders: sdkDataLoadersSchema
164
- }).refine(
165
- // Validate titleSource references a valid field if provided
166
- (data) => {
167
- if (!data.titleSource) return true;
168
- return data.fields.some((f) => f.id === data.titleSource);
169
- },
170
- {
171
- message: "titleSource must reference a valid field ID",
172
- path: ["titleSource"]
173
- }
174
- );
175
- var riverbankSiteConfigSchema = _zod.z.object({
176
- siteId: _zod.z.string().uuid(),
177
- theme: sdkThemeConfigSchema.optional(),
178
- styles: siteStyleConfigSchema,
179
- customBlocks: _zod.z.array(sdkCustomBlockSchema).max(20, "Maximum 20 custom blocks per site").refine(
180
- // Ensure unique block IDs
181
- (blocks) => {
182
- const ids = blocks.map((b) => b.id);
183
- return ids.length === new Set(ids).size;
184
- },
185
- { message: "Block IDs must be unique" }
186
- ).optional(),
187
- blockFieldOptions: blockFieldOptionsSchema,
188
- blockFieldExtensions: blockFieldExtensionsSchema
189
- }).strict();
190
-
191
-
192
-
193
-
194
-
195
-
196
-
197
-
198
-
199
-
200
-
201
-
202
-
203
-
204
-
205
-
206
-
207
-
208
-
209
-
210
-
211
-
212
-
213
-
214
- exports.sdkThemePaletteSchema = sdkThemePaletteSchema; exports.sdkThemeConfigSchema = sdkThemeConfigSchema; exports.sectionBackgroundSchema = sectionBackgroundSchema; exports.sectionSpacingSchema = sectionSpacingSchema; exports.containerMaxWidthSchema = containerMaxWidthSchema; exports.containerAlignmentSchema = containerAlignmentSchema; exports.sectionOptionsSchema = sectionOptionsSchema; exports.containerOptionsSchema = containerOptionsSchema; exports.siteStyleConfigSchema = siteStyleConfigSchema; exports.sdkLoaderEndpointSchema = sdkLoaderEndpointSchema; exports.loaderParamBindingSchema = loaderParamBindingSchema; exports.loaderParamValueSchema = loaderParamValueSchema; exports.sdkConfigLoaderSchema = sdkConfigLoaderSchema; exports.sdkDataLoadersSchema = sdkDataLoadersSchema; exports.fieldSelectOptionSchema = fieldSelectOptionSchema; exports.blockFieldConfigSchema = blockFieldConfigSchema; exports.blockFieldOptionsSchema = blockFieldOptionsSchema; exports.blockFieldExtensionSchema = blockFieldExtensionSchema; exports.blockFieldExtensionsSchema = blockFieldExtensionsSchema; exports.validateFieldIdConflicts = validateFieldIdConflicts; exports.sdkCustomBlockSchema = sdkCustomBlockSchema; exports.riverbankSiteConfigSchema = riverbankSiteConfigSchema;
215
- //# sourceMappingURL=chunk-XLVL5WPH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-XLVL5WPH.js","../../src/config/validation.ts"],"names":[],"mappings":"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","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-XLVL5WPH.js","sourcesContent":[null,"/**\n * Zod validation schemas for SDK site configuration.\n *\n * These schemas are used to validate configuration fetched from\n * SDK sites before storing in the database.\n */\n\nimport { z } from 'zod';\nimport { blockCategoryEnum, fieldSchema, getBlockDefinition, type SdkCustomBlock, type FieldDefinition } from '@riverbankcms/blocks';\nimport type { RiverbankSiteConfig, BlockFieldOptionsMap, BlockFieldExtensionsMap, BlockFieldExtension } from './types';\n\n/**\n * Schema for SDK theme palette.\n * Maps token names to CSS color values.\n */\nexport const sdkThemePaletteSchema = z.record(z.string(), z.string());\n\n/**\n * Schema for SDK theme configuration.\n */\nexport const sdkThemeConfigSchema = z.object({\n palette: sdkThemePaletteSchema,\n});\n\n/**\n * Schema for section background color options.\n */\nexport const sectionBackgroundSchema = z.object({\n id: z.string(),\n label: z.string(),\n token: z.string(), // Reference to theme palette token\n});\n\n/**\n * Schema for section spacing values.\n */\nexport const sectionSpacingSchema = z.enum(['compact', 'default', 'spacious']);\n\n/**\n * Schema for container max-width values.\n */\nexport const containerMaxWidthSchema = z.enum(['narrow', 'default', 'wide', 'full']);\n\n/**\n * Schema for container alignment values.\n */\nexport const containerAlignmentSchema = z.enum(['left', 'center', 'right']);\n\n/**\n * Schema for section options configuration.\n */\nexport const sectionOptionsSchema = z.object({\n backgroundColor: z.boolean().optional(),\n backgroundImage: z.boolean().optional(),\n backgroundGradient: z.boolean().optional(),\n spacing: z.union([\n z.array(sectionSpacingSchema),\n z.boolean(),\n ]).optional(),\n textColor: z.boolean().optional(),\n}).optional();\n\n/**\n * Schema for container options configuration.\n */\nexport const containerOptionsSchema = z.object({\n maxWidth: z.union([\n z.array(containerMaxWidthSchema),\n z.boolean(),\n ]).optional(),\n alignment: z.union([\n z.array(containerAlignmentSchema),\n z.boolean(),\n ]).optional(),\n}).optional();\n\n/**\n * Schema for site style configuration.\n */\nexport const siteStyleConfigSchema = z.object({\n sectionBackgrounds: z.array(sectionBackgroundSchema).optional(),\n sectionOptions: sectionOptionsSchema,\n containerOptions: containerOptionsSchema,\n}).optional();\n\n// ============================================================================\n// Data Loader Schemas\n// ============================================================================\n\nimport { SUPPORTED_LOADER_ENDPOINTS } from '../data/prefetchBlockData';\n\n/**\n * Whitelisted endpoints for SDK data loaders.\n *\n * These are the only CMS endpoints that can be called from config-based loaders.\n * This ensures SDK sites can only access safe, read-only public endpoints.\n *\n * Derived from SUPPORTED_LOADER_ENDPOINTS - the single source of truth.\n */\nexport const sdkLoaderEndpointSchema = z.enum(SUPPORTED_LOADER_ENDPOINTS);\n\n/**\n * A binding expression for dynamic loader params.\n *\n * @example\n * ```typescript\n * { $bind: { from: 'content.categoryId' } }\n * { $bind: { from: '$root.siteId' } }\n * { $bind: { from: 'content.limit', fallback: '10' } }\n * ```\n */\nexport const loaderParamBindingSchema = z.object({\n $bind: z.object({\n from: z.string().min(1, \"Binding path is required\"),\n fallback: z.string().optional(),\n }),\n});\n\n/**\n * A loader param value can be static or a binding expression.\n */\nexport const loaderParamValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n loaderParamBindingSchema,\n]);\n\n/**\n * Schema for config-based data loader.\n *\n * Config loaders execute server-side during loadPage() and are\n * restricted to whitelisted CMS endpoints.\n */\nexport const sdkConfigLoaderSchema = z.object({\n endpoint: sdkLoaderEndpointSchema,\n params: z.record(z.string(), loaderParamValueSchema),\n mode: z.enum(['server', 'client']).default('server'),\n});\n\n/**\n * Schema for the dataLoaders field on custom blocks.\n * Validates the loader configuration and limits the number of loaders.\n */\nexport const sdkDataLoadersSchema = z.record(z.string(), sdkConfigLoaderSchema)\n .refine(\n (loaders) => Object.keys(loaders).length <= 5,\n { message: \"Maximum 5 data loaders per block\" }\n )\n .optional();\n\n// ============================================================================\n// Custom Block Schema\n// ============================================================================\n\n/**\n * Schema for field select option.\n */\nexport const fieldSelectOptionSchema = z.object({\n value: z.string().min(1, \"Option value is required\"),\n label: z.string().min(1, \"Option label is required\"),\n});\n\n/**\n * Schema for per-field configuration within a block.\n */\nexport const blockFieldConfigSchema = z.object({\n options: z.array(fieldSelectOptionSchema).min(1, \"At least one option is required\").optional(),\n});\n\n/**\n * Schema for per-block field options.\n *\n * Block IDs must be either 'block.*' (system blocks) or 'custom.*' (custom blocks).\n * Field IDs can be any valid identifier string.\n */\nexport const blockFieldOptionsSchema: z.ZodType<BlockFieldOptionsMap> = z.record(\n z.string().regex(/^(block\\.|custom\\.)[a-z][a-z0-9-]*$/, {\n message: \"Block ID must be 'block.*' or 'custom.*' format\",\n }),\n z.record(\n z.string().min(1, \"Field ID is required\"),\n blockFieldConfigSchema\n )\n).optional() as z.ZodType<BlockFieldOptionsMap>;\n\n// ============================================================================\n// Block Field Extensions Schema\n// ============================================================================\n\n/**\n * Schema for block field extension configuration.\n *\n * Validates additional fields to be appended to a built-in block.\n * Includes refinement to ensure required fields have defaultValue.\n *\n * Note: Explicit type annotation required due to recursive fieldSchema complexity.\n */\nexport const blockFieldExtensionSchema: z.ZodType<BlockFieldExtension> = z.object({\n fields: fieldSchema.array().min(1, \"At least one field is required\"),\n}).refine(\n (data) => {\n // All required fields must have a defaultValue\n return data.fields.every((field: FieldDefinition) => {\n if (!field.required) return true;\n return field.defaultValue !== undefined;\n });\n },\n {\n message: \"Required fields must have a defaultValue to support existing blocks\",\n }\n) as z.ZodType<BlockFieldExtension>;\n\n/**\n * Schema for block field extensions map.\n *\n * Block IDs must be system blocks (e.g., 'block.bodyText', 'block.hero').\n * Custom blocks ('custom.*') should define their fields directly, not via extensions.\n */\nexport const blockFieldExtensionsSchema: z.ZodType<BlockFieldExtensionsMap | undefined> = z.record(\n z.string().regex(/^block\\.[a-z][a-zA-Z0-9]*$/, {\n message: \"Block ID must be 'block.*' format (system blocks only)\",\n }),\n blockFieldExtensionSchema\n).optional() as z.ZodType<BlockFieldExtensionsMap | undefined>;\n\n/**\n * Validates that extended field IDs don't conflict with existing block fields.\n *\n * This validation should be called during config push to provide clear error messages.\n * Returns an array of conflict errors, or empty array if valid.\n *\n * @example\n * ```typescript\n * const conflicts = validateFieldIdConflicts(config.blockFieldExtensions);\n * if (conflicts.length > 0) {\n * throw new Error(conflicts.map(c => c.message).join('\\n'));\n * }\n * ```\n */\nexport function validateFieldIdConflicts(\n blockFieldExtensions?: BlockFieldExtensionsMap | null\n): { blockId: string; fieldId: string; message: string }[] {\n if (!blockFieldExtensions) return [];\n\n const conflicts: { blockId: string; fieldId: string; message: string }[] = [];\n\n for (const [blockId, extension] of Object.entries(blockFieldExtensions)) {\n const definition = getBlockDefinition(blockId);\n if (!definition) {\n conflicts.push({\n blockId,\n fieldId: '',\n message: `Unknown block type: ${blockId}`,\n });\n continue;\n }\n\n // Get all existing field IDs from the block manifest\n const existingFieldIds = new Set<string>();\n const collectFieldIds = (fields: FieldDefinition[] | undefined) => {\n if (!fields) return;\n for (const field of fields) {\n existingFieldIds.add(field.id);\n // Also collect nested field IDs from groups, modals, repeaters, tab groups\n if (field.type === 'group' || field.type === 'modal') {\n collectFieldIds(field.schema?.fields);\n } else if (field.type === 'repeater' && field.schema?.fields) {\n collectFieldIds(field.schema.fields);\n } else if (field.type === 'tabGroup') {\n for (const tab of field.tabs ?? []) {\n collectFieldIds(tab.fields);\n }\n }\n }\n };\n collectFieldIds(definition.manifest.fields);\n\n // Check for conflicts\n for (const field of extension.fields) {\n if (existingFieldIds.has(field.id)) {\n conflicts.push({\n blockId,\n fieldId: field.id,\n message: `Field ID \"${field.id}\" conflicts with existing field in ${blockId}`,\n });\n }\n }\n }\n\n return conflicts;\n}\n\n/**\n * Schema for SDK custom block definitions.\n *\n * Validates custom blocks defined in riverbank.config.ts.\n * Reuses fieldSchema from @riverbankcms/blocks for field validation.\n *\n * Note: Explicit type annotation required due to recursive fieldSchema complexity.\n */\nexport const sdkCustomBlockSchema: z.ZodType<SdkCustomBlock> = z.object({\n // Block ID must start with 'custom.'\n id: z.string()\n .min(8) // 'custom.' + at least 1 char\n .regex(/^custom\\.[a-z][a-z0-9-]*$/, {\n message: \"Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens\",\n }),\n title: z.string().min(1, \"Title is required\"),\n titleSource: z.string().optional(),\n description: z.string().optional(),\n category: blockCategoryEnum,\n icon: z.string().optional(),\n tags: z.array(z.string()).optional(),\n // Reuse the exact field schema from @riverbankcms/blocks - all field types supported\n fields: fieldSchema.array().min(1, \"Custom blocks must have at least one field\"),\n // Data loaders for CMS endpoints\n dataLoaders: sdkDataLoadersSchema,\n}).refine(\n // Validate titleSource references a valid field if provided\n (data) => {\n if (!data.titleSource) return true;\n return data.fields.some(f => f.id === data.titleSource);\n },\n {\n message: \"titleSource must reference a valid field ID\",\n path: [\"titleSource\"],\n }\n) as z.ZodType<SdkCustomBlock>;\n\n/**\n * Schema for the complete SDK site configuration.\n *\n * Use this schema to validate configuration fetched from SDK sites\n * before storing in the database.\n *\n * @example\n * ```typescript\n * import { riverbankSiteConfigSchema } from '@riverbankcms/sdk/config/validation';\n *\n * const rawConfig = await response.json();\n * const config = riverbankSiteConfigSchema.parse(rawConfig);\n * ```\n */\nexport const riverbankSiteConfigSchema: z.ZodType<RiverbankSiteConfig> = z.object({\n siteId: z.string().uuid(),\n theme: sdkThemeConfigSchema.optional(),\n styles: siteStyleConfigSchema,\n customBlocks: z.array(sdkCustomBlockSchema)\n .max(20, \"Maximum 20 custom blocks per site\")\n .refine(\n // Ensure unique block IDs\n (blocks) => {\n const ids = blocks.map(b => b.id);\n return ids.length === new Set(ids).size;\n },\n { message: \"Block IDs must be unique\" }\n )\n .optional(),\n blockFieldOptions: blockFieldOptionsSchema,\n blockFieldExtensions: blockFieldExtensionsSchema,\n}).strict() as z.ZodType<RiverbankSiteConfig>;\n\n/**\n * Type inferred from the validation schema.\n * This should match the RiverbankSiteConfig type from ./types.ts\n */\nexport type ValidatedRiverbankSiteConfig = z.infer<typeof riverbankSiteConfigSchema>;\n\n/**\n * Type for a validated SDK custom block.\n */\nexport type ValidatedSdkCustomBlock = z.infer<typeof sdkCustomBlockSchema>;\n\n// ============================================================================\n// Compile-time type assertions\n//\n// These assertions ensure the Zod schemas stay in sync with the TypeScript types.\n// If the schema output diverges from the expected type, TypeScript will error here.\n// ============================================================================\n\n/** Asserts sdkCustomBlockSchema output matches SdkCustomBlock */\ntype _AssertSdkCustomBlockSchema = z.infer<typeof sdkCustomBlockSchema> extends SdkCustomBlock\n ? SdkCustomBlock extends z.infer<typeof sdkCustomBlockSchema>\n ? true\n : never\n : never;\n\n/** Asserts riverbankSiteConfigSchema output matches RiverbankSiteConfig */\ntype _AssertRiverbankSiteConfigSchema = z.infer<typeof riverbankSiteConfigSchema> extends RiverbankSiteConfig\n ? RiverbankSiteConfig extends z.infer<typeof riverbankSiteConfigSchema>\n ? true\n : never\n : never;\n\n// These assignments will fail to compile if the types don't match\nconst _checkSdkCustomBlock: _AssertSdkCustomBlockSchema = true;\nconst _checkRiverbankSiteConfig: _AssertRiverbankSiteConfigSchema = true;\n\n// Prevent unused variable warnings\nvoid _checkSdkCustomBlock;\nvoid _checkRiverbankSiteConfig;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-YXDDFG3N.js","../../src/data/executeCodeLoaders.ts"],"names":[],"mappings":"AAAA;ACiCA,MAAA,SAAsB,kBAAA,CACpB,IAAA,EACA,OAAA,EACA,SAAA,EAC4B;AAC5B,EAAA,MAAM,QAAA,EAA6B,CAAC,CAAA;AACpC,EAAA,MAAM,MAAA,EAAyB,CAAC,CAAA;AAEhC,EAAA,IAAA,CAAA,MAAW,MAAA,GAAS,IAAA,CAAK,MAAA,EAAQ;AAC/B,IAAA,MAAM,QAAA,EAAU,KAAA,CAAM,EAAA;AACtB,IAAA,GAAA,CAAI,CAAC,OAAA,EAAS,QAAA;AAGd,IAAA,MAAM,aAAA,EAAe,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA;AACzC,IAAA,GAAA,CAAI,CAAC,YAAA,EAAc,QAAA;AAGnB,IAAA,MAAM,QAAA,oCACH,KAAA,CAAqC,YAAA,UACrC,KAAA,CAAgC,SAAA,UACjC,CAAC,GAAA;AAIH,IAAA,IAAA,CAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,EAAA,GAAK,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA,EAAG;AAC1D,MAAA,KAAA,CAAM,IAAA;AAAA,QAAA,CACH,MAAA,CAAA,EAAA,GAAY;AACX,UAAA,IAAI;AACF,YAAA,MAAM,cAAA,EAAmC;AAAA,cACvC,MAAA,mBAAQ,OAAA,CAAQ,MAAA,UAAU,IAAA;AAAA,cAC1B,MAAA,mBAAQ,OAAA,CAAQ,MAAA,UAAU,IAAA;AAAA,cAC1B,OAAA;AAAA,cACA,SAAA,EAAW,KAAA,CAAM,IAAA;AAAA,cACjB,OAAA;AAAA,cACA,YAAA,mBAAc,OAAA,CAAQ,YAAA,UAAgB;AAAA,YACxC,CAAA;AAEA,YAAA,MAAM,KAAA,EAAO,MAAM,QAAA,CAAS,aAAa,CAAA;AAEzC,YAAA,GAAA,CAAI,CAAC,OAAA,CAAQ,OAAO,CAAA,EAAG;AACrB,cAAA,OAAA,CAAQ,OAAO,EAAA,EAAI,CAAC,CAAA;AAAA,YACtB;AACA,YAAA,OAAA,CAAQ,OAAO,CAAA,CAAG,GAAG,EAAA,EAAI,IAAA;AAAA,UAC3B,EAAA,MAAA,CAAS,KAAA,EAAO;AAGd,YAAA,OAAA,CAAQ,IAAA,CAAK,qCAAA,EAAuC;AAAA,cAClD,SAAA,EAAW,KAAA,CAAM,IAAA;AAAA,cACjB,SAAA,EAAW,GAAA;AAAA,cACX;AAAA,YACF,CAAC,CAAA;AAAA,UACH;AAAA,QACF,CAAA,CAAA,CAAG;AAAA,MACL,CAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA;AACvB,EAAA,OAAO,OAAA;AACT;AAWO,SAAS,kBAAA,CACd,aAAA,EACA,WAAA,EACmB;AACnB,EAAA,MAAM,OAAA,EAA4B,EAAE,GAAG,cAAc,CAAA;AAErD,EAAA,IAAA,CAAA,MAAW,CAAC,OAAA,EAAS,UAAU,EAAA,GAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC/D,IAAA,GAAA,CAAI,CAAC,MAAA,CAAO,OAAO,CAAA,EAAG;AACpB,MAAA,MAAA,CAAO,OAAO,EAAA,EAAI,CAAC,CAAA;AAAA,IACrB;AAEA,IAAA,MAAA,CAAO,OAAO,EAAA,EAAI,EAAE,GAAG,MAAA,CAAO,OAAO,CAAA,EAAG,GAAG,WAAW,CAAA;AAAA,EACxD;AAEA,EAAA,OAAO,MAAA;AACT;ADnEA;AACA;AACE;AACA;AACF,iGAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/chunk-YXDDFG3N.js","sourcesContent":[null,"/**\n * Execute code-based data loaders for SDK custom blocks.\n *\n * Code loaders are user-defined async functions that can fetch data\n * from any API (not just whitelisted CMS endpoints). They run\n * server-side during loadPage().\n */\n\nimport type { PageOutline } from '@riverbankcms/blocks';\nimport type { PrefetchContext, ResolvedBlockData } from '@riverbankcms/blocks/system/data';\nimport type { DataLoaderContext, DataLoaderOverrides } from './types';\n\n/**\n * Execute code-based data loaders for blocks on a page.\n *\n * Iterates through page blocks and executes any registered loader\n * functions for matching block kinds. Runs all loaders in parallel.\n *\n * @param page - Page outline with blocks to process\n * @param context - Prefetch context (siteId, pageId, previewStage)\n * @param overrides - Map of block kinds to loader functions\n * @returns Resolved data keyed by blockId, then loader key\n *\n * @example\n * ```typescript\n * const codeData = await executeCodeLoaders(page, context, {\n * 'custom.featured-products': {\n * products: async (ctx) => fetchProducts(ctx.content.categoryId),\n * },\n * });\n * // codeData: { 'block-123': { products: [...] } }\n * ```\n */\nexport async function executeCodeLoaders(\n page: PageOutline,\n context: PrefetchContext,\n overrides: DataLoaderOverrides,\n): Promise<ResolvedBlockData> {\n const results: ResolvedBlockData = {};\n const tasks: Promise<void>[] = [];\n\n for (const block of page.blocks) {\n const blockId = block.id;\n if (!blockId) continue;\n\n // Look up loaders for this block kind\n const blockLoaders = overrides[block.kind];\n if (!blockLoaders) continue;\n\n // Get block content (prefer draft in preview mode)\n const content = (\n (block as { draftContent?: unknown }).draftContent ??\n (block as { content?: unknown }).content ??\n {}\n ) as Record<string, unknown>;\n\n // Execute each loader for this block\n for (const [key, loaderFn] of Object.entries(blockLoaders)) {\n tasks.push(\n (async () => {\n try {\n const loaderContext: DataLoaderContext = {\n siteId: context.siteId ?? '',\n pageId: context.pageId ?? '',\n blockId,\n blockKind: block.kind,\n content,\n previewStage: context.previewStage ?? 'published',\n };\n\n const data = await loaderFn(loaderContext);\n\n if (!results[blockId]) {\n results[blockId] = {};\n }\n results[blockId]![key] = data;\n } catch (error) {\n // Log but don't throw - data loading is best-effort\n // SDK users should handle missing data gracefully in components\n console.warn('[executeCodeLoaders] Loader failed:', {\n blockKind: block.kind,\n loaderKey: key,\n error,\n });\n }\n })(),\n );\n }\n }\n\n await Promise.all(tasks);\n return results;\n}\n\n/**\n * Merge resolved data from config loaders and code loaders.\n *\n * Code loader results take precedence on key conflicts.\n *\n * @param configResults - Data from config-based loaders (CMS endpoints)\n * @param codeResults - Data from code-based loaders (external APIs)\n * @returns Merged data with code results overwriting config on conflicts\n */\nexport function mergeLoaderResults(\n configResults: ResolvedBlockData,\n codeResults: ResolvedBlockData,\n): ResolvedBlockData {\n const merged: ResolvedBlockData = { ...configResults };\n\n for (const [blockId, loaderData] of Object.entries(codeResults)) {\n if (!merged[blockId]) {\n merged[blockId] = {};\n }\n // Code loaders take precedence on key conflicts\n merged[blockId] = { ...merged[blockId], ...loaderData };\n }\n\n return merged;\n}\n"]}
@@ -1,11 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunk62ZJI564js = require('./chunk-62ZJI564.js');
4
- require('./chunk-YXDDFG3N.js');
5
- require('./chunk-HOY77YBF.js');
6
- require('./chunk-EGTDJ4PL.js');
7
- require('./chunk-DGUM43GV.js');
8
-
9
-
10
- exports.loadPage = _chunk62ZJI564js.loadPage;
11
- //# sourceMappingURL=loadPage-3ECPF426.js.map