kempo 4.6.1 → 4.7.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 (188) hide show
  1. package/README.md +5 -0
  2. package/app-public/account/index.page.html +2 -0
  3. package/app-public/nav.fragment.html +2 -1
  4. package/app-templates/emails/email.template.html +14 -0
  5. package/app-templates/emails/reset-password.page.html +19 -0
  6. package/app-templates/emails/test.page.html +21 -0
  7. package/app-templates/emails/verify-email.page.html +18 -0
  8. package/bin/cli.js +3 -0
  9. package/dist/admin/components/Dashboard.js +2 -2
  10. package/dist/admin/components/Dashboard.js.map +1 -1
  11. package/dist/admin/components/Menus.js +103 -0
  12. package/dist/admin/components/Menus.js.map +1 -0
  13. package/dist/admin/components/tableControls/ExtensionDetails.js +1 -1
  14. package/dist/admin/components/tableControls/ExtensionDetails.js.map +1 -1
  15. package/dist/admin/content/menus/index.page.html +11 -0
  16. package/dist/admin/extensions/browse/index.page.html +4 -1
  17. package/dist/admin/extensions/index.page.html +1 -0
  18. package/dist/admin/nav.fragment.html +6 -0
  19. package/dist/kempo/api/extensions/POST.js +1 -1
  20. package/dist/kempo/api/extensions/POST.js.map +1 -1
  21. package/dist/kempo/api/extensions/known/GET.js +1 -1
  22. package/dist/kempo/api/extensions/known/GET.js.map +1 -1
  23. package/dist/kempo/api/extensions/rating/PUT.js +1 -1
  24. package/dist/kempo/api/extensions/rating/PUT.js.map +1 -1
  25. package/dist/kempo/api/fragments/DELETE.js +1 -1
  26. package/dist/kempo/api/fragments/DELETE.js.map +1 -1
  27. package/dist/kempo/api/fragments/GET.js +1 -1
  28. package/dist/kempo/api/fragments/GET.js.map +1 -1
  29. package/dist/kempo/api/fragments/POST.js +1 -1
  30. package/dist/kempo/api/fragments/POST.js.map +1 -1
  31. package/dist/kempo/api/fragments/disable/PUT.js +1 -1
  32. package/dist/kempo/api/fragments/disable/PUT.js.map +1 -1
  33. package/dist/kempo/api/fragments/enable/PUT.js +1 -1
  34. package/dist/kempo/api/fragments/enable/PUT.js.map +1 -1
  35. package/dist/kempo/api/fragments/file/GET.js +1 -1
  36. package/dist/kempo/api/fragments/file/GET.js.map +1 -1
  37. package/dist/kempo/api/fragments/file/PATCH.js +1 -1
  38. package/dist/kempo/api/fragments/file/PATCH.js.map +1 -1
  39. package/dist/kempo/api/fragments/file/PUT.js +1 -1
  40. package/dist/kempo/api/fragments/file/PUT.js.map +1 -1
  41. package/dist/kempo/api/fragments/lock/PUT.js +1 -1
  42. package/dist/kempo/api/fragments/lock/PUT.js.map +1 -1
  43. package/dist/kempo/api/globals/DELETE.js +1 -1
  44. package/dist/kempo/api/globals/DELETE.js.map +1 -1
  45. package/dist/kempo/api/globals/GET.js +1 -1
  46. package/dist/kempo/api/globals/GET.js.map +1 -1
  47. package/dist/kempo/api/globals/POST.js +1 -1
  48. package/dist/kempo/api/globals/POST.js.map +1 -1
  49. package/dist/kempo/api/globals/disable/PUT.js +1 -1
  50. package/dist/kempo/api/globals/disable/PUT.js.map +1 -1
  51. package/dist/kempo/api/globals/enable/PUT.js +1 -1
  52. package/dist/kempo/api/globals/enable/PUT.js.map +1 -1
  53. package/dist/kempo/api/globals/entry/GET.js +1 -1
  54. package/dist/kempo/api/globals/entry/GET.js.map +1 -1
  55. package/dist/kempo/api/globals/entry/PUT.js +1 -1
  56. package/dist/kempo/api/globals/entry/PUT.js.map +1 -1
  57. package/dist/kempo/api/globals/lock/PUT.js +1 -1
  58. package/dist/kempo/api/globals/lock/PUT.js.map +1 -1
  59. package/dist/kempo/api/menus/DELETE.js +2 -0
  60. package/dist/kempo/api/menus/DELETE.js.map +1 -0
  61. package/dist/kempo/api/menus/GET.js +2 -0
  62. package/dist/kempo/api/menus/GET.js.map +1 -0
  63. package/dist/kempo/api/menus/POST.js +2 -0
  64. package/dist/kempo/api/menus/POST.js.map +1 -0
  65. package/dist/kempo/api/menus/adopt/PUT.js +2 -0
  66. package/dist/kempo/api/menus/adopt/PUT.js.map +1 -0
  67. package/dist/kempo/api/menus/items/DELETE.js +2 -0
  68. package/dist/kempo/api/menus/items/DELETE.js.map +1 -0
  69. package/dist/kempo/api/menus/items/POST.js +2 -0
  70. package/dist/kempo/api/menus/items/POST.js.map +1 -0
  71. package/dist/kempo/api/menus/items/enabled/PUT.js +2 -0
  72. package/dist/kempo/api/menus/items/enabled/PUT.js.map +1 -0
  73. package/dist/kempo/api/menus/items/order/PUT.js +2 -0
  74. package/dist/kempo/api/menus/items/order/PUT.js.map +1 -0
  75. package/dist/kempo/api/menus/location/PUT.js +2 -0
  76. package/dist/kempo/api/menus/location/PUT.js.map +1 -0
  77. package/dist/kempo/api/pages/DELETE.js +1 -1
  78. package/dist/kempo/api/pages/DELETE.js.map +1 -1
  79. package/dist/kempo/api/pages/GET.js +1 -1
  80. package/dist/kempo/api/pages/GET.js.map +1 -1
  81. package/dist/kempo/api/pages/POST.js +1 -1
  82. package/dist/kempo/api/pages/POST.js.map +1 -1
  83. package/dist/kempo/api/pages/directories/GET.js +1 -1
  84. package/dist/kempo/api/pages/directories/GET.js.map +1 -1
  85. package/dist/kempo/api/pages/disable/PUT.js +1 -1
  86. package/dist/kempo/api/pages/disable/PUT.js.map +1 -1
  87. package/dist/kempo/api/pages/enable/PUT.js +1 -1
  88. package/dist/kempo/api/pages/enable/PUT.js.map +1 -1
  89. package/dist/kempo/api/pages/file/GET.js +1 -1
  90. package/dist/kempo/api/pages/file/GET.js.map +1 -1
  91. package/dist/kempo/api/pages/file/PATCH.js +1 -1
  92. package/dist/kempo/api/pages/file/PATCH.js.map +1 -1
  93. package/dist/kempo/api/pages/file/PUT.js +1 -1
  94. package/dist/kempo/api/pages/file/PUT.js.map +1 -1
  95. package/dist/kempo/api/pages/lock/PUT.js +1 -1
  96. package/dist/kempo/api/pages/lock/PUT.js.map +1 -1
  97. package/dist/kempo/api/pages/rescan/POST.js +1 -1
  98. package/dist/kempo/api/pages/rescan/POST.js.map +1 -1
  99. package/dist/kempo/api/pages/search/GET.js +1 -1
  100. package/dist/kempo/api/pages/search/GET.js.map +1 -1
  101. package/dist/kempo/api/pages/templates/GET.js +1 -1
  102. package/dist/kempo/api/pages/templates/GET.js.map +1 -1
  103. package/dist/kempo/api/templates/DELETE.js +1 -1
  104. package/dist/kempo/api/templates/DELETE.js.map +1 -1
  105. package/dist/kempo/api/templates/GET.js +1 -1
  106. package/dist/kempo/api/templates/GET.js.map +1 -1
  107. package/dist/kempo/api/templates/POST.js +1 -1
  108. package/dist/kempo/api/templates/POST.js.map +1 -1
  109. package/dist/kempo/api/templates/disable/PUT.js +1 -1
  110. package/dist/kempo/api/templates/disable/PUT.js.map +1 -1
  111. package/dist/kempo/api/templates/enable/PUT.js +1 -1
  112. package/dist/kempo/api/templates/enable/PUT.js.map +1 -1
  113. package/dist/kempo/api/templates/file/GET.js +1 -1
  114. package/dist/kempo/api/templates/file/GET.js.map +1 -1
  115. package/dist/kempo/api/templates/file/PATCH.js +1 -1
  116. package/dist/kempo/api/templates/file/PATCH.js.map +1 -1
  117. package/dist/kempo/api/templates/file/PUT.js +1 -1
  118. package/dist/kempo/api/templates/file/PUT.js.map +1 -1
  119. package/dist/kempo/api/templates/lock/PUT.js +1 -1
  120. package/dist/kempo/api/templates/lock/PUT.js.map +1 -1
  121. package/dist/kempo/components/DashboardWidget.js +4 -4
  122. package/dist/kempo/components/DashboardWidget.js.map +1 -1
  123. package/dist/kempo/icons/campaign.svg +1 -0
  124. package/dist/kempo/icons/fields.svg +1 -0
  125. package/dist/kempo/icons/open_in_new.svg +1 -0
  126. package/dist/kempo/sdk.js +1 -1
  127. package/dist/kempo/sdk.js.map +1 -1
  128. package/middleware/kempo.js +48 -12
  129. package/package.json +2 -2
  130. package/server/db/schema.js +24 -0
  131. package/server/sdk.js +21 -0
  132. package/server/utils/auth/requestPasswordReset.js +9 -3
  133. package/server/utils/auth/verifyEmail.js +10 -1
  134. package/server/utils/dashboard/coreWidgets.js +1 -0
  135. package/server/utils/dashboard/helpers.js +6 -0
  136. package/server/utils/email/renderEmailTemplate.js +63 -0
  137. package/server/utils/email/sendEmailFromTemplate.js +9 -27
  138. package/server/utils/extensions/aliases.js +71 -0
  139. package/server/utils/extensions/checkClaims.js +32 -0
  140. package/server/utils/extensions/claims.js +54 -0
  141. package/server/utils/extensions/createTablesFromSchema.js +13 -20
  142. package/server/utils/extensions/enableExtensionTree.js +8 -0
  143. package/server/utils/extensions/{getMarketplaceClient.js → getSiteMarketplaceClient.js} +1 -1
  144. package/server/utils/extensions/installExtension.js +32 -0
  145. package/server/utils/extensions/installFromCatalog.js +1 -1
  146. package/server/utils/extensions/installPackage.js +1 -1
  147. package/server/utils/extensions/{catalogClient.js → marketplaceClient.js} +4 -1
  148. package/server/utils/extensions/readKempoConfig.js +2 -2
  149. package/server/utils/extensions/scopeCache.js +14 -1
  150. package/server/utils/extensions/scopes.js +72 -0
  151. package/server/utils/extensions/uninstallExtensionTree.js +2 -1
  152. package/server/utils/extensions/updateExtension.js +35 -0
  153. package/server/utils/global-content/createGlobalContent.js +8 -18
  154. package/server/utils/global-content/deleteGlobalContent.js +1 -16
  155. package/server/utils/global-content/disableGlobalContent.js +1 -16
  156. package/server/utils/global-content/enableGlobalContent.js +1 -16
  157. package/server/utils/global-content/helpers.js +40 -6
  158. package/server/utils/global-content/listGlobalContent.js +2 -2
  159. package/server/utils/global-content/setGlobalContentLocked.js +1 -16
  160. package/server/utils/global-content/updateGlobalContent.js +1 -16
  161. package/server/utils/menus/adoptMenuItem.js +58 -0
  162. package/server/utils/menus/assignMenuLocation.js +47 -0
  163. package/server/utils/menus/deleteMenu.js +27 -0
  164. package/server/utils/menus/deleteMenuItems.js +27 -0
  165. package/server/utils/menus/findMenuLocations.js +41 -0
  166. package/server/utils/menus/findNavItems.js +74 -0
  167. package/server/utils/menus/findPages.js +73 -0
  168. package/server/utils/menus/listMenus.js +103 -0
  169. package/server/utils/menus/markup.js +55 -0
  170. package/server/utils/menus/reorderMenuItems.js +36 -0
  171. package/server/utils/menus/saveMenu.js +54 -0
  172. package/server/utils/menus/saveMenuItem.js +122 -0
  173. package/server/utils/menus/setMenuItemEnabled.js +31 -0
  174. package/server/utils/menus/store.js +90 -0
  175. package/server/utils/scheduler/helpers.js +36 -0
  176. package/server/utils/scheduler/listJobs.js +11 -0
  177. package/server/utils/scheduler/registerJobs.js +37 -0
  178. package/server/utils/scheduler/runJobs.js +90 -0
  179. package/server/utils/scheduler/scheduler.js +37 -0
  180. package/server/utils/scheduler/unregisterJobs.js +16 -0
  181. package/server/utils/settings/ensureEncryptionKey.js +132 -0
  182. package/server/utils/settings/secretCrypto.js +5 -1
  183. package/dist/kempo/icons/create_new_folder.svg +0 -1
  184. package/dist/kempo/icons/credit_card.svg +0 -1
  185. package/dist/kempo/icons/login.svg +0 -1
  186. package/dist/kempo/icons/payments.svg +0 -1
  187. package/dist/kempo/icons/toll.svg +0 -1
  188. package/dist/kempo/icons/wallet.svg +0 -1
@@ -1,2 +1,2 @@
1
- import{resolve as e,join as s}from"path";import r from"../../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../../server/utils/templates/getTemplateMetadata.js";import o from"../../../../../server/utils/templates/disableTemplate.js";const i=import.meta.dirname.includes("node_modules")?s(process.cwd(),"public"):e(import.meta.dirname,"../../../../../app-public");export default async(e,s)=>{const a=e.cookies.session_token,[n,m]=await r(a,"system:pages:update");if(n)return s.status(n.code).json({error:n.msg});if(!m)return s.status(403).json({error:"Insufficient permissions"});const{file:p}=e.body||{};if(!p)return s.status(400).json({error:"File path is required"});const[u,l]=await t({rootDir:i,file:p});if(!u&&l.locked)return s.status(403).json({error:"Cannot disable a locked template"});const[c,d]=await o({rootDir:i,file:p});if(c)return s.status(c.code).json({error:c.msg});s.json(d)};
1
+ import{existsSync as s}from"fs";import{resolve as e,join as r}from"path";import t from"../../../../../server/utils/permissions/currentUserHasPermission.js";import o from"../../../../../server/utils/templates/getTemplateMetadata.js";import i from"../../../../../server/utils/templates/disableTemplate.js";const a=s(r(process.cwd(),"public"))?r(process.cwd(),"public"):e(import.meta.dirname,"../../../../../app-public");export default async(s,e)=>{const r=s.cookies.session_token,[n,p]=await t(r,"system:pages:update");if(n)return e.status(n.code).json({error:n.msg});if(!p)return e.status(403).json({error:"Insufficient permissions"});const{file:m}=s.body||{};if(!m)return e.status(400).json({error:"File path is required"});const[u,c]=await o({rootDir:a,file:m});if(!u&&c.locked)return e.status(403).json({error:"Cannot disable a locked template"});const[l,f]=await i({rootDir:a,file:m});if(l)return e.status(l.code).json({error:l.msg});e.json(f)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\templates\disable\PUT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\templates\\disable\\PUT.js","names":["resolve","join","currentUserHasPermission","getTemplateMetadata","disableTemplate","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","body","metaError","metadata","locked","result"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getTemplateMetadata from '../../../../../server/utils/templates/getTemplateMetadata.js';\r\nimport disableTemplate from '../../../../../server/utils/templates/disableTemplate.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.body || {};\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [metaError, metadata] = await getTemplateMetadata({ rootDir, file });\r\n\tif(!metaError && metadata.locked){\r\n\t\treturn response.status(403).json({ error: 'Cannot disable a locked template' });\r\n\t}\r\n\r\n\tconst [error, result] = await disableTemplate({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(result);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAyB,sEACzBC,MAAqB,2DAE5B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBN,EAAKO,QAAQC,MAAO,UAAYT,cAAoBM,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBf,EAAyBW,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,GAASZ,EAAQa,MAAQ,CAAC,EAElC,IAAID,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOI,EAAWC,SAAkBvB,EAAoB,CAAEE,UAASkB,SACnE,IAAIE,GAAaC,EAASC,OACzB,OAAOf,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,qCAG3C,MAAOA,EAAOO,SAAgBxB,EAAgB,CAAEC,UAASkB,SAEzD,GAAGF,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKQ","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\templates\\disable\\PUT.js","names":["existsSync","resolve","join","currentUserHasPermission","getTemplateMetadata","disableTemplate","rootDir","process","cwd","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","body","metaError","metadata","locked","result"],"sources":["0"],"sourcesContent":["import { existsSync } from 'fs';\r\nimport { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getTemplateMetadata from '../../../../../server/utils/templates/getTemplateMetadata.js';\r\nimport disableTemplate from '../../../../../server/utils/templates/disableTemplate.js';\r\n\r\nconst rootDir = existsSync(join(process.cwd(), 'public')) ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.body || {};\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [metaError, metadata] = await getTemplateMetadata({ rootDir, file });\r\n\tif(!metaError && metadata.locked){\r\n\t\treturn response.status(403).json({ error: 'Cannot disable a locked template' });\r\n\t}\r\n\r\n\tconst [error, result] = await disableTemplate({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(result);\r\n};\r\n"],"mappings":"qBAASA,MAAkB,uBAClBC,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAyB,sEACzBC,MAAqB,2DAE5B,MAAMC,EAAUN,EAAWE,EAAKK,QAAQC,MAAO,WAAaN,EAAKK,QAAQC,MAAO,UAAYP,cAAoBQ,QAAS,4CAE1GC,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBd,EAAyBU,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,GAASZ,EAAQa,MAAQ,CAAC,EAElC,IAAID,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOI,EAAWC,SAAkBtB,EAAoB,CAAEE,UAASiB,SACnE,IAAIE,GAAaC,EAASC,OACzB,OAAOf,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,qCAG3C,MAAOA,EAAOO,SAAgBvB,EAAgB,CAAEC,UAASiB,SAEzD,GAAGF,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKQ","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{resolve as s,join as e}from"path";import r from"../../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../../server/utils/templates/enableTemplate.js";const o=import.meta.dirname.includes("node_modules")?e(process.cwd(),"public"):s(import.meta.dirname,"../../../../../app-public");export default async(s,e)=>{const i=s.cookies.session_token,[n,a]=await r(i,"system:pages:update");if(n)return e.status(n.code).json({error:n.msg});if(!a)return e.status(403).json({error:"Insufficient permissions"});const{file:m}=s.body||{};if(!m)return e.status(400).json({error:"File path is required"});const[p,u]=await t({rootDir:o,file:m});if(p)return e.status(p.code).json({error:p.msg});e.json(u)};
1
+ import{existsSync as s}from"fs";import{resolve as r,join as e}from"path";import t from"../../../../../server/utils/permissions/currentUserHasPermission.js";import o from"../../../../../server/utils/templates/enableTemplate.js";const i=s(e(process.cwd(),"public"))?e(process.cwd(),"public"):r(import.meta.dirname,"../../../../../app-public");export default async(s,r)=>{const e=s.cookies.session_token,[n,a]=await t(e,"system:pages:update");if(n)return r.status(n.code).json({error:n.msg});if(!a)return r.status(403).json({error:"Insufficient permissions"});const{file:p}=s.body||{};if(!p)return r.status(400).json({error:"File path is required"});const[m,u]=await o({rootDir:i,file:p});if(m)return r.status(m.code).json({error:m.msg});r.json(u)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\templates\enable\PUT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\templates\\enable\\PUT.js","names":["resolve","join","currentUserHasPermission","enableTemplate","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","body","result"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport enableTemplate from '../../../../../server/utils/templates/enableTemplate.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.body || {};\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [error, result] = await enableTemplate({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(result);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAoB,0DAE3B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBL,EAAKM,QAAQC,MAAO,UAAYR,cAAoBK,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBd,EAAyBU,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,GAASZ,EAAQa,MAAQ,CAAC,EAElC,IAAID,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOA,EAAOI,SAAgBrB,EAAe,CAAEC,UAASkB,SAExD,GAAGF,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKK","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\templates\\enable\\PUT.js","names":["existsSync","resolve","join","currentUserHasPermission","enableTemplate","rootDir","process","cwd","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","body","result"],"sources":["0"],"sourcesContent":["import { existsSync } from 'fs';\r\nimport { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport enableTemplate from '../../../../../server/utils/templates/enableTemplate.js';\r\n\r\nconst rootDir = existsSync(join(process.cwd(), 'public')) ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.body || {};\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [error, result] = await enableTemplate({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(result);\r\n};\r\n"],"mappings":"qBAASA,MAAkB,uBAClBC,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAoB,0DAE3B,MAAMC,EAAUL,EAAWE,EAAKI,QAAQC,MAAO,WAAaL,EAAKI,QAAQC,MAAO,UAAYN,cAAoBO,QAAS,4CAE1GC,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBb,EAAyBS,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,GAASZ,EAAQa,MAAQ,CAAC,EAElC,IAAID,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOA,EAAOI,SAAgBpB,EAAe,CAAEC,UAASiB,SAExD,GAAGF,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKK","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{resolve as s,join as r}from"path";import e from"../../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../../server/utils/templates/getTemplate.js";const o=import.meta.dirname.includes("node_modules")?r(process.cwd(),"public"):s(import.meta.dirname,"../../../../../app-public");export default async(s,r)=>{const i=s.cookies.session_token,[n,a]=await e(i,"system:pages:read");if(n)return r.status(n.code).json({error:n.msg});if(!a)return r.status(403).json({error:"Insufficient permissions"});const{file:m}=s.query;if(!m)return r.status(400).json({error:"File path is required"});const[u,p]=await t({rootDir:o,file:m});if(u)return r.status(u.code).json({error:u.msg});r.json(p)};
1
+ import{existsSync as s}from"fs";import{resolve as r,join as e}from"path";import t from"../../../../../server/utils/permissions/currentUserHasPermission.js";import o from"../../../../../server/utils/templates/getTemplate.js";const i=s(e(process.cwd(),"public"))?e(process.cwd(),"public"):r(import.meta.dirname,"../../../../../app-public");export default async(s,r)=>{const e=s.cookies.session_token,[n,a]=await t(e,"system:pages:read");if(n)return r.status(n.code).json({error:n.msg});if(!a)return r.status(403).json({error:"Insufficient permissions"});const{file:p}=s.query;if(!p)return r.status(400).json({error:"File path is required"});const[m,u]=await o({rootDir:i,file:p});if(m)return r.status(m.code).json({error:m.msg});r.json(u)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\templates\file\GET.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\templates\\file\\GET.js","names":["resolve","join","currentUserHasPermission","getTemplate","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","query","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getTemplate from '../../../../../server/utils/templates/getTemplate.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:read');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.query;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [error, data] = await getTemplate({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAiB,uDAExB,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBL,EAAKM,QAAQC,MAAO,UAAYR,cAAoBK,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBd,EAAyBU,EAAO,qBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,GAASZ,EAAQa,MAEzB,IAAID,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOA,EAAOI,SAAcrB,EAAY,CAAEC,UAASkB,SAEnD,GAAGF,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKK","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\templates\\file\\GET.js","names":["existsSync","resolve","join","currentUserHasPermission","getTemplate","rootDir","process","cwd","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","query","data"],"sources":["0"],"sourcesContent":["import { existsSync } from 'fs';\r\nimport { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getTemplate from '../../../../../server/utils/templates/getTemplate.js';\r\n\r\nconst rootDir = existsSync(join(process.cwd(), 'public')) ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:read');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.query;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [error, data] = await getTemplate({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"qBAASA,MAAkB,uBAClBC,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAiB,uDAExB,MAAMC,EAAUL,EAAWE,EAAKI,QAAQC,MAAO,WAAaL,EAAKI,QAAQC,MAAO,UAAYN,cAAoBO,QAAS,4CAE1GC,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBb,EAAyBS,EAAO,qBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,GAASZ,EAAQa,MAEzB,IAAID,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOA,EAAOI,SAAcpB,EAAY,CAAEC,UAASiB,SAEnD,GAAGF,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKK","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{resolve as e,join as s}from"path";import r from"../../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../../server/utils/templates/moveTemplate.js";const i=import.meta.dirname.includes("node_modules")?s(process.cwd(),"public"):e(import.meta.dirname,"../../../../../app-public");export default async(e,s)=>{const o=e.cookies.session_token,[n,a]=await r(o,"system:pages:update");if(n)return s.status(n.code).json({error:n.msg});if(!a)return s.status(403).json({error:"Insufficient permissions"});const{file:m,newFile:u}=e.body;if(!m)return s.status(400).json({error:"File path is required"});if(!u)return s.status(400).json({error:"New file path is required"});const[p,c]=await t({rootDir:i,file:m,newFile:u});if(p)return s.status(p.code).json({error:p.msg});s.json(c)};
1
+ import{existsSync as s}from"fs";import{resolve as r,join as e}from"path";import t from"../../../../../server/utils/permissions/currentUserHasPermission.js";import o from"../../../../../server/utils/templates/moveTemplate.js";const i=s(e(process.cwd(),"public"))?e(process.cwd(),"public"):r(import.meta.dirname,"../../../../../app-public");export default async(s,r)=>{const e=s.cookies.session_token,[n,a]=await t(e,"system:pages:update");if(n)return r.status(n.code).json({error:n.msg});if(!a)return r.status(403).json({error:"Insufficient permissions"});const{file:p,newFile:u}=s.body;if(!p)return r.status(400).json({error:"File path is required"});if(!u)return r.status(400).json({error:"New file path is required"});const[m,c]=await o({rootDir:i,file:p,newFile:u});if(m)return r.status(m.code).json({error:m.msg});r.json(c)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\templates\file\PATCH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\templates\\file\\PATCH.js","names":["resolve","join","currentUserHasPermission","moveTemplate","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","newFile","body","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport moveTemplate from '../../../../../server/utils/templates/moveTemplate.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, newFile } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tif(!newFile){\r\n\t\treturn response.status(400).json({ error: 'New file path is required' });\r\n\t}\r\n\r\n\tconst [error, data] = await moveTemplate({ rootDir, file, newFile });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAkB,wDAEzB,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBL,EAAKM,QAAQC,MAAO,UAAYR,cAAoBK,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBd,EAAyBU,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,EAAIC,QAAEA,GAAYb,EAAQc,KAElC,IAAIF,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,IAAIG,EACH,OAAOZ,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,8BAG3C,MAAOA,EAAOK,SAActB,EAAa,CAAEC,UAASkB,OAAMC,YAE1D,GAAGH,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKM","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\templates\\file\\PATCH.js","names":["existsSync","resolve","join","currentUserHasPermission","moveTemplate","rootDir","process","cwd","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","newFile","body","data"],"sources":["0"],"sourcesContent":["import { existsSync } from 'fs';\r\nimport { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport moveTemplate from '../../../../../server/utils/templates/moveTemplate.js';\r\n\r\nconst rootDir = existsSync(join(process.cwd(), 'public')) ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, newFile } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tif(!newFile){\r\n\t\treturn response.status(400).json({ error: 'New file path is required' });\r\n\t}\r\n\r\n\tconst [error, data] = await moveTemplate({ rootDir, file, newFile });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"qBAASA,MAAkB,uBAClBC,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAkB,wDAEzB,MAAMC,EAAUL,EAAWE,EAAKI,QAAQC,MAAO,WAAaL,EAAKI,QAAQC,MAAO,UAAYN,cAAoBO,QAAS,4CAE1GC,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBb,EAAyBS,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,EAAIC,QAAEA,GAAYb,EAAQc,KAElC,IAAIF,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,IAAIG,EACH,OAAOZ,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,8BAG3C,MAAOA,EAAOK,SAAcrB,EAAa,CAAEC,UAASiB,OAAMC,YAE1D,GAAGH,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKM","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{resolve as e,join as r}from"path";import t from"../../../../../server/utils/permissions/currentUserHasPermission.js";import s from"../../../../../server/utils/templates/getTemplateMetadata.js";import o from"../../../../../server/utils/templates/updateTemplate.js";const i=import.meta.dirname.includes("node_modules")?r(process.cwd(),"public"):e(import.meta.dirname,"../../../../../app-public");export default async(e,r)=>{const a=e.cookies.session_token,[n,m]=await t(a,"system:pages:update");if(n)return r.status(n.code).json({error:n.msg});if(!m)return r.status(403).json({error:"Insufficient permissions"});const{file:u,name:p,author:c,markup:d}=e.body;if(!u)return r.status(400).json({error:"File path is required"});const[l,f]=await s({rootDir:i,file:u});if(!l&&f.locked)return r.status(403).json({error:"This template is locked and cannot be edited"});const[j,k]=await o({rootDir:i,file:u,name:p,author:c,markup:d});if(j)return r.status(j.code).json({error:j.msg});r.json(k)};
1
+ import{existsSync as e}from"fs";import{resolve as r,join as s}from"path";import t from"../../../../../server/utils/permissions/currentUserHasPermission.js";import o from"../../../../../server/utils/templates/getTemplateMetadata.js";import i from"../../../../../server/utils/templates/updateTemplate.js";const a=e(s(process.cwd(),"public"))?s(process.cwd(),"public"):r(import.meta.dirname,"../../../../../app-public");export default async(e,r)=>{const s=e.cookies.session_token,[n,m]=await t(s,"system:pages:update");if(n)return r.status(n.code).json({error:n.msg});if(!m)return r.status(403).json({error:"Insufficient permissions"});const{file:p,name:u,author:c,markup:l}=e.body;if(!p)return r.status(400).json({error:"File path is required"});const[f,d]=await o({rootDir:a,file:p});if(!f&&d.locked)return r.status(403).json({error:"This template is locked and cannot be edited"});const[j,k]=await i({rootDir:a,file:p,name:u,author:c,markup:l});if(j)return r.status(j.code).json({error:j.msg});r.json(k)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\templates\file\PUT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\templates\\file\\PUT.js","names":["resolve","join","currentUserHasPermission","getTemplateMetadata","updateTemplate","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","name","author","markup","body","metaError","metadata","locked","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getTemplateMetadata from '../../../../../server/utils/templates/getTemplateMetadata.js';\r\nimport updateTemplate from '../../../../../server/utils/templates/updateTemplate.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, name, author, markup } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [metaError, metadata] = await getTemplateMetadata({ rootDir, file });\r\n\tif(!metaError && metadata.locked){\r\n\t\treturn response.status(403).json({ error: 'This template is locked and cannot be edited' });\r\n\t}\r\n\r\n\tconst [error, data] = await updateTemplate({ rootDir, file, name, author, markup });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAyB,sEACzBC,MAAoB,0DAE3B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBN,EAAKO,QAAQC,MAAO,UAAYT,cAAoBM,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBf,EAAyBW,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,EAAIC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,GAAWf,EAAQgB,KAE/C,IAAIJ,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOO,EAAWC,SAAkB1B,EAAoB,CAAEE,UAASkB,SACnE,IAAIK,GAAaC,EAASC,OACzB,OAAOlB,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,iDAG3C,MAAOA,EAAOU,SAAc3B,EAAe,CAAEC,UAASkB,OAAMC,OAAMC,SAAQC,WAE1E,GAAGL,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKW","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\templates\\file\\PUT.js","names":["existsSync","resolve","join","currentUserHasPermission","getTemplateMetadata","updateTemplate","rootDir","process","cwd","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","name","author","markup","body","metaError","metadata","locked","data"],"sources":["0"],"sourcesContent":["import { existsSync } from 'fs';\r\nimport { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getTemplateMetadata from '../../../../../server/utils/templates/getTemplateMetadata.js';\r\nimport updateTemplate from '../../../../../server/utils/templates/updateTemplate.js';\r\n\r\nconst rootDir = existsSync(join(process.cwd(), 'public')) ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, name, author, markup } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [metaError, metadata] = await getTemplateMetadata({ rootDir, file });\r\n\tif(!metaError && metadata.locked){\r\n\t\treturn response.status(403).json({ error: 'This template is locked and cannot be edited' });\r\n\t}\r\n\r\n\tconst [error, data] = await updateTemplate({ rootDir, file, name, author, markup });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"qBAASA,MAAkB,uBAClBC,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAyB,sEACzBC,MAAoB,0DAE3B,MAAMC,EAAUN,EAAWE,EAAKK,QAAQC,MAAO,WAAaN,EAAKK,QAAQC,MAAO,UAAYP,cAAoBQ,QAAS,4CAE1GC,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBd,EAAyBU,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,EAAIC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,GAAWf,EAAQgB,KAE/C,IAAIJ,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOO,EAAWC,SAAkBzB,EAAoB,CAAEE,UAASiB,SACnE,IAAIK,GAAaC,EAASC,OACzB,OAAOlB,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,iDAG3C,MAAOA,EAAOU,SAAc1B,EAAe,CAAEC,UAASiB,OAAMC,OAAMC,SAAQC,WAE1E,GAAGL,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKW","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{resolve as e,join as s}from"path";import r from"../../../../../server/utils/permissions/currentUserHasPermission.js";import o from"../../../../../server/utils/templates/setTemplateLocked.js";const t=import.meta.dirname.includes("node_modules")?s(process.cwd(),"public"):e(import.meta.dirname,"../../../../../app-public");export default async(e,s)=>{const i=e.cookies.session_token,[n,a]=await r(i,"system:pages:update");if(n)return s.status(n.code).json({error:n.msg});if(!a)return s.status(403).json({error:"Insufficient permissions"});const{file:m,locked:u}=e.body;if(!m)return s.status(400).json({error:"File path is required"});if("boolean"!=typeof u)return s.status(400).json({error:"locked must be a boolean"});const[p,c]=await o({rootDir:t,file:m,locked:u});if(p)return s.status(p.code).json({error:p.msg});s.json(c)};
1
+ import{existsSync as s}from"fs";import{resolve as e,join as r}from"path";import o from"../../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../../server/utils/templates/setTemplateLocked.js";const i=s(r(process.cwd(),"public"))?r(process.cwd(),"public"):e(import.meta.dirname,"../../../../../app-public");export default async(s,e)=>{const r=s.cookies.session_token,[n,a]=await o(r,"system:pages:update");if(n)return e.status(n.code).json({error:n.msg});if(!a)return e.status(403).json({error:"Insufficient permissions"});const{file:p,locked:c}=s.body;if(!p)return e.status(400).json({error:"File path is required"});if("boolean"!=typeof c)return e.status(400).json({error:"locked must be a boolean"});const[u,m]=await t({rootDir:i,file:p,locked:c});if(u)return e.status(u.code).json({error:u.msg});e.json(m)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\templates\lock\PUT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\templates\\lock\\PUT.js","names":["resolve","join","currentUserHasPermission","setTemplateLocked","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","locked","body","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport setTemplateLocked from '../../../../../server/utils/templates/setTemplateLocked.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, locked } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tif(typeof locked !== 'boolean'){\r\n\t\treturn response.status(400).json({ error: 'locked must be a boolean' });\r\n\t}\r\n\r\n\tconst [error, data] = await setTemplateLocked({ rootDir, file, locked });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAuB,6DAE9B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBL,EAAKM,QAAQC,MAAO,UAAYR,cAAoBK,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBd,EAAyBU,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,EAAIC,OAAEA,GAAWb,EAAQc,KAEjC,IAAIF,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,GAAqB,kBAAXG,EACT,OAAOZ,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAOA,EAAOK,SAActB,EAAkB,CAAEC,UAASkB,OAAMC,WAE/D,GAAGH,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKM","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\templates\\lock\\PUT.js","names":["existsSync","resolve","join","currentUserHasPermission","setTemplateLocked","rootDir","process","cwd","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","locked","body","data"],"sources":["0"],"sourcesContent":["import { existsSync } from 'fs';\r\nimport { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport setTemplateLocked from '../../../../../server/utils/templates/setTemplateLocked.js';\r\n\r\nconst rootDir = existsSync(join(process.cwd(), 'public')) ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, locked } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tif(typeof locked !== 'boolean'){\r\n\t\treturn response.status(400).json({ error: 'locked must be a boolean' });\r\n\t}\r\n\r\n\tconst [error, data] = await setTemplateLocked({ rootDir, file, locked });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"qBAASA,MAAkB,uBAClBC,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAuB,6DAE9B,MAAMC,EAAUL,EAAWE,EAAKI,QAAQC,MAAO,WAAaL,EAAKI,QAAQC,MAAO,UAAYN,cAAoBO,QAAS,4CAE1GC,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBb,EAAyBS,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,EAAIC,OAAEA,GAAWb,EAAQc,KAEjC,IAAIF,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,GAAqB,kBAAXG,EACT,OAAOZ,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAOA,EAAOK,SAAcrB,EAAkB,CAAEC,UAASiB,OAAMC,WAE/D,GAAGH,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKM","ignoreList":[]}
@@ -1,10 +1,10 @@
1
- import e from"/kempo-ui/components/LightComponent.js";import{html as t,nothing as i}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";import n from"/kempo-ui/components/Dialog.js";import{currentUserHasPermission as s}from"/kempo/sdk.js";export default class a extends e{static properties={width:{type:Number,reflect:!0},height:{type:Number,reflect:!0},definition:{attribute:!1},loading:{state:!0},failure:{state:!0},ctaAllowed:{state:!0}};constructor(){super(),this.width=2,this.height=1,this.definition=null,this.cta=null,this.loading=!0,this.failure="",this.ctaAllowed=!1}connectedCallback(){super.connectedCallback(),this.classList.add("d-b"),this.style.height="100%",this.refresh(),this.checkCta()}load=async()=>{};refresh=async()=>{try{await this.load(),this.failure=""}catch(e){this.failure=e?.message||"Could not load this widget."}this.loading=!1};getCta(){return this.cta}actions(){return[]}unwrap=async e=>{const[t,i]=await e;if(t)throw new Error(t.msg||"Request failed");return i};openForm=({title:e,fields:t,confirmText:i="Save",submit:s})=>{const a=document.createElement("div");a.className="p";const r={};t.forEach(({name:e,label:t,type:i="text",placeholder:n="",value:s="",options:o=[]})=>{const l=document.createElement("div");l.className="mb";const c=Object.assign(document.createElement("label"),{className:"d-b mbq",textContent:t});let d;"select"===i?(d=document.createElement("select"),d.className="full",o.forEach(e=>d.append(Object.assign(document.createElement("option"),{value:e.value,textContent:e.label,selected:e.value===s})))):d=Object.assign(document.createElement("input"),{type:i,className:"full",placeholder:n,value:s}),r[e]=d,l.append(c,d),a.append(l)});const o=Object.assign(document.createElement("p"),{className:"tc-danger m0",role:"alert"});a.append(o);const l=n.create(a,{title:e,confirmText:i,cancelText:"Cancel",confirmAction:async e=>{e.keepDialogOpen=!0,o.textContent="";const i=Object.fromEntries(t.map(({name:e})=>[e,r[e].value.trim()])),n=t.find(({name:e,required:t=!0})=>t&&!i[e]);if(n)return void(o.textContent=`${n.label} is required.`);const a=await s(i);a?o.textContent=a:l.close()}});return Object.values(r)[0]?.focus(),l};checkCta=async()=>{const e=this.getCta()?.permission;if(!e)return void(this.ctaAllowed=!0);const[t,i]=await s({permission:e});this.ctaAllowed=!t&&!!i?.hasPermission};renderTitle=()=>t`
2
- ${this.definition?.icon?t`<k-icon class="mr" name=${this.definition.icon}></k-icon>`:i}
1
+ import e from"/kempo-ui/components/LightComponent.js";import{html as t,nothing as i}from"/kempo-ui/lit-all.min.js";import"/kempo-ui/components/Icon.js";import n from"/kempo-ui/components/Dialog.js";import{currentUserHasPermission as s}from"/kempo/sdk.js";export default class r extends e{static properties={width:{type:Number,reflect:!0},height:{type:Number,reflect:!0},definition:{attribute:!1},loading:{state:!0},failure:{state:!0},ctaAllowed:{state:!0}};constructor(){super(),this.width=2,this.height=1,this.definition=null,this.cta=null,this.loading=!0,this.failure="",this.ctaAllowed=!1}connectedCallback(){super.connectedCallback(),this.classList.add("d-b"),this.style.height="100%",this.refresh(),this.checkCta()}load=async()=>{};refresh=async()=>{try{await this.load(),this.failure=""}catch(e){this.failure=e?.message||"Could not load this widget."}this.loading=!1};getCta(){return this.cta}actions(){return[]}unwrap=async e=>{const[t,i]=await e;if(t)throw new Error(t.msg||"Request failed");return i};openForm=({title:e,fields:t,confirmText:i="Save",submit:s})=>{const r=document.createElement("div");r.className="p";const o={};t.forEach(({name:e,label:t,type:i="text",placeholder:n="",value:s="",options:a=[]})=>{const c=document.createElement("div");c.className="mb";const l=Object.assign(document.createElement("label"),{className:"d-b mbq",textContent:t});let d;"select"===i?(d=document.createElement("select"),d.className="full",a.forEach(e=>d.append(Object.assign(document.createElement("option"),{value:e.value,textContent:e.label,selected:e.value===s})))):d=Object.assign(document.createElement("input"),{type:i,className:"full",placeholder:n,value:s}),o[e]=d,c.append(l,d),r.append(c)});const a=Object.assign(document.createElement("p"),{className:"tc-danger m0",role:"alert"});r.append(a);const c=n.create(r,{title:e,confirmText:i,cancelText:"Cancel",confirmAction:async e=>{e.keepDialogOpen=!0,a.textContent="";const i=Object.fromEntries(t.map(({name:e})=>[e,o[e].value.trim()])),n=t.find(({name:e,required:t=!0})=>t&&!i[e]);if(n)return void(a.textContent=`${n.label} is required.`);const r=await s(i);r?a.textContent=r:c.close()}});return Object.values(o)[0]?.focus(),c};checkCta=async()=>{const e=this.getCta()?.permission;if(!e)return void(this.ctaAllowed=!0);const[t,i]=await s({permission:e});this.ctaAllowed=!t&&!!i?.hasPermission};renderTitle=()=>t`
2
+ ${this.definition?.iconSrc?t`<k-icon class="mr" src=${this.definition.iconSrc}></k-icon>`:this.definition?.icon?t`<k-icon class="mr" name=${this.definition.icon}></k-icon>`:i}
3
3
  <strong class="flex">${this.definition?.title??""}</strong>
4
- `;renderActions=()=>{const e=this.width<2;return[...this.definition?.actions??[],...this.actions()].map(({label:n,icon:s,href:a,onClick:r,primary:o})=>{const l=s?t`<k-icon name=${s}></k-icon>${e?i:t` ${n}`}`:n,c="btn ml "+(o?"primary":"");return a?t`<a class=${c} href=${a} title=${n} aria-label=${n}>${l}</a>`:t`<button class=${c} title=${n} aria-label=${n} @click=${r}>${l}</button>`})};renderHeader(){return t`<header class="d-f px pyh bb" style="align-items: center;">${this.renderTitle()}${this.renderActions()}</header>`}renderContent(){return i}renderBody(){return this.failure?t`
4
+ `;renderActions=()=>{const e=this.width<2;return[...this.definition?.actions??[],...this.actions()].map(({label:n,icon:s,iconSrc:r,href:o,onClick:a,primary:c})=>{const l=r||s?t`${r?t`<k-icon src=${r}></k-icon>`:t`<k-icon name=${s}></k-icon>`}${e?i:t` ${n}`}`:n,d="btn ml "+(c?"primary":"");return o?t`<a class=${d} href=${o} title=${n} aria-label=${n}>${l}</a>`:t`<button class=${d} title=${n} aria-label=${n} @click=${a}>${l}</button>`})};renderHeader(){return t`<header class="d-f px pyh bb" style="align-items: center;">${this.renderTitle()}${this.renderActions()}</header>`}renderContent(){return i}renderBody(){return this.failure?t`
5
5
  <p class="tc-danger" role="alert">${this.failure}</p>
6
6
  <button @click=${this.refresh}>Try again</button>
7
- `:this.loading?t`<p class="tc-muted">Loading&hellip;</p>`:this.renderContent()}renderFooter=()=>{const e=this.getCta();if(!e||!this.ctaAllowed||this.failure)return i;const n=t`${e.icon?t`<k-icon name=${e.icon}></k-icon> `:i}${e.label}`;return t`
7
+ `:this.loading?t`<p class="tc-muted">Loading&hellip;</p>`:this.renderContent()}renderFooter=()=>{const e=this.getCta();if(!e||!this.ctaAllowed||this.failure)return i;const n=t`${e.iconSrc?t`<k-icon src=${e.iconSrc}></k-icon> `:e.icon?t`<k-icon name=${e.icon}></k-icon> `:i}${e.label}`;return t`
8
8
  <footer class="d-f px pyh bt" style="justify-content: flex-end;">
9
9
  ${e.href?t`<a class="btn primary" href=${e.href}>${n}</a>`:t`<button class="primary" @click=${e.onClick}>${n}</button>`}
10
10
  </footer>
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\components\\DashboardWidget.js","names":["LightComponent","html","nothing","Dialog","currentUserHasPermission","DashboardWidget","static","width","type","Number","reflect","height","definition","attribute","loading","state","failure","ctaAllowed","constructor","super","this","cta","connectedCallback","classList","add","style","refresh","checkCta","load","async","error","message","getCta","actions","unwrap","data","request","Error","msg","openForm","title","fields","confirmText","submit","content","document","createElement","className","inputs","forEach","name","label","placeholder","value","options","wrapper","caption","Object","assign","textContent","input","option","append","selected","role","dialog","create","cancelText","confirmAction","event","keepDialogOpen","values","fromEntries","map","trim","missing","find","required","close","focus","permission","hasPermission","renderTitle","icon","renderActions","compact","href","onClick","primary","classes","renderHeader","renderContent","renderBody","renderFooter","renderLightDom"],"sources":["0"],"sourcesContent":["import LightComponent from '/kempo-ui/components/LightComponent.js';\nimport { html, nothing } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\nimport Dialog from '/kempo-ui/components/Dialog.js';\nimport { currentUserHasPermission } from '/kempo/sdk.js';\n\n/*\n The base class for an admin dashboard widget. Extend it, define your element, and register the widget\n with `registerDashboardWidget` (or `kempo.widgets` in package.json).\n\n The dashboard creates the element only when the user has the widget on screen, and sets `width` and\n `height` (in blocks) on it, so a widget never loads data for a tile that is hidden. Override:\n\n `load()` fetch what the widget needs and assign it to reactive properties. Throw to show\n the failure message with a retry button. Runs when the element connects and\n again on `refresh()`.\n `renderContent()` return the markup for a loaded widget. Use `width` and `height` to show more\n when there is room.\n\n Declare your own properties by spreading the base ones:\n `static properties = { ...DashboardWidget.properties, items: { state: true } }`.\n\n The widget fills a bordered tile and owns everything inside it, its header included. `renderHeader()`\n returns the header region; the default is the widget's icon and title from `definition` (the registered\n widget, set by the dashboard). Override it to add buttons, filters or a different title, and use\n `renderTitle()` to keep the default title inside your own header.\n\n Call to action. A widget may offer one primary thing to do, drawn the same way in every tile as a button\n in a footer. It is optional. Set `this.cta` in the constructor (or override `getCta()` when it depends on\n state) to `{ label, icon, href }` for a link, or `{ label, icon, onClick }` for a callback, and add\n `permission` to show it only to people who hold that permission. For a callback that needs input, call\n `openForm()` to get a standard dialog.\n\n Header actions are separate: links declared on the registration (`actions`), or returned from\n `actions()`, appear as small buttons beside the title.\n\n Call `super.updated(changed)` if you override `updated()`.\n*/\nexport default class DashboardWidget extends LightComponent {\n static properties = {\n width: { type: Number, reflect: true },\n height: { type: Number, reflect: true },\n definition: { attribute: false },\n loading: { state: true },\n failure: { state: true },\n ctaAllowed: { state: true }\n };\n\n constructor(){\n super();\n this.width = 2;\n this.height = 1;\n this.definition = null;\n this.cta = null;\n this.loading = true;\n this.failure = '';\n this.ctaAllowed = false;\n }\n\n /*\n Lifecycle Callbacks\n */\n\n connectedCallback(){\n super.connectedCallback();\n this.classList.add('d-b');\n this.style.height = '100%';\n this.refresh();\n this.checkCta();\n }\n\n /*\n Public Methods\n */\n\n load = async () => {};\n\n refresh = async () => {\n try {\n await this.load();\n this.failure = '';\n } catch(error) {\n this.failure = error?.message || 'Could not load this widget.';\n }\n this.loading = false;\n };\n\n getCta(){\n return this.cta;\n }\n\n actions(){\n return [];\n }\n\n /*\n Resolves an SDK call, which returns `[error, data]`, to its data, or throws the error's message so\n `load()` can stay a straight line.\n */\n unwrap = async request => {\n const [error, data] = await request;\n if(error) throw new Error(error.msg || 'Request failed');\n return data;\n };\n\n /*\n Opens a standard dialog with a few fields and a confirm button.\n\n `fields` are `{ name, label, type, placeholder, value, options, required }` where `type` is `text`\n (default), `email`, `password` or `select` (then `options` is `[{ value, label }]`). `submit` receives\n `{ [name]: value }` and returns nothing on success, which closes the dialog, or an error message, which\n is shown in the dialog and keeps it open with what was typed.\n */\n openForm = ({ title, fields, confirmText = 'Save', submit }) => {\n const content = document.createElement('div');\n content.className = 'p';\n const inputs = {};\n\n fields.forEach(({ name, label, type = 'text', placeholder = '', value = '', options = [] }) => {\n const wrapper = document.createElement('div');\n wrapper.className = 'mb';\n const caption = Object.assign(document.createElement('label'), { className: 'd-b mbq', textContent: label });\n let input;\n\n if(type === 'select'){\n input = document.createElement('select');\n input.className = 'full';\n options.forEach(option => input.append(Object.assign(document.createElement('option'), { value: option.value, textContent: option.label, selected: option.value === value })));\n } else {\n input = Object.assign(document.createElement('input'), { type, className: 'full', placeholder, value });\n }\n\n inputs[name] = input;\n wrapper.append(caption, input);\n content.append(wrapper);\n });\n\n const error = Object.assign(document.createElement('p'), { className: 'tc-danger m0', role: 'alert' });\n content.append(error);\n\n const dialog = Dialog.create(content, {\n title,\n confirmText,\n cancelText: 'Cancel',\n confirmAction: async event => {\n event.keepDialogOpen = true;\n error.textContent = '';\n const values = Object.fromEntries(fields.map(({ name }) => [name, inputs[name].value.trim()]));\n const missing = fields.find(({ name, required = true }) => required && !values[name]);\n\n if(missing){\n error.textContent = `${missing.label} is required.`;\n return;\n }\n\n const message = await submit(values);\n\n if(message) error.textContent = message;\n else dialog.close();\n }\n });\n\n Object.values(inputs)[0]?.focus();\n return dialog;\n };\n\n /*\n Utility Functions\n */\n\n checkCta = async () => {\n const permission = this.getCta()?.permission;\n\n if(!permission){\n this.ctaAllowed = true;\n return;\n }\n\n const [error, data] = await currentUserHasPermission({ permission });\n this.ctaAllowed = !error && !!data?.hasPermission;\n };\n\n /*\n Rendering\n */\n\n renderTitle = () => html`\n ${this.definition?.icon ? html`<k-icon class=\"mr\" name=${this.definition.icon}></k-icon>` : nothing}\n <strong class=\"flex\">${this.definition?.title ?? ''}</strong>\n `;\n\n renderActions = () => {\n const compact = this.width < 2;\n return [...(this.definition?.actions ?? []), ...this.actions()].map(({ label, icon, href, onClick, primary }) => {\n const content = icon\n ? html`<k-icon name=${icon}></k-icon>${compact ? nothing : html` ${label}`}`\n : label;\n const classes = `btn ml ${primary ? 'primary' : ''}`;\n return href\n ? html`<a class=${classes} href=${href} title=${label} aria-label=${label}>${content}</a>`\n : html`<button class=${classes} title=${label} aria-label=${label} @click=${onClick}>${content}</button>`;\n });\n };\n\n renderHeader(){\n return html`<header class=\"d-f px pyh bb\" style=\"align-items: center;\">${this.renderTitle()}${this.renderActions()}</header>`;\n }\n\n renderContent(){\n return nothing;\n }\n\n renderBody(){\n if(this.failure){\n return html`\n <p class=\"tc-danger\" role=\"alert\">${this.failure}</p>\n <button @click=${this.refresh}>Try again</button>\n `;\n }\n if(this.loading) return html`<p class=\"tc-muted\">Loading&hellip;</p>`;\n return this.renderContent();\n }\n\n renderFooter = () => {\n const cta = this.getCta();\n\n if(!cta || !this.ctaAllowed || this.failure) return nothing;\n\n const content = html`${cta.icon ? html`<k-icon name=${cta.icon}></k-icon> ` : nothing}${cta.label}`;\n\n return html`\n <footer class=\"d-f px pyh bt\" style=\"justify-content: flex-end;\">\n ${cta.href\n ? html`<a class=\"btn primary\" href=${cta.href}>${content}</a>`\n : html`<button class=\"primary\" @click=${cta.onClick}>${content}</button>`}\n </footer>\n `;\n };\n\n renderLightDom(){\n return html`\n <div style=\"display: flex; flex-direction: column; height: 100%; min-height: 0;\">\n ${this.renderHeader()}\n <div class=\"p\" style=\"flex: 1; min-height: 0; overflow: auto;\">${this.renderBody()}</div>\n ${this.renderFooter()}\n </div>\n `;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\components\\DashboardWidget.js","names":["LightComponent","html","nothing","Dialog","currentUserHasPermission","DashboardWidget","static","width","type","Number","reflect","height","definition","attribute","loading","state","failure","ctaAllowed","constructor","super","this","cta","connectedCallback","classList","add","style","refresh","checkCta","load","async","error","message","getCta","actions","unwrap","data","request","Error","msg","openForm","title","fields","confirmText","submit","content","document","createElement","className","inputs","forEach","name","label","placeholder","value","options","wrapper","caption","Object","assign","textContent","input","option","append","selected","role","dialog","create","cancelText","confirmAction","event","keepDialogOpen","values","fromEntries","map","trim","missing","find","required","close","focus","permission","hasPermission","renderTitle","iconSrc","icon","renderActions","compact","href","onClick","primary","classes","renderHeader","renderContent","renderBody","renderFooter","renderLightDom"],"sources":["0"],"sourcesContent":["import LightComponent from '/kempo-ui/components/LightComponent.js';\nimport { html, nothing } from '/kempo-ui/lit-all.min.js';\nimport '/kempo-ui/components/Icon.js';\nimport Dialog from '/kempo-ui/components/Dialog.js';\nimport { currentUserHasPermission } from '/kempo/sdk.js';\n\n/*\n The base class for an admin dashboard widget. Extend it, define your element, and register the widget\n with `registerDashboardWidget` (or `kempo.widgets` in package.json).\n\n The dashboard creates the element only when the user has the widget on screen, and sets `width` and\n `height` (in blocks) on it, so a widget never loads data for a tile that is hidden. Override:\n\n `load()` fetch what the widget needs and assign it to reactive properties. Throw to show\n the failure message with a retry button. Runs when the element connects and\n again on `refresh()`.\n `renderContent()` return the markup for a loaded widget. Use `width` and `height` to show more\n when there is room.\n\n Declare your own properties by spreading the base ones:\n `static properties = { ...DashboardWidget.properties, items: { state: true } }`.\n\n The widget fills a bordered tile and owns everything inside it, its header included. `renderHeader()`\n returns the header region; the default is the widget's icon and title from `definition` (the registered\n widget, set by the dashboard). Override it to add buttons, filters or a different title, and use\n `renderTitle()` to keep the default title inside your own header.\n\n Call to action. A widget may offer one primary thing to do, drawn the same way in every tile as a button\n in a footer. It is optional. Set `this.cta` in the constructor (or override `getCta()` when it depends on\n state) to `{ label, icon, href }` for a link, or `{ label, icon, onClick }` for a callback, and add\n `permission` to show it only to people who hold that permission. For a callback that needs input, call\n `openForm()` to get a standard dialog.\n\n Header actions are separate: links declared on the registration (`actions`), or returned from\n `actions()`, appear as small buttons beside the title.\n\n Call `super.updated(changed)` if you override `updated()`.\n*/\nexport default class DashboardWidget extends LightComponent {\n static properties = {\n width: { type: Number, reflect: true },\n height: { type: Number, reflect: true },\n definition: { attribute: false },\n loading: { state: true },\n failure: { state: true },\n ctaAllowed: { state: true }\n };\n\n constructor(){\n super();\n this.width = 2;\n this.height = 1;\n this.definition = null;\n this.cta = null;\n this.loading = true;\n this.failure = '';\n this.ctaAllowed = false;\n }\n\n /*\n Lifecycle Callbacks\n */\n\n connectedCallback(){\n super.connectedCallback();\n this.classList.add('d-b');\n this.style.height = '100%';\n this.refresh();\n this.checkCta();\n }\n\n /*\n Public Methods\n */\n\n load = async () => {};\n\n refresh = async () => {\n try {\n await this.load();\n this.failure = '';\n } catch(error) {\n this.failure = error?.message || 'Could not load this widget.';\n }\n this.loading = false;\n };\n\n getCta(){\n return this.cta;\n }\n\n actions(){\n return [];\n }\n\n /*\n Resolves an SDK call, which returns `[error, data]`, to its data, or throws the error's message so\n `load()` can stay a straight line.\n */\n unwrap = async request => {\n const [error, data] = await request;\n if(error) throw new Error(error.msg || 'Request failed');\n return data;\n };\n\n /*\n Opens a standard dialog with a few fields and a confirm button.\n\n `fields` are `{ name, label, type, placeholder, value, options, required }` where `type` is `text`\n (default), `email`, `password` or `select` (then `options` is `[{ value, label }]`). `submit` receives\n `{ [name]: value }` and returns nothing on success, which closes the dialog, or an error message, which\n is shown in the dialog and keeps it open with what was typed.\n */\n openForm = ({ title, fields, confirmText = 'Save', submit }) => {\n const content = document.createElement('div');\n content.className = 'p';\n const inputs = {};\n\n fields.forEach(({ name, label, type = 'text', placeholder = '', value = '', options = [] }) => {\n const wrapper = document.createElement('div');\n wrapper.className = 'mb';\n const caption = Object.assign(document.createElement('label'), { className: 'd-b mbq', textContent: label });\n let input;\n\n if(type === 'select'){\n input = document.createElement('select');\n input.className = 'full';\n options.forEach(option => input.append(Object.assign(document.createElement('option'), { value: option.value, textContent: option.label, selected: option.value === value })));\n } else {\n input = Object.assign(document.createElement('input'), { type, className: 'full', placeholder, value });\n }\n\n inputs[name] = input;\n wrapper.append(caption, input);\n content.append(wrapper);\n });\n\n const error = Object.assign(document.createElement('p'), { className: 'tc-danger m0', role: 'alert' });\n content.append(error);\n\n const dialog = Dialog.create(content, {\n title,\n confirmText,\n cancelText: 'Cancel',\n confirmAction: async event => {\n event.keepDialogOpen = true;\n error.textContent = '';\n const values = Object.fromEntries(fields.map(({ name }) => [name, inputs[name].value.trim()]));\n const missing = fields.find(({ name, required = true }) => required && !values[name]);\n\n if(missing){\n error.textContent = `${missing.label} is required.`;\n return;\n }\n\n const message = await submit(values);\n\n if(message) error.textContent = message;\n else dialog.close();\n }\n });\n\n Object.values(inputs)[0]?.focus();\n return dialog;\n };\n\n /*\n Utility Functions\n */\n\n checkCta = async () => {\n const permission = this.getCta()?.permission;\n\n if(!permission){\n this.ctaAllowed = true;\n return;\n }\n\n const [error, data] = await currentUserHasPermission({ permission });\n this.ctaAllowed = !error && !!data?.hasPermission;\n };\n\n /*\n Rendering\n */\n\n renderTitle = () => html`\n ${this.definition?.iconSrc ? html`<k-icon class=\"mr\" src=${this.definition.iconSrc}></k-icon>` : this.definition?.icon ? html`<k-icon class=\"mr\" name=${this.definition.icon}></k-icon>` : nothing}\n <strong class=\"flex\">${this.definition?.title ?? ''}</strong>\n `;\n\n renderActions = () => {\n const compact = this.width < 2;\n return [...(this.definition?.actions ?? []), ...this.actions()].map(({ label, icon, iconSrc, href, onClick, primary }) => {\n const content = iconSrc || icon\n ? html`${iconSrc ? html`<k-icon src=${iconSrc}></k-icon>` : html`<k-icon name=${icon}></k-icon>`}${compact ? nothing : html` ${label}`}`\n : label;\n const classes = `btn ml ${primary ? 'primary' : ''}`;\n return href\n ? html`<a class=${classes} href=${href} title=${label} aria-label=${label}>${content}</a>`\n : html`<button class=${classes} title=${label} aria-label=${label} @click=${onClick}>${content}</button>`;\n });\n };\n\n renderHeader(){\n return html`<header class=\"d-f px pyh bb\" style=\"align-items: center;\">${this.renderTitle()}${this.renderActions()}</header>`;\n }\n\n renderContent(){\n return nothing;\n }\n\n renderBody(){\n if(this.failure){\n return html`\n <p class=\"tc-danger\" role=\"alert\">${this.failure}</p>\n <button @click=${this.refresh}>Try again</button>\n `;\n }\n if(this.loading) return html`<p class=\"tc-muted\">Loading&hellip;</p>`;\n return this.renderContent();\n }\n\n renderFooter = () => {\n const cta = this.getCta();\n\n if(!cta || !this.ctaAllowed || this.failure) return nothing;\n\n const content = html`${cta.iconSrc ? html`<k-icon src=${cta.iconSrc}></k-icon> ` : cta.icon ? html`<k-icon name=${cta.icon}></k-icon> ` : nothing}${cta.label}`;\n\n return html`\n <footer class=\"d-f px pyh bt\" style=\"justify-content: flex-end;\">\n ${cta.href\n ? html`<a class=\"btn primary\" href=${cta.href}>${content}</a>`\n : html`<button class=\"primary\" @click=${cta.onClick}>${content}</button>`}\n </footer>\n `;\n };\n\n renderLightDom(){\n return html`\n <div style=\"display: flex; flex-direction: column; height: 100%; min-height: 0;\">\n ${this.renderHeader()}\n <div class=\"p\" style=\"flex: 1; min-height: 0; overflow: auto;\">${this.renderBody()}</div>\n ${this.renderFooter()}\n </div>\n `;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M720-440v-80h160v80H720Zm48 280-128-96 48-64 128 96-48 64Zm-80-480-48-64 128-96 48 64-128 96ZM200-200v-160h-40q-33 0-56.5-23.5T80-440v-80q0-33 23.5-56.5T160-600h160l200-120v480L320-360h-40v160h-80Zm240-182v-196l-98 58H160v80h182l98 58Zm120 36v-268q27 24 43.5 58.5T620-480q0 41-16.5 75.5T560-346ZM300-480Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M360-240h440v-107H360v107ZM160-613h120v-107H160v107Zm0 187h120v-107H160v107Zm0 186h120v-107H160v107Zm200-186h440v-107H360v107Zm0-187h440v-107H360v107ZM160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h280v80H200v560h560v-280h80v280q0 33-23.5 56.5T760-120H200Zm188-212-56-56 372-372H560v-80h280v280h-80v-144L388-332Z"/></svg>
package/dist/kempo/sdk.js CHANGED
@@ -1,2 +1,2 @@
1
- import{get as e,post as s,put as o,patch as n,del as t}from"./fetch.js";const a="/kempo/api";export const register=async({email:e,password:o,name:n})=>s(`${a}/auth/register/email`,{email:e,password:o,name:n});export const login=async({email:e,password:o})=>s(`${a}/auth/login/email`,{email:e,password:o});export const logout=async()=>s(`${a}/auth/logout`,{});export const getSession=async()=>e(`${a}/auth/session`);export const forgotPassword=async({email:e})=>s(`${a}/forgot-password`,{email:e});export const resetPassword=async({token:e,password:o,logoutAll:n=!1})=>s(`${a}/auth/reset-password`,{token:e,newPassword:o,logoutAll:n});export const changePassword=async({currentPassword:e,newPassword:o,logoutAll:n})=>s(`${a}/auth/change-password`,{currentPassword:e,newPassword:o,logoutAll:n});export const verifyEmail=async({token:e})=>s(`${a}/auth/verify-email`,{token:e});export const currentUserHasPermission=async({permission:s})=>e(`${a}/user/current/permissions`,{permission:s});export const currentUserHasAllPermissions=async({permissions:s})=>e(`${a}/user/current/permissions/all`,{permissions:s});export const currentUserHasSomePermissions=async({permissions:s})=>e(`${a}/user/current/permissions/some`,{permissions:s});export const getAllCurrentUserPermissions=async()=>e(`${a}/user/current/permissions/list`);export const userHasPermission=async({userid:s,permission:o})=>e(`${a}/user/${s}/permissions`,{permission:o});export const userHasAllPermissions=async({userid:s,permissions:o})=>e(`${a}/user/${s}/permissions/all`,{permissions:o});export const userHasSomePermissions=async({userid:s,permissions:o})=>e(`${a}/user/${s}/permissions/some`,{permissions:o});export const getAllUserPermissions=async({userid:s})=>e(`${a}/user/${s}/permissions/list`);export const getUsers=async({limit:s,offset:o}={})=>e(`${a}/user`,{limit:s,offset:o});export const searchUsers=async({q:s,limit:o,offset:n,inGroup:t,notInGroup:r}={})=>e(`${a}/user/search`,{q:s,limit:o,offset:n,inGroup:t,notInGroup:r});export const createUser=async({name:e,email:o,password:n,emailVerified:t})=>s(`${a}/user/create`,{name:e,email:o,password:n,emailVerified:t});export const deleteUsers=async e=>t(`${a}/user`,{ids:e});export const updateUser=async({id:e,name:s,email:o,emailVerified:t,createdAt:r})=>n(`${a}/user`,{id:e,name:s,email:o,emailVerified:t,createdAt:r});export const getUser=async s=>e(`${a}/user/${s}`);export const getUserSessions=async(s,{limit:o,offset:n}={})=>e(`${a}/user/${s}/sessions`,{limit:o,offset:n});export const deleteUserSession=async(e,s)=>t(`${a}/user/${e}/sessions`,{sessionToken:s});export const deleteExpiredUserSessions=async e=>t(`${a}/user/${e}/sessions/expired`);export const getUserGroups=async(s,{limit:o,offset:n}={})=>e(`${a}/user/${s}/groups`,{limit:o,offset:n});export const addUserToGroup=async(e,o)=>s(`${a}/user/${e}/groups`,{groupName:o});export const removeUserFromGroup=async(e,s)=>t(`${a}/user/${e}/groups`,{groupName:s});export const listGroups=async({limit:s,offset:o,owner:n}={})=>e(`${a}/groups`,{limit:s,offset:o,owner:n});export const createGroup=async({name:e,description:o})=>s(`${a}/groups`,{name:e,description:o});export const updateGroup=async({name:e,newName:s,description:o})=>n(`${a}/groups`,{name:e,newName:s,description:o});export const deleteGroups=async e=>t(`${a}/groups`,{names:e});export const getGroup=async s=>e(`${a}/groups/${encodeURIComponent(s)}`);export const getGroupMembers=async(s,{limit:o,offset:n}={})=>e(`${a}/groups/${encodeURIComponent(s)}/members`,{limit:o,offset:n});export const addMemberToGroup=async(e,o)=>s(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:o});export const removeMemberFromGroup=async(e,s)=>t(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:s});export const getGroupPermissions=async s=>e(`${a}/groups/${encodeURIComponent(s)}/permissions`);export const addPermissionToGroup=async(e,o)=>s(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:o});export const removePermissionFromGroup=async(e,s)=>t(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:s});export const listPermissions=async({limit:s,offset:o,owner:n}={})=>e(`${a}/permissions`,{limit:s,offset:o,owner:n});export const createPermissions=async e=>s(`${a}/permissions`,{permissions:e});export const updatePermission=async({name:e,description:s})=>n(`${a}/permissions`,{name:e,description:s});export const deletePermissions=async e=>t(`${a}/permissions`,{names:e});export const getSetting=async(s,o)=>e(`${a}/settings/${encodeURIComponent(s)}/${encodeURIComponent(o)}`);export const listSettings=async({owner:s,limit:o,offset:n}={})=>e(`${a}/settings/${encodeURIComponent(s)}`,{limit:o,offset:n});export const setSetting=async(e,o,n)=>s(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(o)}`,n);export const deleteSetting=async(e,s)=>t(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(s)}`);export const listPages=async({owner:s,showHidden:o,offset:n,limit:t}={})=>e(`${a}/pages`,{owner:s,showHidden:o,offset:n,limit:t});export const rescanPages=async()=>s(`${a}/pages/rescan`,{});export const listTemplates=async()=>e(`${a}/templates`);export const listDirectories=async()=>e(`${a}/pages/directories`);export const getPage=async s=>e(`${a}/pages/file`,{file:s});export const createPage=async({directory:e,name:o,template:n})=>s(`${a}/pages`,{directory:e,name:o,template:n});export const updatePage=async({file:e,name:s,title:n,description:t,author:r,template:i,contents:c,extraMetadata:l})=>o(`${a}/pages/file`,{file:e,name:s,title:n,description:t,author:r,template:i,contents:c,extraMetadata:l});export const deletePages=async e=>t(`${a}/pages`,{files:e});export const disablePage=async e=>o(`${a}/pages/disable`,{file:e});export const enablePage=async e=>o(`${a}/pages/enable`,{file:e});export const movePage=async({file:e,newFile:s})=>n(`${a}/pages/file`,{file:e,newFile:s});export const searchPagesByMetadata=async s=>e(`${a}/pages/search`,{query:JSON.stringify(s)});export const setPageLocked=async({file:e,locked:s})=>o(`${a}/pages/lock`,{file:e,locked:s});export const getTemplate=async s=>e(`${a}/templates/file`,{file:s});export const createTemplate=async({directory:e,name:o,copyFrom:n})=>s(`${a}/templates`,{directory:e,name:o,copyFrom:n});export const updateTemplate=async({file:e,name:s,author:n,markup:t})=>o(`${a}/templates/file`,{file:e,name:s,author:n,markup:t});export const deleteTemplates=async e=>t(`${a}/templates`,{files:e});export const disableTemplate=async e=>o(`${a}/templates/disable`,{file:e});export const enableTemplate=async e=>o(`${a}/templates/enable`,{file:e});export const moveTemplate=async({file:e,newFile:s})=>n(`${a}/templates/file`,{file:e,newFile:s});export const setTemplateLocked=async({file:e,locked:s})=>o(`${a}/templates/lock`,{file:e,locked:s});export const listFragments=async()=>e(`${a}/fragments`);export const getFragment=async s=>e(`${a}/fragments/file`,{file:s});export const createFragment=async({directory:e,name:o})=>s(`${a}/fragments`,{directory:e,name:o});export const updateFragment=async({file:e,author:s,markup:n})=>o(`${a}/fragments/file`,{file:e,author:s,markup:n});export const deleteFragments=async e=>t(`${a}/fragments`,{files:e});export const moveFragment=async({file:e,newFile:s})=>n(`${a}/fragments/file`,{file:e,newFile:s});export const disableFragment=async e=>o(`${a}/fragments/disable`,{file:e});export const enableFragment=async e=>o(`${a}/fragments/enable`,{file:e});export const setFragmentLocked=async({file:e,locked:s})=>o(`${a}/fragments/lock`,{file:e,locked:s});export const listGlobalContent=async()=>e(`${a}/globals`);export const getGlobalContent=async s=>e(`${a}/globals/entry`,{id:s});export const createGlobalContent=async({name:e,location:o,priority:n})=>s(`${a}/globals`,{name:e,location:o,priority:n});export const updateGlobalContent=async({id:e,name:s,location:n,priority:t,markup:r})=>o(`${a}/globals/entry`,{id:e,name:s,location:n,priority:t,markup:r});export const deleteGlobalContent=async e=>t(`${a}/globals`,{ids:e});export const disableGlobalContent=async e=>o(`${a}/globals/disable`,{id:e});export const enableGlobalContent=async e=>o(`${a}/globals/enable`,{id:e});export const setGlobalContentLocked=async({id:e,locked:s})=>o(`${a}/globals/lock`,{id:e,locked:s});export const listExtensions=async({limit:s,offset:o}={})=>e(`${a}/extensions`,{limit:s,offset:o});export const listAvailableExtensions=async()=>e(`${a}/extensions/available`);export const listKnownExtensions=async({search:s,sort:o,limit:n,offset:t}={})=>e(`${a}/extensions/known`,{search:s,sort:o,limit:n,offset:t});export const getKnownExtension=async s=>e(`${a}/extensions/known`,{name:s});export const rateExtension=async(e,s)=>o(`${a}/extensions/rating`,{name:e,rating:s});export const getDashboardWidgets=async()=>e(`${a}/dashboard/widgets`);export const getNotifications=async({unreadOnly:s=!1,limit:o,offset:n}={})=>e(`${a}/notifications`,{unreadOnly:s,limit:o,offset:n});export const getUnreadNotificationCount=async()=>e(`${a}/notifications/count`);export const markNotificationRead=async e=>s(`${a}/notifications/${encodeURIComponent(e)}/read`,{});export const markNotificationHandled=async e=>s(`${a}/notifications/${encodeURIComponent(e)}/handled`,{});export const markAllNotificationsRead=async()=>s(`${a}/notifications/read-all`,{});export const dismissNotification=async e=>t(`${a}/notifications/${encodeURIComponent(e)}`);export const listRealtimeConnections=async()=>e(`${a}/realtime/connections`);export const installExtension=async(e,{withDependencies:o=!1}={})=>s(`${a}/extensions`,{name:e,withDependencies:o});export const uninstallExtension=async(e,s=!1,{cascade:o=!1}={})=>t(`${a}/extensions`,{name:e,purgeData:s,cascade:o});export const enableExtension=async(e,{cascade:o=!1}={})=>s(`${a}/extensions/${encodeURIComponent(e)}/enable`,{cascade:o});export const getExtensionRequirements=async s=>e(`${a}/extensions/${encodeURIComponent(s)}/requirements`);export const disableExtension=async(e,{cascade:o=!1}={})=>s(`${a}/extensions/${encodeURIComponent(e)}/disable`,{cascade:o});export const getExtensionDependents=async(s,{includeDisabled:o=!1}={})=>e(`${a}/extensions/${encodeURIComponent(s)}/dependents`,{includeDisabled:o?"true":void 0});export const listAdminGlobalContent=async()=>e(`${a}/admin-globals`);export const getAdminGlobalContent=async s=>e(`${a}/admin-globals/${encodeURIComponent(s)}`);export const createAdminGlobalContent=async({name:e,location:o,priority:n,owner:t,markup:r})=>s(`${a}/admin-globals`,{name:e,location:o,priority:n,owner:t,markup:r});export const updateAdminGlobalContent=async(e,{name:s,location:n,priority:t,markup:r})=>o(`${a}/admin-globals/${encodeURIComponent(e)}`,{name:s,location:n,priority:t,markup:r});export const deleteAdminGlobalContent=async e=>t(`${a}/admin-globals`,{ids:e});export const enableAdminGlobalContent=async e=>o(`${a}/admin-globals/${encodeURIComponent(e)}/enable`,{});export const disableAdminGlobalContent=async e=>o(`${a}/admin-globals/${encodeURIComponent(e)}/disable`,{});
1
+ import{get as e,post as s,put as n,patch as o,del as t}from"./fetch.js";const a="/kempo/api";export const register=async({email:e,password:n,name:o})=>s(`${a}/auth/register/email`,{email:e,password:n,name:o});export const login=async({email:e,password:n})=>s(`${a}/auth/login/email`,{email:e,password:n});export const logout=async()=>s(`${a}/auth/logout`,{});export const getSession=async()=>e(`${a}/auth/session`);export const forgotPassword=async({email:e})=>s(`${a}/forgot-password`,{email:e});export const resetPassword=async({token:e,password:n,logoutAll:o=!1})=>s(`${a}/auth/reset-password`,{token:e,newPassword:n,logoutAll:o});export const changePassword=async({currentPassword:e,newPassword:n,logoutAll:o})=>s(`${a}/auth/change-password`,{currentPassword:e,newPassword:n,logoutAll:o});export const verifyEmail=async({token:e})=>s(`${a}/auth/verify-email`,{token:e});export const currentUserHasPermission=async({permission:s})=>e(`${a}/user/current/permissions`,{permission:s});export const currentUserHasAllPermissions=async({permissions:s})=>e(`${a}/user/current/permissions/all`,{permissions:s});export const currentUserHasSomePermissions=async({permissions:s})=>e(`${a}/user/current/permissions/some`,{permissions:s});export const getAllCurrentUserPermissions=async()=>e(`${a}/user/current/permissions/list`);export const userHasPermission=async({userid:s,permission:n})=>e(`${a}/user/${s}/permissions`,{permission:n});export const userHasAllPermissions=async({userid:s,permissions:n})=>e(`${a}/user/${s}/permissions/all`,{permissions:n});export const userHasSomePermissions=async({userid:s,permissions:n})=>e(`${a}/user/${s}/permissions/some`,{permissions:n});export const getAllUserPermissions=async({userid:s})=>e(`${a}/user/${s}/permissions/list`);export const getUsers=async({limit:s,offset:n}={})=>e(`${a}/user`,{limit:s,offset:n});export const searchUsers=async({q:s,limit:n,offset:o,inGroup:t,notInGroup:i}={})=>e(`${a}/user/search`,{q:s,limit:n,offset:o,inGroup:t,notInGroup:i});export const createUser=async({name:e,email:n,password:o,emailVerified:t})=>s(`${a}/user/create`,{name:e,email:n,password:o,emailVerified:t});export const deleteUsers=async e=>t(`${a}/user`,{ids:e});export const updateUser=async({id:e,name:s,email:n,emailVerified:t,createdAt:i})=>o(`${a}/user`,{id:e,name:s,email:n,emailVerified:t,createdAt:i});export const getUser=async s=>e(`${a}/user/${s}`);export const getUserSessions=async(s,{limit:n,offset:o}={})=>e(`${a}/user/${s}/sessions`,{limit:n,offset:o});export const deleteUserSession=async(e,s)=>t(`${a}/user/${e}/sessions`,{sessionToken:s});export const deleteExpiredUserSessions=async e=>t(`${a}/user/${e}/sessions/expired`);export const getUserGroups=async(s,{limit:n,offset:o}={})=>e(`${a}/user/${s}/groups`,{limit:n,offset:o});export const addUserToGroup=async(e,n)=>s(`${a}/user/${e}/groups`,{groupName:n});export const removeUserFromGroup=async(e,s)=>t(`${a}/user/${e}/groups`,{groupName:s});export const listGroups=async({limit:s,offset:n,owner:o}={})=>e(`${a}/groups`,{limit:s,offset:n,owner:o});export const createGroup=async({name:e,description:n})=>s(`${a}/groups`,{name:e,description:n});export const updateGroup=async({name:e,newName:s,description:n})=>o(`${a}/groups`,{name:e,newName:s,description:n});export const deleteGroups=async e=>t(`${a}/groups`,{names:e});export const getGroup=async s=>e(`${a}/groups/${encodeURIComponent(s)}`);export const getGroupMembers=async(s,{limit:n,offset:o}={})=>e(`${a}/groups/${encodeURIComponent(s)}/members`,{limit:n,offset:o});export const addMemberToGroup=async(e,n)=>s(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:n});export const removeMemberFromGroup=async(e,s)=>t(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:s});export const getGroupPermissions=async s=>e(`${a}/groups/${encodeURIComponent(s)}/permissions`);export const addPermissionToGroup=async(e,n)=>s(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:n});export const removePermissionFromGroup=async(e,s)=>t(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:s});export const listPermissions=async({limit:s,offset:n,owner:o}={})=>e(`${a}/permissions`,{limit:s,offset:n,owner:o});export const createPermissions=async e=>s(`${a}/permissions`,{permissions:e});export const updatePermission=async({name:e,description:s})=>o(`${a}/permissions`,{name:e,description:s});export const deletePermissions=async e=>t(`${a}/permissions`,{names:e});export const getSetting=async(s,n)=>e(`${a}/settings/${encodeURIComponent(s)}/${encodeURIComponent(n)}`);export const listSettings=async({owner:s,limit:n,offset:o}={})=>e(`${a}/settings/${encodeURIComponent(s)}`,{limit:n,offset:o});export const setSetting=async(e,n,o)=>s(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(n)}`,o);export const deleteSetting=async(e,s)=>t(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(s)}`);export const listPages=async({owner:s,showHidden:n,offset:o,limit:t}={})=>e(`${a}/pages`,{owner:s,showHidden:n,offset:o,limit:t});export const rescanPages=async()=>s(`${a}/pages/rescan`,{});export const listTemplates=async()=>e(`${a}/templates`);export const listDirectories=async()=>e(`${a}/pages/directories`);export const getPage=async s=>e(`${a}/pages/file`,{file:s});export const createPage=async({directory:e,name:n,template:o})=>s(`${a}/pages`,{directory:e,name:n,template:o});export const updatePage=async({file:e,name:s,title:o,description:t,author:i,template:r,contents:c,extraMetadata:l})=>n(`${a}/pages/file`,{file:e,name:s,title:o,description:t,author:i,template:r,contents:c,extraMetadata:l});export const deletePages=async e=>t(`${a}/pages`,{files:e});export const disablePage=async e=>n(`${a}/pages/disable`,{file:e});export const enablePage=async e=>n(`${a}/pages/enable`,{file:e});export const movePage=async({file:e,newFile:s})=>o(`${a}/pages/file`,{file:e,newFile:s});export const searchPagesByMetadata=async s=>e(`${a}/pages/search`,{query:JSON.stringify(s)});export const setPageLocked=async({file:e,locked:s})=>n(`${a}/pages/lock`,{file:e,locked:s});export const getTemplate=async s=>e(`${a}/templates/file`,{file:s});export const createTemplate=async({directory:e,name:n,copyFrom:o})=>s(`${a}/templates`,{directory:e,name:n,copyFrom:o});export const updateTemplate=async({file:e,name:s,author:o,markup:t})=>n(`${a}/templates/file`,{file:e,name:s,author:o,markup:t});export const deleteTemplates=async e=>t(`${a}/templates`,{files:e});export const disableTemplate=async e=>n(`${a}/templates/disable`,{file:e});export const enableTemplate=async e=>n(`${a}/templates/enable`,{file:e});export const moveTemplate=async({file:e,newFile:s})=>o(`${a}/templates/file`,{file:e,newFile:s});export const setTemplateLocked=async({file:e,locked:s})=>n(`${a}/templates/lock`,{file:e,locked:s});export const listFragments=async()=>e(`${a}/fragments`);export const getFragment=async s=>e(`${a}/fragments/file`,{file:s});export const createFragment=async({directory:e,name:n})=>s(`${a}/fragments`,{directory:e,name:n});export const updateFragment=async({file:e,author:s,markup:o})=>n(`${a}/fragments/file`,{file:e,author:s,markup:o});export const deleteFragments=async e=>t(`${a}/fragments`,{files:e});export const moveFragment=async({file:e,newFile:s})=>o(`${a}/fragments/file`,{file:e,newFile:s});export const disableFragment=async e=>n(`${a}/fragments/disable`,{file:e});export const enableFragment=async e=>n(`${a}/fragments/enable`,{file:e});export const setFragmentLocked=async({file:e,locked:s})=>n(`${a}/fragments/lock`,{file:e,locked:s});export const listGlobalContent=async()=>e(`${a}/globals`);export const getGlobalContent=async s=>e(`${a}/globals/entry`,{id:s});export const createGlobalContent=async({name:e,location:n,priority:o})=>s(`${a}/globals`,{name:e,location:n,priority:o});export const updateGlobalContent=async({id:e,name:s,location:o,priority:t,markup:i})=>n(`${a}/globals/entry`,{id:e,name:s,location:o,priority:t,markup:i});export const deleteGlobalContent=async e=>t(`${a}/globals`,{ids:e});export const disableGlobalContent=async e=>n(`${a}/globals/disable`,{id:e});export const enableGlobalContent=async e=>n(`${a}/globals/enable`,{id:e});export const setGlobalContentLocked=async({id:e,locked:s})=>n(`${a}/globals/lock`,{id:e,locked:s});export const listMenus=async()=>e(`${a}/menus`);export const saveMenu=async({id:e,name:n})=>s(`${a}/menus`,{id:e,name:n});export const deleteMenu=async e=>t(`${a}/menus`,{id:e});export const assignMenuLocation=async({location:e,menuId:s})=>n(`${a}/menus/location`,{location:e,menuId:s});export const saveMenuItem=async({id:e,menuId:n,location:o,navItem:t,label:i,href:r,icon:c,newTab:l})=>s(`${a}/menus/items`,{id:e,menuId:n,location:o,navItem:t,label:i,href:r,icon:c,newTab:l});export const deleteMenuItems=async e=>t(`${a}/menus/items`,{ids:e});export const setMenuItemEnabled=async({id:e,enabled:s})=>n(`${a}/menus/items/enabled`,{id:e,enabled:s});export const reorderMenuItems=async({menuId:e,ids:s})=>n(`${a}/menus/items/order`,{menuId:e,ids:s});export const adoptMenuItem=async({id:e,menuId:s,menuName:o})=>n(`${a}/menus/adopt`,{id:e,menuId:s,menuName:o});export const listExtensions=async({limit:s,offset:n}={})=>e(`${a}/extensions`,{limit:s,offset:n});export const listAvailableExtensions=async()=>e(`${a}/extensions/available`);export const listKnownExtensions=async({search:s,sort:n,limit:o,offset:t}={})=>e(`${a}/extensions/known`,{search:s,sort:n,limit:o,offset:t});export const getKnownExtension=async s=>e(`${a}/extensions/known`,{name:s});export const rateExtension=async(e,s)=>n(`${a}/extensions/rating`,{name:e,rating:s});export const getDashboardWidgets=async()=>e(`${a}/dashboard/widgets`);export const getNotifications=async({unreadOnly:s=!1,limit:n,offset:o}={})=>e(`${a}/notifications`,{unreadOnly:s,limit:n,offset:o});export const getUnreadNotificationCount=async()=>e(`${a}/notifications/count`);export const markNotificationRead=async e=>s(`${a}/notifications/${encodeURIComponent(e)}/read`,{});export const markNotificationHandled=async e=>s(`${a}/notifications/${encodeURIComponent(e)}/handled`,{});export const markAllNotificationsRead=async()=>s(`${a}/notifications/read-all`,{});export const dismissNotification=async e=>t(`${a}/notifications/${encodeURIComponent(e)}`);export const listRealtimeConnections=async()=>e(`${a}/realtime/connections`);export const installExtension=async(e,{withDependencies:n=!1}={})=>s(`${a}/extensions`,{name:e,withDependencies:n});export const uninstallExtension=async(e,s=!1,{cascade:n=!1}={})=>t(`${a}/extensions`,{name:e,purgeData:s,cascade:n});export const enableExtension=async(e,{cascade:n=!1}={})=>s(`${a}/extensions/${encodeURIComponent(e)}/enable`,{cascade:n});export const getExtensionRequirements=async s=>e(`${a}/extensions/${encodeURIComponent(s)}/requirements`);export const disableExtension=async(e,{cascade:n=!1}={})=>s(`${a}/extensions/${encodeURIComponent(e)}/disable`,{cascade:n});export const getExtensionDependents=async(s,{includeDisabled:n=!1}={})=>e(`${a}/extensions/${encodeURIComponent(s)}/dependents`,{includeDisabled:n?"true":void 0});export const listAdminGlobalContent=async()=>e(`${a}/admin-globals`);export const getAdminGlobalContent=async s=>e(`${a}/admin-globals/${encodeURIComponent(s)}`);export const createAdminGlobalContent=async({name:e,location:n,priority:o,owner:t,markup:i})=>s(`${a}/admin-globals`,{name:e,location:n,priority:o,owner:t,markup:i});export const updateAdminGlobalContent=async(e,{name:s,location:o,priority:t,markup:i})=>n(`${a}/admin-globals/${encodeURIComponent(e)}`,{name:s,location:o,priority:t,markup:i});export const deleteAdminGlobalContent=async e=>t(`${a}/admin-globals`,{ids:e});export const enableAdminGlobalContent=async e=>n(`${a}/admin-globals/${encodeURIComponent(e)}/enable`,{});export const disableAdminGlobalContent=async e=>n(`${a}/admin-globals/${encodeURIComponent(e)}/disable`,{});
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\sdk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\sdk.js","names":["get","post","put","patch","del","API_BASE","register","async","email","password","name","login","logout","getSession","forgotPassword","resetPassword","token","logoutAll","newPassword","changePassword","currentPassword","verifyEmail","currentUserHasPermission","permission","currentUserHasAllPermissions","permissions","currentUserHasSomePermissions","getAllCurrentUserPermissions","userHasPermission","userid","userHasAllPermissions","userHasSomePermissions","getAllUserPermissions","getUsers","limit","offset","searchUsers","q","inGroup","notInGroup","createUser","emailVerified","deleteUsers","ids","updateUser","id","createdAt","getUser","getUserSessions","deleteUserSession","sessionToken","deleteExpiredUserSessions","getUserGroups","addUserToGroup","groupName","removeUserFromGroup","listGroups","owner","createGroup","description","updateGroup","newName","deleteGroups","names","getGroup","encodeURIComponent","getGroupMembers","addMemberToGroup","userId","removeMemberFromGroup","getGroupPermissions","addPermissionToGroup","permissionName","removePermissionFromGroup","listPermissions","createPermissions","updatePermission","deletePermissions","getSetting","listSettings","setSetting","data","deleteSetting","listPages","showHidden","rescanPages","listTemplates","listDirectories","getPage","file","createPage","directory","template","updatePage","title","author","contents","extraMetadata","deletePages","files","disablePage","enablePage","movePage","newFile","searchPagesByMetadata","query","JSON","stringify","setPageLocked","locked","getTemplate","createTemplate","copyFrom","updateTemplate","markup","deleteTemplates","disableTemplate","enableTemplate","moveTemplate","setTemplateLocked","listFragments","getFragment","createFragment","updateFragment","deleteFragments","moveFragment","disableFragment","enableFragment","setFragmentLocked","listGlobalContent","getGlobalContent","createGlobalContent","location","priority","updateGlobalContent","deleteGlobalContent","disableGlobalContent","enableGlobalContent","setGlobalContentLocked","listExtensions","listAvailableExtensions","listKnownExtensions","search","sort","getKnownExtension","rateExtension","rating","getDashboardWidgets","getNotifications","unreadOnly","getUnreadNotificationCount","markNotificationRead","markNotificationHandled","markAllNotificationsRead","dismissNotification","listRealtimeConnections","installExtension","withDependencies","uninstallExtension","purgeData","cascade","enableExtension","getExtensionRequirements","disableExtension","getExtensionDependents","includeDisabled","undefined","listAdminGlobalContent","getAdminGlobalContent","createAdminGlobalContent","updateAdminGlobalContent","deleteAdminGlobalContent","enableAdminGlobalContent","disableAdminGlobalContent"],"sources":["0"],"sourcesContent":["import { get, post, put, patch, del } from './fetch.js';\nconst API_BASE = '/kempo/api';\n\nexport const register = async ({ email, password, name }) =>\n post(`${API_BASE}/auth/register/email`, { email, password, name });\n\nexport const login = async ({ email, password }) =>\n post(`${API_BASE}/auth/login/email`, { email, password });\n\nexport const logout = async () => post(`${API_BASE}/auth/logout`, {});\n\nexport const getSession = async () => get(`${API_BASE}/auth/session`);\n\nexport const forgotPassword = async ({ email }) =>\n post(`${API_BASE}/forgot-password`, { email });\n\nexport const resetPassword = async ({ token, password, logoutAll = false }) =>\n post(`${API_BASE}/auth/reset-password`, { token, newPassword: password, logoutAll });\n \nexport const changePassword = async ({ currentPassword, newPassword, logoutAll }) => \n post(`${API_BASE}/auth/change-password`, { currentPassword, newPassword, logoutAll });\n\nexport const verifyEmail = async ({ token }) =>\n post(`${API_BASE}/auth/verify-email`, { token });\n\nexport const currentUserHasPermission = async ({ permission }) =>\n get(`${API_BASE}/user/current/permissions`, { permission });\n\nexport const currentUserHasAllPermissions = async ({ permissions }) =>\n get(`${API_BASE}/user/current/permissions/all`, { permissions });\n\nexport const currentUserHasSomePermissions = async ({ permissions }) =>\n get(`${API_BASE}/user/current/permissions/some`, { permissions });\n\nexport const getAllCurrentUserPermissions = async () =>\n get(`${API_BASE}/user/current/permissions/list`);\n\nexport const userHasPermission = async ({ userid, permission }) =>\n get(`${API_BASE}/user/${userid}/permissions`, { permission });\n\nexport const userHasAllPermissions = async ({ userid, permissions }) =>\n get(`${API_BASE}/user/${userid}/permissions/all`, { permissions });\n\nexport const userHasSomePermissions = async ({ userid, permissions }) =>\n get(`${API_BASE}/user/${userid}/permissions/some`, { permissions });\n\nexport const getAllUserPermissions = async ({ userid }) =>\n get(`${API_BASE}/user/${userid}/permissions/list`);\n\nexport const getUsers = async ({ limit, offset } = {}) =>\n get(`${API_BASE}/user`, { limit, offset });\n\nexport const searchUsers = async ({ q, limit, offset, inGroup, notInGroup } = {}) =>\n get(`${API_BASE}/user/search`, { q, limit, offset, inGroup, notInGroup });\n\nexport const createUser = async ({ name, email, password, emailVerified }) =>\n post(`${API_BASE}/user/create`, { name, email, password, emailVerified });\n\nexport const deleteUsers = async (ids) =>\n del(`${API_BASE}/user`, { ids });\n\nexport const updateUser = async ({ id, name, email, emailVerified, createdAt }) =>\n patch(`${API_BASE}/user`, { id, name, email, emailVerified, createdAt });\n\nexport const getUser = async (userid) =>\n get(`${API_BASE}/user/${userid}`);\n\nexport const getUserSessions = async (userid, { limit, offset } = {}) =>\n get(`${API_BASE}/user/${userid}/sessions`, { limit, offset });\n\nexport const deleteUserSession = async (userid, sessionToken) =>\n del(`${API_BASE}/user/${userid}/sessions`, { sessionToken });\n\nexport const deleteExpiredUserSessions = async (userid) =>\n del(`${API_BASE}/user/${userid}/sessions/expired`);\n\nexport const getUserGroups = async (userid, { limit, offset } = {}) =>\n get(`${API_BASE}/user/${userid}/groups`, { limit, offset });\n\nexport const addUserToGroup = async (userid, groupName) =>\n post(`${API_BASE}/user/${userid}/groups`, { groupName });\n\nexport const removeUserFromGroup = async (userid, groupName) =>\n del(`${API_BASE}/user/${userid}/groups`, { groupName });\n\nexport const listGroups = async ({ limit, offset, owner } = {}) =>\n get(`${API_BASE}/groups`, { limit, offset, owner });\n\nexport const createGroup = async ({ name, description }) =>\n post(`${API_BASE}/groups`, { name, description });\n\nexport const updateGroup = async ({ name, newName, description }) =>\n patch(`${API_BASE}/groups`, { name, newName, description });\n\nexport const deleteGroups = async (names) =>\n del(`${API_BASE}/groups`, { names });\n\nexport const getGroup = async (name) =>\n get(`${API_BASE}/groups/${encodeURIComponent(name)}`);\n\nexport const getGroupMembers = async (name, { limit, offset } = {}) =>\n get(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { limit, offset });\n\nexport const addMemberToGroup = async (name, userId) =>\n post(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { userId });\n\nexport const removeMemberFromGroup = async (name, userId) =>\n del(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { userId });\n\nexport const getGroupPermissions = async (name) =>\n get(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`);\n\nexport const addPermissionToGroup = async (name, permissionName) =>\n post(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`, { permissionName });\n\nexport const removePermissionFromGroup = async (name, permissionName) =>\n del(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`, { permissionName });\n\nexport const listPermissions = async ({ limit, offset, owner } = {}) =>\n get(`${API_BASE}/permissions`, { limit, offset, owner });\n\nexport const createPermissions = async (permissions) =>\n post(`${API_BASE}/permissions`, { permissions });\n\nexport const updatePermission = async ({ name, description }) =>\n patch(`${API_BASE}/permissions`, { name, description });\n\nexport const deletePermissions = async (names) =>\n del(`${API_BASE}/permissions`, { names });\n\nexport const getSetting = async (owner, name) =>\n get(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);\n\nexport const listSettings = async ({ owner, limit, offset } = {}) =>\n get(`${API_BASE}/settings/${encodeURIComponent(owner)}`, { limit, offset });\n\nexport const setSetting = async (owner, name, data) =>\n post(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`, data);\n\nexport const deleteSetting = async (owner, name) =>\n del(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);\n\n/*\n Pages\n*/\n\nexport const listPages = async ({ owner, showHidden, offset, limit } = {}) =>\n get(`${API_BASE}/pages`, { owner, showHidden, offset, limit });\n\nexport const rescanPages = async () =>\n post(`${API_BASE}/pages/rescan`, {});\n\nexport const listTemplates = async () =>\n get(`${API_BASE}/templates`);\n\nexport const listDirectories = async () =>\n get(`${API_BASE}/pages/directories`);\n\nexport const getPage = async (file) =>\n get(`${API_BASE}/pages/file`, { file });\n\nexport const createPage = async ({ directory, name, template }) =>\n post(`${API_BASE}/pages`, { directory, name, template });\n\nexport const updatePage = async ({ file, name, title, description, author, template, contents, extraMetadata }) =>\n put(`${API_BASE}/pages/file`, { file, name, title, description, author, template, contents, extraMetadata });\n\nexport const deletePages = async (files) =>\n del(`${API_BASE}/pages`, { files });\n\nexport const disablePage = async (file) =>\n put(`${API_BASE}/pages/disable`, { file });\n\nexport const enablePage = async (file) =>\n put(`${API_BASE}/pages/enable`, { file });\n\nexport const movePage = async ({ file, newFile }) =>\n patch(`${API_BASE}/pages/file`, { file, newFile });\n\nexport const searchPagesByMetadata = async (query) =>\n get(`${API_BASE}/pages/search`, { query: JSON.stringify(query) });\n\nexport const setPageLocked = async ({ file, locked }) =>\n put(`${API_BASE}/pages/lock`, { file, locked });\n\n/*\n Templates\n*/\n\nexport const getTemplate = async (file) =>\n get(`${API_BASE}/templates/file`, { file });\n\nexport const createTemplate = async ({ directory, name, copyFrom }) =>\n post(`${API_BASE}/templates`, { directory, name, copyFrom });\n\nexport const updateTemplate = async ({ file, name, author, markup }) =>\n put(`${API_BASE}/templates/file`, { file, name, author, markup });\n\nexport const deleteTemplates = async (files) =>\n del(`${API_BASE}/templates`, { files });\n\nexport const disableTemplate = async (file) =>\n put(`${API_BASE}/templates/disable`, { file });\n\nexport const enableTemplate = async (file) =>\n put(`${API_BASE}/templates/enable`, { file });\n\nexport const moveTemplate = async ({ file, newFile }) =>\n patch(`${API_BASE}/templates/file`, { file, newFile });\n\nexport const setTemplateLocked = async ({ file, locked }) =>\n put(`${API_BASE}/templates/lock`, { file, locked });\n\n/*\n Fragments\n*/\n\nexport const listFragments = async () =>\n get(`${API_BASE}/fragments`);\n\nexport const getFragment = async (file) =>\n get(`${API_BASE}/fragments/file`, { file });\n\nexport const createFragment = async ({ directory, name }) =>\n post(`${API_BASE}/fragments`, { directory, name });\n\nexport const updateFragment = async ({ file, author, markup }) =>\n put(`${API_BASE}/fragments/file`, { file, author, markup });\n\nexport const deleteFragments = async (files) =>\n del(`${API_BASE}/fragments`, { files });\n\nexport const moveFragment = async ({ file, newFile }) =>\n patch(`${API_BASE}/fragments/file`, { file, newFile });\n\nexport const disableFragment = async (file) =>\n put(`${API_BASE}/fragments/disable`, { file });\n\nexport const enableFragment = async (file) =>\n put(`${API_BASE}/fragments/enable`, { file });\n\nexport const setFragmentLocked = async ({ file, locked }) =>\n put(`${API_BASE}/fragments/lock`, { file, locked });\n\n/*\n Global Content\n*/\n\nexport const listGlobalContent = async () =>\n get(`${API_BASE}/globals`);\n\nexport const getGlobalContent = async (id) =>\n get(`${API_BASE}/globals/entry`, { id });\n\nexport const createGlobalContent = async ({ name, location, priority }) =>\n post(`${API_BASE}/globals`, { name, location, priority });\n\nexport const updateGlobalContent = async ({ id, name, location, priority, markup }) =>\n put(`${API_BASE}/globals/entry`, { id, name, location, priority, markup });\n\nexport const deleteGlobalContent = async (ids) =>\n del(`${API_BASE}/globals`, { ids });\n\nexport const disableGlobalContent = async (id) =>\n put(`${API_BASE}/globals/disable`, { id });\n\nexport const enableGlobalContent = async (id) =>\n put(`${API_BASE}/globals/enable`, { id });\n\nexport const setGlobalContentLocked = async ({ id, locked }) =>\n put(`${API_BASE}/globals/lock`, { id, locked });\n\n/*\n Extensions\n*/\n\nexport const listExtensions = async ({ limit, offset } = {}) =>\n get(`${API_BASE}/extensions`, { limit, offset });\n\nexport const listAvailableExtensions = async () =>\n get(`${API_BASE}/extensions/available`);\n\nexport const listKnownExtensions = async ({ search, sort, limit, offset } = {}) =>\n get(`${API_BASE}/extensions/known`, { search, sort, limit, offset });\n\nexport const getKnownExtension = async (name) =>\n get(`${API_BASE}/extensions/known`, { name });\n\nexport const rateExtension = async (name, rating) =>\n put(`${API_BASE}/extensions/rating`, { name, rating });\n\n/*\n Dashboard\n*/\n\nexport const getDashboardWidgets = async () =>\n get(`${API_BASE}/dashboard/widgets`);\n\n/*\n Notifications\n*/\n\nexport const getNotifications = async ({ unreadOnly = false, limit, offset } = {}) =>\n get(`${API_BASE}/notifications`, { unreadOnly, limit, offset });\n\nexport const getUnreadNotificationCount = async () =>\n get(`${API_BASE}/notifications/count`);\n\nexport const markNotificationRead = async (id) =>\n post(`${API_BASE}/notifications/${encodeURIComponent(id)}/read`, {});\n\nexport const markNotificationHandled = async (id) =>\n post(`${API_BASE}/notifications/${encodeURIComponent(id)}/handled`, {});\n\nexport const markAllNotificationsRead = async () =>\n post(`${API_BASE}/notifications/read-all`, {});\n\nexport const dismissNotification = async (id) =>\n del(`${API_BASE}/notifications/${encodeURIComponent(id)}`);\n\nexport const listRealtimeConnections = async () =>\n get(`${API_BASE}/realtime/connections`);\n\nexport const installExtension = async (name, { withDependencies = false } = {}) =>\n post(`${API_BASE}/extensions`, { name, withDependencies });\n\nexport const uninstallExtension = async (name, purgeData = false, { cascade = false } = {}) =>\n del(`${API_BASE}/extensions`, { name, purgeData, cascade });\n\nexport const enableExtension = async (name, { cascade = false } = {}) =>\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/enable`, { cascade });\n\nexport const getExtensionRequirements = async (name) =>\n get(`${API_BASE}/extensions/${encodeURIComponent(name)}/requirements`);\n\nexport const disableExtension = async (name, { cascade = false } = {}) =>\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/disable`, { cascade });\n\nexport const getExtensionDependents = async (name, { includeDisabled = false } = {}) =>\n get(`${API_BASE}/extensions/${encodeURIComponent(name)}/dependents`, { includeDisabled: includeDisabled ? 'true' : undefined });\n\n/*\n Admin Global Content\n*/\n\nexport const listAdminGlobalContent = async () =>\n get(`${API_BASE}/admin-globals`);\n\nexport const getAdminGlobalContent = async (id) =>\n get(`${API_BASE}/admin-globals/${encodeURIComponent(id)}`);\n\nexport const createAdminGlobalContent = async ({ name, location, priority, owner, markup }) =>\n post(`${API_BASE}/admin-globals`, { name, location, priority, owner, markup });\n\nexport const updateAdminGlobalContent = async (id, { name, location, priority, markup }) =>\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}`, { name, location, priority, markup });\n\nexport const deleteAdminGlobalContent = async (ids) =>\n del(`${API_BASE}/admin-globals`, { ids });\n\nexport const enableAdminGlobalContent = async (id) =>\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}/enable`, {});\n\nexport const disableAdminGlobalContent = async (id) =>\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}/disable`, {});\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\sdk.js","names":["get","post","put","patch","del","API_BASE","register","async","email","password","name","login","logout","getSession","forgotPassword","resetPassword","token","logoutAll","newPassword","changePassword","currentPassword","verifyEmail","currentUserHasPermission","permission","currentUserHasAllPermissions","permissions","currentUserHasSomePermissions","getAllCurrentUserPermissions","userHasPermission","userid","userHasAllPermissions","userHasSomePermissions","getAllUserPermissions","getUsers","limit","offset","searchUsers","q","inGroup","notInGroup","createUser","emailVerified","deleteUsers","ids","updateUser","id","createdAt","getUser","getUserSessions","deleteUserSession","sessionToken","deleteExpiredUserSessions","getUserGroups","addUserToGroup","groupName","removeUserFromGroup","listGroups","owner","createGroup","description","updateGroup","newName","deleteGroups","names","getGroup","encodeURIComponent","getGroupMembers","addMemberToGroup","userId","removeMemberFromGroup","getGroupPermissions","addPermissionToGroup","permissionName","removePermissionFromGroup","listPermissions","createPermissions","updatePermission","deletePermissions","getSetting","listSettings","setSetting","data","deleteSetting","listPages","showHidden","rescanPages","listTemplates","listDirectories","getPage","file","createPage","directory","template","updatePage","title","author","contents","extraMetadata","deletePages","files","disablePage","enablePage","movePage","newFile","searchPagesByMetadata","query","JSON","stringify","setPageLocked","locked","getTemplate","createTemplate","copyFrom","updateTemplate","markup","deleteTemplates","disableTemplate","enableTemplate","moveTemplate","setTemplateLocked","listFragments","getFragment","createFragment","updateFragment","deleteFragments","moveFragment","disableFragment","enableFragment","setFragmentLocked","listGlobalContent","getGlobalContent","createGlobalContent","location","priority","updateGlobalContent","deleteGlobalContent","disableGlobalContent","enableGlobalContent","setGlobalContentLocked","listMenus","saveMenu","deleteMenu","assignMenuLocation","menuId","saveMenuItem","navItem","label","href","icon","newTab","deleteMenuItems","setMenuItemEnabled","enabled","reorderMenuItems","adoptMenuItem","menuName","listExtensions","listAvailableExtensions","listKnownExtensions","search","sort","getKnownExtension","rateExtension","rating","getDashboardWidgets","getNotifications","unreadOnly","getUnreadNotificationCount","markNotificationRead","markNotificationHandled","markAllNotificationsRead","dismissNotification","listRealtimeConnections","installExtension","withDependencies","uninstallExtension","purgeData","cascade","enableExtension","getExtensionRequirements","disableExtension","getExtensionDependents","includeDisabled","undefined","listAdminGlobalContent","getAdminGlobalContent","createAdminGlobalContent","updateAdminGlobalContent","deleteAdminGlobalContent","enableAdminGlobalContent","disableAdminGlobalContent"],"sources":["0"],"sourcesContent":["import { get, post, put, patch, del } from './fetch.js';\nconst API_BASE = '/kempo/api';\n\nexport const register = async ({ email, password, name }) =>\n post(`${API_BASE}/auth/register/email`, { email, password, name });\n\nexport const login = async ({ email, password }) =>\n post(`${API_BASE}/auth/login/email`, { email, password });\n\nexport const logout = async () => post(`${API_BASE}/auth/logout`, {});\n\nexport const getSession = async () => get(`${API_BASE}/auth/session`);\n\nexport const forgotPassword = async ({ email }) =>\n post(`${API_BASE}/forgot-password`, { email });\n\nexport const resetPassword = async ({ token, password, logoutAll = false }) =>\n post(`${API_BASE}/auth/reset-password`, { token, newPassword: password, logoutAll });\n \nexport const changePassword = async ({ currentPassword, newPassword, logoutAll }) => \n post(`${API_BASE}/auth/change-password`, { currentPassword, newPassword, logoutAll });\n\nexport const verifyEmail = async ({ token }) =>\n post(`${API_BASE}/auth/verify-email`, { token });\n\nexport const currentUserHasPermission = async ({ permission }) =>\n get(`${API_BASE}/user/current/permissions`, { permission });\n\nexport const currentUserHasAllPermissions = async ({ permissions }) =>\n get(`${API_BASE}/user/current/permissions/all`, { permissions });\n\nexport const currentUserHasSomePermissions = async ({ permissions }) =>\n get(`${API_BASE}/user/current/permissions/some`, { permissions });\n\nexport const getAllCurrentUserPermissions = async () =>\n get(`${API_BASE}/user/current/permissions/list`);\n\nexport const userHasPermission = async ({ userid, permission }) =>\n get(`${API_BASE}/user/${userid}/permissions`, { permission });\n\nexport const userHasAllPermissions = async ({ userid, permissions }) =>\n get(`${API_BASE}/user/${userid}/permissions/all`, { permissions });\n\nexport const userHasSomePermissions = async ({ userid, permissions }) =>\n get(`${API_BASE}/user/${userid}/permissions/some`, { permissions });\n\nexport const getAllUserPermissions = async ({ userid }) =>\n get(`${API_BASE}/user/${userid}/permissions/list`);\n\nexport const getUsers = async ({ limit, offset } = {}) =>\n get(`${API_BASE}/user`, { limit, offset });\n\nexport const searchUsers = async ({ q, limit, offset, inGroup, notInGroup } = {}) =>\n get(`${API_BASE}/user/search`, { q, limit, offset, inGroup, notInGroup });\n\nexport const createUser = async ({ name, email, password, emailVerified }) =>\n post(`${API_BASE}/user/create`, { name, email, password, emailVerified });\n\nexport const deleteUsers = async (ids) =>\n del(`${API_BASE}/user`, { ids });\n\nexport const updateUser = async ({ id, name, email, emailVerified, createdAt }) =>\n patch(`${API_BASE}/user`, { id, name, email, emailVerified, createdAt });\n\nexport const getUser = async (userid) =>\n get(`${API_BASE}/user/${userid}`);\n\nexport const getUserSessions = async (userid, { limit, offset } = {}) =>\n get(`${API_BASE}/user/${userid}/sessions`, { limit, offset });\n\nexport const deleteUserSession = async (userid, sessionToken) =>\n del(`${API_BASE}/user/${userid}/sessions`, { sessionToken });\n\nexport const deleteExpiredUserSessions = async (userid) =>\n del(`${API_BASE}/user/${userid}/sessions/expired`);\n\nexport const getUserGroups = async (userid, { limit, offset } = {}) =>\n get(`${API_BASE}/user/${userid}/groups`, { limit, offset });\n\nexport const addUserToGroup = async (userid, groupName) =>\n post(`${API_BASE}/user/${userid}/groups`, { groupName });\n\nexport const removeUserFromGroup = async (userid, groupName) =>\n del(`${API_BASE}/user/${userid}/groups`, { groupName });\n\nexport const listGroups = async ({ limit, offset, owner } = {}) =>\n get(`${API_BASE}/groups`, { limit, offset, owner });\n\nexport const createGroup = async ({ name, description }) =>\n post(`${API_BASE}/groups`, { name, description });\n\nexport const updateGroup = async ({ name, newName, description }) =>\n patch(`${API_BASE}/groups`, { name, newName, description });\n\nexport const deleteGroups = async (names) =>\n del(`${API_BASE}/groups`, { names });\n\nexport const getGroup = async (name) =>\n get(`${API_BASE}/groups/${encodeURIComponent(name)}`);\n\nexport const getGroupMembers = async (name, { limit, offset } = {}) =>\n get(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { limit, offset });\n\nexport const addMemberToGroup = async (name, userId) =>\n post(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { userId });\n\nexport const removeMemberFromGroup = async (name, userId) =>\n del(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { userId });\n\nexport const getGroupPermissions = async (name) =>\n get(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`);\n\nexport const addPermissionToGroup = async (name, permissionName) =>\n post(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`, { permissionName });\n\nexport const removePermissionFromGroup = async (name, permissionName) =>\n del(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`, { permissionName });\n\nexport const listPermissions = async ({ limit, offset, owner } = {}) =>\n get(`${API_BASE}/permissions`, { limit, offset, owner });\n\nexport const createPermissions = async (permissions) =>\n post(`${API_BASE}/permissions`, { permissions });\n\nexport const updatePermission = async ({ name, description }) =>\n patch(`${API_BASE}/permissions`, { name, description });\n\nexport const deletePermissions = async (names) =>\n del(`${API_BASE}/permissions`, { names });\n\nexport const getSetting = async (owner, name) =>\n get(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);\n\nexport const listSettings = async ({ owner, limit, offset } = {}) =>\n get(`${API_BASE}/settings/${encodeURIComponent(owner)}`, { limit, offset });\n\nexport const setSetting = async (owner, name, data) =>\n post(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`, data);\n\nexport const deleteSetting = async (owner, name) =>\n del(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);\n\n/*\n Pages\n*/\n\nexport const listPages = async ({ owner, showHidden, offset, limit } = {}) =>\n get(`${API_BASE}/pages`, { owner, showHidden, offset, limit });\n\nexport const rescanPages = async () =>\n post(`${API_BASE}/pages/rescan`, {});\n\nexport const listTemplates = async () =>\n get(`${API_BASE}/templates`);\n\nexport const listDirectories = async () =>\n get(`${API_BASE}/pages/directories`);\n\nexport const getPage = async (file) =>\n get(`${API_BASE}/pages/file`, { file });\n\nexport const createPage = async ({ directory, name, template }) =>\n post(`${API_BASE}/pages`, { directory, name, template });\n\nexport const updatePage = async ({ file, name, title, description, author, template, contents, extraMetadata }) =>\n put(`${API_BASE}/pages/file`, { file, name, title, description, author, template, contents, extraMetadata });\n\nexport const deletePages = async (files) =>\n del(`${API_BASE}/pages`, { files });\n\nexport const disablePage = async (file) =>\n put(`${API_BASE}/pages/disable`, { file });\n\nexport const enablePage = async (file) =>\n put(`${API_BASE}/pages/enable`, { file });\n\nexport const movePage = async ({ file, newFile }) =>\n patch(`${API_BASE}/pages/file`, { file, newFile });\n\nexport const searchPagesByMetadata = async (query) =>\n get(`${API_BASE}/pages/search`, { query: JSON.stringify(query) });\n\nexport const setPageLocked = async ({ file, locked }) =>\n put(`${API_BASE}/pages/lock`, { file, locked });\n\n/*\n Templates\n*/\n\nexport const getTemplate = async (file) =>\n get(`${API_BASE}/templates/file`, { file });\n\nexport const createTemplate = async ({ directory, name, copyFrom }) =>\n post(`${API_BASE}/templates`, { directory, name, copyFrom });\n\nexport const updateTemplate = async ({ file, name, author, markup }) =>\n put(`${API_BASE}/templates/file`, { file, name, author, markup });\n\nexport const deleteTemplates = async (files) =>\n del(`${API_BASE}/templates`, { files });\n\nexport const disableTemplate = async (file) =>\n put(`${API_BASE}/templates/disable`, { file });\n\nexport const enableTemplate = async (file) =>\n put(`${API_BASE}/templates/enable`, { file });\n\nexport const moveTemplate = async ({ file, newFile }) =>\n patch(`${API_BASE}/templates/file`, { file, newFile });\n\nexport const setTemplateLocked = async ({ file, locked }) =>\n put(`${API_BASE}/templates/lock`, { file, locked });\n\n/*\n Fragments\n*/\n\nexport const listFragments = async () =>\n get(`${API_BASE}/fragments`);\n\nexport const getFragment = async (file) =>\n get(`${API_BASE}/fragments/file`, { file });\n\nexport const createFragment = async ({ directory, name }) =>\n post(`${API_BASE}/fragments`, { directory, name });\n\nexport const updateFragment = async ({ file, author, markup }) =>\n put(`${API_BASE}/fragments/file`, { file, author, markup });\n\nexport const deleteFragments = async (files) =>\n del(`${API_BASE}/fragments`, { files });\n\nexport const moveFragment = async ({ file, newFile }) =>\n patch(`${API_BASE}/fragments/file`, { file, newFile });\n\nexport const disableFragment = async (file) =>\n put(`${API_BASE}/fragments/disable`, { file });\n\nexport const enableFragment = async (file) =>\n put(`${API_BASE}/fragments/enable`, { file });\n\nexport const setFragmentLocked = async ({ file, locked }) =>\n put(`${API_BASE}/fragments/lock`, { file, locked });\n\n/*\n Global Content\n*/\n\nexport const listGlobalContent = async () =>\n get(`${API_BASE}/globals`);\n\nexport const getGlobalContent = async (id) =>\n get(`${API_BASE}/globals/entry`, { id });\n\nexport const createGlobalContent = async ({ name, location, priority }) =>\n post(`${API_BASE}/globals`, { name, location, priority });\n\nexport const updateGlobalContent = async ({ id, name, location, priority, markup }) =>\n put(`${API_BASE}/globals/entry`, { id, name, location, priority, markup });\n\nexport const deleteGlobalContent = async (ids) =>\n del(`${API_BASE}/globals`, { ids });\n\nexport const disableGlobalContent = async (id) =>\n put(`${API_BASE}/globals/disable`, { id });\n\nexport const enableGlobalContent = async (id) =>\n put(`${API_BASE}/globals/enable`, { id });\n\nexport const setGlobalContentLocked = async ({ id, locked }) =>\n put(`${API_BASE}/globals/lock`, { id, locked });\n\n/*\n Menus\n*/\n\nexport const listMenus = async () =>\n get(`${API_BASE}/menus`);\n\nexport const saveMenu = async ({ id, name }) =>\n post(`${API_BASE}/menus`, { id, name });\n\nexport const deleteMenu = async (id) =>\n del(`${API_BASE}/menus`, { id });\n\nexport const assignMenuLocation = async ({ location, menuId }) =>\n put(`${API_BASE}/menus/location`, { location, menuId });\n\nexport const saveMenuItem = async ({ id, menuId, location, navItem, label, href, icon, newTab }) =>\n post(`${API_BASE}/menus/items`, { id, menuId, location, navItem, label, href, icon, newTab });\n\nexport const deleteMenuItems = async (ids) =>\n del(`${API_BASE}/menus/items`, { ids });\n\nexport const setMenuItemEnabled = async ({ id, enabled }) =>\n put(`${API_BASE}/menus/items/enabled`, { id, enabled });\n\nexport const reorderMenuItems = async ({ menuId, ids }) =>\n put(`${API_BASE}/menus/items/order`, { menuId, ids });\n\nexport const adoptMenuItem = async ({ id, menuId, menuName }) =>\n put(`${API_BASE}/menus/adopt`, { id, menuId, menuName });\n\n/*\n Extensions\n*/\n\nexport const listExtensions = async ({ limit, offset } = {}) =>\n get(`${API_BASE}/extensions`, { limit, offset });\n\nexport const listAvailableExtensions = async () =>\n get(`${API_BASE}/extensions/available`);\n\nexport const listKnownExtensions = async ({ search, sort, limit, offset } = {}) =>\n get(`${API_BASE}/extensions/known`, { search, sort, limit, offset });\n\nexport const getKnownExtension = async (name) =>\n get(`${API_BASE}/extensions/known`, { name });\n\nexport const rateExtension = async (name, rating) =>\n put(`${API_BASE}/extensions/rating`, { name, rating });\n\n/*\n Dashboard\n*/\n\nexport const getDashboardWidgets = async () =>\n get(`${API_BASE}/dashboard/widgets`);\n\n/*\n Notifications\n*/\n\nexport const getNotifications = async ({ unreadOnly = false, limit, offset } = {}) =>\n get(`${API_BASE}/notifications`, { unreadOnly, limit, offset });\n\nexport const getUnreadNotificationCount = async () =>\n get(`${API_BASE}/notifications/count`);\n\nexport const markNotificationRead = async (id) =>\n post(`${API_BASE}/notifications/${encodeURIComponent(id)}/read`, {});\n\nexport const markNotificationHandled = async (id) =>\n post(`${API_BASE}/notifications/${encodeURIComponent(id)}/handled`, {});\n\nexport const markAllNotificationsRead = async () =>\n post(`${API_BASE}/notifications/read-all`, {});\n\nexport const dismissNotification = async (id) =>\n del(`${API_BASE}/notifications/${encodeURIComponent(id)}`);\n\nexport const listRealtimeConnections = async () =>\n get(`${API_BASE}/realtime/connections`);\n\nexport const installExtension = async (name, { withDependencies = false } = {}) =>\n post(`${API_BASE}/extensions`, { name, withDependencies });\n\nexport const uninstallExtension = async (name, purgeData = false, { cascade = false } = {}) =>\n del(`${API_BASE}/extensions`, { name, purgeData, cascade });\n\nexport const enableExtension = async (name, { cascade = false } = {}) =>\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/enable`, { cascade });\n\nexport const getExtensionRequirements = async (name) =>\n get(`${API_BASE}/extensions/${encodeURIComponent(name)}/requirements`);\n\nexport const disableExtension = async (name, { cascade = false } = {}) =>\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/disable`, { cascade });\n\nexport const getExtensionDependents = async (name, { includeDisabled = false } = {}) =>\n get(`${API_BASE}/extensions/${encodeURIComponent(name)}/dependents`, { includeDisabled: includeDisabled ? 'true' : undefined });\n\n/*\n Admin Global Content\n*/\n\nexport const listAdminGlobalContent = async () =>\n get(`${API_BASE}/admin-globals`);\n\nexport const getAdminGlobalContent = async (id) =>\n get(`${API_BASE}/admin-globals/${encodeURIComponent(id)}`);\n\nexport const createAdminGlobalContent = async ({ name, location, priority, owner, markup }) =>\n post(`${API_BASE}/admin-globals`, { name, location, priority, owner, markup });\n\nexport const updateAdminGlobalContent = async (id, { name, location, priority, markup }) =>\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}`, { name, location, priority, markup });\n\nexport const deleteAdminGlobalContent = async (ids) =>\n del(`${API_BASE}/admin-globals`, { ids });\n\nexport const enableAdminGlobalContent = async (id) =>\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}/enable`, {});\n\nexport const disableAdminGlobalContent = async (id) =>\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}/disable`, {});\n\n"],"mappings":"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","ignoreList":[]}