kempo 4.9.0 → 4.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/dist/admin/component-overrides.js +1 -1
  2. package/dist/admin/components/AddGroupControl.js +1 -1
  3. package/dist/admin/components/AdminTableControl.js +1 -1
  4. package/dist/admin/components/ClearExpiredSessionsControl.js +1 -1
  5. package/dist/admin/components/Dashboard.js +1 -1
  6. package/dist/admin/components/EmailTemplates.js +1 -1
  7. package/dist/admin/components/Emails.js +1 -1
  8. package/dist/admin/components/FragmentEditor.js +1 -1
  9. package/dist/admin/components/GlobalContentEditor.js +1 -1
  10. package/dist/admin/components/GroupDeleteSelected.js +1 -1
  11. package/dist/admin/components/GroupRemoveRecord.js +1 -1
  12. package/dist/admin/components/Menus.js +1 -1
  13. package/dist/admin/components/Monaco.js +1 -1
  14. package/dist/admin/components/PageEditor.js +1 -1
  15. package/dist/admin/components/TableRowDelete.js +1 -1
  16. package/dist/admin/components/TableRowLink.js +1 -1
  17. package/dist/admin/components/TemplateEditor.js +1 -1
  18. package/dist/admin/components/Updates.js +1 -1
  19. package/dist/admin/components/ValueEditor.js +1 -1
  20. package/dist/admin/components/dashboardLayout.js +1 -1
  21. package/dist/admin/components/settings/AdminSettings.js +1 -1
  22. package/dist/admin/components/settings/BooleanSetting.js +1 -1
  23. package/dist/admin/components/settings/JsonSetting.js +1 -1
  24. package/dist/admin/components/settings/NumberSetting.js +1 -1
  25. package/dist/admin/components/settings/SecretSetting.js +1 -1
  26. package/dist/admin/components/settings/Setting.js +1 -1
  27. package/dist/admin/components/settings/SettingEditor.js +1 -1
  28. package/dist/admin/components/settings/SettingsPanel.js +1 -1
  29. package/dist/admin/components/settings/StringSetting.js +1 -1
  30. package/dist/admin/components/settings/humanize.js +1 -1
  31. package/dist/admin/components/tableControls/AddMember.js +1 -1
  32. package/dist/admin/components/tableControls/AddPermission.js +1 -1
  33. package/dist/admin/components/tableControls/ExtensionDetails.js +1 -1
  34. package/dist/admin/components/tableControls/InstallExtension.js +1 -1
  35. package/dist/admin/components/tableControls/ToggleExtension.js +1 -1
  36. package/dist/admin/components/tableControls/UninstallExtension.js +1 -1
  37. package/dist/admin/components/widgets/Content.js +1 -1
  38. package/dist/admin/components/widgets/Extensions.js +1 -1
  39. package/dist/admin/components/widgets/Notifications.js +1 -1
  40. package/dist/admin/components/widgets/Pages.js +1 -1
  41. package/dist/admin/components/widgets/Users.js +1 -1
  42. package/dist/admin/init.js +1 -1
  43. package/dist/admin/updates/index.page.html +1 -1
  44. package/dist/kempo/api/admin-globals/DELETE.js +1 -1
  45. package/dist/kempo/api/admin-globals/GET.js +1 -1
  46. package/dist/kempo/api/admin-globals/POST.js +1 -1
  47. package/dist/kempo/api/admin-globals/[id]/GET.js +1 -1
  48. package/dist/kempo/api/admin-globals/[id]/PUT.js +1 -1
  49. package/dist/kempo/api/admin-globals/[id]/disable/PUT.js +1 -1
  50. package/dist/kempo/api/admin-globals/[id]/enable/PUT.js +1 -1
  51. package/dist/kempo/api/auth/change-password/POST.js +1 -1
  52. package/dist/kempo/api/auth/login/email/POST.js +1 -1
  53. package/dist/kempo/api/auth/logout/POST.js +1 -1
  54. package/dist/kempo/api/auth/register/email/POST.js +1 -1
  55. package/dist/kempo/api/auth/reset-password/POST.js +1 -1
  56. package/dist/kempo/api/auth/session/GET.js +1 -1
  57. package/dist/kempo/api/auth/verify-email/POST.js +1 -1
  58. package/dist/kempo/api/dashboard/widgets/GET.js +1 -1
  59. package/dist/kempo/api/email-templates/GET.js +1 -1
  60. package/dist/kempo/api/email-templates/file/DELETE.js +1 -1
  61. package/dist/kempo/api/email-templates/file/GET.js +1 -1
  62. package/dist/kempo/api/email-templates/file/PUT.js +1 -1
  63. package/dist/kempo/api/email-templates/preview/GET.js +1 -1
  64. package/dist/kempo/api/emails/GET.js +1 -1
  65. package/dist/kempo/api/emails/[id]/GET.js +1 -1
  66. package/dist/kempo/api/emails/[id]/retry/POST.js +1 -1
  67. package/dist/kempo/api/emails/test/POST.js +1 -1
  68. package/dist/kempo/api/extensions/DELETE.js +1 -1
  69. package/dist/kempo/api/extensions/GET.js +1 -1
  70. package/dist/kempo/api/extensions/POST.js +1 -1
  71. package/dist/kempo/api/extensions/[name]/dependents/GET.js +1 -1
  72. package/dist/kempo/api/extensions/[name]/disable/POST.js +1 -1
  73. package/dist/kempo/api/extensions/[name]/enable/POST.js +1 -1
  74. package/dist/kempo/api/extensions/[name]/requirements/GET.js +1 -1
  75. package/dist/kempo/api/extensions/[name]/update/POST.js +1 -1
  76. package/dist/kempo/api/extensions/[name]/update-check/GET.js +1 -1
  77. package/dist/kempo/api/extensions/available/GET.js +1 -1
  78. package/dist/kempo/api/extensions/known/GET.js +1 -1
  79. package/dist/kempo/api/extensions/rating/PUT.js +1 -1
  80. package/dist/kempo/api/forgot-password/POST.js +1 -1
  81. package/dist/kempo/api/fragments/DELETE.js +1 -1
  82. package/dist/kempo/api/fragments/GET.js +1 -1
  83. package/dist/kempo/api/fragments/POST.js +1 -1
  84. package/dist/kempo/api/fragments/disable/PUT.js +1 -1
  85. package/dist/kempo/api/fragments/enable/PUT.js +1 -1
  86. package/dist/kempo/api/fragments/file/GET.js +1 -1
  87. package/dist/kempo/api/fragments/file/PATCH.js +1 -1
  88. package/dist/kempo/api/fragments/file/PUT.js +1 -1
  89. package/dist/kempo/api/fragments/lock/PUT.js +1 -1
  90. package/dist/kempo/api/globals/DELETE.js +1 -1
  91. package/dist/kempo/api/globals/GET.js +1 -1
  92. package/dist/kempo/api/globals/POST.js +1 -1
  93. package/dist/kempo/api/globals/disable/PUT.js +1 -1
  94. package/dist/kempo/api/globals/enable/PUT.js +1 -1
  95. package/dist/kempo/api/globals/entry/GET.js +1 -1
  96. package/dist/kempo/api/globals/entry/PUT.js +1 -1
  97. package/dist/kempo/api/globals/lock/PUT.js +1 -1
  98. package/dist/kempo/api/groups/DELETE.js +1 -1
  99. package/dist/kempo/api/groups/GET.js +1 -1
  100. package/dist/kempo/api/groups/PATCH.js +1 -1
  101. package/dist/kempo/api/groups/POST.js +1 -1
  102. package/dist/kempo/api/groups/[name]/GET.js +1 -1
  103. package/dist/kempo/api/groups/[name]/members/DELETE.js +1 -1
  104. package/dist/kempo/api/groups/[name]/members/GET.js +1 -1
  105. package/dist/kempo/api/groups/[name]/members/POST.js +1 -1
  106. package/dist/kempo/api/groups/[name]/permissions/DELETE.js +1 -1
  107. package/dist/kempo/api/groups/[name]/permissions/GET.js +1 -1
  108. package/dist/kempo/api/groups/[name]/permissions/POST.js +1 -1
  109. package/dist/kempo/api/menus/DELETE.js +1 -1
  110. package/dist/kempo/api/menus/GET.js +1 -1
  111. package/dist/kempo/api/menus/POST.js +1 -1
  112. package/dist/kempo/api/menus/adopt/PUT.js +1 -1
  113. package/dist/kempo/api/menus/items/DELETE.js +1 -1
  114. package/dist/kempo/api/menus/items/POST.js +1 -1
  115. package/dist/kempo/api/menus/items/enabled/PUT.js +1 -1
  116. package/dist/kempo/api/menus/items/order/PUT.js +1 -1
  117. package/dist/kempo/api/menus/location/PUT.js +1 -1
  118. package/dist/kempo/api/notifications/GET.js +1 -1
  119. package/dist/kempo/api/notifications/[id]/DELETE.js +1 -1
  120. package/dist/kempo/api/notifications/[id]/handled/POST.js +1 -1
  121. package/dist/kempo/api/notifications/[id]/read/POST.js +1 -1
  122. package/dist/kempo/api/notifications/count/GET.js +1 -1
  123. package/dist/kempo/api/notifications/read-all/POST.js +1 -1
  124. package/dist/kempo/api/pages/DELETE.js +1 -1
  125. package/dist/kempo/api/pages/GET.js +1 -1
  126. package/dist/kempo/api/pages/POST.js +1 -1
  127. package/dist/kempo/api/pages/directories/GET.js +1 -1
  128. package/dist/kempo/api/pages/disable/PUT.js +1 -1
  129. package/dist/kempo/api/pages/enable/PUT.js +1 -1
  130. package/dist/kempo/api/pages/file/GET.js +1 -1
  131. package/dist/kempo/api/pages/file/PATCH.js +1 -1
  132. package/dist/kempo/api/pages/file/PUT.js +1 -1
  133. package/dist/kempo/api/pages/lock/PUT.js +1 -1
  134. package/dist/kempo/api/pages/rescan/POST.js +1 -1
  135. package/dist/kempo/api/pages/search/GET.js +1 -1
  136. package/dist/kempo/api/pages/templates/GET.js +1 -1
  137. package/dist/kempo/api/permissions/DELETE.js +1 -1
  138. package/dist/kempo/api/permissions/GET.js +1 -1
  139. package/dist/kempo/api/permissions/PATCH.js +1 -1
  140. package/dist/kempo/api/permissions/POST.js +1 -1
  141. package/dist/kempo/api/realtime/WS.js +1 -1
  142. package/dist/kempo/api/realtime/connections/GET.js +1 -1
  143. package/dist/kempo/api/settings/[owner]/GET.js +1 -1
  144. package/dist/kempo/api/settings/[owner]/[name]/DELETE.js +1 -1
  145. package/dist/kempo/api/settings/[owner]/[name]/GET.js +1 -1
  146. package/dist/kempo/api/settings/[owner]/[name]/POST.js +1 -1
  147. package/dist/kempo/api/settings/public/GET.js +1 -1
  148. package/dist/kempo/api/templates/DELETE.js +1 -1
  149. package/dist/kempo/api/templates/GET.js +1 -1
  150. package/dist/kempo/api/templates/POST.js +1 -1
  151. package/dist/kempo/api/templates/disable/PUT.js +1 -1
  152. package/dist/kempo/api/templates/enable/PUT.js +1 -1
  153. package/dist/kempo/api/templates/file/GET.js +1 -1
  154. package/dist/kempo/api/templates/file/PATCH.js +1 -1
  155. package/dist/kempo/api/templates/file/PUT.js +1 -1
  156. package/dist/kempo/api/templates/lock/PUT.js +1 -1
  157. package/dist/kempo/api/updates/GET.js +1 -1
  158. package/dist/kempo/api/updates/apply/POST.js +1 -1
  159. package/dist/kempo/api/updates/check/POST.js +1 -1
  160. package/dist/kempo/api/updates/discard/POST.js +1 -1
  161. package/dist/kempo/api/updates/prepare/POST.js +1 -1
  162. package/dist/kempo/api/updates/rollback/POST.js +1 -1
  163. package/dist/kempo/api/user/DELETE.js +1 -1
  164. package/dist/kempo/api/user/GET.js +1 -1
  165. package/dist/kempo/api/user/PATCH.js +1 -1
  166. package/dist/kempo/api/user/[userid]/GET.js +1 -1
  167. package/dist/kempo/api/user/[userid]/groups/DELETE.js +1 -1
  168. package/dist/kempo/api/user/[userid]/groups/GET.js +1 -1
  169. package/dist/kempo/api/user/[userid]/groups/POST.js +1 -1
  170. package/dist/kempo/api/user/[userid]/name/GET.js +1 -1
  171. package/dist/kempo/api/user/[userid]/permissions/GET.js +1 -1
  172. package/dist/kempo/api/user/[userid]/permissions/all/GET.js +1 -1
  173. package/dist/kempo/api/user/[userid]/permissions/list/GET.js +1 -1
  174. package/dist/kempo/api/user/[userid]/permissions/some/GET.js +1 -1
  175. package/dist/kempo/api/user/[userid]/sessions/DELETE.js +1 -1
  176. package/dist/kempo/api/user/[userid]/sessions/GET.js +1 -1
  177. package/dist/kempo/api/user/[userid]/sessions/expired/DELETE.js +1 -1
  178. package/dist/kempo/api/user/create/POST.js +1 -1
  179. package/dist/kempo/api/user/search/GET.js +1 -1
  180. package/dist/kempo/components/AdminNavFooter.js +1 -1
  181. package/dist/kempo/components/DashboardWidget.js +1 -1
  182. package/dist/kempo/components/Login.js +1 -1
  183. package/dist/kempo/components/LogoutBtn.js +1 -1
  184. package/dist/kempo/components/Menu.js +1 -1
  185. package/dist/kempo/components/NotificationBell.js +1 -1
  186. package/dist/kempo/components/NotificationList.js +1 -1
  187. package/dist/kempo/components/Permission.js +1 -1
  188. package/dist/kempo/components/PermissionTarget.js +1 -1
  189. package/dist/kempo/components/Register.js +1 -1
  190. package/dist/kempo/components/Role.js +1 -1
  191. package/dist/kempo/components/UserCreatedAt.js +1 -1
  192. package/dist/kempo/components/UserDisplayName.js +1 -1
  193. package/dist/kempo/components/UserEmail.js +1 -1
  194. package/dist/kempo/components/UserEmailVerified.js +1 -1
  195. package/dist/kempo/components/UserName.js +1 -1
  196. package/dist/kempo/fetch.js +1 -1
  197. package/dist/kempo/realtime.js +1 -1
  198. package/dist/kempo/sdk.js +1 -1
  199. package/dist/kempo/utils/safeNext.js +1 -1
  200. package/docker/entrypoint.mjs +1 -1
  201. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
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
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\templates\file\PUT.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\templates\file\PUT.js.map
@@ -1,2 +1,2 @@
1
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
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\templates\lock\PUT.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\templates\lock\PUT.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../server/utils/updates/getUpdateStatus.js";export default async(r,t)=>{const[o,i]=await s(r.cookies.session_token,"system:updates:manage");if(o)return t.status(o.code).json({error:o.msg});if(!i)return t.status(403).json({error:"Insufficient permissions"});const[n,a]=await e({offline:"true"===r.query.offline});if(n)return t.status(n.code).json({error:n.msg});t.json(a)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\GET.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\updates\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/updates/applyUpdate.js";import r from"../../../../../server/utils/updates/applyStagedUpdate.js";export default async(t,o)=>{const[i,n]=await s(t.cookies.session_token,"system:updates:manage");if(i)return o.status(i.code).json({error:i.msg});if(!n)return o.status(403).json({error:"Insufficient permissions"});const[a,d]=process.env.KEMPO_SITE_ROOT?await r({confirm:t.body?.confirm||{}}):await e({version:null===t.body?.version?null:t.body?.version||"latest",extensions:Array.isArray(t.body?.extensions)?t.body.extensions:[]});if(a)return o.status(a.code).json({error:a.msg,...a.details?{details:a.details}:{}});o.json(d)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\apply\POST.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\updates\apply\POST.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../../server/utils/updates/getUpdateStatus.js";export default async(e,t)=>{const[o,i]=await s(e.cookies.session_token,"system:updates:manage");if(o)return t.status(o.code).json({error:o.msg});if(!i)return t.status(403).json({error:"Insufficient permissions"});const[n,a]=await r({force:!0});if(n)return t.status(n.code).json({error:n.msg});t.json(a)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\check\POST.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\updates\check\POST.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/updates/discardUpdate.js";export default async(r,t)=>{const[i,o]=await s(r.cookies.session_token,"system:updates:manage");if(i)return t.status(i.code).json({error:i.msg});if(!o)return t.status(403).json({error:"Insufficient permissions"});const[a,n]=await e();if(a)return t.status(a.code).json({error:a.msg,...a.details?{details:a.details}:{}});t.json(n)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\discard\POST.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\updates\discard\POST.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/updates/prepareUpdate.js";export default async(r,t)=>{const[o,n]=await s(r.cookies.session_token,"system:updates:manage");if(o)return t.status(o.code).json({error:o.msg});if(!n)return t.status(403).json({error:"Insufficient permissions"});const[i,a]=await e({version:null===r.body?.version?null:r.body?.version||"latest",extensions:Array.isArray(r.body?.extensions)?r.body.extensions:[]});if(i)return t.status(i.code).json({error:i.msg,...i.details?{details:i.details}:{}});t.json(a)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\prepare\POST.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\updates\prepare\POST.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../../server/utils/updates/rollbackUpdate.js";export default async(e,t)=>{const[o,i]=await s(e.cookies.session_token,"system:updates:manage");if(o)return t.status(o.code).json({error:o.msg});if(!i)return t.status(403).json({error:"Insufficient permissions"});const[n,a]=await r({confirm:e.body?.confirm||{}});if(n)return t.status(n.code).json({error:n.msg,...n.details?{details:n.details}:{}});t.json(a)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\rollback\POST.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\updates\rollback\POST.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../server/utils/users/deleteUser.js";export default async(e,t)=>{try{const o=e.cookies.session_token,{ids:n}=e.body;if(!n||!Array.isArray(n)||0===n.length)return t.status(400).json({error:"IDs array is required"});const[i,u]=await s(o,"system:user:delete");if(i)return t.status(i.code).json({error:i.msg});if(!u)return t.status(403).json({error:"Insufficient permissions"});const a=[],c=[];for(const s of n){const[e,t]=await r(s);e?c.push({id:s,error:e.msg}):a.push(t)}if(c.length>0)return t.status(207).json({deleted:a,errors:c});t.json({deleted:a})}catch(s){t.status(500).json({error:s.message})}};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\DELETE.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\DELETE.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../server/utils/users/getUsers.js";export default async(e,t)=>{const o=e.cookies.session_token,[i,n]=await s(o,"system:user:read");if(i)return t.status(i.code).json({error:i.msg});if(!n)return t.status(403).json({error:"You do not have permission to view users"});const u=parseInt(e.query.limit)||50,a=parseInt(e.query.offset)||0,[m,f]=await r({limit:u,offset:a});if(m)return t.status(m.code).json({error:m.msg});t.json(f)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\GET.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import e from"../../../../server/utils/permissions/currentUserHasPermission.js";import s from"../../../../server/utils/users/updateUser.js";export default async(r,i)=>{const t=r.cookies.session_token,{id:o,name:n,email:a,emailVerified:u,createdAt:d}=r.body;if(!o)return i.status(400).json({error:"User ID is required"});const[m,c]=await e(t,"system:user:update");if(m)return i.status(m.code).json({error:m.msg});if(!c)return i.status(403).json({error:"Insufficient permissions"});const f={};void 0!==n&&(f.name=n),void 0!==a&&(f.email=a),void 0!==u&&(f.emailVerified=u),void 0!==d&&(f.createdAt=new Date(d));const[j,l]=await s(o,f);if(j)return i.status(j.code).json({error:j.msg});i.json(l)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\PATCH.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\PATCH.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../../server/utils/users/getUserById.js";export default async(e,t)=>{const o=e.cookies.session_token,[i,n]=await s(o,"system:user:read");if(i)return t.status(i.code).json({error:i.msg});if(!n)return t.status(403).json({error:"Insufficient permissions"});const{userid:u}=e.params,[a,m]=await r(u);if(a)return t.status(a.code).json({error:a.msg});t.json(m)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\GET.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import r from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import s from"../../../../../../server/utils/groups/removeUserFromGroup.js";export default async(e,o)=>{const t=e.cookies.session_token,[i,n]=await r(t,"system:group:update");if(i)return o.status(i.code).json({error:i.msg});if(!n)return o.status(403).json({error:"Insufficient permissions"});const{userid:u}=e.params,{groupName:a}=e.body;if(!a)return o.status(400).json({error:"Group name is required"});const[m,p]=await s(u,a);if(m)return o.status(m.code).json({error:m.msg});o.json(p)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\groups\DELETE.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\groups\DELETE.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../../../server/utils/permissions/getUserGroups.js";export default async(e,t)=>{const o=e.cookies.session_token,[i,n]=await s(o,"system:group:read");if(i)return t.status(i.code).json({error:i.msg});if(!n)return t.status(403).json({error:"Insufficient permissions"});const{userid:u}=e.params,[a,m]=await r(u);if(a)return t.status(a.code).json({error:a.msg});const f=parseInt(e.query.limit)||50,p=parseInt(e.query.offset)||0,c=m.length;t.json({groups:m.slice(p,p+f),total:c,limit:f,offset:p})};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\groups\GET.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\groups\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../../../server/utils/groups/addUserToGroup.js";export default async(e,o)=>{const t=e.cookies.session_token,[i,n]=await s(t,"system:group:update");if(i)return o.status(i.code).json({error:i.msg});if(!n)return o.status(403).json({error:"Insufficient permissions"});const{userid:u}=e.params,{groupName:a}=e.body;if(!a)return o.status(400).json({error:"Group name is required"});const[m,p]=await r(u,a);if(m)return o.status(m.code).json({error:m.msg});o.json(p)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\groups\POST.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\groups\POST.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../server/utils/users/getUserById.js";export default async(r,e)=>{const{userid:t}=r.params,[a,o]=await s(t);if(a)return e.status(a.code).json({error:a.msg});e.json({name:o.name})};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\name\GET.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\name\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../server/utils/auth/getSession.js";import r from"../../../../../../server/utils/permissions/getUserPermission.js";import e from"../../../../../../server/utils/permissions/getUserPermissions.js";import o from"../../../../../../server/utils/permissions/userHasPermission.js";export default async(i,t)=>{try{const n=i.cookies.session_token,[u,a]=await s({token:n});if(u||!a||!a.user)return t.status(401).json({error:"Unauthorized"});const{userid:m}=i.params,c="current"===m?a.user.id:m;if("current"!==m){const[s,r]=await o(a.user.id,"system:permissions:read");if(s||!r)return t.status(403).json({error:"Forbidden"})}const p=i.query.permission;if(p){const[s,e]=await r(c,p);return s?t.status(s.code).json({error:s.msg}):t.json({hasPermission:e})}const[j,d]=await e(c);if(j)return t.status(j.code).json({error:j.msg});t.json({permissions:d})}catch(s){console.error("Get user permission error:",s),t.status(500).json({error:s.message})}};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\permissions\GET.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\permissions\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../../server/utils/auth/getSession.js";import r from"../../../../../../../server/utils/permissions/getUserPermissions.js";import e from"../../../../../../../server/utils/permissions/userHasPermission.js";export default async(o,t)=>{try{const i=o.query.permissions;if(!i)return t.status(400).json({error:"permissions parameter required"});const n=o.cookies.session_token,[a,m]=await s({token:n});if(a||!m||!m.user)return t.status(401).json({error:"Unauthorized"});const{userid:u}=o.params,c="current"===u?m.user.id:u;if("current"!==u){const[s,r]=await e(m.user.id,"system:permissions:read");if(s||!r)return t.status(403).json({error:"Forbidden"})}const p=i.split(",").map(s=>s.trim()),[d,f]=await r(c);if(d)return t.status(d.code).json({error:d.msg});const j=new Set(f.map(s=>s.name)),l=p.every(s=>j.has(s));t.json({hasPermission:l})}catch(s){console.error("Check all permissions error:",s),t.status(500).json({error:s.message})}};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\permissions\all\GET.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\permissions\all\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../../server/utils/auth/getSession.js";import r from"../../../../../../../server/utils/permissions/getAllPermissions.js";import e from"../../../../../../../server/utils/permissions/getUserPermissions.js";import o from"../../../../../../../server/utils/permissions/getUserGroups.js";export default async(t,i)=>{try{const n=t.cookies.session_token,[a,m]=await s({token:n});if(a||!m||!m.user)return i.status(401).json({error:"Unauthorized"});const u="current"===t.params.userid?m.user.id:parseInt(t.params.userid);if(!u)return i.status(400).json({error:"Invalid user ID"});const[p,c]=await o(u);if(p)return i.status(p.code).json({error:p.msg});if(c.some(s=>"system:Administrators"===s.name)){const[s,e]=await r({limit:1e4,offset:0});return s?i.status(s.code).json({error:s.msg}):i.json({permissions:e.permissions.map(s=>s.name)})}const[f,j]=await e(u);if(f)return i.status(f.code).json({error:f.msg});i.json({permissions:j})}catch(s){console.error("List user permissions error:",s),i.status(500).json({error:s.message})}};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\permissions\list\GET.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\permissions\list\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../../server/utils/auth/getSession.js";import r from"../../../../../../../server/utils/permissions/getUserPermissions.js";import e from"../../../../../../../server/utils/permissions/userHasPermission.js";export default async(o,t)=>{try{const i=o.query.permissions;if(!i)return t.status(400).json({error:"permissions parameter required"});const n=o.cookies.session_token,[a,m]=await s({token:n});if(a||!m||!m.user)return t.status(401).json({error:"Unauthorized"});const{userid:u}=o.params,c="current"===u?m.user.id:u;if("current"!==u){const[s,r]=await e(m.user.id,"system:permissions:read");if(s||!r)return t.status(403).json({error:"Forbidden"})}const p=i.split(",").map(s=>s.trim()),[d,f]=await r(c);if(d)return t.status(d.code).json({error:d.msg});const j=new Set(f.map(s=>s.name)),h=p.some(s=>j.has(s));t.json({hasPermission:h})}catch(s){console.error("Check some permissions error:",s),t.status(500).json({error:s.message})}};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\permissions\some\GET.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\permissions\some\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../../server/utils/sessions/deleteSession.js";export default async(r,o)=>{const t=r.cookies.session_token,[n,i]=await s(t,"system:user:update");if(n)return o.status(n.code).json({error:n.msg});if(!i)return o.status(403).json({error:"Insufficient permissions"});const{sessionToken:u}=r.body;if(!u)return o.status(400).json({error:"Session token is required"});const[a,m]=await e(u);if(a)return o.status(a.code).json({error:a.msg});o.json(m)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\sessions\DELETE.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\sessions\DELETE.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../../../server/utils/sessions/getUserSessions.js";export default async(e,t)=>{const o=e.cookies.session_token,[i,n]=await s(o,"system:user:read");if(i)return t.status(i.code).json({error:i.msg});if(!n)return t.status(403).json({error:"Insufficient permissions"});const{userid:a}=e.params,u=parseInt(e.query.limit)||50,m=parseInt(e.query.offset)||0,[f,c]=await r(a,{limit:u,offset:m});if(f)return t.status(f.code).json({error:f.msg});t.json(c)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\sessions\GET.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\sessions\GET.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../../../../server/utils/sessions/deleteExpiredUserSessions.js";export default async(e,o)=>{const t=e.cookies.session_token,[i,n]=await s(t,"system:user:update");if(i)return o.status(i.code).json({error:i.msg});if(!n)return o.status(403).json({error:"Insufficient permissions"});const{userid:u}=e.params,[a,m]=await r(u);if(a)return o.status(a.code).json({error:a.msg});o.json(m)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\sessions\expired\DELETE.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\[userid]\sessions\expired\DELETE.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/users/createUser.js";export default async(r,t)=>{try{const o=r.cookies.session_token,{name:i,email:a,password:n,emailVerified:m}=r.body,[u,c]=await s(o,"system:user:create");if(u)return t.status(u.code).json({error:u.msg});if(!c)return t.status(403).json({error:"Insufficient permissions"});const[f,d]=await e({name:i,email:a,password:n,emailVerified:m});if(f)return t.status(f.code).json({error:f.msg});t.json(d)}catch(s){t.status(500).json({error:s.message})}};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\create\POST.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\create\POST.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../../server/utils/users/searchUsers.js";export default async(e,o)=>{const t=e.cookies.session_token,[i,n]=await s(t,"system:user:read");if(i)return o.status(i.code).json({error:i.msg});if(!n)return o.status(403).json({error:"You do not have permission to view users"});const u=e.query.q||"",a=Math.min(parseInt(e.query.limit)||20,100),m=parseInt(e.query.offset)||0,p=e.query.inGroup||void 0,f=e.query.notInGroup||void 0,[c,d]=await r({q:u,limit:a,offset:m,inGroup:p,notInGroup:f});if(c)return o.status(c.code).json({error:c.msg});o.json(d)};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\user\search\GET.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\api\user\search\GET.js.map
@@ -1,2 +1,2 @@
1
1
  export default class e extends HTMLElement{#e=null;connectedCallback(){this.#e=this.closest("k-aside"),this.#e?.addEventListener("aside_state_change",this.handleStateChange),this.applyState(this.#e?.state)}disconnectedCallback(){this.#e?.removeEventListener("aside_state_change",this.handleStateChange),this.#e=null}handleStateChange=e=>this.applyState(e.detail.state);applyState=e=>{const t="collapsed"===e;this.classList.toggle("d-f",!t),this.classList.toggle("d-b",t),this.classList.toggle("ta-center",t),this.style.alignItems=t?"":"center"}}customElements.define("k-admin-nav-footer",e);
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\AdminNavFooter.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\AdminNavFooter.js.map
@@ -15,4 +15,4 @@ import e from"/kempo-ui/components/LightComponent.js";import{html as t,nothing a
15
15
  ${this.renderFooter()}
16
16
  </div>
17
17
  `}}
18
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\DashboardWidget.js.map
18
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\DashboardWidget.js.map
@@ -15,4 +15,4 @@ import e from"/kempo-ui/components/LightComponent.js";import{html as s}from"/kem
15
15
  <p class="mt"><a href="/forgot-password">Forgot Password?</a></p>
16
16
  <p class="mt">Don't have an account? <a href="/register">Register</a></p>
17
17
  `}}customElements.define("k-login",a);
18
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\Login.js.map
18
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\Login.js.map
@@ -1,2 +1,2 @@
1
1
  import t from"/kempo-ui/components/LightComponent.js";import{logout as e}from"../sdk.js";export default class o extends t{static get properties(){return{redirect:{type:String},buttonClass:{type:String,attribute:"button-class"}}}connectedCallback(){this.buttonText=this.textContent.trim()||"Logout",this.innerHTML="",super.connectedCallback()}updated(t){super.updated(t)}handleLogout=async()=>{const[t]=await e();t?console.error("Logout failed:",t.msg):this.redirect&&(window.location.href=this.redirect)};renderLightDom(){const t=document.createElement("button");return t.type="button",t.className=this.buttonClass?`kempo-component-logout ${this.buttonClass}`:"kempo-component-logout",t.textContent=this.buttonText,t.addEventListener("click",this.handleLogout),t}}customElements.define("k-logout-btn",o);
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\LogoutBtn.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\LogoutBtn.js.map
@@ -14,4 +14,4 @@ import e from"/kempo-ui/components/LightComponent.js";import{html as t}from"/kem
14
14
  <ul>${this.menuData.items.map(e=>this.renderItem(e))}</ul>
15
15
  </nav>
16
16
  `:t``}}customElements.define("k-menu",s);
17
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\Menu.js.map
17
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\Menu.js.map
@@ -14,4 +14,4 @@ import t from"/kempo-ui/components/LightComponent.js";import{html as i,nothing a
14
14
  </div>
15
15
  </k-dropdown>
16
16
  `}}customElements.define("k-notification-bell",o);
17
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\NotificationBell.js.map
17
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\NotificationBell.js.map
@@ -18,4 +18,4 @@ import t from"/kempo-ui/components/LightComponent.js";import{html as i,nothing a
18
18
  <k-pagination class="d-b my" controls="simple" .page=${this.page} .totalItems=${this.total} .itemsPerPage=${this.pageSize} @page-change=${this.handlePageChange}></k-pagination>
19
19
  `:e}
20
20
  `:i`<p class="p tc-muted">${this.unreadOnly?"No unread notifications.":"No notifications."}</p>`}}customElements.define("k-notification-list",p);
21
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\NotificationList.js.map
21
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\NotificationList.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"/kempo-ui/components/LightComponent.js";import{html as i}from"/kempo-ui/lit-all.min.js";import{currentUserHasPermission as t,currentUserHasAllPermissions as e,currentUserHasSomePermissions as o}from"../sdk.js";export default class n extends s{static properties={has:{type:String},all:{type:String},some:{type:String},loading:{type:Boolean,state:!0},hasPermission:{type:Boolean,state:!0}};constructor(){super(),this.has="",this.all="",this.some="",this.loading=!0,this.hasPermission=!1}async connectedCallback(){super.connectedCallback(),await this.checkPermissions()}async checkPermissions(){const s=[this.has,this.all,this.some].filter(Boolean).length;if(s>1)return this.hasPermission=!1,void(this.loading=!1);if(0===s)return this.hasPermission=!0,void(this.loading=!1);try{if(this.has){const[s,i]=await t({permission:this.has});this.hasPermission=!s&&i.hasPermission}else if(this.all){const s=this.all.split(",").map(s=>s.trim()),[i,t]=await e({permissions:s});this.hasPermission=!i&&t.hasPermission}else{const s=this.some.split(",").map(s=>s.trim()),[i,t]=await o({permissions:s});this.hasPermission=!i&&t.hasPermission}}catch(s){this.hasPermission=!1}finally{this.loading=!1}}renderLightDom(){return this.loading?(this.style.display="none",i``):this.hasPermission?(this.style.display="",i`<slot></slot>`):(this.style.display="none",i``)}}window.customElements.define("k-permission",n);
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\Permission.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\Permission.js.map
@@ -1,2 +1,2 @@
1
1
  import s from"/kempo-ui/components/LightComponent.js";import{currentUserHasPermission as t,currentUserHasAllPermissions as i,currentUserHasSomePermissions as e}from"../sdk.js";export default class a extends s{static properties={has:{type:String},all:{type:String},some:{type:String},target:{type:String}};constructor(){super(),this.has="",this.all="",this.some="",this.target=""}async connectedCallback(){super.connectedCallback(),this.style.display="none",await this.applyPermission()}async applyPermission(){let s=!1;if(1===[this.has,this.all,this.some].filter(Boolean).length)try{if(this.has){const[i,e]=await t({permission:this.has});s=!i&&e.hasPermission}else if(this.all){const t=this.all.split(",").map(s=>s.trim()),[e,a]=await i({permissions:t});s=!e&&a.hasPermission}else{const t=this.some.split(",").map(s=>s.trim()),[i,a]=await e({permissions:t});s=!i&&a.hasPermission}}catch(t){s=!1}this.setTargetsVisible(s)}setTargetsVisible(s){if(this.target)for(const t of document.querySelectorAll(this.target))t.style.display=s?"":"none"}}window.customElements.define("k-permission-target",a);
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\PermissionTarget.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\PermissionTarget.js.map
@@ -18,4 +18,4 @@ import e from"/kempo-ui/components/LightComponent.js";import{html as t}from"/kem
18
18
  ${this.extra}
19
19
  <p class="mt">Already have an account? <a href="/login">Login</a></p>
20
20
  `}}customElements.define("k-register",a);
21
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\Register.js.map
21
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\Register.js.map
@@ -1,2 +1,2 @@
1
1
  import e from"/kempo-ui/components/LightComponent.js";import{html as t}from"/kempo-ui/lit-all.min.js";import{checkRole as o}from"../sdk.js";export default class s extends e{static properties={requires:{type:String},exclude:{type:String},loading:{type:Boolean,state:!0},hasRole:{type:Boolean,state:!0}};constructor(){super(),this.requires="",this.exclude="",this.loading=!0,this.hasRole=!1}async connectedCallback(){super.connectedCallback(),await this.checkRole()}async checkRole(){try{const e=await o({requires:this.requires||void 0,exclude:this.exclude||void 0});this.hasRole=e.hasRole}catch(e){console.error("Role check failed:",e),this.hasRole=!1}finally{this.loading=!1}}renderLightDom(){return this.loading?t``:this.hasRole?t`<slot></slot>`:t``}}window.customElements.define("k-role",s);
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\Role.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\Role.js.map
@@ -1,2 +1,2 @@
1
1
  import e from"/kempo-ui/components/LightComponent.js";import{getSession as t}from"../sdk.js";export default class o extends e{connectedCallback(){super.connectedCallback(),this.loadCreatedAt()}async loadCreatedAt(){const[e,o]=await t();if(e)return console.error("Failed to load user created date:",e.msg),void(this.textContent="");const n=new Date(o?.user?.createdAt);this.textContent=n.toLocaleDateString()}renderLightDom(){return"Loading..."}}customElements.define("k-user-created-at",o);
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\UserCreatedAt.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\UserCreatedAt.js.map
@@ -1,2 +1,2 @@
1
1
  import t from"/kempo-ui/components/LightComponent.js";export default class e extends t{static properties={userId:{type:String,attribute:"user-id",reflect:!0}};constructor(){super(),this.userId=""}updated(t){super.updated?.(t),t.has("userId")&&this.userId&&this.load()}async load(){try{const t=await fetch(`/kempo/api/user/${this.userId}/name`);if(!t.ok)return;const{name:e}=await t.json();this.textContent=e||this.userId}catch{this.textContent=this.userId}}renderLightDom(){return this.userId}}customElements.define("k-user-display-name",e);
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\UserDisplayName.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\UserDisplayName.js.map
@@ -1,2 +1,2 @@
1
1
  import e from"/kempo-ui/components/LightComponent.js";import{getSession as t}from"../sdk.js";export default class o extends e{connectedCallback(){super.connectedCallback(),this.loadUserEmail()}async loadUserEmail(){const[e,o]=await t();if(e)return console.error("Failed to load user email:",e.msg),void(this.textContent="");this.textContent=o?.user?.email||""}renderLightDom(){return"Loading..."}}customElements.define("k-user-email",o);
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\UserEmail.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\UserEmail.js.map
@@ -1,2 +1,2 @@
1
1
  import e from"/kempo-ui/components/LightComponent.js";import{getSession as t}from"../sdk.js";export default class i extends e{connectedCallback(){super.connectedCallback(),this.loadEmailVerified()}async loadEmailVerified(){const[e,i]=await t();if(e)return console.error("Failed to load email verified status:",e.msg),void(this.textContent="");this.textContent=i?.user?.emailVerified?"Yes":"No"}renderLightDom(){return"Loading..."}}customElements.define("k-user-email-verified",i);
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\UserEmailVerified.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\UserEmailVerified.js.map
@@ -1,2 +1,2 @@
1
1
  import e from"/kempo-ui/components/LightComponent.js";import{getSession as t}from"../sdk.js";export default class o extends e{connectedCallback(){super.connectedCallback(),this.loadUserName()}async loadUserName(){const[e,o]=await t();if(e)return console.error("Failed to load user name:",e.msg),void(this.textContent="");this.textContent=o?.user?.name||""}renderLightDom(){return"Loading..."}}customElements.define("k-user-name",o);
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\components\UserName.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\components\UserName.js.map
@@ -1,2 +1,2 @@
1
1
  const e=new Map,t=async(t,a)=>{const r=((e,t={})=>`${t.method||"GET"}:${e}:${t.body||""}`)(t,a);if(e.has(r)){const t=e.get(r);return new Promise((e,a)=>{t.callbacks.add({resolve:e,reject:a})}).then(async e=>{if(!e.ok){let t;try{t=await e.json()}catch(t){return[{code:e.status,msg:"Service temporarily unavailable. Please try again later."},null]}return[{code:e.status,msg:t.error||t.message||"An error occurred",...t.details?{details:t.details}:{}},null]}try{return[null,await e.json()]}catch(e){return[{code:500,msg:"Service temporarily unavailable. Please try again later."},null]}})}const n=new Set,o=fetch(t,a).then(t=>(n.forEach(({resolve:e})=>e(t.clone())),e.delete(r),t)).catch(t=>{throw n.forEach(({reject:e})=>e(t)),e.delete(r),t});e.set(r,{fetchPromise:o,callbacks:n});try{const e=await o;if(!e.ok){let t;try{t=await e.json()}catch(t){return[{code:e.status,msg:"Service temporarily unavailable. Please try again later."},null]}return[{code:e.status,msg:t.error||t.message||"An error occurred",...t.details?{details:t.details}:{}},null]}try{return[null,await e.json()]}catch(e){return[{code:500,msg:"Service temporarily unavailable. Please try again later."},null]}}catch(e){return"Service temporarily unavailable. Please try again later."===e.message||e.message.includes("Failed to fetch")?[{code:503,msg:"Service temporarily unavailable. Please try again later."},null]:[{code:500,msg:e.message||"An error occurred"},null]}};export const get=(e,a)=>{if(a){const r=Object.entries(a).filter(([,e])=>null!=e);if(r.length){const a=r.map(([e,t])=>Array.isArray(t)?`${encodeURIComponent(e)}=${t.map(e=>encodeURIComponent(e)).join(",")}`:`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&");return t(`${e}?${a}`,{method:"GET"})}}return t(e,{method:"GET"})};export const post=(e,a)=>t(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});export const put=(e,a)=>t(e,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});export const patch=(e,a)=>t(e,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});export const del=(e,a)=>t(e,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\fetch.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\fetch.js.map
@@ -1,2 +1,2 @@
1
1
  const e=1001,t=async()=>{try{const e=await fetch("/kempo/api/auth/session");if(!e.ok)return!0;const t=await e.json();return Boolean(t.user)}catch(e){return!0}};export class RealtimeClient{#e;#t;#s;#i;#n;#r;#o=null;#a="idle";#d=0;#c=null;#h=!1;#l=new Map;#u={status:new Set,ready:new Set,direct:new Set};#p=new Map;#f=1;userId=null;constructor({url:e,WebSocket:s=globalThis.WebSocket,checkSession:i=t,backoff:n={},random:r=Math.random}={}){this.#e=e,this.#t=s,this.#s=i,this.#i=n.base??1e3,this.#n=n.max??3e4,this.#r=r}get status(){return this.#a}onStatus=e=>(this.#u.status.add(e),()=>this.#u.status.delete(e));onReady=e=>(this.#u.ready.add(e),this.userId&&e(this.userId),()=>this.#u.ready.delete(e));onDirect=e=>(this.#u.direct.add(e),()=>this.#u.direct.delete(e));send=(e,t,{timeout:s=1e4}={})=>new Promise((i,n)=>{if(1!==this.#o?.readyState)return void n({code:503,msg:"Not connected"});const r=this.#f++,o=setTimeout(()=>{this.#p.delete(r),n({code:504,msg:"No reply from the server"})},s);this.#p.set(r,{resolve:i,reject:n,timer:o}),this.#m({type:"send",channel:e,data:t,ref:r})});subscribe=(e,t,{since:s,onGap:i,onError:n,onSubscribed:r}={})=>{let o=this.#l.get(e);return o||(o={handlers:new Set,gapHandlers:new Set,errorHandlers:new Set,subscribedHandlers:new Set,lastId:s??null,failed:!1,confirmed:!1},this.#l.set(e,o)),o.handlers.add(t),i&&o.gapHandlers.add(i),n&&o.errorHandlers.add(n),r&&o.subscribedHandlers.add(r),1===o.handlers.size?this.#b(e,o):r&&o.confirmed&&queueMicrotask(()=>this.#y(()=>r({channel:e}))),()=>{o.handlers.delete(t),i&&o.gapHandlers.delete(i),n&&o.errorHandlers.delete(n),r&&o.subscribedHandlers.delete(r),o.handlers.size||(this.#l.delete(e),this.#m({type:"unsubscribe",channel:e}))}};start=()=>{this.#o||this.#h||this.#g()};close=()=>{this.#h=!0,clearTimeout(this.#c),this.#c=null,this.#S({code:503,msg:"Client closed"}),this.#k("closed"),this.#o?.close(1e3),this.#o=null};#g=()=>{this.#k(this.#d>0?"reconnecting":"connecting");let e=!1,t=!1;const s=new this.#t(this.#e??`${"https:"===location.protocol?"wss:":"ws:"}//${location.host}/kempo/api/realtime`);this.#o=s;const i=i=>{t||(t=!0,this.#o===s&&(this.#o=null),this.#S({code:503,msg:"Connection lost"}),this.#w(i,e))};s.addEventListener("open",()=>{e=!0,this.#d=0,this.#k("open");for(const[e,t]of this.#l)t.confirmed=!1,this.#b(e,t)}),s.addEventListener("message",e=>this.#v(e.data)),s.addEventListener("close",e=>i(e.code)),s.addEventListener("error",()=>{e||i(1006)})};#w=async(t,s)=>{if(this.#h)return;if(4401===t)return this.#h=!0,void this.#k("unauthenticated");if(4429===t)return this.#h=!0,void this.#k("refused");if(!s&&t!==e){const e=await this.#s();if(this.#h)return;if(!1===e)return this.#h=!0,void this.#k("unauthenticated")}this.#k("reconnecting"),this.#d+=t===e?0:1;const i=Math.min(this.#n,this.#i*2**Math.max(0,this.#d-1)),n=t===e?Math.min(250,this.#i):i*(.5+.5*this.#r());this.#c=setTimeout(()=>{this.#c=null,this.#h||this.#g()},n)};#b=(e,t)=>{if(t.failed)return;const s={type:"subscribe",channel:e};null!==t.lastId&&(s.since=t.lastId),this.#m(s)};#m=e=>{1===this.#o?.readyState&&this.#o.send(JSON.stringify(e))};#v=e=>{let t;try{t=JSON.parse(e)}catch(e){return}if("ready"===t.type){this.userId=t.userId;for(const e of this.#u.ready)e(t.userId);return}if("direct"===t.type){for(const e of this.#u.direct)this.#y(()=>e(t.data));return}if(("ack"===t.type||"error"===t.type)&&void 0!==t.ref){const e=this.#p.get(t.ref);if(!e)return;return this.#p.delete(t.ref),clearTimeout(e.timer),void("ack"===t.type?e.resolve(t.data):e.reject({code:t.code,msg:t.msg}))}const s=this.#l.get(t.channel);if(s)if("subscribed"!==t.type)if("message"!==t.type)if("gap"!==t.type){if("error"===t.type){s.failed=!0;for(const e of s.errorHandlers)this.#y(()=>e({channel:t.channel,code:t.code,msg:t.msg}))}}else for(const e of s.gapHandlers)this.#y(()=>e({channel:t.channel}));else{void 0!==t.id&&(s.lastId=t.id);for(const e of s.handlers)this.#y(()=>e(t.data,{channel:t.channel,id:t.id}))}else{s.confirmed=!0;for(const e of s.subscribedHandlers)this.#y(()=>e({channel:t.channel}))}};#S=e=>{for(const[t,s]of this.#p)clearTimeout(s.timer),s.reject(e),this.#p.delete(t)};#y=e=>{try{e()}catch(e){console.error("[kempo realtime] a handler threw:",e)}};#k=e=>{if(this.#a!==e){this.#a=e;for(const t of this.#u.status)this.#y(()=>t(e))}}}export const connect=e=>{const t=new RealtimeClient(e);return t.start(),t};
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\realtime.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\realtime.js.map
package/dist/kempo/sdk.js CHANGED
@@ -1,2 +1,2 @@
1
1
  import{get as e,post as s,put as t,patch as n,del as o}from"./fetch.js";const a="/kempo/api";export const register=async({email:e,password:t,name:n})=>s(`${a}/auth/register/email`,{email:e,password:t,name:n});export const login=async({email:e,password:t})=>s(`${a}/auth/login/email`,{email:e,password:t});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:t,logoutAll:n=!1})=>s(`${a}/auth/reset-password`,{token:e,newPassword:t,logoutAll:n});export const changePassword=async({currentPassword:e,newPassword:t,logoutAll:n})=>s(`${a}/auth/change-password`,{currentPassword:e,newPassword:t,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:t})=>e(`${a}/user/${s}/permissions`,{permission:t});export const userHasAllPermissions=async({userid:s,permissions:t})=>e(`${a}/user/${s}/permissions/all`,{permissions:t});export const userHasSomePermissions=async({userid:s,permissions:t})=>e(`${a}/user/${s}/permissions/some`,{permissions:t});export const getAllUserPermissions=async({userid:s})=>e(`${a}/user/${s}/permissions/list`);export const getUsers=async({limit:s,offset:t}={})=>e(`${a}/user`,{limit:s,offset:t});export const searchUsers=async({q:s,limit:t,offset:n,inGroup:o,notInGroup:i}={})=>e(`${a}/user/search`,{q:s,limit:t,offset:n,inGroup:o,notInGroup:i});export const createUser=async({name:e,email:t,password:n,emailVerified:o})=>s(`${a}/user/create`,{name:e,email:t,password:n,emailVerified:o});export const deleteUsers=async e=>o(`${a}/user`,{ids:e});export const updateUser=async({id:e,name:s,email:t,emailVerified:o,createdAt:i})=>n(`${a}/user`,{id:e,name:s,email:t,emailVerified:o,createdAt:i});export const getUser=async s=>e(`${a}/user/${s}`);export const getUserSessions=async(s,{limit:t,offset:n}={})=>e(`${a}/user/${s}/sessions`,{limit:t,offset:n});export const deleteUserSession=async(e,s)=>o(`${a}/user/${e}/sessions`,{sessionToken:s});export const deleteExpiredUserSessions=async e=>o(`${a}/user/${e}/sessions/expired`);export const getUserGroups=async(s,{limit:t,offset:n}={})=>e(`${a}/user/${s}/groups`,{limit:t,offset:n});export const addUserToGroup=async(e,t)=>s(`${a}/user/${e}/groups`,{groupName:t});export const removeUserFromGroup=async(e,s)=>o(`${a}/user/${e}/groups`,{groupName:s});export const listGroups=async({limit:s,offset:t,owner:n}={})=>e(`${a}/groups`,{limit:s,offset:t,owner:n});export const createGroup=async({name:e,description:t})=>s(`${a}/groups`,{name:e,description:t});export const updateGroup=async({name:e,newName:s,description:t})=>n(`${a}/groups`,{name:e,newName:s,description:t});export const deleteGroups=async e=>o(`${a}/groups`,{names:e});export const getGroup=async s=>e(`${a}/groups/${encodeURIComponent(s)}`);export const getGroupMembers=async(s,{limit:t,offset:n}={})=>e(`${a}/groups/${encodeURIComponent(s)}/members`,{limit:t,offset:n});export const addMemberToGroup=async(e,t)=>s(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:t});export const removeMemberFromGroup=async(e,s)=>o(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:s});export const getGroupPermissions=async s=>e(`${a}/groups/${encodeURIComponent(s)}/permissions`);export const addPermissionToGroup=async(e,t)=>s(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:t});export const removePermissionFromGroup=async(e,s)=>o(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:s});export const listPermissions=async({limit:s,offset:t,owner:n}={})=>e(`${a}/permissions`,{limit:s,offset:t,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=>o(`${a}/permissions`,{names:e});export const getSetting=async(s,t)=>e(`${a}/settings/${encodeURIComponent(s)}/${encodeURIComponent(t)}`);export const listSettings=async({owner:s,limit:t,offset:n}={})=>e(`${a}/settings/${encodeURIComponent(s)}`,{limit:t,offset:n});export const setSetting=async(e,t,n)=>s(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(t)}`,n);export const deleteSetting=async(e,s)=>o(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(s)}`);export const listEmails=async({status:s,type:t,search:n,limit:o,offset:i}={})=>e(`${a}/emails`,{status:s,type:t,search:n,limit:o,offset:i});export const getEmail=async s=>e(`${a}/emails/${encodeURIComponent(s)}`);export const retryEmail=async e=>s(`${a}/emails/${encodeURIComponent(e)}/retry`,{});export const sendTestEmail=async e=>s(`${a}/emails/test`,{to:e});export const getUpdateStatus=async()=>e(`${a}/updates`);export const checkForUpdate=async()=>s(`${a}/updates/check`,{});export const prepareUpdate=async({version:e,extensions:t}={})=>s(`${a}/updates/prepare`,{version:e,extensions:t});export const applyUpdate=async({version:e,extensions:t,confirm:n}={})=>s(`${a}/updates/apply`,{version:e,extensions:t,confirm:n});export const rollbackUpdate=async e=>s(`${a}/updates/rollback`,{confirm:e});export const discardUpdate=async()=>s(`${a}/updates/discard`,{});export const listPages=async({owner:s,showHidden:t,offset:n,limit:o}={})=>e(`${a}/pages`,{owner:s,showHidden:t,offset:n,limit:o});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:t,template:n})=>s(`${a}/pages`,{directory:e,name:t,template:n});export const updatePage=async({file:e,name:s,title:n,description:o,author:i,template:r,contents:c,extraMetadata:p})=>t(`${a}/pages/file`,{file:e,name:s,title:n,description:o,author:i,template:r,contents:c,extraMetadata:p});export const deletePages=async e=>o(`${a}/pages`,{files:e});export const disablePage=async e=>t(`${a}/pages/disable`,{file:e});export const enablePage=async e=>t(`${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})=>t(`${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:t,copyFrom:n})=>s(`${a}/templates`,{directory:e,name:t,copyFrom:n});export const updateTemplate=async({file:e,name:s,author:n,markup:o})=>t(`${a}/templates/file`,{file:e,name:s,author:n,markup:o});export const deleteTemplates=async e=>o(`${a}/templates`,{files:e});export const listEmailTemplates=async s=>e(`${a}/email-templates`,s?{owner:s}:{});export const getEmailTemplate=async s=>e(`${a}/email-templates/file`,{template:s});export const saveEmailTemplate=async({template:e,source:s})=>t(`${a}/email-templates/file`,{template:e,source:s});export const resetEmailTemplate=async e=>o(`${a}/email-templates/file`,{template:e});export const disableTemplate=async e=>t(`${a}/templates/disable`,{file:e});export const enableTemplate=async e=>t(`${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})=>t(`${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:t})=>s(`${a}/fragments`,{directory:e,name:t});export const updateFragment=async({file:e,author:s,markup:n})=>t(`${a}/fragments/file`,{file:e,author:s,markup:n});export const deleteFragments=async e=>o(`${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=>t(`${a}/fragments/disable`,{file:e});export const enableFragment=async e=>t(`${a}/fragments/enable`,{file:e});export const setFragmentLocked=async({file:e,locked:s})=>t(`${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:t,priority:n})=>s(`${a}/globals`,{name:e,location:t,priority:n});export const updateGlobalContent=async({id:e,name:s,location:n,priority:o,markup:i})=>t(`${a}/globals/entry`,{id:e,name:s,location:n,priority:o,markup:i});export const deleteGlobalContent=async e=>o(`${a}/globals`,{ids:e});export const disableGlobalContent=async e=>t(`${a}/globals/disable`,{id:e});export const enableGlobalContent=async e=>t(`${a}/globals/enable`,{id:e});export const setGlobalContentLocked=async({id:e,locked:s})=>t(`${a}/globals/lock`,{id:e,locked:s});export const listMenus=async()=>e(`${a}/menus`);export const saveMenu=async({id:e,name:t})=>s(`${a}/menus`,{id:e,name:t});export const deleteMenu=async e=>o(`${a}/menus`,{id:e});export const assignMenuLocation=async({location:e,menuId:s})=>t(`${a}/menus/location`,{location:e,menuId:s});export const saveMenuItem=async({id:e,menuId:t,location:n,navItem:o,label:i,href:r,icon:c,newTab:p})=>s(`${a}/menus/items`,{id:e,menuId:t,location:n,navItem:o,label:i,href:r,icon:c,newTab:p});export const deleteMenuItems=async e=>o(`${a}/menus/items`,{ids:e});export const setMenuItemEnabled=async({id:e,enabled:s})=>t(`${a}/menus/items/enabled`,{id:e,enabled:s});export const reorderMenuItems=async({menuId:e,ids:s})=>t(`${a}/menus/items/order`,{menuId:e,ids:s});export const adoptMenuItem=async({id:e,menuId:s,menuName:n})=>t(`${a}/menus/adopt`,{id:e,menuId:s,menuName:n});export const listExtensions=async({limit:s,offset:t}={})=>e(`${a}/extensions`,{limit:s,offset:t});export const listAvailableExtensions=async()=>e(`${a}/extensions/available`);export const listKnownExtensions=async({search:s,sort:t,limit:n,offset:o}={})=>e(`${a}/extensions/known`,{search:s,sort:t,limit:n,offset:o});export const getKnownExtension=async s=>e(`${a}/extensions/known`,{name:s});export const rateExtension=async(e,s)=>t(`${a}/extensions/rating`,{name:e,rating:s});export const getDashboardWidgets=async()=>e(`${a}/dashboard/widgets`);export const getNotifications=async({unreadOnly:s=!1,limit:t,offset:n}={})=>e(`${a}/notifications`,{unreadOnly:s,limit:t,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=>o(`${a}/notifications/${encodeURIComponent(e)}`);export const listRealtimeConnections=async()=>e(`${a}/realtime/connections`);export const installExtension=async(e,{withDependencies:t=!1}={})=>s(`${a}/extensions`,{name:e,withDependencies:t});export const uninstallExtension=async(e,s=!1,{cascade:t=!1}={})=>o(`${a}/extensions`,{name:e,purgeData:s,cascade:t});export const enableExtension=async(e,{cascade:t=!1}={})=>s(`${a}/extensions/${encodeURIComponent(e)}/enable`,{cascade:t});export const getExtensionRequirements=async s=>e(`${a}/extensions/${encodeURIComponent(s)}/requirements`);export const disableExtension=async(e,{cascade:t=!1}={})=>s(`${a}/extensions/${encodeURIComponent(e)}/disable`,{cascade:t});export const getExtensionDependents=async(s,{includeDisabled:t=!1}={})=>e(`${a}/extensions/${encodeURIComponent(s)}/dependents`,{includeDisabled:t?"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:t,priority:n,owner:o,markup:i})=>s(`${a}/admin-globals`,{name:e,location:t,priority:n,owner:o,markup:i});export const updateAdminGlobalContent=async(e,{name:s,location:n,priority:o,markup:i})=>t(`${a}/admin-globals/${encodeURIComponent(e)}`,{name:s,location:n,priority:o,markup:i});export const deleteAdminGlobalContent=async e=>o(`${a}/admin-globals`,{ids:e});export const enableAdminGlobalContent=async e=>t(`${a}/admin-globals/${encodeURIComponent(e)}/enable`,{});export const disableAdminGlobalContent=async e=>t(`${a}/admin-globals/${encodeURIComponent(e)}/disable`,{});
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\sdk.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\sdk.js.map
@@ -1,2 +1,2 @@
1
1
  export default t=>"string"!=typeof t||t.length>2048||!t.startsWith("/")||t.startsWith("//")||/[\\\u0000-\u001f\u007f]/.test(t)?"":t;
2
- //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\utils\safeNext.js.map
2
+ //# sourceMappingURL=c:\Users\dusti\dev\kempo\dist\kempo\utils\safeNext.js.map
@@ -60,7 +60,7 @@ if(seedSite({ siteRoot, seed })) say('First start: the site was copied onto the
60
60
 
61
61
  const switched = performSwitch(siteRoot);
62
62
  if(switched){
63
- say(`Kempo ${switched.from.version} -> ${switched.version}.`);
63
+ say(switched.kind === 'update' && switched.packages?.length ? `Switched to ${switched.packages.join(', ')}.` : `Kempo ${switched.from.version} -> ${switched.version}.`);
64
64
  if(switched.kind === 'rollback'){
65
65
  restoreFiles({ siteRoot, backup: switched.filesBackup });
66
66
  if(switched.dbBackup){
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kempo",
3
- "version": "4.9.0",
3
+ "version": "4.9.2",
4
4
  "type": "module",
5
5
  "description": "A fullstack CMS framework for creating websites with user authentication",
6
6
  "scripts": {