@exulu/frontend 1.10.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/dist/.next/BUILD_ID +1 -1
  2. package/dist/.next/app-build-manifest.json +163 -160
  3. package/dist/.next/app-path-routes-manifest.json +1 -1
  4. package/dist/.next/build-manifest.json +2 -2
  5. package/dist/.next/prerender-manifest.json +1 -1
  6. package/dist/.next/server/app/(application)/agents/edit/[id]/page_client-reference-manifest.js +1 -1
  7. package/dist/.next/server/app/(application)/agents/page_client-reference-manifest.js +1 -1
  8. package/dist/.next/server/app/(application)/chat/[agent]/[session]/page.js +1 -1
  9. package/dist/.next/server/app/(application)/chat/[agent]/[session]/page_client-reference-manifest.js +1 -1
  10. package/dist/.next/server/app/(application)/chat/[agent]/page_client-reference-manifest.js +1 -1
  11. package/dist/.next/server/app/(application)/chat/page_client-reference-manifest.js +1 -1
  12. package/dist/.next/server/app/(application)/configuration/page_client-reference-manifest.js +1 -1
  13. package/dist/.next/server/app/(application)/dashboard/page_client-reference-manifest.js +1 -1
  14. package/dist/.next/server/app/(application)/data/[[...query]]/page.js +2 -2
  15. package/dist/.next/server/app/(application)/data/[[...query]]/page_client-reference-manifest.js +1 -1
  16. package/dist/.next/server/app/(application)/evals/[id]/page.js +1 -1
  17. package/dist/.next/server/app/(application)/evals/[id]/page.js.nft.json +1 -1
  18. package/dist/.next/server/app/(application)/evals/[id]/page_client-reference-manifest.js +1 -1
  19. package/dist/.next/server/app/(application)/evals/cases/page.js +1 -1
  20. package/dist/.next/server/app/(application)/evals/cases/page.js.nft.json +1 -1
  21. package/dist/.next/server/app/(application)/evals/cases/page_client-reference-manifest.js +1 -1
  22. package/dist/.next/server/app/(application)/evals/page_client-reference-manifest.js +1 -1
  23. package/dist/.next/server/app/(application)/explorer/page_client-reference-manifest.js +1 -1
  24. package/dist/.next/server/app/(application)/keys/page_client-reference-manifest.js +1 -1
  25. package/dist/.next/server/app/(application)/page_client-reference-manifest.js +1 -1
  26. package/dist/.next/server/app/(application)/projects/[project]/page.js +1 -1
  27. package/dist/.next/server/app/(application)/projects/[project]/page_client-reference-manifest.js +1 -1
  28. package/dist/.next/server/app/(application)/projects/page_client-reference-manifest.js +1 -1
  29. package/dist/.next/server/app/(application)/prompts/page_client-reference-manifest.js +1 -1
  30. package/dist/.next/server/app/(application)/roles/page_client-reference-manifest.js +1 -1
  31. package/dist/.next/server/app/(application)/token/page_client-reference-manifest.js +1 -1
  32. package/dist/.next/server/app/(application)/users/page_client-reference-manifest.js +1 -1
  33. package/dist/.next/server/app/(application)/variables/create/page_client-reference-manifest.js +1 -1
  34. package/dist/.next/server/app/(application)/variables/edit/[variable_id]/page_client-reference-manifest.js +1 -1
  35. package/dist/.next/server/app/(application)/variables/page_client-reference-manifest.js +1 -1
  36. package/dist/.next/server/app/(application)/variables/usage/[variable_id]/page_client-reference-manifest.js +1 -1
  37. package/dist/.next/server/app/(application)/workflows/page_client-reference-manifest.js +1 -1
  38. package/dist/.next/server/app/(authentication)/login/page_client-reference-manifest.js +1 -1
  39. package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  40. package/dist/.next/server/app/_not-found.html +1 -1
  41. package/dist/.next/server/app/_not-found.rsc +1 -1
  42. package/dist/.next/server/app-paths-manifest.json +5 -5
  43. package/dist/.next/server/chunks/2270.js +145 -132
  44. package/dist/.next/server/chunks/{5084.js → 2587.js} +1 -1
  45. package/dist/.next/server/chunks/3503.js +1 -1
  46. package/dist/.next/server/chunks/5485.js +1 -1
  47. package/dist/.next/server/chunks/5974.js +1 -1
  48. package/dist/.next/server/chunks/7944.js +1 -1
  49. package/dist/.next/server/chunks/8286.js +1 -1
  50. package/dist/.next/server/middleware-manifest.json +5 -5
  51. package/dist/.next/server/pages/404.html +1 -1
  52. package/dist/.next/server/pages/500.html +1 -1
  53. package/dist/.next/server/server-reference-manifest.json +1 -1
  54. package/dist/.next/static/chunks/1707-06e693c4a709c147.js +2 -0
  55. package/dist/.next/static/chunks/1707-06e693c4a709c147.js.map +1 -0
  56. package/dist/.next/static/chunks/{1957-cf44b1d31a9c7d5c.js → 1957-34f17de1e14e45de.js} +1 -1
  57. package/dist/.next/static/chunks/{1957-cf44b1d31a9c7d5c.js.map → 1957-34f17de1e14e45de.js.map} +1 -1
  58. package/dist/.next/static/chunks/{2293-48a95904b834eccc.js → 2293-592e22dde70d632b.js} +1 -1
  59. package/dist/.next/static/chunks/{2293-48a95904b834eccc.js.map → 2293-592e22dde70d632b.js.map} +1 -1
  60. package/dist/.next/static/chunks/2534-3dd7a9fabfbdb9d8.js +2 -0
  61. package/dist/.next/static/chunks/2534-3dd7a9fabfbdb9d8.js.map +1 -0
  62. package/dist/.next/static/chunks/2823-324b1cd8f15ff9c5.js +2 -0
  63. package/dist/.next/static/chunks/2823-324b1cd8f15ff9c5.js.map +1 -0
  64. package/dist/.next/static/chunks/3246-1812de142455a0ac.js +2 -0
  65. package/dist/.next/static/chunks/3246-1812de142455a0ac.js.map +1 -0
  66. package/dist/.next/static/chunks/{3750-e3d1b2cccd265190.js → 3750-d0ae5d73288be8de.js} +2 -2
  67. package/dist/.next/static/chunks/3750-d0ae5d73288be8de.js.map +1 -0
  68. package/dist/.next/static/chunks/{3832-d7782d6a2771ae6c.js → 3832-0b8edbcc671f4cc0.js} +2 -2
  69. package/dist/.next/static/chunks/3832-0b8edbcc671f4cc0.js.map +1 -0
  70. package/dist/.next/static/chunks/{4386-45b79e656a244d8a.js → 4386-21ac377a719ebdfa.js} +1 -1
  71. package/dist/.next/static/chunks/{4386-45b79e656a244d8a.js.map → 4386-21ac377a719ebdfa.js.map} +1 -1
  72. package/dist/.next/static/chunks/4612-da512770f949561a.js +2 -0
  73. package/dist/.next/static/chunks/4612-da512770f949561a.js.map +1 -0
  74. package/dist/.next/static/chunks/{5825-efd4db1da512bd7f.js → 4760-d5ceb992b68e35ca.js} +2 -2
  75. package/dist/.next/static/chunks/4760-d5ceb992b68e35ca.js.map +1 -0
  76. package/dist/.next/static/chunks/{6367-59655a85d75e19be.js → 6367-aa5020cbea5354e2.js} +1 -1
  77. package/dist/.next/static/chunks/{6367-59655a85d75e19be.js.map → 6367-aa5020cbea5354e2.js.map} +1 -1
  78. package/dist/.next/static/chunks/6373-3eee0b6c8b8fd459.js +2 -0
  79. package/dist/.next/static/chunks/6373-3eee0b6c8b8fd459.js.map +1 -0
  80. package/dist/.next/static/chunks/{8030-9c926ea4dfd3a54e.js → 8030-5d38a3f1a4ad44cb.js} +1 -1
  81. package/dist/.next/static/chunks/{8030-9c926ea4dfd3a54e.js.map → 8030-5d38a3f1a4ad44cb.js.map} +1 -1
  82. package/dist/.next/static/chunks/9105-143f12397a76a332.js +2 -0
  83. package/dist/.next/static/chunks/9105-143f12397a76a332.js.map +1 -0
  84. package/dist/.next/static/chunks/9877-378934ae38c6760c.js +2 -0
  85. package/dist/.next/static/chunks/9877-378934ae38c6760c.js.map +1 -0
  86. package/dist/.next/static/chunks/{9953-95900a236271a222.js → 9953-02d5b52553a5c573.js} +2 -2
  87. package/dist/.next/static/chunks/{9953-95900a236271a222.js.map → 9953-02d5b52553a5c573.js.map} +1 -1
  88. package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/{page-e4a4693953329671.js → page-37918149a8e909b0.js} +2 -2
  89. package/dist/.next/static/chunks/app/(application)/agents/edit/[id]/{page-e4a4693953329671.js.map → page-37918149a8e909b0.js.map} +1 -1
  90. package/dist/.next/static/chunks/app/(application)/agents/{page-b77c21a993c55901.js → page-9cff3b35b042d46a.js} +1 -1
  91. package/dist/.next/static/chunks/app/(application)/agents/{page-b77c21a993c55901.js.map → page-9cff3b35b042d46a.js.map} +1 -1
  92. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-53a99d8df53380c7.js +2 -0
  93. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-53a99d8df53380c7.js.map +1 -0
  94. package/dist/.next/static/chunks/app/(application)/chat/{layout-093baa26f89338bc.js → layout-ba702af6bb56baa2.js} +1 -1
  95. package/dist/.next/static/chunks/app/(application)/chat/{layout-093baa26f89338bc.js.map → layout-ba702af6bb56baa2.js.map} +1 -1
  96. package/dist/.next/static/chunks/app/(application)/chat/{page-8a1fcfb68cf9c8c0.js → page-8b00a98d285829b1.js} +1 -1
  97. package/dist/.next/static/chunks/app/(application)/chat/{page-8a1fcfb68cf9c8c0.js.map → page-8b00a98d285829b1.js.map} +1 -1
  98. package/dist/.next/static/chunks/app/(application)/configuration/{page-f315ede6d66922e6.js → page-1e978e117d5086a1.js} +1 -1
  99. package/dist/.next/static/chunks/app/(application)/configuration/{page-f315ede6d66922e6.js.map → page-1e978e117d5086a1.js.map} +1 -1
  100. package/dist/.next/static/chunks/app/(application)/dashboard/{page-4a1956febf5235b6.js → page-c54b4bc8d0ac4ac8.js} +1 -1
  101. package/dist/.next/static/chunks/app/(application)/dashboard/{page-4a1956febf5235b6.js.map → page-c54b4bc8d0ac4ac8.js.map} +1 -1
  102. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/{layout-0c7c1b0e1713bf60.js → layout-dfdb5c1cdc7ddefc.js} +2 -2
  103. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/{layout-0c7c1b0e1713bf60.js.map → layout-dfdb5c1cdc7ddefc.js.map} +1 -1
  104. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-faaee5fe82b45966.js +2 -0
  105. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-faaee5fe82b45966.js.map +1 -0
  106. package/dist/.next/static/chunks/app/(application)/evals/[id]/{page-a7728cf9b0524489.js → page-c956d9892676aa4f.js} +2 -2
  107. package/dist/.next/static/chunks/app/(application)/evals/[id]/page-c956d9892676aa4f.js.map +1 -0
  108. package/dist/.next/static/chunks/app/(application)/evals/cases/page-6b4dde82376e9aac.js +2 -0
  109. package/dist/.next/static/chunks/app/(application)/evals/cases/page-6b4dde82376e9aac.js.map +1 -0
  110. package/dist/.next/static/chunks/app/(application)/evals/{page-8b38d8d29f275704.js → page-944bfc4f0a001e4c.js} +1 -1
  111. package/dist/.next/static/chunks/app/(application)/evals/page-944bfc4f0a001e4c.js.map +1 -0
  112. package/dist/.next/static/chunks/app/(application)/explorer/page-07d67145bb176711.js +2 -0
  113. package/dist/.next/static/chunks/app/(application)/explorer/page-07d67145bb176711.js.map +1 -0
  114. package/dist/.next/static/chunks/app/(application)/keys/{page-afe59c91cc347208.js → page-6c0cd9ef20cd1461.js} +2 -2
  115. package/dist/.next/static/chunks/app/(application)/keys/{page-afe59c91cc347208.js.map → page-6c0cd9ef20cd1461.js.map} +1 -1
  116. package/dist/.next/static/chunks/app/(application)/projects/[project]/{page-f04fd5291a1ef7b1.js → page-5e2be54e76b8509c.js} +2 -2
  117. package/dist/.next/static/chunks/app/(application)/projects/[project]/{page-f04fd5291a1ef7b1.js.map → page-5e2be54e76b8509c.js.map} +1 -1
  118. package/dist/.next/static/chunks/app/(application)/projects/{layout-a8e1830ef3faafb9.js → layout-f2e0f42a08c96bb8.js} +1 -1
  119. package/dist/.next/static/chunks/app/(application)/projects/{layout-a8e1830ef3faafb9.js.map → layout-f2e0f42a08c96bb8.js.map} +1 -1
  120. package/dist/.next/static/chunks/app/(application)/prompts/{page-2c500e9898447506.js → page-2c03bbe32800acc3.js} +2 -2
  121. package/dist/.next/static/chunks/app/(application)/prompts/{page-2c500e9898447506.js.map → page-2c03bbe32800acc3.js.map} +1 -1
  122. package/dist/.next/static/chunks/app/(application)/roles/{page-873911198c17d9a7.js → page-b977b5c658004717.js} +1 -1
  123. package/dist/.next/static/chunks/app/(application)/roles/{page-873911198c17d9a7.js.map → page-b977b5c658004717.js.map} +1 -1
  124. package/dist/.next/static/chunks/app/(application)/token/{page-3acc39cb8a718331.js → page-08596ece49a811b9.js} +2 -2
  125. package/dist/.next/static/chunks/app/(application)/token/page-08596ece49a811b9.js.map +1 -0
  126. package/dist/.next/static/chunks/app/(application)/users/{page-0d7f0d7e80cd1436.js → page-49212081be40aeca.js} +2 -2
  127. package/dist/.next/static/chunks/app/(application)/users/{page-0d7f0d7e80cd1436.js.map → page-49212081be40aeca.js.map} +1 -1
  128. package/dist/.next/static/chunks/app/(application)/variables/create/{page-8ebf4e3d4d17443b.js → page-9ce762918374f616.js} +1 -1
  129. package/dist/.next/static/chunks/app/(application)/variables/create/{page-8ebf4e3d4d17443b.js.map → page-9ce762918374f616.js.map} +1 -1
  130. package/dist/.next/static/chunks/app/(application)/variables/edit/[variable_id]/{page-006145e82e054e72.js → page-0e2b7038546d9f7a.js} +1 -1
  131. package/dist/.next/static/chunks/app/(application)/variables/edit/[variable_id]/{page-006145e82e054e72.js.map → page-0e2b7038546d9f7a.js.map} +1 -1
  132. package/dist/.next/static/chunks/app/(application)/variables/{page-51a8aeece444d388.js → page-141d5d3f735454fe.js} +1 -1
  133. package/dist/.next/static/chunks/app/(application)/variables/{page-51a8aeece444d388.js.map → page-141d5d3f735454fe.js.map} +1 -1
  134. package/dist/.next/static/chunks/app/(application)/variables/usage/[variable_id]/{page-8f5cfc9565fd919a.js → page-fb1bb3ea6f7cae47.js} +1 -1
  135. package/dist/.next/static/chunks/app/(application)/variables/usage/[variable_id]/{page-8f5cfc9565fd919a.js.map → page-fb1bb3ea6f7cae47.js.map} +1 -1
  136. package/dist/.next/static/chunks/app/(application)/workflows/{page-e38f9456120dab69.js → page-2b839fdbc55c297b.js} +2 -2
  137. package/dist/.next/static/chunks/app/(application)/workflows/page-2b839fdbc55c297b.js.map +1 -0
  138. package/dist/.next/static/css/0f539b50cca35462.css +4 -0
  139. package/dist/.next/static/css/0f539b50cca35462.css.map +1 -0
  140. package/dist/.next/static/css/e3f2a16ab7676b05.css.map +1 -1
  141. package/package.json +1 -1
  142. package/dist/.next/static/chunks/1685-939396dad2f8f1e0.js +0 -2
  143. package/dist/.next/static/chunks/1685-939396dad2f8f1e0.js.map +0 -1
  144. package/dist/.next/static/chunks/3171-6996819b8863d41f.js +0 -2
  145. package/dist/.next/static/chunks/3171-6996819b8863d41f.js.map +0 -1
  146. package/dist/.next/static/chunks/3750-e3d1b2cccd265190.js.map +0 -1
  147. package/dist/.next/static/chunks/3832-d7782d6a2771ae6c.js.map +0 -1
  148. package/dist/.next/static/chunks/4419-b9be79d8cd46a97d.js +0 -2
  149. package/dist/.next/static/chunks/4419-b9be79d8cd46a97d.js.map +0 -1
  150. package/dist/.next/static/chunks/5110-098aa924c3108fa4.js +0 -2
  151. package/dist/.next/static/chunks/5110-098aa924c3108fa4.js.map +0 -1
  152. package/dist/.next/static/chunks/5825-efd4db1da512bd7f.js.map +0 -1
  153. package/dist/.next/static/chunks/6280-50b751f993f2fe4f.js +0 -2
  154. package/dist/.next/static/chunks/6280-50b751f993f2fe4f.js.map +0 -1
  155. package/dist/.next/static/chunks/6373-aef582adc575d3ca.js +0 -2
  156. package/dist/.next/static/chunks/6373-aef582adc575d3ca.js.map +0 -1
  157. package/dist/.next/static/chunks/9105-d8ff41060f7ffc85.js +0 -2
  158. package/dist/.next/static/chunks/9105-d8ff41060f7ffc85.js.map +0 -1
  159. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-d59534ca19eee51f.js +0 -2
  160. package/dist/.next/static/chunks/app/(application)/chat/[agent]/[session]/page-d59534ca19eee51f.js.map +0 -1
  161. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-7db6bfbf02606136.js +0 -2
  162. package/dist/.next/static/chunks/app/(application)/data/[[...query]]/page-7db6bfbf02606136.js.map +0 -1
  163. package/dist/.next/static/chunks/app/(application)/evals/[id]/page-a7728cf9b0524489.js.map +0 -1
  164. package/dist/.next/static/chunks/app/(application)/evals/cases/page-827f50c6d1f150d0.js +0 -2
  165. package/dist/.next/static/chunks/app/(application)/evals/cases/page-827f50c6d1f150d0.js.map +0 -1
  166. package/dist/.next/static/chunks/app/(application)/evals/page-8b38d8d29f275704.js.map +0 -1
  167. package/dist/.next/static/chunks/app/(application)/explorer/page-e6b1c034c07776e2.js +0 -2
  168. package/dist/.next/static/chunks/app/(application)/explorer/page-e6b1c034c07776e2.js.map +0 -1
  169. package/dist/.next/static/chunks/app/(application)/token/page-3acc39cb8a718331.js.map +0 -1
  170. package/dist/.next/static/chunks/app/(application)/workflows/page-e38f9456120dab69.js.map +0 -1
  171. package/dist/.next/static/css/9c08ae5d990a6b14.css +0 -4
  172. package/dist/.next/static/css/9c08ae5d990a6b14.css.map +0 -1
  173. /package/dist/.next/static/{3j63p6b3zZZB_v1Hn8Mxp → exslB-IPXi_veOKFA4L1Z}/_buildManifest.js +0 -0
  174. /package/dist/.next/static/{3j63p6b3zZZB_v1Hn8Mxp → exslB-IPXi_veOKFA4L1Z}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/chunks/4760-d5ceb992b68e35ca.js","mappings":"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AAAA,CAAA,KACAH,EAAAhI,IAAA,CAAAuI,OAAAC,YAAA,CAAAtJ,IACA,EAAAoJ,GAAA1C,GAAAjF,GAAA0H,MAIAnJ,EADAiJ,CAAAA,EAAAA,CAAA,SADAC,CAAAA,CADAA,EAAAF,EAAAb,UAAA,CAAA1G,IAAA,EACAiH,EAAAvI,MAAA,CAAAuI,CAAA,CAAAQ,EAAA,KAGAJ,EAAAhI,IAAA,CAAAuI,OAAAC,YAAA,CAAAtJ,IACA,EAAAoJ,EAEA,IAAA5B,EAAA,GACA,IAAA/F,EAAA,EAAgBA,EAAA2H,EAAY3H,IAAA+F,EAAA1G,IAAA,CAAAgI,CAAA,CAAArH,EAAA,CAAA0G,UAAA,KAC5B,OAAAX,CACA,CAOA,IAAAT,EAAA,GAOAX,EAAA,GAqBAmD,EAAA,CACA,6DACA,+DACA,kEACA,CAOAC,EAAA,CACA,iEACA,gEACA,iEACA,iEACA,iEACA,kEACA,iEACA,iEACA,iEACA,gEACA,kEACA,gEACA,gEACA,kEACA,gEACA,iEACA,iEACA,gEACA,gEACA,+DACA,gEACA,iEACA,iEACA,kEACA,gEACA,iEACA,iEACA,gEACA,kEACA,gEACA,kEACA,kEACA,iEACA,iEACA,iEACA,iEACA,8DACA,gEACA,+DACA,gEACA,gEACA,iEACA,iEACA,gEACA,iEACA,kEACA,kEACA,+DACA,kEACA,gEACA,iEACA,+DACA,iEACA,gEACA,gEACA,iEACA,kEACA,gEACA,8DACA,gEACA,iEACA,iEACA,iEACA,8DACA,kEACA,gEACA,+DACA,+DACA,kEACA,iEACA,iEACA,gEACA,gEACA,iEACA,iEACA,iEACA,kEACA,kEACA,iEACA,6DACA,iEACA,iEACA,kEACA,gEACA,iEACA,kEACA,iEACA,gEACA,gEACA,iEACA,gEACA,iEACA,iEACA,+DACA,iEACA,iEACA,kEACA,8DACA,iEACA,iEACA,6DACA,gEACA,iEACA,kEACA,gEACA,iEACA,kEACA,kEACA,iEACA,gEACA,+DACA,kEACA,kEACA,kEACA,kEACA,kEACA,iEACA,iEACA,iEACA,8DACA,kEACA,iEACA,4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","sources":["webpack://_N_E/../../../src/icons/check.ts","webpack://_N_E/../../../src/icons/chevron-down.ts","webpack://_N_E/../../../src/icons/copy.ts","webpack://_N_E/../../../src/icons/key.ts","webpack://_N_E/../../../src/icons/plus.ts","webpack://_N_E/../../../src/icons/search.ts","webpack://_N_E/../../../src/icons/trash-2.ts","webpack://_N_E/../../../src/icons/x.ts","webpack://_N_E/./node_modules/next/dist/build/polyfills/process.js","webpack://_N_E/./node_modules/next/dist/compiled/process/browser.js","webpack://_N_E/./node_modules/@apollo/client/react/hooks/internal/useIsomorphicLayoutEffect.js","webpack://_N_E/./node_modules/@apollo/client/react/hooks/useMutation.js","webpack://_N_E/./node_modules/bcryptjs/index.js"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('Check', [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]]);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('ChevronDown', [\n ['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }],\n]);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Copy\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHg9IjgiIHk9IjgiIHJ4PSIyIiByeT0iMiIgLz4KICA8cGF0aCBkPSJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/copy\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Copy = createLucideIcon('Copy', [\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2', key: '17jyea' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2', key: 'zix9uf' }],\n]);\n\nexport default Copy;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Key\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSI3LjUiIGN5PSIxNS41IiByPSI1LjUiIC8+CiAgPHBhdGggZD0ibTIxIDItOS42IDkuNiIgLz4KICA8cGF0aCBkPSJtMTUuNSA3LjUgMyAzTDIyIDdsLTMtMyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/key\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Key = createLucideIcon('Key', [\n ['circle', { cx: '7.5', cy: '15.5', r: '5.5', key: 'yqb3hr' }],\n ['path', { d: 'm21 2-9.6 9.6', key: '1j0ho8' }],\n ['path', { d: 'm15.5 7.5 3 3L22 7l-3-3', key: '1rn1fs' }],\n]);\n\nexport default Key;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Plus = createLucideIcon('Plus', [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n]);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjExIiByPSI4IiAvPgogIDxwYXRoIGQ9Im0yMSAyMS00LjMtNC4zIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/search\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Search = createLucideIcon('Search', [\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ['path', { d: 'm21 21-4.3-4.3', key: '1qie3q' }],\n]);\n\nexport default Search;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Trash2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyA2aDE4IiAvPgogIDxwYXRoIGQ9Ik0xOSA2djE0YzAgMS0xIDItMiAySDdjLTEgMC0yLTEtMi0yVjYiIC8+CiAgPHBhdGggZD0iTTggNlY0YzAtMSAxLTIgMi0yaDRjMSAwIDIgMSAyIDJ2MiIgLz4KICA8bGluZSB4MT0iMTAiIHgyPSIxMCIgeTE9IjExIiB5Mj0iMTciIC8+CiAgPGxpbmUgeDE9IjE0IiB4Mj0iMTQiIHkxPSIxMSIgeTI9IjE3IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/trash-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Trash2 = createLucideIcon('Trash2', [\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n ['path', { d: 'M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6', key: '4alrt4' }],\n ['path', { d: 'M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2', key: 'v07s0e' }],\n ['line', { x1: '10', x2: '10', y1: '11', y2: '17', key: '1uufr5' }],\n ['line', { x1: '14', x2: '14', y1: '11', y2: '17', key: 'xtxkd' }],\n]);\n\nexport default Trash2;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('X', [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n]);\n\nexport default X;\n","\"use strict\";\nvar _global_process, _global_process1;\nmodule.exports = ((_global_process = global.process) == null ? void 0 : _global_process.env) && typeof ((_global_process1 = global.process) == null ? void 0 : _global_process1.env) === \"object\" ? global.process : require(\"next/dist/compiled/process\");\n\n//# sourceMappingURL=process.js.map","(function(){var e={229:function(e){var t=e.exports={};var r;var n;function defaultSetTimout(){throw new Error(\"setTimeout has not been defined\")}function defaultClearTimeout(){throw new Error(\"clearTimeout has not been defined\")}(function(){try{if(typeof setTimeout===\"function\"){r=setTimeout}else{r=defaultSetTimout}}catch(e){r=defaultSetTimout}try{if(typeof clearTimeout===\"function\"){n=clearTimeout}else{n=defaultClearTimeout}}catch(e){n=defaultClearTimeout}})();function runTimeout(e){if(r===setTimeout){return setTimeout(e,0)}if((r===defaultSetTimout||!r)&&setTimeout){r=setTimeout;return setTimeout(e,0)}try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}function runClearTimeout(e){if(n===clearTimeout){return clearTimeout(e)}if((n===defaultClearTimeout||!n)&&clearTimeout){n=clearTimeout;return clearTimeout(e)}try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}var i=[];var o=false;var u;var a=-1;function cleanUpNextTick(){if(!o||!u){return}o=false;if(u.length){i=u.concat(i)}else{a=-1}if(i.length){drainQueue()}}function drainQueue(){if(o){return}var e=runTimeout(cleanUpNextTick);o=true;var t=i.length;while(t){u=i;i=[];while(++a<t){if(u){u[a].run()}}a=-1;t=i.length}u=null;o=false;runClearTimeout(e)}t.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1){for(var r=1;r<arguments.length;r++){t[r-1]=arguments[r]}}i.push(new Item(e,t));if(i.length===1&&!o){runTimeout(drainQueue)}};function Item(e,t){this.fun=e;this.array=t}Item.prototype.run=function(){this.fun.apply(null,this.array)};t.title=\"browser\";t.browser=true;t.env={};t.argv=[];t.version=\"\";t.versions={};function noop(){}t.on=noop;t.addListener=noop;t.once=noop;t.off=noop;t.removeListener=noop;t.removeAllListeners=noop;t.emit=noop;t.prependListener=noop;t.prependOnceListener=noop;t.listeners=function(e){return[]};t.binding=function(e){throw new Error(\"process.binding is not supported\")};t.cwd=function(){return\"/\"};t.chdir=function(e){throw new Error(\"process.chdir is not supported\")};t.umask=function(){return 0}}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var i=t[r]={exports:{}};var o=true;try{e[r](i,i.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r=__nccwpck_require__(229);module.exports=r})();","import * as React from \"rehackt\";\nimport { canUseDOM } from \"../../../utilities/index.js\";\n// use canUseDOM here instead of canUseLayoutEffect because we want to be able\n// to use useLayoutEffect in our jest tests. useLayoutEffect seems to work fine\n// in useSuspenseQuery tests, but to honor the original comment about the\n// warnings for useSyncExternalStore implementation, canUseLayoutEffect is left\n// alone.\nexport var useIsomorphicLayoutEffect = canUseDOM ? React.useLayoutEffect : React.useEffect;\n//# sourceMappingURL=useIsomorphicLayoutEffect.js.map","import { __assign } from \"tslib\";\nimport * as React from \"rehackt\";\nimport { mergeOptions } from \"../../utilities/index.js\";\nimport { equal } from \"@wry/equality\";\nimport { DocumentType, verifyDocumentType } from \"../parser/index.js\";\nimport { ApolloError } from \"../../errors/index.js\";\nimport { useApolloClient } from \"./useApolloClient.js\";\nimport { useIsomorphicLayoutEffect } from \"./internal/useIsomorphicLayoutEffect.js\";\n/**\n *\n *\n * > Refer to the [Mutations](https://www.apollographql.com/docs/react/data/mutations/) section for a more in-depth overview of `useMutation`.\n *\n * @example\n * ```jsx\n * import { gql, useMutation } from '@apollo/client';\n *\n * const ADD_TODO = gql`\n * mutation AddTodo($type: String!) {\n * addTodo(type: $type) {\n * id\n * type\n * }\n * }\n * `;\n *\n * function AddTodo() {\n * let input;\n * const [addTodo, { data }] = useMutation(ADD_TODO);\n *\n * return (\n * <div>\n * <form\n * onSubmit={e => {\n * e.preventDefault();\n * addTodo({ variables: { type: input.value } });\n * input.value = '';\n * }}\n * >\n * <input\n * ref={node => {\n * input = node;\n * }}\n * />\n * <button type=\"submit\">Add Todo</button>\n * </form>\n * </div>\n * );\n * }\n * ```\n * @since 3.0.0\n * @param mutation - A GraphQL mutation document parsed into an AST by `gql`.\n * @param options - Options to control how the mutation is executed.\n * @returns A tuple in the form of `[mutate, result]`\n */\nexport function useMutation(mutation, options) {\n var client = useApolloClient(options === null || options === void 0 ? void 0 : options.client);\n verifyDocumentType(mutation, DocumentType.Mutation);\n var _a = React.useState({\n called: false,\n loading: false,\n client: client,\n }), result = _a[0], setResult = _a[1];\n var ref = React.useRef({\n result: result,\n mutationId: 0,\n isMounted: true,\n client: client,\n mutation: mutation,\n options: options,\n });\n useIsomorphicLayoutEffect(function () {\n Object.assign(ref.current, { client: client, options: options, mutation: mutation });\n });\n var execute = React.useCallback(function (executeOptions) {\n if (executeOptions === void 0) { executeOptions = {}; }\n var _a = ref.current, options = _a.options, mutation = _a.mutation;\n var baseOptions = __assign(__assign({}, options), { mutation: mutation });\n var client = executeOptions.client || ref.current.client;\n if (!ref.current.result.loading &&\n !baseOptions.ignoreResults &&\n ref.current.isMounted) {\n setResult((ref.current.result = {\n loading: true,\n error: void 0,\n data: void 0,\n called: true,\n client: client,\n }));\n }\n var mutationId = ++ref.current.mutationId;\n var clientOptions = mergeOptions(baseOptions, executeOptions);\n return client\n .mutate(clientOptions)\n .then(function (response) {\n var _a, _b;\n var data = response.data, errors = response.errors;\n var error = errors && errors.length > 0 ?\n new ApolloError({ graphQLErrors: errors })\n : void 0;\n var onError = executeOptions.onError || ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError);\n if (error && onError) {\n onError(error, clientOptions);\n }\n if (mutationId === ref.current.mutationId &&\n !clientOptions.ignoreResults) {\n var result_1 = {\n called: true,\n loading: false,\n data: data,\n error: error,\n client: client,\n };\n if (ref.current.isMounted && !equal(ref.current.result, result_1)) {\n setResult((ref.current.result = result_1));\n }\n }\n var onCompleted = executeOptions.onCompleted || ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onCompleted);\n if (!error) {\n onCompleted === null || onCompleted === void 0 ? void 0 : onCompleted(response.data, clientOptions);\n }\n return response;\n }, function (error) {\n var _a;\n if (mutationId === ref.current.mutationId &&\n ref.current.isMounted) {\n var result_2 = {\n loading: false,\n error: error,\n data: void 0,\n called: true,\n client: client,\n };\n if (!equal(ref.current.result, result_2)) {\n setResult((ref.current.result = result_2));\n }\n }\n var onError = executeOptions.onError || ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError);\n if (onError) {\n onError(error, clientOptions);\n // TODO(brian): why are we returning this here???\n return { data: void 0, errors: error };\n }\n throw error;\n });\n }, []);\n var reset = React.useCallback(function () {\n if (ref.current.isMounted) {\n var result_3 = {\n called: false,\n loading: false,\n client: ref.current.client,\n };\n Object.assign(ref.current, { mutationId: 0, result: result_3 });\n setResult(result_3);\n }\n }, []);\n React.useEffect(function () {\n var current = ref.current;\n // eslint-disable-next-line react-compiler/react-compiler\n current.isMounted = true;\n return function () {\n current.isMounted = false;\n };\n }, []);\n return [execute, __assign({ reset: reset }, result)];\n}\n//# sourceMappingURL=useMutation.js.map","/*\n Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>\n Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>\n Copyright (c) 2025 Daniel Wirtz <dcode@dcode.io>\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n 3. The name of the author may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// The Node.js crypto module is used as a fallback for the Web Crypto API. When\n// building for the browser, inclusion of the crypto module should be disabled,\n// which the package hints at in its package.json for bundlers that support it.\nimport nodeCrypto from \"crypto\";\n\n/**\n * The random implementation to use as a fallback.\n * @type {?function(number):!Array.<number>}\n * @inner\n */\nvar randomFallback = null;\n\n/**\n * Generates cryptographically secure random bytes.\n * @function\n * @param {number} len Bytes length\n * @returns {!Array.<number>} Random bytes\n * @throws {Error} If no random implementation is available\n * @inner\n */\nfunction randomBytes(len) {\n // Web Crypto API. Globally available in the browser and in Node.js >=23.\n try {\n return crypto.getRandomValues(new Uint8Array(len));\n } catch {}\n // Node.js crypto module for non-browser environments.\n try {\n return nodeCrypto.randomBytes(len);\n } catch {}\n // Custom fallback specified with `setRandomFallback`.\n if (!randomFallback) {\n throw Error(\n \"Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative\",\n );\n }\n return randomFallback(len);\n}\n\n/**\n * Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto\n * API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it\n * is seeded properly!\n * @param {?function(number):!Array.<number>} random Function taking the number of bytes to generate as its\n * sole argument, returning the corresponding array of cryptographically secure random byte values.\n * @see http://nodejs.org/api/crypto.html\n * @see http://www.w3.org/TR/WebCryptoAPI/\n */\nexport function setRandomFallback(random) {\n randomFallback = random;\n}\n\n/**\n * Synchronously generates a salt.\n * @param {number=} rounds Number of rounds to use, defaults to 10 if omitted\n * @param {number=} seed_length Not supported.\n * @returns {string} Resulting salt\n * @throws {Error} If a random fallback is required but not set\n */\nexport function genSaltSync(rounds, seed_length) {\n rounds = rounds || GENSALT_DEFAULT_LOG2_ROUNDS;\n if (typeof rounds !== \"number\")\n throw Error(\n \"Illegal arguments: \" + typeof rounds + \", \" + typeof seed_length,\n );\n if (rounds < 4) rounds = 4;\n else if (rounds > 31) rounds = 31;\n var salt = [];\n salt.push(\"$2b$\");\n if (rounds < 10) salt.push(\"0\");\n salt.push(rounds.toString());\n salt.push(\"$\");\n salt.push(base64_encode(randomBytes(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)); // May throw\n return salt.join(\"\");\n}\n\n/**\n * Asynchronously generates a salt.\n * @param {(number|function(Error, string=))=} rounds Number of rounds to use, defaults to 10 if omitted\n * @param {(number|function(Error, string=))=} seed_length Not supported.\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting salt\n * @returns {!Promise} If `callback` has been omitted\n * @throws {Error} If `callback` is present but not a function\n */\nexport function genSalt(rounds, seed_length, callback) {\n if (typeof seed_length === \"function\")\n (callback = seed_length), (seed_length = undefined); // Not supported.\n if (typeof rounds === \"function\") (callback = rounds), (rounds = undefined);\n if (typeof rounds === \"undefined\") rounds = GENSALT_DEFAULT_LOG2_ROUNDS;\n else if (typeof rounds !== \"number\")\n throw Error(\"illegal arguments: \" + typeof rounds);\n\n function _async(callback) {\n nextTick(function () {\n // Pretty thin, but salting is fast enough\n try {\n callback(null, genSaltSync(rounds));\n } catch (err) {\n callback(err);\n }\n });\n }\n\n if (callback) {\n if (typeof callback !== \"function\")\n throw Error(\"Illegal callback: \" + typeof callback);\n _async(callback);\n } else\n return new Promise(function (resolve, reject) {\n _async(function (err, res) {\n if (err) {\n reject(err);\n return;\n }\n resolve(res);\n });\n });\n}\n\n/**\n * Synchronously generates a hash for the given password.\n * @param {string} password Password to hash\n * @param {(number|string)=} salt Salt length to generate or salt to use, default to 10\n * @returns {string} Resulting hash\n */\nexport function hashSync(password, salt) {\n if (typeof salt === \"undefined\") salt = GENSALT_DEFAULT_LOG2_ROUNDS;\n if (typeof salt === \"number\") salt = genSaltSync(salt);\n if (typeof password !== \"string\" || typeof salt !== \"string\")\n throw Error(\"Illegal arguments: \" + typeof password + \", \" + typeof salt);\n return _hash(password, salt);\n}\n\n/**\n * Asynchronously generates a hash for the given password.\n * @param {string} password Password to hash\n * @param {number|string} salt Salt length to generate or salt to use\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash\n * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\n * @returns {!Promise} If `callback` has been omitted\n * @throws {Error} If `callback` is present but not a function\n */\nexport function hash(password, salt, callback, progressCallback) {\n function _async(callback) {\n if (typeof password === \"string\" && typeof salt === \"number\")\n genSalt(salt, function (err, salt) {\n _hash(password, salt, callback, progressCallback);\n });\n else if (typeof password === \"string\" && typeof salt === \"string\")\n _hash(password, salt, callback, progressCallback);\n else\n nextTick(\n callback.bind(\n this,\n Error(\"Illegal arguments: \" + typeof password + \", \" + typeof salt),\n ),\n );\n }\n\n if (callback) {\n if (typeof callback !== \"function\")\n throw Error(\"Illegal callback: \" + typeof callback);\n _async(callback);\n } else\n return new Promise(function (resolve, reject) {\n _async(function (err, res) {\n if (err) {\n reject(err);\n return;\n }\n resolve(res);\n });\n });\n}\n\n/**\n * Compares two strings of the same length in constant time.\n * @param {string} known Must be of the correct length\n * @param {string} unknown Must be the same length as `known`\n * @returns {boolean}\n * @inner\n */\nfunction safeStringCompare(known, unknown) {\n var diff = known.length ^ unknown.length;\n for (var i = 0; i < known.length; ++i) {\n diff |= known.charCodeAt(i) ^ unknown.charCodeAt(i);\n }\n return diff === 0;\n}\n\n/**\n * Synchronously tests a password against a hash.\n * @param {string} password Password to compare\n * @param {string} hash Hash to test against\n * @returns {boolean} true if matching, otherwise false\n * @throws {Error} If an argument is illegal\n */\nexport function compareSync(password, hash) {\n if (typeof password !== \"string\" || typeof hash !== \"string\")\n throw Error(\"Illegal arguments: \" + typeof password + \", \" + typeof hash);\n if (hash.length !== 60) return false;\n return safeStringCompare(\n hashSync(password, hash.substring(0, hash.length - 31)),\n hash,\n );\n}\n\n/**\n * Asynchronously tests a password against a hash.\n * @param {string} password Password to compare\n * @param {string} hashValue Hash to test against\n * @param {function(Error, boolean)=} callback Callback receiving the error, if any, otherwise the result\n * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\n * @returns {!Promise} If `callback` has been omitted\n * @throws {Error} If `callback` is present but not a function\n */\nexport function compare(password, hashValue, callback, progressCallback) {\n function _async(callback) {\n if (typeof password !== \"string\" || typeof hashValue !== \"string\") {\n nextTick(\n callback.bind(\n this,\n Error(\n \"Illegal arguments: \" + typeof password + \", \" + typeof hashValue,\n ),\n ),\n );\n return;\n }\n if (hashValue.length !== 60) {\n nextTick(callback.bind(this, null, false));\n return;\n }\n hash(\n password,\n hashValue.substring(0, 29),\n function (err, comp) {\n if (err) callback(err);\n else callback(null, safeStringCompare(comp, hashValue));\n },\n progressCallback,\n );\n }\n\n if (callback) {\n if (typeof callback !== \"function\")\n throw Error(\"Illegal callback: \" + typeof callback);\n _async(callback);\n } else\n return new Promise(function (resolve, reject) {\n _async(function (err, res) {\n if (err) {\n reject(err);\n return;\n }\n resolve(res);\n });\n });\n}\n\n/**\n * Gets the number of rounds used to encrypt the specified hash.\n * @param {string} hash Hash to extract the used number of rounds from\n * @returns {number} Number of rounds used\n * @throws {Error} If `hash` is not a string\n */\nexport function getRounds(hash) {\n if (typeof hash !== \"string\")\n throw Error(\"Illegal arguments: \" + typeof hash);\n return parseInt(hash.split(\"$\")[2], 10);\n}\n\n/**\n * Gets the salt portion from a hash. Does not validate the hash.\n * @param {string} hash Hash to extract the salt from\n * @returns {string} Extracted salt part\n * @throws {Error} If `hash` is not a string or otherwise invalid\n */\nexport function getSalt(hash) {\n if (typeof hash !== \"string\")\n throw Error(\"Illegal arguments: \" + typeof hash);\n if (hash.length !== 60)\n throw Error(\"Illegal hash length: \" + hash.length + \" != 60\");\n return hash.substring(0, 29);\n}\n\n/**\n * Tests if a password will be truncated when hashed, that is its length is\n * greater than 72 bytes when converted to UTF-8.\n * @param {string} password The password to test\n * @returns {boolean} `true` if truncated, otherwise `false`\n */\nexport function truncates(password) {\n if (typeof password !== \"string\")\n throw Error(\"Illegal arguments: \" + typeof password);\n return utf8Length(password) > 72;\n}\n\n/**\n * Continues with the callback on the next tick.\n * @function\n * @param {function(...[*])} callback Callback to execute\n * @inner\n */\nvar nextTick =\n typeof process !== \"undefined\" &&\n process &&\n typeof process.nextTick === \"function\"\n ? typeof setImmediate === \"function\"\n ? setImmediate\n : process.nextTick\n : setTimeout;\n\n/** Calculates the byte length of a string encoded as UTF8. */\nfunction utf8Length(string) {\n var len = 0,\n c = 0;\n for (var i = 0; i < string.length; ++i) {\n c = string.charCodeAt(i);\n if (c < 128) len += 1;\n else if (c < 2048) len += 2;\n else if (\n (c & 0xfc00) === 0xd800 &&\n (string.charCodeAt(i + 1) & 0xfc00) === 0xdc00\n ) {\n ++i;\n len += 4;\n } else len += 3;\n }\n return len;\n}\n\n/** Converts a string to an array of UTF8 bytes. */\nfunction utf8Array(string) {\n var offset = 0,\n c1,\n c2;\n var buffer = new Array(utf8Length(string));\n for (var i = 0, k = string.length; i < k; ++i) {\n c1 = string.charCodeAt(i);\n if (c1 < 128) {\n buffer[offset++] = c1;\n } else if (c1 < 2048) {\n buffer[offset++] = (c1 >> 6) | 192;\n buffer[offset++] = (c1 & 63) | 128;\n } else if (\n (c1 & 0xfc00) === 0xd800 &&\n ((c2 = string.charCodeAt(i + 1)) & 0xfc00) === 0xdc00\n ) {\n c1 = 0x10000 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff);\n ++i;\n buffer[offset++] = (c1 >> 18) | 240;\n buffer[offset++] = ((c1 >> 12) & 63) | 128;\n buffer[offset++] = ((c1 >> 6) & 63) | 128;\n buffer[offset++] = (c1 & 63) | 128;\n } else {\n buffer[offset++] = (c1 >> 12) | 224;\n buffer[offset++] = ((c1 >> 6) & 63) | 128;\n buffer[offset++] = (c1 & 63) | 128;\n }\n }\n return buffer;\n}\n\n// A base64 implementation for the bcrypt algorithm. This is partly non-standard.\n\n/**\n * bcrypt's own non-standard base64 dictionary.\n * @type {!Array.<string>}\n * @const\n * @inner\n **/\nvar BASE64_CODE =\n \"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\");\n\n/**\n * @type {!Array.<number>}\n * @const\n * @inner\n **/\nvar BASE64_INDEX = [\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n -1, -1, -1, -1, -1, -1, -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28,\n 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1,\n];\n\n/**\n * Encodes a byte array to base64 with up to len bytes of input.\n * @param {!Array.<number>} b Byte array\n * @param {number} len Maximum input length\n * @returns {string}\n * @inner\n */\nfunction base64_encode(b, len) {\n var off = 0,\n rs = [],\n c1,\n c2;\n if (len <= 0 || len > b.length) throw Error(\"Illegal len: \" + len);\n while (off < len) {\n c1 = b[off++] & 0xff;\n rs.push(BASE64_CODE[(c1 >> 2) & 0x3f]);\n c1 = (c1 & 0x03) << 4;\n if (off >= len) {\n rs.push(BASE64_CODE[c1 & 0x3f]);\n break;\n }\n c2 = b[off++] & 0xff;\n c1 |= (c2 >> 4) & 0x0f;\n rs.push(BASE64_CODE[c1 & 0x3f]);\n c1 = (c2 & 0x0f) << 2;\n if (off >= len) {\n rs.push(BASE64_CODE[c1 & 0x3f]);\n break;\n }\n c2 = b[off++] & 0xff;\n c1 |= (c2 >> 6) & 0x03;\n rs.push(BASE64_CODE[c1 & 0x3f]);\n rs.push(BASE64_CODE[c2 & 0x3f]);\n }\n return rs.join(\"\");\n}\n\n/**\n * Decodes a base64 encoded string to up to len bytes of output.\n * @param {string} s String to decode\n * @param {number} len Maximum output length\n * @returns {!Array.<number>}\n * @inner\n */\nfunction base64_decode(s, len) {\n var off = 0,\n slen = s.length,\n olen = 0,\n rs = [],\n c1,\n c2,\n c3,\n c4,\n o,\n code;\n if (len <= 0) throw Error(\"Illegal len: \" + len);\n while (off < slen - 1 && olen < len) {\n code = s.charCodeAt(off++);\n c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n code = s.charCodeAt(off++);\n c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n if (c1 == -1 || c2 == -1) break;\n o = (c1 << 2) >>> 0;\n o |= (c2 & 0x30) >> 4;\n rs.push(String.fromCharCode(o));\n if (++olen >= len || off >= slen) break;\n code = s.charCodeAt(off++);\n c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n if (c3 == -1) break;\n o = ((c2 & 0x0f) << 4) >>> 0;\n o |= (c3 & 0x3c) >> 2;\n rs.push(String.fromCharCode(o));\n if (++olen >= len || off >= slen) break;\n code = s.charCodeAt(off++);\n c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n o = ((c3 & 0x03) << 6) >>> 0;\n o |= c4;\n rs.push(String.fromCharCode(o));\n ++olen;\n }\n var res = [];\n for (off = 0; off < olen; off++) res.push(rs[off].charCodeAt(0));\n return res;\n}\n\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar BCRYPT_SALT_LEN = 16;\n\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar GENSALT_DEFAULT_LOG2_ROUNDS = 10;\n\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar BLOWFISH_NUM_ROUNDS = 16;\n\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar MAX_EXECUTION_TIME = 100;\n\n/**\n * @type {Array.<number>}\n * @const\n * @inner\n */\nvar P_ORIG = [\n 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,\n 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,\n 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b,\n];\n\n/**\n * @type {Array.<number>}\n * @const\n * @inner\n */\nvar S_ORIG = [\n 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96,\n 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,\n 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658,\n 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,\n 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,\n 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,\n 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6,\n 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,\n 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c,\n 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,\n 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1,\n 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,\n 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a,\n 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,\n 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,\n 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,\n 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706,\n 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,\n 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b,\n 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\n 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c,\n 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,\n 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a,\n 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,\n 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,\n 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,\n 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8,\n 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,\n 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33,\n 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,\n 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0,\n 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,\n 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777,\n 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,\n 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,\n 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,\n 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e,\n 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,\n 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9,\n 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\n 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f,\n 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,\n 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, 0x4b7a70e9, 0xb5b32944,\n 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,\n 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29,\n 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,\n 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, 0x4cdd2086, 0x8470eb26,\n 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,\n 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c,\n 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,\n 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9, 0x7ca92ff6,\n 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,\n 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f,\n 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,\n 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810,\n 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,\n 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa,\n 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,\n 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55,\n 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,\n 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1,\n 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,\n 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, 0xc6150eba, 0x94e2ea78,\n 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,\n 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883,\n 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,\n 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, 0x1521b628, 0x29076170,\n 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,\n 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7,\n 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,\n 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19, 0x875fa099,\n 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,\n 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263,\n 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,\n 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3,\n 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,\n 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7,\n 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,\n 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d,\n 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,\n 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460,\n 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,\n 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, 0x9e447a2e, 0xc3453484,\n 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,\n 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a,\n 0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,\n 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a,\n 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,\n 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785,\n 0x7fac6dd0, 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,\n 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900,\n 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,\n 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9,\n 0xee39d7ab, 0x3b124e8b, 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,\n 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397,\n 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,\n 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9,\n 0x5ef47e1c, 0x9029317c, 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,\n 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f,\n 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,\n 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e,\n 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,\n 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd,\n 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,\n 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8,\n 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,\n 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c,\n 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,\n 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b,\n 0x12754ccc, 0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,\n 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386,\n 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,\n 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0,\n 0x7745ae04, 0xd736fccc, 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,\n 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2,\n 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,\n 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770,\n 0x8cd55591, 0xc902de4c, 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,\n 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c,\n 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,\n 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa,\n 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,\n 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63,\n 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,\n 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9,\n 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,\n 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4,\n 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,\n 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742,\n 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,\n 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79,\n 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,\n 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a,\n 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,\n 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,\n 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,\n 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797,\n 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,\n 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6,\n 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\n 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba,\n 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,\n 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5,\n 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,\n 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,\n 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,\n 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd,\n 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,\n 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb,\n 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,\n 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc,\n 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,\n 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc,\n 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,\n 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,\n 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,\n 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a,\n 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,\n 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b,\n 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\n 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e,\n 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,\n 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623,\n 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,\n 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,\n 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,\n 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3,\n 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,\n 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c,\n 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,\n 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,\n];\n\n/**\n * @type {Array.<number>}\n * @const\n * @inner\n */\nvar C_ORIG = [\n 0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, 0x63727944, 0x6f756274,\n];\n\n/**\n * @param {Array.<number>} lr\n * @param {number} off\n * @param {Array.<number>} P\n * @param {Array.<number>} S\n * @returns {Array.<number>}\n * @inner\n */\nfunction _encipher(lr, off, P, S) {\n // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt\n var n,\n l = lr[off],\n r = lr[off + 1];\n\n l ^= P[0];\n\n /*\n for (var i=0, k=BLOWFISH_NUM_ROUNDS-2; i<=k;)\n // Feistel substitution on left word\n n = S[l >>> 24],\n n += S[0x100 | ((l >> 16) & 0xff)],\n n ^= S[0x200 | ((l >> 8) & 0xff)],\n n += S[0x300 | (l & 0xff)],\n r ^= n ^ P[++i],\n // Feistel substitution on right word\n n = S[r >>> 24],\n n += S[0x100 | ((r >> 16) & 0xff)],\n n ^= S[0x200 | ((r >> 8) & 0xff)],\n n += S[0x300 | (r & 0xff)],\n l ^= n ^ P[++i];\n */\n\n //The following is an unrolled version of the above loop.\n //Iteration 0\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[1];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[2];\n //Iteration 1\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[3];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[4];\n //Iteration 2\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[5];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[6];\n //Iteration 3\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[7];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[8];\n //Iteration 4\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[9];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[10];\n //Iteration 5\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[11];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[12];\n //Iteration 6\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[13];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[14];\n //Iteration 7\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[15];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[16];\n\n lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];\n lr[off + 1] = l;\n return lr;\n}\n\n/**\n * @param {Array.<number>} data\n * @param {number} offp\n * @returns {{key: number, offp: number}}\n * @inner\n */\nfunction _streamtoword(data, offp) {\n for (var i = 0, word = 0; i < 4; ++i)\n (word = (word << 8) | (data[offp] & 0xff)),\n (offp = (offp + 1) % data.length);\n return { key: word, offp: offp };\n}\n\n/**\n * @param {Array.<number>} key\n * @param {Array.<number>} P\n * @param {Array.<number>} S\n * @inner\n */\nfunction _key(key, P, S) {\n var offset = 0,\n lr = [0, 0],\n plen = P.length,\n slen = S.length,\n sw;\n for (var i = 0; i < plen; i++)\n (sw = _streamtoword(key, offset)),\n (offset = sw.offp),\n (P[i] = P[i] ^ sw.key);\n for (i = 0; i < plen; i += 2)\n (lr = _encipher(lr, 0, P, S)), (P[i] = lr[0]), (P[i + 1] = lr[1]);\n for (i = 0; i < slen; i += 2)\n (lr = _encipher(lr, 0, P, S)), (S[i] = lr[0]), (S[i + 1] = lr[1]);\n}\n\n/**\n * Expensive key schedule Blowfish.\n * @param {Array.<number>} data\n * @param {Array.<number>} key\n * @param {Array.<number>} P\n * @param {Array.<number>} S\n * @inner\n */\nfunction _ekskey(data, key, P, S) {\n var offp = 0,\n lr = [0, 0],\n plen = P.length,\n slen = S.length,\n sw;\n for (var i = 0; i < plen; i++)\n (sw = _streamtoword(key, offp)), (offp = sw.offp), (P[i] = P[i] ^ sw.key);\n offp = 0;\n for (i = 0; i < plen; i += 2)\n (sw = _streamtoword(data, offp)),\n (offp = sw.offp),\n (lr[0] ^= sw.key),\n (sw = _streamtoword(data, offp)),\n (offp = sw.offp),\n (lr[1] ^= sw.key),\n (lr = _encipher(lr, 0, P, S)),\n (P[i] = lr[0]),\n (P[i + 1] = lr[1]);\n for (i = 0; i < slen; i += 2)\n (sw = _streamtoword(data, offp)),\n (offp = sw.offp),\n (lr[0] ^= sw.key),\n (sw = _streamtoword(data, offp)),\n (offp = sw.offp),\n (lr[1] ^= sw.key),\n (lr = _encipher(lr, 0, P, S)),\n (S[i] = lr[0]),\n (S[i + 1] = lr[1]);\n}\n\n/**\n * Internaly crypts a string.\n * @param {Array.<number>} b Bytes to crypt\n * @param {Array.<number>} salt Salt bytes to use\n * @param {number} rounds Number of rounds\n * @param {function(Error, Array.<number>=)=} callback Callback receiving the error, if any, and the resulting bytes. If\n * omitted, the operation will be performed synchronously.\n * @param {function(number)=} progressCallback Callback called with the current progress\n * @returns {!Array.<number>|undefined} Resulting bytes if callback has been omitted, otherwise `undefined`\n * @inner\n */\nfunction _crypt(b, salt, rounds, callback, progressCallback) {\n var cdata = C_ORIG.slice(),\n clen = cdata.length,\n err;\n\n // Validate\n if (rounds < 4 || rounds > 31) {\n err = Error(\"Illegal number of rounds (4-31): \" + rounds);\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n if (salt.length !== BCRYPT_SALT_LEN) {\n err = Error(\n \"Illegal salt length: \" + salt.length + \" != \" + BCRYPT_SALT_LEN,\n );\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n rounds = (1 << rounds) >>> 0;\n\n var P,\n S,\n i = 0,\n j;\n\n //Use typed arrays when available - huge speedup!\n if (typeof Int32Array === \"function\") {\n P = new Int32Array(P_ORIG);\n S = new Int32Array(S_ORIG);\n } else {\n P = P_ORIG.slice();\n S = S_ORIG.slice();\n }\n\n _ekskey(salt, b, P, S);\n\n /**\n * Calcualtes the next round.\n * @returns {Array.<number>|undefined} Resulting array if callback has been omitted, otherwise `undefined`\n * @inner\n */\n function next() {\n if (progressCallback) progressCallback(i / rounds);\n if (i < rounds) {\n var start = Date.now();\n for (; i < rounds; ) {\n i = i + 1;\n _key(b, P, S);\n _key(salt, P, S);\n if (Date.now() - start > MAX_EXECUTION_TIME) break;\n }\n } else {\n for (i = 0; i < 64; i++)\n for (j = 0; j < clen >> 1; j++) _encipher(cdata, j << 1, P, S);\n var ret = [];\n for (i = 0; i < clen; i++)\n ret.push(((cdata[i] >> 24) & 0xff) >>> 0),\n ret.push(((cdata[i] >> 16) & 0xff) >>> 0),\n ret.push(((cdata[i] >> 8) & 0xff) >>> 0),\n ret.push((cdata[i] & 0xff) >>> 0);\n if (callback) {\n callback(null, ret);\n return;\n } else return ret;\n }\n if (callback) nextTick(next);\n }\n\n // Async\n if (typeof callback !== \"undefined\") {\n next();\n\n // Sync\n } else {\n var res;\n while (true) if (typeof (res = next()) !== \"undefined\") return res || [];\n }\n}\n\n/**\n * Internally hashes a password.\n * @param {string} password Password to hash\n * @param {?string} salt Salt to use, actually never null\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash. If omitted,\n * hashing is performed synchronously.\n * @param {function(number)=} progressCallback Callback called with the current progress\n * @returns {string|undefined} Resulting hash if callback has been omitted, otherwise `undefined`\n * @inner\n */\nfunction _hash(password, salt, callback, progressCallback) {\n var err;\n if (typeof password !== \"string\" || typeof salt !== \"string\") {\n err = Error(\"Invalid string / salt: Not a string\");\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n\n // Validate the salt\n var minor, offset;\n if (salt.charAt(0) !== \"$\" || salt.charAt(1) !== \"2\") {\n err = Error(\"Invalid salt version: \" + salt.substring(0, 2));\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n if (salt.charAt(2) === \"$\") (minor = String.fromCharCode(0)), (offset = 3);\n else {\n minor = salt.charAt(2);\n if (\n (minor !== \"a\" && minor !== \"b\" && minor !== \"y\") ||\n salt.charAt(3) !== \"$\"\n ) {\n err = Error(\"Invalid salt revision: \" + salt.substring(2, 4));\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n offset = 4;\n }\n\n // Extract number of rounds\n if (salt.charAt(offset + 2) > \"$\") {\n err = Error(\"Missing salt rounds\");\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n var r1 = parseInt(salt.substring(offset, offset + 1), 10) * 10,\n r2 = parseInt(salt.substring(offset + 1, offset + 2), 10),\n rounds = r1 + r2,\n real_salt = salt.substring(offset + 3, offset + 25);\n password += minor >= \"a\" ? \"\\x00\" : \"\";\n\n var passwordb = utf8Array(password),\n saltb = base64_decode(real_salt, BCRYPT_SALT_LEN);\n\n /**\n * Finishes hashing.\n * @param {Array.<number>} bytes Byte array\n * @returns {string}\n * @inner\n */\n function finish(bytes) {\n var res = [];\n res.push(\"$2\");\n if (minor >= \"a\") res.push(minor);\n res.push(\"$\");\n if (rounds < 10) res.push(\"0\");\n res.push(rounds.toString());\n res.push(\"$\");\n res.push(base64_encode(saltb, saltb.length));\n res.push(base64_encode(bytes, C_ORIG.length * 4 - 1));\n return res.join(\"\");\n }\n\n // Sync\n if (typeof callback == \"undefined\")\n return finish(_crypt(passwordb, saltb, rounds));\n // Async\n else {\n _crypt(\n passwordb,\n saltb,\n rounds,\n function (err, bytes) {\n if (err) callback(err, null);\n else callback(null, finish(bytes));\n },\n progressCallback,\n );\n }\n}\n\n/**\n * Encodes a byte array to base64 with up to len bytes of input, using the custom bcrypt alphabet.\n * @function\n * @param {!Array.<number>} bytes Byte array\n * @param {number} length Maximum input length\n * @returns {string}\n */\nexport function encodeBase64(bytes, length) {\n return base64_encode(bytes, length);\n}\n\n/**\n * Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet.\n * @function\n * @param {string} string String to decode\n * @param {number} length Maximum output length\n * @returns {!Array.<number>}\n */\nexport function decodeBase64(string, length) {\n return base64_decode(string, length);\n}\n\nexport default {\n setRandomFallback,\n genSaltSync,\n genSalt,\n hashSync,\n hash,\n compareSync,\n compare,\n getRounds,\n getSalt,\n truncates,\n encodeBase64,\n decodeBase64,\n};\n"],"names":["Check","createLucideIcon","d","key","ChevronDown","Copy","width","height","x","y","rx","ry","Key","cx","cy","r","Plus","Search","Trash2","x1","x2","y1","y2","X","_global_process","_global_process1","module","exports","__webpack_require__","g","process","env","e","n","u","t","defaultSetTimout","defaultClearTimeout","runTimeout","setTimeout","call","clearTimeout","i","o","a","cleanUpNextTick","length","concat","drainQueue","run","runClearTimeout","Item","fun","array","noop","nextTick","arguments","push","prototype","apply","title","browser","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","__nccwpck_require__","undefined","ab","__dirname","useIsomorphicLayoutEffect","canUse","Nq","rehackt","useLayoutEffect","useEffect","useMutation","mutation","options","client","useApolloClient","parser","Vp","n_","Mutation","_a","useState","called","loading","result","setResult","ref","useRef","mutationId","isMounted","Object","assign","current","execute","useCallback","executeOptions","baseOptions","tslib_es6","pi","ignoreResults","error","data","clientOptions","mergeOptions","J","mutate","then","response","_b","errors","client_errors","cA","graphQLErrors","onError","result_1","lib","D","onCompleted","result_2","reset","result_3","randomFallback","genSaltSync","rounds","seed_length","GENSALT_DEFAULT_LOG2_ROUNDS","Error","salt","toString","base64_encode","randomBytes","len","crypto","getRandomValues","Uint8Array","crypto__WEBPACK_IMPORTED_MODULE_0__","BCRYPT_SALT_LEN","join","genSalt","callback","_async","err","Promise","resolve","reject","res","hashSync","password","_hash","hash","progressCallback","bind","safeStringCompare","known","unknown","diff","charCodeAt","setImmediate","utf8Length","string","c","BASE64_CODE","split","BASE64_INDEX","b","c1","c2","rs","base64_decode","s","c3","code","slen","olen","String","fromCharCode","P_ORIG","S_ORIG","C_ORIG","_encipher","lr","P","S","l","BLOWFISH_NUM_ROUNDS","_streamtoword","offp","word","_key","sw","offset","plen","_crypt","cdata","slice","clen","j","next","start","Date","now","ret","Int32Array","_ekskey","charAt","substring","minor","r1","parseInt","real_salt","passwordb","utf8Array","buffer","k","saltb","finish","bytes","__webpack_exports__","ZP","setRandomFallback","random","compareSync","compare","hashValue","comp","getRounds","getSalt","truncates","encodeBase64","decodeBase64"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6367],{76367:function(e,s,t){t.d(s,{$:function(){return S}});var a=t(57437),i=t(2265),l=t(66070),n=t(62869),r=t(35974),c=t(84190),d=t(31810),o=t(17684),m=t(78867),u=t(15868),x=t(18930),h=t(82222),p=t(42488),v=t(53417),f=t(92369),j=t(31047),g=t(91723),N=t(84544),w=t(12194),y=t(35283),b=t(14438),C=t(7211),_=t(27689),A=t(7598);function S(e){var s,t;let{prompt:S,user:D,onUpdate:Z}=e,[k,P]=(0,i.useState)(!1),[z,F]=(0,i.useState)(!1),[E]=(0,w.iJ)(),{toggleFavorite:B}=(0,w.Lq)(),R=function(e,s){var t,a,i,l;let n="private"===e.rights_mode,r="public"===e.rights_mode,c="users"===e.rights_mode,d="roles"===e.rights_mode,o=s.super_admin,m=e.created_by===s.id.toString(),u=!1;if(m&&(u=!0),!n||m||o||(u=!1),r&&(u=!0),c){let i=null===(a=e.RBAC)||void 0===a?void 0:null===(t=a.users)||void 0===t?void 0:t.find(e=>e.id===s.id);u=(null==i?void 0:i.rights)==="write"}if(d){let t=null===(l=e.RBAC)||void 0===l?void 0:null===(i=l.roles)||void 0===i?void 0:i.find(e=>{var t;return e.id===(null===(t=s.role)||void 0===t?void 0:t.id)});u=(null==t?void 0:t.rights)==="write"}return o&&(u=!0),u}(S,D),I=(0,N.H)(S.content),M=S.is_favorited||!1,{data:U}=(0,C.aM)(_.W9,{variables:{ids:S.assigned_agents||[]},skip:!S.assigned_agents||0===S.assigned_agents.length}),V=(null==U?void 0:null===(s=U.agentByIds)||void 0===s?void 0:s.map(e=>e.name))||[],{data:q}=(0,C.aM)(_.L5,{variables:{id:S.created_by},skip:!S.created_by}),O=(null==q?void 0:null===(t=q.userById)||void 0===t?void 0:t.name)||"Unknown",L=async()=>{if(confirm("Are you sure you want to delete this prompt?"))try{await E({variables:{id:S.id}}),b.Am.success("Prompt deleted successfully"),Z()}catch(e){b.Am.error("Failed to delete prompt"),console.error(e)}},Q=async()=>{if(!z){F(!0);try{await B(S.id,D.id,M,S.favorite_count,void 0),b.Am.success(M?"Removed from favorites":"Added to favorites",{icon:M?"\uD83D\uDC4E":"\uD83D\uDC4D",duration:2e3}),Z()}catch(e){b.Am.error("Failed to update favorite"),console.error(e)}finally{await new Promise(e=>setTimeout(e,200)),F(!1)}}};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(l.Zb,{className:"flex flex-col hover:shadow-md transition-shadow",children:[(0,a.jsx)(l.Ol,{className:"pb-3",children:(0,a.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("h3",{className:"font-semibold text-lg truncate",children:S.name}),S.description&&(0,a.jsx)("p",{className:"text-sm text-muted-foreground line-clamp-2 mt-1",children:S.description})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)(n.z,{variant:"ghost",size:"icon",className:"h-8 w-8 transition-all ".concat(z?"scale-125":""," ").concat(M?"text-yellow-500":""),onClick:Q,disabled:z,children:(0,a.jsx)(d.Z,{className:"h-4 w-4 transition-all ".concat(z?"animate-pulse":""," ").concat(M?"fill-yellow-400 text-yellow-400":"")})}),(0,a.jsxs)(c.h_,{modal:!1,children:[(0,a.jsx)(c.$F,{asChild:!0,children:(0,a.jsx)(n.z,{variant:"ghost",size:"icon",className:"h-8 w-8",children:(0,a.jsx)(o.Z,{className:"h-4 w-4"})})}),(0,a.jsxs)(c.AW,{align:"end",children:[(0,a.jsxs)(c.Xi,{onClick:()=>{navigator.clipboard.writeText(S.content),b.Am.success("Prompt copied to clipboard")},children:[(0,a.jsx)(m.Z,{className:"mr-2 h-4 w-4"}),"Copy Content"]}),R&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(c.Xi,{onClick:()=>P(!0),children:[(0,a.jsx)(u.Z,{className:"mr-2 h-4 w-4"}),"Edit"]}),(0,a.jsxs)(c.Xi,{onClick:L,className:"text-destructive",children:[(0,a.jsx)(x.Z,{className:"mr-2 h-4 w-4"}),"Delete"]})]})]})]})]})]})}),(0,a.jsx)(l.aY,{className:"flex-1 pb-3",children:(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsx)("p",{className:"text-sm text-muted-foreground line-clamp-3",children:S.content}),I.length>0&&(0,a.jsxs)(r.C,{variant:"outline",className:"text-xs",children:[I.length," variable",1!==I.length?"s":""]}),V.length>0&&(0,a.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[(0,a.jsx)(h.Z,{className:"h-3 w-3"}),(0,a.jsx)("span",{className:"font-medium",children:"Works with:"})]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-1",children:[V.slice(0,2).map((e,s)=>(0,a.jsx)(r.C,{variant:"default",className:"text-xs bg-primary/10 text-primary hover:bg-primary/20",children:e},s)),V.length>2&&(0,a.jsxs)(r.C,{variant:"default",className:"text-xs bg-primary/10 text-primary hover:bg-primary/20",children:["+",V.length-2," more"]})]})]})]})}),(0,a.jsxs)(l.eW,{className:"flex flex-col gap-3 pt-3 border-t",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between w-full",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 text-xs text-muted-foreground",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1 transition-all ".concat(z?"scale-125":""," ").concat(M?"text-yellow-500":""),children:[(0,a.jsx)(d.Z,{className:"h-3.5 w-3.5"}),(0,a.jsx)("span",{children:S.favorite_count||0})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1",title:"Times used",children:[(0,a.jsx)(p.Z,{className:"h-3.5 w-3.5"}),(0,a.jsx)("span",{children:S.usage_count||0})]})]}),(0,a.jsxs)(n.z,{variant:"secondary",size:"sm",type:"button",onClick:()=>P(!0),children:[(0,a.jsx)(v.Z,{className:"mr-2 h-3.5 w-3.5"}),"View"]})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-1.5 text-xs text-muted-foreground w-full",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)(f.Z,{className:"h-3 w-3"}),(0,a.jsxs)("span",{children:["Created by ",O]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)(j.Z,{className:"h-3 w-3"}),(0,a.jsxs)("span",{children:["Created ",(0,A.Q)(new Date(S.createdAt),{addSuffix:!0})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)(g.Z,{className:"h-3 w-3"}),(0,a.jsxs)("span",{children:["Updated ",(0,A.Q)(new Date(S.updatedAt),{addSuffix:!0})]})]})]})]})]}),(0,a.jsx)(y.D,{open:k,onOpenChange:P,prompt:S,onSuccess:Z,user:D})]})}},35283:function(e,s,t){t.d(s,{D:function(){return _}});var a=t(57437),i=t(2265),l=t(26110),n=t(62869),r=t(95186),c=t(26815),d=t(76818),o=t(35974),m=t(25846),u=t(24156),x=t(30401),h=t(32489),p=t(12194),v=t(84544),f=t(8014),j=t(14438),g=t(74928),N=t(23518),w=t(57054),y=t(7211),b=t(27689),C=t(94508);function _(e){var s;let{open:t,onOpenChange:_,prompt:A,onSuccess:S,user:D,defaultAssignedAgents:Z=[]}=e,k=!!A,[P,{loading:z}]=(0,p.EE)(),[F,{loading:E}]=(0,p.er)(),[B,R]=(0,i.useState)(""),[I,M]=(0,i.useState)(""),[U,V]=(0,i.useState)(""),[q,O]=(0,i.useState)("private"),[L,Q]=(0,i.useState)([]),[T,W]=(0,i.useState)([]),[$,H]=(0,i.useState)(!1),[J,X]=(0,i.useState)([]),[Y,K]=(0,i.useState)(!1),{data:G}=(0,y.aM)(b.ym,{variables:{page:1,limit:100}}),ee=(null==G?void 0:null===(s=G.agentsPagination)||void 0===s?void 0:s.items)||[],es=(0,v.H)(U),{isValid:et,invalidVariables:ea}=function(e){if(!e)return{isValid:!0,invalidVariables:[]};let s=e.matchAll(/\{\{([^}]+)\}\}/g),t=[];for(let e of Array.from(s)){let s=e[1];s&&/^[a-zA-Z0-9_]+$/.test(s)||t.push(s)}return{isValid:0===t.length,invalidVariables:t}}(U);(0,i.useEffect)(()=>{if(t){if(A){var e,s;R(A.name),M(A.description||""),V(A.content),O(A.rights_mode),Q((null===(e=A.RBAC)||void 0===e?void 0:e.users)||[]),W((null===(s=A.RBAC)||void 0===s?void 0:s.roles)||[]),X(A.assigned_agents||[])}else ei(),Z&&Z.length>0&&X(Z)}},[A,t]);let ei=()=>{R(""),M(""),V(""),O("private"),Q([]),W([]),H(!1),X([])},el=async()=>{if(!B.trim()){j.Am.error("Please enter a name for the prompt");return}if(!U.trim()){j.Am.error("Please enter prompt content");return}if(!et){j.Am.error("Invalid variable names: ".concat(ea.join(", "),". Use only letters, numbers, and underscores."));return}try{let e={name:B.trim(),description:I.trim()||void 0,content:U.trim(),rights_mode:q,RBAC:"private"!==q&&"public"!==q?{users:L.length>0?L:void 0,roles:T.length>0?T:void 0}:void 0,assigned_agents:J.length>0?J:void 0};k?(await F({variables:{id:A.id,...e}}),j.Am.success("Prompt updated successfully")):(await P({variables:e}),j.Am.success("Prompt created successfully")),S(),_(!1),ei()}catch(e){console.error(e),j.Am.error(k?"Failed to update prompt":"Failed to create prompt")}};return(0,a.jsx)(l.Vq,{open:t,onOpenChange:_,children:(0,a.jsxs)(l.cZ,{className:"max-w-3xl max-h-[90vh] overflow-y-auto",children:[(0,a.jsxs)(l.fK,{children:[(0,a.jsx)(l.$N,{children:k?"Edit Prompt":"Create New Prompt"}),(0,a.jsx)(l.Be,{children:k?"Update your prompt template":"Create a reusable prompt template with variables"})]}),(0,a.jsxs)("div",{className:"space-y-6 py-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)(c._,{htmlFor:"name",children:["Name ",(0,a.jsx)("span",{className:"text-destructive",children:"*"})]}),(0,a.jsx)(r.I,{id:"name",placeholder:"Customer Support Template",value:B,onChange:e=>R(e.target.value)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c._,{htmlFor:"description",children:"Description"}),(0,a.jsx)(r.I,{id:"description",placeholder:"Brief description of this prompt",value:I,onChange:e=>M(e.target.value)})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)(c._,{htmlFor:"content",children:["Prompt Content ",(0,a.jsx)("span",{className:"text-destructive",children:"*"})]}),(0,a.jsx)(d.g,{id:"content",placeholder:"You are helping {{customer_name}} with their {{issue}}...",value:U,onChange:e=>V(e.target.value),rows:8,className:"font-mono text-sm"}),(0,a.jsxs)("div",{className:"flex items-start gap-2 text-xs text-muted-foreground",children:[(0,a.jsx)(m.Z,{className:"h-3.5 w-3.5 mt-0.5 flex-shrink-0"}),(0,a.jsxs)("span",{children:["Use"," ",(0,a.jsxs)("code",{className:"bg-muted px-1 py-0.5 rounded",children:["{","{","variable_name","}}"]})," ","format for dynamic content. Variable names can only contain letters, numbers, and underscores."]})]}),es.length>0&&(0,a.jsxs)("div",{className:"flex flex-wrap gap-1 pt-2",children:[(0,a.jsx)("span",{className:"text-xs text-muted-foreground mr-2",children:"Detected variables:"}),es.map(e=>(0,a.jsx)(o.C,{variant:"outline",className:"text-xs",children:e},e))]}),!et&&(0,a.jsxs)("div",{className:"text-xs text-destructive",children:["Invalid variable names: ",ea.join(", ")]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c._,{children:"Assign to Agents"}),(0,a.jsxs)(w.J2,{modal:!0,open:Y,onOpenChange:K,children:[(0,a.jsx)(w.xo,{asChild:!0,children:(0,a.jsxs)(n.z,{variant:"outline",role:"combobox","aria-expanded":Y,className:"w-full justify-between",children:[0===J.length?"Select agents...":"".concat(J.length," agent").concat(1!==J.length?"s":""," selected"),(0,a.jsx)(u.Z,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,a.jsx)(w.yk,{className:"w-full p-0",children:(0,a.jsxs)(N.mY,{children:[(0,a.jsx)(N.sZ,{placeholder:"Search agents..."}),(0,a.jsxs)(N.e8,{children:[(0,a.jsx)(N.rb,{children:"No agents found."}),(0,a.jsx)(N.fu,{children:ee.map(e=>(0,a.jsxs)(N.di,{value:e.id,onSelect:()=>{X(s=>s.includes(e.id)?s.filter(s=>s!==e.id):[...s,e.id])},children:[(0,a.jsx)(x.Z,{className:(0,C.cn)("mr-2 h-4 w-4",J.includes(e.id)?"opacity-100":"opacity-0")}),e.name]},e.id))})]})]})})]}),J.length>0&&(0,a.jsx)("div",{className:"flex flex-wrap gap-2 pt-2",children:J.map(e=>{let s=ee.find(s=>s.id===e);return s?(0,a.jsxs)(o.C,{variant:"secondary",className:"text-sm",children:[s.name,(0,a.jsx)("button",{type:"button",onClick:()=>X(s=>s.filter(s=>s!==e)),className:"ml-1.5 hover:text-destructive",children:(0,a.jsx)(h.Z,{className:"h-3 w-3"})})]},e):null})}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Assign this prompt to specific agents to show it as recommended in chat"})]}),(0,a.jsx)(g.zF,{open:$,onOpenChange:H,children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(g.wy,{asChild:!0,children:(0,a.jsxs)(n.z,{variant:"outline",className:"w-full justify-between",children:["Access Control",(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:["private"===q&&"Private","public"===q&&"Public","users"===q&&"".concat(L.length," users"),"roles"===q&&"".concat(T.length," roles")]})]})}),(0,a.jsx)(g.Fw,{className:"pt-2",children:(0,a.jsx)(f.P,{initialRightsMode:q,initialUsers:L,initialRoles:T,modalMode:!0,onChange:(e,s,t)=>{O(e),Q(s),W(t)}})})]})})]}),(0,a.jsxs)(l.cN,{children:[(0,a.jsx)(n.z,{variant:"outline",onClick:()=>_(!1),children:"Cancel"}),(0,a.jsx)(n.z,{onClick:el,disabled:z||E||!B.trim()||!U.trim()||!et,children:z||E?"Saving...":k?"Save Changes":"Create Prompt"})]})]})})}},12194:function(e,s,t){t.d(s,{EE:function(){return r},Lq:function(){return x},Sh:function(){return n},VR:function(){return o},er:function(){return c},iJ:function(){return d}});var a=t(7211),i=t(12199),l=t(27689);let n=e=>{var s,t,i,n;return(0,a.aM)(l.xx,{variables:{page:null!==(s=null==e?void 0:e.page)&&void 0!==s?s:1,limit:null!==(t=null==e?void 0:e.limit)&&void 0!==t?t:20,filters:null!==(i=null==e?void 0:e.filters)&&void 0!==i?i:[],sort:null!==(n=null==e?void 0:e.sort)&&void 0!==n?n:{field:"updatedAt",direction:"DESC"}}})},r=()=>(0,i.D)(l.Iv,{refetchQueries:[{query:l.xx,variables:{page:1,limit:20}}]}),c=()=>(0,i.D)(l.jA),d=()=>(0,i.D)(l.Ll,{refetchQueries:[{query:l.xx,variables:{page:1,limit:20}}]}),o=()=>(0,i.D)(l.re),m=()=>(0,i.D)(l.Nl),u=()=>(0,i.D)(l.m8),x=()=>{let[e]=m(),[s]=u(),[t]=(0,i.D)(l.UK);return{toggleFavorite:async(a,i,l,n,r)=>{l&&r?(await s({variables:{id:r}}),await t({variables:{id:a,favorite_count:Math.max(0,n-1)}})):(await e({variables:{user_id:i,prompt_id:a}}),await t({variables:{id:a,favorite_count:n+1}}))}}}},84544:function(e,s,t){t.d(s,{H:function(){return a}});function a(e){if(!e)return[];let s=e.matchAll(/\{\{([a-zA-Z0-9_]+)\}\}/g),t=new Set;for(let e of Array.from(s))t.add(e[1]);return Array.from(t).sort()}}}]);
2
- //# sourceMappingURL=6367-59655a85d75e19be.js.map
2
+ //# sourceMappingURL=6367-aa5020cbea5354e2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"static/chunks/6367-59655a85d75e19be.js","mappings":"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","sources":["webpack://_N_E/./lib/prompts/check-prompt-access.ts","webpack://_N_E/./app/(application)/prompts/components/prompt-card.tsx","webpack://_N_E/./lib/prompts/validate-variable-name.ts","webpack://_N_E/./app/(application)/prompts/components/prompt-editor-modal.tsx","webpack://_N_E/./hooks/use-prompts.tsx","webpack://_N_E/./lib/prompts/extract-variables.ts"],"sourcesContent":["import { PromptLibrary } from \"@/types/models/prompt-library\";\nimport { UserWithRole } from \"@/types/models/user\";\n\n/**\n * Checks if a user has write access to a prompt\n *\n * @param prompt - The prompt to check access for\n * @param user - The user to check access for\n * @returns true if user has write access, false otherwise\n */\nexport function checkPromptWriteAccess(\n prompt: PromptLibrary,\n user: UserWithRole\n): boolean {\n const isPrivate = prompt.rights_mode === \"private\";\n const isPublic = prompt.rights_mode === \"public\";\n const byUsers = prompt.rights_mode === \"users\";\n const byRoles = prompt.rights_mode === \"roles\";\n const isAdmin = user.super_admin;\n const isCreator = prompt.created_by === user.id.toString();\n\n let writeAccess = false;\n\n // Creator always has write access\n if (isCreator) {\n writeAccess = true;\n }\n\n // Private: only creator + admins\n if (isPrivate && !isCreator && !isAdmin) {\n writeAccess = false;\n }\n\n // Public: everyone has write access\n if (isPublic) {\n writeAccess = true;\n }\n\n // By users: check if user has write permission\n if (byUsers) {\n const userAccess = prompt.RBAC?.users?.find((u) => u.id === user.id);\n writeAccess = userAccess?.rights === \"write\";\n }\n\n // By roles: check if user's role has write permission\n if (byRoles) {\n const roleAccess = prompt.RBAC?.roles?.find((r) => r.id === user.role?.id);\n writeAccess = roleAccess?.rights === \"write\";\n }\n\n // Admin override\n if (isAdmin) {\n writeAccess = true;\n }\n\n return writeAccess;\n}\n\n/**\n * Checks if a user has read access to a prompt\n *\n * @param prompt - The prompt to check access for\n * @param user - The user to check access for\n * @returns true if user has read access, false otherwise\n */\nexport function checkPromptReadAccess(\n prompt: PromptLibrary,\n user: UserWithRole\n): boolean {\n const isPrivate = prompt.rights_mode === \"private\";\n const isPublic = prompt.rights_mode === \"public\";\n const byUsers = prompt.rights_mode === \"users\";\n const byRoles = prompt.rights_mode === \"roles\";\n const isAdmin = user.super_admin;\n const isCreator = prompt.created_by === user.id.toString();\n\n // Creator always has read access\n if (isCreator) {\n return true;\n }\n\n // Admin always has read access\n if (isAdmin) {\n return true;\n }\n\n // Private: only creator + admins\n if (isPrivate) {\n return false;\n }\n\n // Public: everyone has read access\n if (isPublic) {\n return true;\n }\n\n // By users: check if user has read or write permission\n if (byUsers) {\n const userAccess = prompt.RBAC?.users?.find((u) => u.id === user.id);\n return userAccess !== undefined;\n }\n\n // By roles: check if user's role has read or write permission\n if (byRoles) {\n const roleAccess = prompt.RBAC?.roles?.find((r) => r.id === user.role?.id);\n return roleAccess !== undefined;\n }\n\n // By projects: would need project context to check\n /* if (prompt.rights_mode === \"projects\") {\n // This would require project context - for now return false\n // Can be enhanced when project context is available\n return false;\n } */\n\n return false;\n}\n","import { useState } from \"react\";\nimport { PromptLibrary } from \"@/types/models/prompt-library\";\nimport { UserWithRole } from \"@/types/models/user\";\nimport { Card, CardContent, CardFooter, CardHeader } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport { Badge } from \"@/components/ui/badge\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport {\n Edit,\n Trash2,\n MoreVertical,\n Star,\n Activity,\n MessageSquare,\n Copy,\n Bot,\n User,\n Calendar,\n Clock,\n ThumbsUp,\n} from \"lucide-react\";\nimport { checkPromptWriteAccess } from \"@/lib/prompts/check-prompt-access\";\nimport { extractVariables } from \"@/lib/prompts/extract-variables\";\nimport { useDeletePrompt, useTogglePromptFavorite } from \"@/hooks/use-prompts\";\nimport { PromptEditorModal } from \"./prompt-editor-modal\";\nimport { toast } from \"sonner\";\nimport { useQuery } from \"@apollo/client\";\nimport { GET_AGENTS_BY_IDS, GET_USER_BY_ID } from \"@/queries/queries\";\nimport { formatDistanceToNow } from \"date-fns\";\n\ninterface PromptCardProps {\n prompt: PromptLibrary;\n user: UserWithRole;\n onUpdate: () => void;\n}\n\nexport function PromptCard({ prompt, user, onUpdate }: PromptCardProps) {\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\n const [isFavoriting, setIsFavoriting] = useState(false);\n const [deletePrompt] = useDeletePrompt();\n const { toggleFavorite } = useTogglePromptFavorite();\n\n const hasWriteAccess = checkPromptWriteAccess(prompt, user);\n const variables = extractVariables(prompt.content);\n const isFavorited = prompt.is_favorited || false;\n\n // Fetch only the assigned agents by their IDs\n const { data: agentsData } = useQuery(GET_AGENTS_BY_IDS, {\n variables: { ids: prompt.assigned_agents || [] },\n skip: !prompt.assigned_agents || prompt.assigned_agents.length === 0,\n });\n\n const assignedAgentNames =\n agentsData?.agentByIds?.map((agent: any) => agent.name) || [];\n\n // Fetch creator information\n const { data: creatorData } = useQuery(GET_USER_BY_ID, {\n variables: { id: prompt.created_by },\n skip: !prompt.created_by,\n });\n\n const creatorName = creatorData?.userById?.name || \"Unknown\";\n\n const handleDelete = async () => {\n if (confirm(\"Are you sure you want to delete this prompt?\")) {\n try {\n await deletePrompt({ variables: { id: prompt.id } });\n toast.success(\"Prompt deleted successfully\");\n onUpdate();\n } catch (error) {\n toast.error(\"Failed to delete prompt\");\n console.error(error);\n }\n }\n };\n\n const handleToggleFavorite = async () => {\n if (isFavoriting) return; // Prevent double-clicks\n\n setIsFavoriting(true);\n try {\n // This is a simplified version - you'd need to fetch the favorite ID\n // and current favorite status from the backend\n await toggleFavorite(\n prompt.id,\n user.id,\n isFavorited,\n prompt.favorite_count,\n undefined // favoriteId would come from querying favorites\n );\n toast.success(\n isFavorited ? \"Removed from favorites\" : \"Added to favorites\",\n {\n icon: isFavorited ? \"👎\" : \"👍\",\n duration: 2000,\n }\n );\n onUpdate();\n } catch (error) {\n toast.error(\"Failed to update favorite\");\n console.error(error);\n } finally {\n // wait 1 second\n await new Promise(resolve => setTimeout(resolve, 200));\n setIsFavoriting(false);\n }\n };\n\n const handleCopyContent = () => {\n navigator.clipboard.writeText(prompt.content);\n toast.success(\"Prompt copied to clipboard\");\n };\n\n return (\n <>\n <Card className=\"flex flex-col hover:shadow-md transition-shadow\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"font-semibold text-lg truncate\">{prompt.name}</h3>\n {prompt.description && (\n <p className=\"text-sm text-muted-foreground line-clamp-2 mt-1\">\n {prompt.description}\n </p>\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={`h-8 w-8 transition-all ${isFavoriting ? \"scale-125\" : \"\"\n } ${isFavorited ? \"text-yellow-500\" : \"\"}`}\n onClick={handleToggleFavorite}\n disabled={isFavoriting}\n >\n <ThumbsUp\n className={`h-4 w-4 transition-all ${isFavoriting ? \"animate-pulse\" : \"\"\n } ${isFavorited ? \"fill-yellow-400 text-yellow-400\" : \"\"}`}\n />\n </Button>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\">\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={handleCopyContent}>\n <Copy className=\"mr-2 h-4 w-4\" />\n Copy Content\n </DropdownMenuItem>\n {hasWriteAccess && (\n <>\n <DropdownMenuItem onClick={() => setIsEditModalOpen(true)}>\n <Edit className=\"mr-2 h-4 w-4\" />\n Edit\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={handleDelete}\n className=\"text-destructive\"\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n Delete\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n </CardHeader>\n\n <CardContent className=\"flex-1 pb-3\">\n <div className=\"space-y-3\">\n {/* Content Preview */}\n <p className=\"text-sm text-muted-foreground line-clamp-3\">\n {prompt.content}\n </p>\n\n {/* Variables Badge */}\n {variables.length > 0 && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {variables.length} variable{variables.length !== 1 ? \"s\" : \"\"}\n </Badge>\n )}\n\n {/* Assigned Agents */}\n {assignedAgentNames.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <Bot className=\"h-3 w-3\" />\n <span className=\"font-medium\">Works with:</span>\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {assignedAgentNames.slice(0, 2).map((name, index) => (\n <Badge\n key={index}\n variant=\"default\"\n className=\"text-xs bg-primary/10 text-primary hover:bg-primary/20\"\n >\n {name}\n </Badge>\n ))}\n {assignedAgentNames.length > 2 && (\n <Badge\n variant=\"default\"\n className=\"text-xs bg-primary/10 text-primary hover:bg-primary/20\"\n >\n +{assignedAgentNames.length - 2} more\n </Badge>\n )}\n </div>\n </div>\n )}\n </div>\n </CardContent>\n\n <CardFooter className=\"flex flex-col gap-3 pt-3 border-t\">\n {/* Stats Row */}\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <div className={`flex items-center gap-1 transition-all ${isFavoriting ? \"scale-125\" : \"\"\n } ${isFavorited ? \"text-yellow-500\" : \"\"}`}>\n <ThumbsUp className=\"h-3.5 w-3.5\" />\n <span>{prompt.favorite_count || 0}</span>\n\n </div>\n <div className=\"flex items-center gap-1\" title=\"Times used\">\n <Activity className=\"h-3.5 w-3.5\" />\n <span>{prompt.usage_count || 0}</span>\n </div>\n </div>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n type=\"button\"\n onClick={() => setIsEditModalOpen(true)}\n >\n <MessageSquare className=\"mr-2 h-3.5 w-3.5\" />\n View\n </Button>\n </div>\n\n {/* Metadata Row */}\n <div className=\"flex flex-col gap-1.5 text-xs text-muted-foreground w-full\">\n <div className=\"flex items-center gap-1\">\n <User className=\"h-3 w-3\" />\n <span>Created by {creatorName}</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n <span>\n Created {formatDistanceToNow(new Date(prompt.createdAt), { addSuffix: true })}\n </span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n <span>\n Updated {formatDistanceToNow(new Date(prompt.updatedAt), { addSuffix: true })}\n </span>\n </div>\n </div>\n </CardFooter>\n </Card>\n\n <PromptEditorModal\n open={isEditModalOpen}\n onOpenChange={setIsEditModalOpen}\n prompt={prompt}\n onSuccess={onUpdate}\n user={user}\n />\n </>\n );\n}\n","/**\n * Validates that a variable name follows the allowed pattern\n * Valid: alphanumeric characters and underscores only\n *\n * @param variable - The variable name to validate\n * @returns true if valid, false otherwise\n *\n * @example\n * validateVariableName(\"customer_name\") // Returns: true\n * validateVariableName(\"issue-id\") // Returns: false (hyphen not allowed)\n * validateVariableName(\"user@email\") // Returns: false (@ not allowed)\n */\nexport function validateVariableName(variable: string): boolean {\n if (!variable) return false;\n\n // Only allow alphanumeric characters and underscores\n const validPattern = /^[a-zA-Z0-9_]+$/;\n return validPattern.test(variable);\n}\n\n/**\n * Validates all variables in a prompt content\n *\n * @param content - The prompt content to validate\n * @returns Object with isValid boolean and array of invalid variables\n *\n * @example\n * validatePromptVariables(\"Hello {{name}}, issue {{issue-id}}\")\n * // Returns: { isValid: false, invalidVariables: [\"issue-id\"] }\n */\nexport function validatePromptVariables(content: string): {\n isValid: boolean;\n invalidVariables: string[];\n} {\n if (!content) return { isValid: true, invalidVariables: [] };\n\n // Match all {{...}} patterns, including invalid ones\n const regex = /\\{\\{([^}]+)\\}\\}/g;\n const matches = content.matchAll(regex);\n const invalidVariables: string[] = [];\n\n for (const match of Array.from(matches)) {\n const variableName = match[1];\n if (!validateVariableName(variableName)) {\n invalidVariables.push(variableName);\n }\n }\n\n return {\n isValid: invalidVariables.length === 0,\n invalidVariables,\n };\n}\n","import { useState, useEffect } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { X, Lightbulb, Check, ChevronsUpDown } from \"lucide-react\";\nimport { PromptLibrary } from \"@/types/models/prompt-library\";\nimport { UserWithRole } from \"@/types/models/user\";\nimport { useCreatePrompt, useUpdatePrompt } from \"@/hooks/use-prompts\";\nimport { extractVariables, validatePromptVariables } from \"@/lib/prompts\";\nimport { RBACControl } from \"@/components/rbac\";\nimport { toast } from \"sonner\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/components/ui/command\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\";\nimport { useQuery } from \"@apollo/client\";\nimport { GET_AGENTS } from \"@/queries/queries\";\nimport { cn } from \"@/lib/utils\";\n\ninterface PromptEditorModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n prompt?: PromptLibrary;\n onSuccess: () => void;\n user: UserWithRole;\n defaultAssignedAgents?: string[];\n}\n\nexport function PromptEditorModal({\n open,\n onOpenChange,\n prompt,\n onSuccess,\n user,\n defaultAssignedAgents = [],\n}: PromptEditorModalProps) {\n const isEditing = !!prompt;\n const [createPrompt, { loading: creating }] = useCreatePrompt();\n const [updatePrompt, { loading: updating }] = useUpdatePrompt();\n\n // Form state\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [content, setContent] = useState(\"\");\n const [rightsMode, setRightsMode] = useState<\n \"private\" | \"users\" | \"roles\" | \"public\"/* | \"projects\" */\n >(\"private\");\n const [rbacUsers, setRbacUsers] = useState<\n { id: number; rights: \"read\" | \"write\" }[]\n >([]);\n const [rbacRoles, setRbacRoles] = useState<\n { id: string; rights: \"read\" | \"write\" }[]\n >([]);\n /* const [rbacProjects, setRbacProjects] = useState<\n { id: string; rights: \"read\" | \"write\" }[]\n >([]); */\n const [rbacOpen, setRbacOpen] = useState(false);\n const [assignedAgents, setAssignedAgents] = useState<string[]>([]);\n const [agentSelectorOpen, setAgentSelectorOpen] = useState(false);\n\n // Fetch agents\n const { data: agentsData } = useQuery(GET_AGENTS, {\n variables: { page: 1, limit: 100 },\n });\n\n const agents = agentsData?.agentsPagination?.items || [];\n\n // Extract variables from content\n const variables = extractVariables(content);\n const { isValid, invalidVariables } = validatePromptVariables(content);\n\n // Initialize form when editing\n useEffect(() => {\n if (!open) return; // Only run when modal opens\n\n if (prompt) {\n setName(prompt.name);\n setDescription(prompt.description || \"\");\n setContent(prompt.content);\n setRightsMode(prompt.rights_mode);\n setRbacUsers(prompt.RBAC?.users || []);\n setRbacRoles(prompt.RBAC?.roles || []);\n // setRbacProjects(prompt.RBAC?.projects || []);\n setAssignedAgents(prompt.assigned_agents || []);\n } else {\n resetForm();\n // Apply default assigned agents when creating new prompt\n if (defaultAssignedAgents && defaultAssignedAgents.length > 0) {\n setAssignedAgents(defaultAssignedAgents);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [prompt, open]);\n\n const resetForm = () => {\n setName(\"\");\n setDescription(\"\");\n setContent(\"\");\n setRightsMode(\"private\");\n setRbacUsers([]);\n setRbacRoles([]);\n // setRbacProjects([]);\n setRbacOpen(false);\n setAssignedAgents([]);\n };\n\n const handleSubmit = async () => {\n // Validation\n if (!name.trim()) {\n toast.error(\"Please enter a name for the prompt\");\n return;\n }\n if (!content.trim()) {\n toast.error(\"Please enter prompt content\");\n return;\n }\n if (!isValid) {\n toast.error(\n `Invalid variable names: ${invalidVariables.join(\", \")}. Use only letters, numbers, and underscores.`\n );\n return;\n }\n\n try {\n const input = {\n name: name.trim(),\n description: description.trim() || undefined,\n content: content.trim(),\n rights_mode: rightsMode,\n RBAC:\n rightsMode !== \"private\" && rightsMode !== \"public\"\n ? {\n users: rbacUsers.length > 0 ? rbacUsers : undefined,\n roles: rbacRoles.length > 0 ? rbacRoles : undefined,\n // projects: rbacProjects.length > 0 ? rbacProjects : undefined,\n }\n : undefined,\n assigned_agents: assignedAgents.length > 0 ? assignedAgents : undefined,\n };\n\n if (isEditing) {\n await updatePrompt({\n variables: {\n id: prompt.id,\n ...input,\n },\n });\n toast.success(\"Prompt updated successfully\");\n } else {\n await createPrompt({\n variables: input,\n });\n toast.success(\"Prompt created successfully\");\n }\n\n onSuccess();\n onOpenChange(false);\n resetForm();\n } catch (error) {\n console.error(error);\n toast.error(isEditing ? \"Failed to update prompt\" : \"Failed to create prompt\");\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-3xl max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{isEditing ? \"Edit Prompt\" : \"Create New Prompt\"}</DialogTitle>\n <DialogDescription>\n {isEditing\n ? \"Update your prompt template\"\n : \"Create a reusable prompt template with variables\"}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-6 py-4\">\n {/* Name */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"name\">\n Name <span className=\"text-destructive\">*</span>\n </Label>\n <Input\n id=\"name\"\n placeholder=\"Customer Support Template\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n />\n </div>\n\n {/* Description */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"description\">Description</Label>\n <Input\n id=\"description\"\n placeholder=\"Brief description of this prompt\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n />\n </div>\n\n {/* Content */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"content\">\n Prompt Content <span className=\"text-destructive\">*</span>\n </Label>\n <Textarea\n id=\"content\"\n placeholder=\"You are helping {{customer_name}} with their {{issue}}...\"\n value={content}\n onChange={(e) => setContent(e.target.value)}\n rows={8}\n className=\"font-mono text-sm\"\n />\n <div className=\"flex items-start gap-2 text-xs text-muted-foreground\">\n <Lightbulb className=\"h-3.5 w-3.5 mt-0.5 flex-shrink-0\" />\n <span>\n Use{\" \"}\n <code className=\"bg-muted px-1 py-0.5 rounded\">\n {\"{\"}\n {\"{\"}variable_name{\"}}\"}\n </code>{\" \"}\n format for dynamic content. Variable names can only contain letters,\n numbers, and underscores.\n </span>\n </div>\n\n {/* Detected Variables */}\n {variables.length > 0 && (\n <div className=\"flex flex-wrap gap-1 pt-2\">\n <span className=\"text-xs text-muted-foreground mr-2\">\n Detected variables:\n </span>\n {variables.map((variable) => (\n <Badge key={variable} variant=\"outline\" className=\"text-xs\">\n {variable}\n </Badge>\n ))}\n </div>\n )}\n\n {/* Invalid Variables Warning */}\n {!isValid && (\n <div className=\"text-xs text-destructive\">\n Invalid variable names: {invalidVariables.join(\", \")}\n </div>\n )}\n </div>\n\n {/* Assign to Agents */}\n <div className=\"space-y-2\">\n <Label>Assign to Agents</Label>\n <Popover modal={true} open={agentSelectorOpen} onOpenChange={setAgentSelectorOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={agentSelectorOpen}\n className=\"w-full justify-between\"\n >\n {assignedAgents.length === 0\n ? \"Select agents...\"\n : `${assignedAgents.length} agent${assignedAgents.length !== 1 ? \"s\" : \"\"} selected`}\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-full p-0\">\n <Command>\n <CommandInput placeholder=\"Search agents...\" />\n <CommandList>\n <CommandEmpty>No agents found.</CommandEmpty>\n <CommandGroup>\n {agents.map((agent: any) => (\n <CommandItem\n key={agent.id}\n value={agent.id}\n onSelect={() => {\n setAssignedAgents((prev) =>\n prev.includes(agent.id)\n ? prev.filter((id) => id !== agent.id)\n : [...prev, agent.id]\n );\n }}\n >\n <Check\n className={cn(\n \"mr-2 h-4 w-4\",\n assignedAgents.includes(agent.id)\n ? \"opacity-100\"\n : \"opacity-0\"\n )}\n />\n {agent.name}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n {assignedAgents.length > 0 && (\n <div className=\"flex flex-wrap gap-2 pt-2\">\n {assignedAgents.map((agentId) => {\n const agent = agents.find((a: any) => a.id === agentId);\n return agent ? (\n <Badge key={agentId} variant=\"secondary\" className=\"text-sm\">\n {agent.name}\n <button\n type=\"button\"\n onClick={() =>\n setAssignedAgents((prev) =>\n prev.filter((id) => id !== agentId)\n )\n }\n className=\"ml-1.5 hover:text-destructive\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </Badge>\n ) : null;\n })}\n </div>\n )}\n <p className=\"text-xs text-muted-foreground\">\n Assign this prompt to specific agents to show it as recommended in chat\n </p>\n </div>\n\n {/* RBAC Control */}\n <Collapsible open={rbacOpen} onOpenChange={setRbacOpen}>\n <div className=\"space-y-2\">\n <CollapsibleTrigger asChild>\n <Button variant=\"outline\" className=\"w-full justify-between\">\n Access Control\n <span className=\"text-xs text-muted-foreground\">\n {rightsMode === \"private\" && \"Private\"}\n {rightsMode === \"public\" && \"Public\"}\n {rightsMode === \"users\" && `${rbacUsers.length} users`}\n {rightsMode === \"roles\" && `${rbacRoles.length} roles`}\n {/* {rightsMode === \"projects\" && `${rbacProjects.length} projects`} */}\n </span>\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-2\">\n <RBACControl\n initialRightsMode={rightsMode}\n initialUsers={rbacUsers}\n initialRoles={rbacRoles}\n modalMode={true}\n // initialProjects={rbacProjects}\n onChange={(mode, users, roles) => {\n setRightsMode(mode);\n setRbacUsers(users);\n setRbacRoles(roles);\n // setRbacProjects(projects);\n }}\n />\n </CollapsibleContent>\n </div>\n </Collapsible>\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button\n onClick={handleSubmit}\n disabled={creating || updating || !name.trim() || !content.trim() || !isValid}\n >\n {creating || updating ? \"Saving...\" : isEditing ? \"Save Changes\" : \"Create Prompt\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import { useMutation, useQuery } from \"@apollo/client\";\nimport {\n CREATE_PROMPT,\n CREATE_PROMPT_FAVORITE,\n DELETE_PROMPT,\n DELETE_PROMPT_FAVORITE,\n GET_PROMPT_BY_ID,\n GET_PROMPTS,\n GET_USER_PROMPT_FAVORITES,\n INCREMENT_PROMPT_FAVORITES,\n INCREMENT_PROMPT_USAGE,\n UPDATE_PROMPT,\n} from \"@/queries/queries\";\nimport {\n CreatePromptInput,\n PromptFavorite,\n PromptLibrary,\n UpdatePromptInput,\n} from \"@/types/models/prompt-library\";\n\ninterface PromptsData {\n prompt_libraryPagination: {\n pageInfo: {\n pageCount: number;\n itemCount: number;\n currentPage: number;\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n };\n items: PromptLibrary[];\n };\n}\n\ninterface PromptData {\n prompt_library_itemById: PromptLibrary;\n}\n\ninterface PromptFavoritesData {\n prompt_favoritesPagination: {\n items: PromptFavorite[];\n };\n}\n\n/**\n * Hook to fetch paginated prompts with filtering and sorting\n */\nexport const usePrompts = (variables?: {\n page?: number;\n limit?: number;\n filters?: any[];\n sort?: { field: string; direction: \"ASC\" | \"DESC\" };\n}) => {\n return useQuery<PromptsData>(GET_PROMPTS, {\n variables: {\n page: variables?.page ?? 1,\n limit: variables?.limit ?? 20,\n filters: variables?.filters ?? [],\n sort: variables?.sort ?? { field: \"updatedAt\", direction: \"DESC\" },\n },\n });\n};\n\n/**\n * Hook to fetch a single prompt by ID\n */\nexport const usePrompt = (id: string) => {\n return useQuery<PromptData>(GET_PROMPT_BY_ID, {\n variables: { id },\n skip: !id,\n });\n};\n\n/**\n * Hook to create a new prompt\n */\nexport const useCreatePrompt = () => {\n return useMutation<{ prompt_libraryCreateOne: { item: PromptLibrary } }>(\n CREATE_PROMPT,\n {\n refetchQueries: [{ query: GET_PROMPTS, variables: { page: 1, limit: 20 } }],\n }\n );\n};\n\n/**\n * Hook to update an existing prompt\n */\nexport const useUpdatePrompt = () => {\n return useMutation<{ prompt_libraryUpdateOneById: { item: PromptLibrary } }>(\n UPDATE_PROMPT\n );\n};\n\n/**\n * Hook to delete a prompt\n */\nexport const useDeletePrompt = () => {\n return useMutation<{ prompt_libraryRemoveOneById: { id: string } }>(\n DELETE_PROMPT,\n {\n refetchQueries: [{ query: GET_PROMPTS, variables: { page: 1, limit: 20 } }],\n }\n );\n};\n\n/**\n * Hook to increment prompt usage count\n */\nexport const useIncrementPromptUsage = () => {\n return useMutation<{\n prompt_libraryUpdateOneById: { item: Pick<PromptLibrary, \"id\" | \"usage_count\"> };\n }>(INCREMENT_PROMPT_USAGE);\n};\n\n/**\n * Hook to fetch user's favorited prompts\n */\nexport const useUserPromptFavorites = (userId: number) => {\n return useQuery<PromptFavoritesData>(GET_USER_PROMPT_FAVORITES, {\n variables: { user_id: userId },\n skip: !userId,\n });\n};\n\n/**\n * Hook to create a prompt favorite\n */\nexport const useCreatePromptFavorite = () => {\n return useMutation<{ prompt_favoritesCreateOne: { item: PromptFavorite } }>(\n CREATE_PROMPT_FAVORITE\n );\n};\n\n/**\n * Hook to delete a prompt favorite\n */\nexport const useDeletePromptFavorite = () => {\n return useMutation<{ prompt_favoritesRemoveOneById: { id: string } }>(\n DELETE_PROMPT_FAVORITE\n );\n};\n\n/**\n * Hook to toggle favorite status of a prompt\n * Handles both creating and deleting favorites, and updating the favorite count\n */\nexport const useTogglePromptFavorite = () => {\n const [createFavorite] = useCreatePromptFavorite();\n const [deleteFavorite] = useDeletePromptFavorite();\n const [incrementFavorites] = useMutation(INCREMENT_PROMPT_FAVORITES);\n\n const toggleFavorite = async (\n promptId: string,\n userId: number,\n isFavorited: boolean,\n currentFavoriteCount: number,\n favoriteId?: string\n ) => {\n if (isFavorited && favoriteId) {\n // Remove favorite\n await deleteFavorite({ variables: { id: favoriteId } });\n await incrementFavorites({\n variables: {\n id: promptId,\n favorite_count: Math.max(0, currentFavoriteCount - 1),\n },\n });\n } else {\n // Add favorite\n await createFavorite({\n variables: { user_id: userId, prompt_id: promptId },\n });\n await incrementFavorites({\n variables: { id: promptId, favorite_count: currentFavoriteCount + 1 },\n });\n }\n };\n\n return { toggleFavorite };\n};\n","/**\n * Extracts all variable names from a prompt template\n * Variables are in the format {{variable_name}}\n * Only alphanumeric characters and underscores are allowed in variable names\n *\n * @param content - The prompt content to extract variables from\n * @returns Array of unique variable names found in the content\n *\n * @example\n * extractVariables(\"Hello {{name}}, your issue {{issue_id}} is resolved\")\n * // Returns: [\"name\", \"issue_id\"]\n */\nexport function extractVariables(content: string): string[] {\n if (!content) return [];\n\n // Match {{variable_name}} where variable_name contains only alphanumeric and underscore\n const regex = /\\{\\{([a-zA-Z0-9_]+)\\}\\}/g;\n const matches = content.matchAll(regex);\n const variables = new Set<string>();\n\n for (const match of Array.from(matches)) {\n variables.add(match[1]);\n }\n\n return Array.from(variables).sort();\n}\n"],"names":["PromptCard","param","agentsData","creatorData","prompt","user","onUpdate","isEditModalOpen","setIsEditModalOpen","useState","isFavoriting","setIsFavoriting","deletePrompt","useDeletePrompt","toggleFavorite","useTogglePromptFavorite","hasWriteAccess","checkPromptWriteAccess","isPrivate","rights_mode","isPublic","byUsers","byRoles","isAdmin","super_admin","isCreator","created_by","id","toString","writeAccess","userAccess","RBAC","users","find","u","rights","roleAccess","roles","r","role","variables","extractVariables","content","isFavorited","is_favorited","data","useQuery","GET_AGENTS_BY_IDS","ids","assigned_agents","skip","length","assignedAgentNames","agentByIds","map","agent","name","GET_USER_BY_ID","creatorName","userById","handleDelete","confirm","toast","success","error","console","handleToggleFavorite","favorite_count","undefined","icon","duration","Promise","resolve","setTimeout","jsx_runtime","jsxs","Fragment","Card","className","jsx","CardHeader","div","h3","description","p","Button","variant","size","concat","onClick","disabled","ThumbsUp","DropdownMenu","modal","DropdownMenuTrigger","asChild","MoreVertical","DropdownMenuContent","align","DropdownMenuItem","navigator","clipboard","writeText","Copy","Edit","Trash2","CardContent","Badge","Bot","span","slice","index","CardFooter","title","Activity","usage_count","type","MessageSquare","User","Calendar","formatDistanceToNow","Date","createdAt","addSuffix","Clock","updatedAt","PromptEditorModal","open","onOpenChange","onSuccess","defaultAssignedAgents","isEditing","createPrompt","loading","creating","useCreatePrompt","updatePrompt","updating","useUpdatePrompt","setName","setDescription","setContent","rightsMode","setRightsMode","rbacUsers","setRbacUsers","rbacRoles","setRbacRoles","rbacOpen","setRbacOpen","assignedAgents","setAssignedAgents","agentSelectorOpen","setAgentSelectorOpen","GET_AGENTS","page","limit","agents","agentsPagination","items","isValid","invalidVariables","validatePromptVariables","matches","matchAll","match","Array","from","variableName","validPattern","test","push","useEffect","resetForm","handleSubmit","trim","join","input","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Label","htmlFor","Input","placeholder","value","onChange","e","target","Textarea","rows","Lightbulb","code","variable","Popover","PopoverTrigger","aria-expanded","ChevronsUpDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","onSelect","prev","includes","filter","Check","cn","a","agentId","button","X","Collapsible","CollapsibleTrigger","CollapsibleContent","RBACControl","initialRightsMode","initialUsers","initialRoles","modalMode","mode","DialogFooter","usePrompts","GET_PROMPTS","filters","sort","field","direction","useMutation","CREATE_PROMPT","refetchQueries","query","UPDATE_PROMPT","DELETE_PROMPT","useIncrementPromptUsage","INCREMENT_PROMPT_USAGE","useCreatePromptFavorite","CREATE_PROMPT_FAVORITE","useDeletePromptFavorite","DELETE_PROMPT_FAVORITE","createFavorite","deleteFavorite","incrementFavorites","INCREMENT_PROMPT_FAVORITES","promptId","userId","currentFavoriteCount","favoriteId","Math","max","user_id","prompt_id","Set","add"],"sourceRoot":""}
1
+ {"version":3,"file":"static/chunks/6367-aa5020cbea5354e2.js","mappings":"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","sources":["webpack://_N_E/./lib/prompts/check-prompt-access.ts","webpack://_N_E/./app/(application)/prompts/components/prompt-card.tsx","webpack://_N_E/./lib/prompts/validate-variable-name.ts","webpack://_N_E/./app/(application)/prompts/components/prompt-editor-modal.tsx","webpack://_N_E/./hooks/use-prompts.tsx","webpack://_N_E/./lib/prompts/extract-variables.ts"],"sourcesContent":["import { PromptLibrary } from \"@/types/models/prompt-library\";\nimport { UserWithRole } from \"@/types/models/user\";\n\n/**\n * Checks if a user has write access to a prompt\n *\n * @param prompt - The prompt to check access for\n * @param user - The user to check access for\n * @returns true if user has write access, false otherwise\n */\nexport function checkPromptWriteAccess(\n prompt: PromptLibrary,\n user: UserWithRole\n): boolean {\n const isPrivate = prompt.rights_mode === \"private\";\n const isPublic = prompt.rights_mode === \"public\";\n const byUsers = prompt.rights_mode === \"users\";\n const byRoles = prompt.rights_mode === \"roles\";\n const isAdmin = user.super_admin;\n const isCreator = prompt.created_by === user.id.toString();\n\n let writeAccess = false;\n\n // Creator always has write access\n if (isCreator) {\n writeAccess = true;\n }\n\n // Private: only creator + admins\n if (isPrivate && !isCreator && !isAdmin) {\n writeAccess = false;\n }\n\n // Public: everyone has write access\n if (isPublic) {\n writeAccess = true;\n }\n\n // By users: check if user has write permission\n if (byUsers) {\n const userAccess = prompt.RBAC?.users?.find((u) => u.id === user.id);\n writeAccess = userAccess?.rights === \"write\";\n }\n\n // By roles: check if user's role has write permission\n if (byRoles) {\n const roleAccess = prompt.RBAC?.roles?.find((r) => r.id === user.role?.id);\n writeAccess = roleAccess?.rights === \"write\";\n }\n\n // Admin override\n if (isAdmin) {\n writeAccess = true;\n }\n\n return writeAccess;\n}\n\n/**\n * Checks if a user has read access to a prompt\n *\n * @param prompt - The prompt to check access for\n * @param user - The user to check access for\n * @returns true if user has read access, false otherwise\n */\nexport function checkPromptReadAccess(\n prompt: PromptLibrary,\n user: UserWithRole\n): boolean {\n const isPrivate = prompt.rights_mode === \"private\";\n const isPublic = prompt.rights_mode === \"public\";\n const byUsers = prompt.rights_mode === \"users\";\n const byRoles = prompt.rights_mode === \"roles\";\n const isAdmin = user.super_admin;\n const isCreator = prompt.created_by === user.id.toString();\n\n // Creator always has read access\n if (isCreator) {\n return true;\n }\n\n // Admin always has read access\n if (isAdmin) {\n return true;\n }\n\n // Private: only creator + admins\n if (isPrivate) {\n return false;\n }\n\n // Public: everyone has read access\n if (isPublic) {\n return true;\n }\n\n // By users: check if user has read or write permission\n if (byUsers) {\n const userAccess = prompt.RBAC?.users?.find((u) => u.id === user.id);\n return userAccess !== undefined;\n }\n\n // By roles: check if user's role has read or write permission\n if (byRoles) {\n const roleAccess = prompt.RBAC?.roles?.find((r) => r.id === user.role?.id);\n return roleAccess !== undefined;\n }\n\n // By projects: would need project context to check\n /* if (prompt.rights_mode === \"projects\") {\n // This would require project context - for now return false\n // Can be enhanced when project context is available\n return false;\n } */\n\n return false;\n}\n","import { useState } from \"react\";\nimport { PromptLibrary } from \"@/types/models/prompt-library\";\nimport { UserWithRole } from \"@/types/models/user\";\nimport { Card, CardContent, CardFooter, CardHeader } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport { Badge } from \"@/components/ui/badge\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport {\n Edit,\n Trash2,\n MoreVertical,\n Star,\n Activity,\n MessageSquare,\n Copy,\n Bot,\n User,\n Calendar,\n Clock,\n ThumbsUp,\n} from \"lucide-react\";\nimport { checkPromptWriteAccess } from \"@/lib/prompts/check-prompt-access\";\nimport { extractVariables } from \"@/lib/prompts/extract-variables\";\nimport { useDeletePrompt, useTogglePromptFavorite } from \"@/hooks/use-prompts\";\nimport { PromptEditorModal } from \"./prompt-editor-modal\";\nimport { toast } from \"sonner\";\nimport { useQuery } from \"@apollo/client\";\nimport { GET_AGENTS_BY_IDS, GET_USER_BY_ID } from \"@/queries/queries\";\nimport { formatDistanceToNow } from \"date-fns\";\n\ninterface PromptCardProps {\n prompt: PromptLibrary;\n user: UserWithRole;\n onUpdate: () => void;\n}\n\nexport function PromptCard({ prompt, user, onUpdate }: PromptCardProps) {\n const [isEditModalOpen, setIsEditModalOpen] = useState(false);\n const [isFavoriting, setIsFavoriting] = useState(false);\n const [deletePrompt] = useDeletePrompt();\n const { toggleFavorite } = useTogglePromptFavorite();\n\n const hasWriteAccess = checkPromptWriteAccess(prompt, user);\n const variables = extractVariables(prompt.content);\n const isFavorited = prompt.is_favorited || false;\n\n // Fetch only the assigned agents by their IDs\n const { data: agentsData } = useQuery(GET_AGENTS_BY_IDS, {\n variables: { ids: prompt.assigned_agents || [] },\n skip: !prompt.assigned_agents || prompt.assigned_agents.length === 0,\n });\n\n const assignedAgentNames =\n agentsData?.agentByIds?.map((agent: any) => agent.name) || [];\n\n // Fetch creator information\n const { data: creatorData } = useQuery(GET_USER_BY_ID, {\n variables: { id: prompt.created_by },\n skip: !prompt.created_by,\n });\n\n const creatorName = creatorData?.userById?.name || \"Unknown\";\n\n const handleDelete = async () => {\n if (confirm(\"Are you sure you want to delete this prompt?\")) {\n try {\n await deletePrompt({ variables: { id: prompt.id } });\n toast.success(\"Prompt deleted successfully\");\n onUpdate();\n } catch (error) {\n toast.error(\"Failed to delete prompt\");\n console.error(error);\n }\n }\n };\n\n const handleToggleFavorite = async () => {\n if (isFavoriting) return; // Prevent double-clicks\n\n setIsFavoriting(true);\n try {\n // This is a simplified version - you'd need to fetch the favorite ID\n // and current favorite status from the backend\n await toggleFavorite(\n prompt.id,\n user.id,\n isFavorited,\n prompt.favorite_count,\n undefined // favoriteId would come from querying favorites\n );\n toast.success(\n isFavorited ? \"Removed from favorites\" : \"Added to favorites\",\n {\n icon: isFavorited ? \"👎\" : \"👍\",\n duration: 2000,\n }\n );\n onUpdate();\n } catch (error) {\n toast.error(\"Failed to update favorite\");\n console.error(error);\n } finally {\n // wait 1 second\n await new Promise(resolve => setTimeout(resolve, 200));\n setIsFavoriting(false);\n }\n };\n\n const handleCopyContent = () => {\n navigator.clipboard.writeText(prompt.content);\n toast.success(\"Prompt copied to clipboard\");\n };\n\n return (\n <>\n <Card className=\"flex flex-col hover:shadow-md transition-shadow\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"font-semibold text-lg truncate\">{prompt.name}</h3>\n {prompt.description && (\n <p className=\"text-sm text-muted-foreground line-clamp-2 mt-1\">\n {prompt.description}\n </p>\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={`h-8 w-8 transition-all ${isFavoriting ? \"scale-125\" : \"\"\n } ${isFavorited ? \"text-yellow-500\" : \"\"}`}\n onClick={handleToggleFavorite}\n disabled={isFavoriting}\n >\n <ThumbsUp\n className={`h-4 w-4 transition-all ${isFavoriting ? \"animate-pulse\" : \"\"\n } ${isFavorited ? \"fill-yellow-400 text-yellow-400\" : \"\"}`}\n />\n </Button>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\">\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={handleCopyContent}>\n <Copy className=\"mr-2 h-4 w-4\" />\n Copy Content\n </DropdownMenuItem>\n {hasWriteAccess && (\n <>\n <DropdownMenuItem onClick={() => setIsEditModalOpen(true)}>\n <Edit className=\"mr-2 h-4 w-4\" />\n Edit\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={handleDelete}\n className=\"text-destructive\"\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n Delete\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n </CardHeader>\n\n <CardContent className=\"flex-1 pb-3\">\n <div className=\"space-y-3\">\n {/* Content Preview */}\n <p className=\"text-sm text-muted-foreground line-clamp-3\">\n {prompt.content}\n </p>\n\n {/* Variables Badge */}\n {variables.length > 0 && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {variables.length} variable{variables.length !== 1 ? \"s\" : \"\"}\n </Badge>\n )}\n\n {/* Assigned Agents */}\n {assignedAgentNames.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <Bot className=\"h-3 w-3\" />\n <span className=\"font-medium\">Works with:</span>\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {assignedAgentNames.slice(0, 2).map((name, index) => (\n <Badge\n key={index}\n variant=\"default\"\n className=\"text-xs bg-primary/10 text-primary hover:bg-primary/20\"\n >\n {name}\n </Badge>\n ))}\n {assignedAgentNames.length > 2 && (\n <Badge\n variant=\"default\"\n className=\"text-xs bg-primary/10 text-primary hover:bg-primary/20\"\n >\n +{assignedAgentNames.length - 2} more\n </Badge>\n )}\n </div>\n </div>\n )}\n </div>\n </CardContent>\n\n <CardFooter className=\"flex flex-col gap-3 pt-3 border-t\">\n {/* Stats Row */}\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <div className={`flex items-center gap-1 transition-all ${isFavoriting ? \"scale-125\" : \"\"\n } ${isFavorited ? \"text-yellow-500\" : \"\"}`}>\n <ThumbsUp className=\"h-3.5 w-3.5\" />\n <span>{prompt.favorite_count || 0}</span>\n\n </div>\n <div className=\"flex items-center gap-1\" title=\"Times used\">\n <Activity className=\"h-3.5 w-3.5\" />\n <span>{prompt.usage_count || 0}</span>\n </div>\n </div>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n type=\"button\"\n onClick={() => setIsEditModalOpen(true)}\n >\n <MessageSquare className=\"mr-2 h-3.5 w-3.5\" />\n View\n </Button>\n </div>\n\n {/* Metadata Row */}\n <div className=\"flex flex-col gap-1.5 text-xs text-muted-foreground w-full\">\n <div className=\"flex items-center gap-1\">\n <User className=\"h-3 w-3\" />\n <span>Created by {creatorName}</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n <span>\n Created {formatDistanceToNow(new Date(prompt.createdAt), { addSuffix: true })}\n </span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n <span>\n Updated {formatDistanceToNow(new Date(prompt.updatedAt), { addSuffix: true })}\n </span>\n </div>\n </div>\n </CardFooter>\n </Card>\n\n <PromptEditorModal\n open={isEditModalOpen}\n onOpenChange={setIsEditModalOpen}\n prompt={prompt}\n onSuccess={onUpdate}\n user={user}\n />\n </>\n );\n}\n","/**\n * Validates that a variable name follows the allowed pattern\n * Valid: alphanumeric characters and underscores only\n *\n * @param variable - The variable name to validate\n * @returns true if valid, false otherwise\n *\n * @example\n * validateVariableName(\"customer_name\") // Returns: true\n * validateVariableName(\"issue-id\") // Returns: false (hyphen not allowed)\n * validateVariableName(\"user@email\") // Returns: false (@ not allowed)\n */\nexport function validateVariableName(variable: string): boolean {\n if (!variable) return false;\n\n // Only allow alphanumeric characters and underscores\n const validPattern = /^[a-zA-Z0-9_]+$/;\n return validPattern.test(variable);\n}\n\n/**\n * Validates all variables in a prompt content\n *\n * @param content - The prompt content to validate\n * @returns Object with isValid boolean and array of invalid variables\n *\n * @example\n * validatePromptVariables(\"Hello {{name}}, issue {{issue-id}}\")\n * // Returns: { isValid: false, invalidVariables: [\"issue-id\"] }\n */\nexport function validatePromptVariables(content: string): {\n isValid: boolean;\n invalidVariables: string[];\n} {\n if (!content) return { isValid: true, invalidVariables: [] };\n\n // Match all {{...}} patterns, including invalid ones\n const regex = /\\{\\{([^}]+)\\}\\}/g;\n const matches = content.matchAll(regex);\n const invalidVariables: string[] = [];\n\n for (const match of Array.from(matches)) {\n const variableName = match[1];\n if (!validateVariableName(variableName)) {\n invalidVariables.push(variableName);\n }\n }\n\n return {\n isValid: invalidVariables.length === 0,\n invalidVariables,\n };\n}\n","import { useState, useEffect } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { X, Lightbulb, Check, ChevronsUpDown } from \"lucide-react\";\nimport { PromptLibrary } from \"@/types/models/prompt-library\";\nimport { UserWithRole } from \"@/types/models/user\";\nimport { useCreatePrompt, useUpdatePrompt } from \"@/hooks/use-prompts\";\nimport { extractVariables, validatePromptVariables } from \"@/lib/prompts\";\nimport { RBACControl } from \"@/components/rbac\";\nimport { toast } from \"sonner\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/components/ui/collapsible\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/components/ui/command\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\";\nimport { useQuery } from \"@apollo/client\";\nimport { GET_AGENTS } from \"@/queries/queries\";\nimport { cn } from \"@/lib/utils\";\n\ninterface PromptEditorModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n prompt?: PromptLibrary;\n onSuccess: () => void;\n user: UserWithRole;\n defaultAssignedAgents?: string[];\n}\n\nexport function PromptEditorModal({\n open,\n onOpenChange,\n prompt,\n onSuccess,\n user,\n defaultAssignedAgents = [],\n}: PromptEditorModalProps) {\n const isEditing = !!prompt;\n const [createPrompt, { loading: creating }] = useCreatePrompt();\n const [updatePrompt, { loading: updating }] = useUpdatePrompt();\n\n // Form state\n const [name, setName] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [content, setContent] = useState(\"\");\n const [rightsMode, setRightsMode] = useState<\n \"private\" | \"users\" | \"roles\" | \"public\"/* | \"projects\" */\n >(\"private\");\n const [rbacUsers, setRbacUsers] = useState<\n { id: number; rights: \"read\" | \"write\" }[]\n >([]);\n const [rbacRoles, setRbacRoles] = useState<\n { id: string; rights: \"read\" | \"write\" }[]\n >([]);\n /* const [rbacProjects, setRbacProjects] = useState<\n { id: string; rights: \"read\" | \"write\" }[]\n >([]); */\n const [rbacOpen, setRbacOpen] = useState(false);\n const [assignedAgents, setAssignedAgents] = useState<string[]>([]);\n const [agentSelectorOpen, setAgentSelectorOpen] = useState(false);\n\n // Fetch agents\n const { data: agentsData } = useQuery(GET_AGENTS, {\n variables: { page: 1, limit: 100 },\n });\n\n const agents = agentsData?.agentsPagination?.items || [];\n\n // Extract variables from content\n const variables = extractVariables(content);\n const { isValid, invalidVariables } = validatePromptVariables(content);\n\n // Initialize form when editing\n useEffect(() => {\n if (!open) return; // Only run when modal opens\n\n if (prompt) {\n setName(prompt.name);\n setDescription(prompt.description || \"\");\n setContent(prompt.content);\n setRightsMode(prompt.rights_mode);\n setRbacUsers(prompt.RBAC?.users || []);\n setRbacRoles(prompt.RBAC?.roles || []);\n // setRbacProjects(prompt.RBAC?.projects || []);\n setAssignedAgents(prompt.assigned_agents || []);\n } else {\n resetForm();\n // Apply default assigned agents when creating new prompt\n if (defaultAssignedAgents && defaultAssignedAgents.length > 0) {\n setAssignedAgents(defaultAssignedAgents);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [prompt, open]);\n\n const resetForm = () => {\n setName(\"\");\n setDescription(\"\");\n setContent(\"\");\n setRightsMode(\"private\");\n setRbacUsers([]);\n setRbacRoles([]);\n // setRbacProjects([]);\n setRbacOpen(false);\n setAssignedAgents([]);\n };\n\n const handleSubmit = async () => {\n // Validation\n if (!name.trim()) {\n toast.error(\"Please enter a name for the prompt\");\n return;\n }\n if (!content.trim()) {\n toast.error(\"Please enter prompt content\");\n return;\n }\n if (!isValid) {\n toast.error(\n `Invalid variable names: ${invalidVariables.join(\", \")}. Use only letters, numbers, and underscores.`\n );\n return;\n }\n\n try {\n const input = {\n name: name.trim(),\n description: description.trim() || undefined,\n content: content.trim(),\n rights_mode: rightsMode,\n RBAC:\n rightsMode !== \"private\" && rightsMode !== \"public\"\n ? {\n users: rbacUsers.length > 0 ? rbacUsers : undefined,\n roles: rbacRoles.length > 0 ? rbacRoles : undefined,\n // projects: rbacProjects.length > 0 ? rbacProjects : undefined,\n }\n : undefined,\n assigned_agents: assignedAgents.length > 0 ? assignedAgents : undefined,\n };\n\n if (isEditing) {\n await updatePrompt({\n variables: {\n id: prompt.id,\n ...input,\n },\n });\n toast.success(\"Prompt updated successfully\");\n } else {\n await createPrompt({\n variables: input,\n });\n toast.success(\"Prompt created successfully\");\n }\n\n onSuccess();\n onOpenChange(false);\n resetForm();\n } catch (error) {\n console.error(error);\n toast.error(isEditing ? \"Failed to update prompt\" : \"Failed to create prompt\");\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-3xl max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{isEditing ? \"Edit Prompt\" : \"Create New Prompt\"}</DialogTitle>\n <DialogDescription>\n {isEditing\n ? \"Update your prompt template\"\n : \"Create a reusable prompt template with variables\"}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-6 py-4\">\n {/* Name */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"name\">\n Name <span className=\"text-destructive\">*</span>\n </Label>\n <Input\n id=\"name\"\n placeholder=\"Customer Support Template\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n />\n </div>\n\n {/* Description */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"description\">Description</Label>\n <Input\n id=\"description\"\n placeholder=\"Brief description of this prompt\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n />\n </div>\n\n {/* Content */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"content\">\n Prompt Content <span className=\"text-destructive\">*</span>\n </Label>\n <Textarea\n id=\"content\"\n placeholder=\"You are helping {{customer_name}} with their {{issue}}...\"\n value={content}\n onChange={(e) => setContent(e.target.value)}\n rows={8}\n className=\"font-mono text-sm\"\n />\n <div className=\"flex items-start gap-2 text-xs text-muted-foreground\">\n <Lightbulb className=\"h-3.5 w-3.5 mt-0.5 flex-shrink-0\" />\n <span>\n Use{\" \"}\n <code className=\"bg-muted px-1 py-0.5 rounded\">\n {\"{\"}\n {\"{\"}variable_name{\"}}\"}\n </code>{\" \"}\n format for dynamic content. Variable names can only contain letters,\n numbers, and underscores.\n </span>\n </div>\n\n {/* Detected Variables */}\n {variables.length > 0 && (\n <div className=\"flex flex-wrap gap-1 pt-2\">\n <span className=\"text-xs text-muted-foreground mr-2\">\n Detected variables:\n </span>\n {variables.map((variable) => (\n <Badge key={variable} variant=\"outline\" className=\"text-xs\">\n {variable}\n </Badge>\n ))}\n </div>\n )}\n\n {/* Invalid Variables Warning */}\n {!isValid && (\n <div className=\"text-xs text-destructive\">\n Invalid variable names: {invalidVariables.join(\", \")}\n </div>\n )}\n </div>\n\n {/* Assign to Agents */}\n <div className=\"space-y-2\">\n <Label>Assign to Agents</Label>\n <Popover modal={true} open={agentSelectorOpen} onOpenChange={setAgentSelectorOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={agentSelectorOpen}\n className=\"w-full justify-between\"\n >\n {assignedAgents.length === 0\n ? \"Select agents...\"\n : `${assignedAgents.length} agent${assignedAgents.length !== 1 ? \"s\" : \"\"} selected`}\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-full p-0\">\n <Command>\n <CommandInput placeholder=\"Search agents...\" />\n <CommandList>\n <CommandEmpty>No agents found.</CommandEmpty>\n <CommandGroup>\n {agents.map((agent: any) => (\n <CommandItem\n key={agent.id}\n value={agent.id}\n onSelect={() => {\n setAssignedAgents((prev) =>\n prev.includes(agent.id)\n ? prev.filter((id) => id !== agent.id)\n : [...prev, agent.id]\n );\n }}\n >\n <Check\n className={cn(\n \"mr-2 h-4 w-4\",\n assignedAgents.includes(agent.id)\n ? \"opacity-100\"\n : \"opacity-0\"\n )}\n />\n {agent.name}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n {assignedAgents.length > 0 && (\n <div className=\"flex flex-wrap gap-2 pt-2\">\n {assignedAgents.map((agentId) => {\n const agent = agents.find((a: any) => a.id === agentId);\n return agent ? (\n <Badge key={agentId} variant=\"secondary\" className=\"text-sm\">\n {agent.name}\n <button\n type=\"button\"\n onClick={() =>\n setAssignedAgents((prev) =>\n prev.filter((id) => id !== agentId)\n )\n }\n className=\"ml-1.5 hover:text-destructive\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </Badge>\n ) : null;\n })}\n </div>\n )}\n <p className=\"text-xs text-muted-foreground\">\n Assign this prompt to specific agents to show it as recommended in chat\n </p>\n </div>\n\n {/* RBAC Control */}\n <Collapsible open={rbacOpen} onOpenChange={setRbacOpen}>\n <div className=\"space-y-2\">\n <CollapsibleTrigger asChild>\n <Button variant=\"outline\" className=\"w-full justify-between\">\n Access Control\n <span className=\"text-xs text-muted-foreground\">\n {rightsMode === \"private\" && \"Private\"}\n {rightsMode === \"public\" && \"Public\"}\n {rightsMode === \"users\" && `${rbacUsers.length} users`}\n {rightsMode === \"roles\" && `${rbacRoles.length} roles`}\n {/* {rightsMode === \"projects\" && `${rbacProjects.length} projects`} */}\n </span>\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pt-2\">\n <RBACControl\n initialRightsMode={rightsMode}\n initialUsers={rbacUsers}\n initialRoles={rbacRoles}\n modalMode={true}\n // initialProjects={rbacProjects}\n onChange={(mode, users, roles) => {\n setRightsMode(mode);\n setRbacUsers(users);\n setRbacRoles(roles);\n // setRbacProjects(projects);\n }}\n />\n </CollapsibleContent>\n </div>\n </Collapsible>\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button\n onClick={handleSubmit}\n disabled={creating || updating || !name.trim() || !content.trim() || !isValid}\n >\n {creating || updating ? \"Saving...\" : isEditing ? \"Save Changes\" : \"Create Prompt\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import { useMutation, useQuery } from \"@apollo/client\";\nimport {\n CREATE_PROMPT,\n CREATE_PROMPT_FAVORITE,\n DELETE_PROMPT,\n DELETE_PROMPT_FAVORITE,\n GET_PROMPT_BY_ID,\n GET_PROMPTS,\n GET_USER_PROMPT_FAVORITES,\n INCREMENT_PROMPT_FAVORITES,\n INCREMENT_PROMPT_USAGE,\n UPDATE_PROMPT,\n} from \"@/queries/queries\";\nimport {\n CreatePromptInput,\n PromptFavorite,\n PromptLibrary,\n UpdatePromptInput,\n} from \"@/types/models/prompt-library\";\n\ninterface PromptsData {\n prompt_libraryPagination: {\n pageInfo: {\n pageCount: number;\n itemCount: number;\n currentPage: number;\n hasPreviousPage: boolean;\n hasNextPage: boolean;\n };\n items: PromptLibrary[];\n };\n}\n\ninterface PromptData {\n prompt_library_itemById: PromptLibrary;\n}\n\ninterface PromptFavoritesData {\n prompt_favoritesPagination: {\n items: PromptFavorite[];\n };\n}\n\n/**\n * Hook to fetch paginated prompts with filtering and sorting\n */\nexport const usePrompts = (variables?: {\n page?: number;\n limit?: number;\n filters?: any[];\n sort?: { field: string; direction: \"ASC\" | \"DESC\" };\n}) => {\n return useQuery<PromptsData>(GET_PROMPTS, {\n variables: {\n page: variables?.page ?? 1,\n limit: variables?.limit ?? 20,\n filters: variables?.filters ?? [],\n sort: variables?.sort ?? { field: \"updatedAt\", direction: \"DESC\" },\n },\n });\n};\n\n/**\n * Hook to fetch a single prompt by ID\n */\nexport const usePrompt = (id: string) => {\n return useQuery<PromptData>(GET_PROMPT_BY_ID, {\n variables: { id },\n skip: !id,\n });\n};\n\n/**\n * Hook to create a new prompt\n */\nexport const useCreatePrompt = () => {\n return useMutation<{ prompt_libraryCreateOne: { item: PromptLibrary } }>(\n CREATE_PROMPT,\n {\n refetchQueries: [{ query: GET_PROMPTS, variables: { page: 1, limit: 20 } }],\n }\n );\n};\n\n/**\n * Hook to update an existing prompt\n */\nexport const useUpdatePrompt = () => {\n return useMutation<{ prompt_libraryUpdateOneById: { item: PromptLibrary } }>(\n UPDATE_PROMPT\n );\n};\n\n/**\n * Hook to delete a prompt\n */\nexport const useDeletePrompt = () => {\n return useMutation<{ prompt_libraryRemoveOneById: { id: string } }>(\n DELETE_PROMPT,\n {\n refetchQueries: [{ query: GET_PROMPTS, variables: { page: 1, limit: 20 } }],\n }\n );\n};\n\n/**\n * Hook to increment prompt usage count\n */\nexport const useIncrementPromptUsage = () => {\n return useMutation<{\n prompt_libraryUpdateOneById: { item: Pick<PromptLibrary, \"id\" | \"usage_count\"> };\n }>(INCREMENT_PROMPT_USAGE);\n};\n\n/**\n * Hook to fetch user's favorited prompts\n */\nexport const useUserPromptFavorites = (userId: number) => {\n return useQuery<PromptFavoritesData>(GET_USER_PROMPT_FAVORITES, {\n variables: { user_id: userId },\n skip: !userId,\n });\n};\n\n/**\n * Hook to create a prompt favorite\n */\nexport const useCreatePromptFavorite = () => {\n return useMutation<{ prompt_favoritesCreateOne: { item: PromptFavorite } }>(\n CREATE_PROMPT_FAVORITE\n );\n};\n\n/**\n * Hook to delete a prompt favorite\n */\nexport const useDeletePromptFavorite = () => {\n return useMutation<{ prompt_favoritesRemoveOneById: { id: string } }>(\n DELETE_PROMPT_FAVORITE\n );\n};\n\n/**\n * Hook to toggle favorite status of a prompt\n * Handles both creating and deleting favorites, and updating the favorite count\n */\nexport const useTogglePromptFavorite = () => {\n const [createFavorite] = useCreatePromptFavorite();\n const [deleteFavorite] = useDeletePromptFavorite();\n const [incrementFavorites] = useMutation(INCREMENT_PROMPT_FAVORITES);\n\n const toggleFavorite = async (\n promptId: string,\n userId: number,\n isFavorited: boolean,\n currentFavoriteCount: number,\n favoriteId?: string\n ) => {\n if (isFavorited && favoriteId) {\n // Remove favorite\n await deleteFavorite({ variables: { id: favoriteId } });\n await incrementFavorites({\n variables: {\n id: promptId,\n favorite_count: Math.max(0, currentFavoriteCount - 1),\n },\n });\n } else {\n // Add favorite\n await createFavorite({\n variables: { user_id: userId, prompt_id: promptId },\n });\n await incrementFavorites({\n variables: { id: promptId, favorite_count: currentFavoriteCount + 1 },\n });\n }\n };\n\n return { toggleFavorite };\n};\n","/**\n * Extracts all variable names from a prompt template\n * Variables are in the format {{variable_name}}\n * Only alphanumeric characters and underscores are allowed in variable names\n *\n * @param content - The prompt content to extract variables from\n * @returns Array of unique variable names found in the content\n *\n * @example\n * extractVariables(\"Hello {{name}}, your issue {{issue_id}} is resolved\")\n * // Returns: [\"name\", \"issue_id\"]\n */\nexport function extractVariables(content: string): string[] {\n if (!content) return [];\n\n // Match {{variable_name}} where variable_name contains only alphanumeric and underscore\n const regex = /\\{\\{([a-zA-Z0-9_]+)\\}\\}/g;\n const matches = content.matchAll(regex);\n const variables = new Set<string>();\n\n for (const match of Array.from(matches)) {\n variables.add(match[1]);\n }\n\n return Array.from(variables).sort();\n}\n"],"names":["PromptCard","param","agentsData","creatorData","prompt","user","onUpdate","isEditModalOpen","setIsEditModalOpen","useState","isFavoriting","setIsFavoriting","deletePrompt","useDeletePrompt","toggleFavorite","useTogglePromptFavorite","hasWriteAccess","checkPromptWriteAccess","isPrivate","rights_mode","isPublic","byUsers","byRoles","isAdmin","super_admin","isCreator","created_by","id","toString","writeAccess","userAccess","RBAC","users","find","u","rights","roleAccess","roles","r","role","variables","extractVariables","content","isFavorited","is_favorited","data","useQuery","GET_AGENTS_BY_IDS","ids","assigned_agents","skip","length","assignedAgentNames","agentByIds","map","agent","name","GET_USER_BY_ID","creatorName","userById","handleDelete","confirm","toast","success","error","console","handleToggleFavorite","favorite_count","undefined","icon","duration","Promise","resolve","setTimeout","jsx_runtime","jsxs","Fragment","Card","className","jsx","CardHeader","div","h3","description","p","Button","variant","size","concat","onClick","disabled","ThumbsUp","DropdownMenu","modal","DropdownMenuTrigger","asChild","MoreVertical","DropdownMenuContent","align","DropdownMenuItem","navigator","clipboard","writeText","Copy","Edit","Trash2","CardContent","Badge","Bot","span","slice","index","CardFooter","title","Activity","usage_count","type","MessageSquare","User","Calendar","formatDistanceToNow","Date","createdAt","addSuffix","Clock","updatedAt","PromptEditorModal","open","onOpenChange","onSuccess","defaultAssignedAgents","isEditing","createPrompt","loading","creating","useCreatePrompt","updatePrompt","updating","useUpdatePrompt","setName","setDescription","setContent","rightsMode","setRightsMode","rbacUsers","setRbacUsers","rbacRoles","setRbacRoles","rbacOpen","setRbacOpen","assignedAgents","setAssignedAgents","agentSelectorOpen","setAgentSelectorOpen","GET_AGENTS","page","limit","agents","agentsPagination","items","isValid","invalidVariables","validatePromptVariables","matches","matchAll","match","Array","from","variableName","validPattern","test","push","useEffect","resetForm","handleSubmit","trim","join","input","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Label","htmlFor","Input","placeholder","value","onChange","e","target","Textarea","rows","Lightbulb","code","variable","Popover","PopoverTrigger","aria-expanded","ChevronsUpDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","onSelect","prev","includes","filter","Check","cn","a","agentId","button","X","Collapsible","CollapsibleTrigger","CollapsibleContent","RBACControl","initialRightsMode","initialUsers","initialRoles","modalMode","mode","DialogFooter","usePrompts","GET_PROMPTS","filters","sort","field","direction","useMutation","CREATE_PROMPT","refetchQueries","query","UPDATE_PROMPT","DELETE_PROMPT","useIncrementPromptUsage","INCREMENT_PROMPT_USAGE","useCreatePromptFavorite","CREATE_PROMPT_FAVORITE","useDeletePromptFavorite","DELETE_PROMPT_FAVORITE","createFavorite","deleteFavorite","incrementFavorites","INCREMENT_PROMPT_FAVORITES","promptId","userId","currentFavoriteCount","favoriteId","Math","max","user_id","prompt_id","Set","add"],"sourceRoot":""}