kempo 4.2.20 → 4.2.21

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 (83) hide show
  1. package/bin/cli.js +4 -21
  2. package/dist/admin/accounts/groups/[name]/index.page.html +24 -24
  3. package/dist/admin/accounts/groups/index.page.html +30 -30
  4. package/dist/admin/accounts/permissions/index.page.html +30 -30
  5. package/dist/admin/accounts/users/[id]/index.page.html +17 -17
  6. package/dist/admin/accounts/users/index.page.html +18 -18
  7. package/dist/admin/components/AddGroupControl.js +1 -5
  8. package/dist/admin/components/AddGroupControl.js.map +1 -1
  9. package/dist/admin/components/AdminTableControl.js +2 -0
  10. package/dist/admin/components/AdminTableControl.js.map +1 -0
  11. package/dist/admin/components/ClearExpiredSessionsControl.js +1 -5
  12. package/dist/admin/components/ClearExpiredSessionsControl.js.map +1 -1
  13. package/dist/admin/components/GroupDeleteSelected.js +1 -5
  14. package/dist/admin/components/GroupDeleteSelected.js.map +1 -1
  15. package/dist/admin/components/GroupRemoveRecord.js +1 -5
  16. package/dist/admin/components/GroupRemoveRecord.js.map +1 -1
  17. package/dist/admin/components/TableRowDelete.js +1 -3
  18. package/dist/admin/components/TableRowDelete.js.map +1 -1
  19. package/dist/admin/components/TableRowLink.js +1 -7
  20. package/dist/admin/components/TableRowLink.js.map +1 -1
  21. package/dist/admin/components/tableControls/AddMember.js +1 -5
  22. package/dist/admin/components/tableControls/AddMember.js.map +1 -1
  23. package/dist/admin/components/tableControls/AddPermission.js +1 -5
  24. package/dist/admin/components/tableControls/AddPermission.js.map +1 -1
  25. package/dist/admin/components/tableControls/InstallExtension.js +1 -5
  26. package/dist/admin/components/tableControls/InstallExtension.js.map +1 -1
  27. package/dist/admin/components/tableControls/UninstallExtension.js +1 -5
  28. package/dist/admin/components/tableControls/UninstallExtension.js.map +1 -1
  29. package/dist/admin/content/fragments/index.page.html +28 -28
  30. package/dist/admin/content/globals/index.page.html +28 -28
  31. package/dist/admin/content/pages/index.page.html +28 -28
  32. package/dist/admin/content/templates/index.page.html +28 -28
  33. package/dist/admin/extensions/index.page.html +18 -18
  34. package/dist/admin/init.js.map +1 -1
  35. package/dist/admin/settings/index.page.html +30 -30
  36. package/dist/kempo/api/admin-globals/DELETE.js +1 -1
  37. package/dist/kempo/api/admin-globals/DELETE.js.map +1 -1
  38. package/dist/kempo/api/admin-globals/GET.js +1 -1
  39. package/dist/kempo/api/admin-globals/GET.js.map +1 -1
  40. package/dist/kempo/api/admin-globals/POST.js +1 -1
  41. package/dist/kempo/api/admin-globals/POST.js.map +1 -1
  42. package/dist/kempo/api/admin-globals/[id]/GET.js +1 -1
  43. package/dist/kempo/api/admin-globals/[id]/GET.js.map +1 -1
  44. package/dist/kempo/api/admin-globals/[id]/PUT.js +1 -1
  45. package/dist/kempo/api/admin-globals/[id]/PUT.js.map +1 -1
  46. package/dist/kempo/api/admin-globals/[id]/disable/PUT.js +1 -1
  47. package/dist/kempo/api/admin-globals/[id]/disable/PUT.js.map +1 -1
  48. package/dist/kempo/api/admin-globals/[id]/enable/PUT.js +1 -1
  49. package/dist/kempo/api/admin-globals/[id]/enable/PUT.js.map +1 -1
  50. package/dist/kempo/api/extensions/DELETE.js +1 -1
  51. package/dist/kempo/api/extensions/DELETE.js.map +1 -1
  52. package/dist/kempo/api/extensions/POST.js +1 -1
  53. package/dist/kempo/api/extensions/POST.js.map +1 -1
  54. package/dist/kempo/api/extensions/[name]/disable/POST.js +1 -1
  55. package/dist/kempo/api/extensions/[name]/disable/POST.js.map +1 -1
  56. package/dist/kempo/api/extensions/[name]/enable/POST.js +1 -1
  57. package/dist/kempo/api/extensions/[name]/enable/POST.js.map +1 -1
  58. package/dist/kempo/api/extensions/[name]/update/POST.js +1 -1
  59. package/dist/kempo/api/extensions/[name]/update/POST.js.map +1 -1
  60. package/dist/kempo/api/extensions/[name]/update-check/GET.js +1 -1
  61. package/dist/kempo/api/extensions/[name]/update-check/GET.js.map +1 -1
  62. package/dist/kempo/api/pages/search/GET.js +1 -1
  63. package/dist/kempo/api/pages/search/GET.js.map +1 -1
  64. package/dist/kempo/api/user/[userid]/name/GET.js +2 -0
  65. package/dist/kempo/api/user/[userid]/name/GET.js.map +1 -0
  66. package/dist/kempo/components/UserDisplayName.js +2 -0
  67. package/dist/kempo/components/UserDisplayName.js.map +1 -0
  68. package/dist/kempo/sdk.js +1 -1
  69. package/dist/kempo/sdk.js.map +1 -1
  70. package/middleware/kempo.js +70 -45
  71. package/package.json +15 -8
  72. package/server/utils/admin-global-content/createAdminGlobalContent.js +4 -3
  73. package/server/utils/admin-global-content/deleteAdminGlobalContent.js +2 -2
  74. package/server/utils/admin-global-content/deleteAdminGlobalContentByOwner.js +2 -2
  75. package/server/utils/admin-global-content/disableAdminGlobalContent.js +2 -2
  76. package/server/utils/admin-global-content/enableAdminGlobalContent.js +2 -2
  77. package/server/utils/admin-global-content/getAdminGlobalContent.js +2 -2
  78. package/server/utils/admin-global-content/helpers.js +12 -1
  79. package/server/utils/admin-global-content/listAdminGlobalContent.js +2 -2
  80. package/server/utils/admin-global-content/updateAdminGlobalContent.js +2 -2
  81. package/server/utils/email/sendEmail.js +9 -3
  82. package/server/utils/extensions/uninstallExtension.js +54 -21
  83. package/server/utils/hooks/triggerHook.js +8 -1
@@ -1,2 +1,2 @@
1
- import s from"../../../../server/utils/permissions/currentUserHasPermission.js";export default async(e,t)=>{const r=e.cookies.session_token,[n,o]=await s(r,"system:extensions:install");if(n)return t.status(n.code).json({error:n.msg});if(!o)return t.status(403).json({error:"Insufficient permissions"});const{name:i}=e.body,{default:a}=await import("../../../../server/utils/extensions/installExtension.js"),[u,m]=await a({name:i});if(u)return t.status(u.code).json({error:u.msg});t.json(m)};
1
+ import s from"../../../../server/utils/permissions/currentUserHasPermission.js";export default async(e,t)=>{const r=e.cookies.session_token,[n,o]=await s(r,"system:extensions:install");if(n)return t.status(n.code).json({error:n.msg});if(!o)return t.status(403).json({error:"Insufficient permissions"});const{name:i}=e.body,{default:a}=await(import("../../../../server/utils/extensions/installExtension.js")),[u,m]=await a({name:i});if(u)return t.status(u.code).json({error:u.msg});t.json(m)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\extensions\POST.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\extensions\\POST.js","names":["currentUserHasPermission","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","name","body","default","installExtension","import","data"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../server/utils/permissions/currentUserHasPermission.js';\r\n\r\nexport default async (request, response) => {\r\n const token = request.cookies.session_token;\r\n const [permError, hasPermission] = await currentUserHasPermission(token, 'system:extensions:install');\r\n\r\n if(permError){\r\n return response.status(permError.code).json({ error: permError.msg });\r\n }\r\n\r\n if(!hasPermission){\r\n return response.status(403).json({ error: 'Insufficient permissions' });\r\n }\r\n\r\n const { name } = request.body;\r\n const { default: installExtension } = await import('../../../../server/utils/extensions/installExtension.js');\r\n const [error, data] = await installExtension({ name });\r\n\r\n if(error){\r\n return response.status(error.code).json({ error: error.msg });\r\n }\r\n\r\n response.json(data);\r\n};\r\n"],"mappings":"OAAOA,MAA8B,kFAEtBC,MAAOC,EAASC,KAC7B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBR,EAAyBI,EAAO,6BAEzE,GAAGG,EACD,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGjE,IAAIL,EACF,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG5C,MAAME,KAAEA,GAASZ,EAAQa,MACjBC,QAASC,SAA2BC,OAAO,4DAC5CN,EAAOO,SAAcF,EAAiB,CAAEH,SAE/C,GAAGF,EACD,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGzDV,EAASQ,KAAKQ","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\extensions\\POST.js","names":["currentUserHasPermission","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","name","body","default","installExtension","data"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../server/utils/permissions/currentUserHasPermission.js';\r\n\r\nexport default async (request, response) => {\r\n const token = request.cookies.session_token;\r\n const [permError, hasPermission] = await currentUserHasPermission(token, 'system:extensions:install');\r\n\r\n if(permError){\r\n return response.status(permError.code).json({ error: permError.msg });\r\n }\r\n\r\n if(!hasPermission){\r\n return response.status(403).json({ error: 'Insufficient permissions' });\r\n }\r\n\r\n const { name } = request.body;\r\n const { default: installExtension } = await import('../../../../server/utils/extensions/installExtension.js');\r\n const [error, data] = await installExtension({ name });\r\n\r\n if(error){\r\n return response.status(error.code).json({ error: error.msg });\r\n }\r\n\r\n response.json(data);\r\n};\r\n"],"mappings":"OAAOA,MAA8B,kFAEtBC,MAAOC,EAASC,KAC7B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBR,EAAyBI,EAAO,6BAEzE,GAAGG,EACD,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGjE,IAAIL,EACF,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG5C,MAAME,KAAEA,GAASZ,EAAQa,MACjBC,QAASC,gBAAkC,6DAC5CL,EAAOM,SAAcD,EAAiB,CAAEH,SAE/C,GAAGF,EACD,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGzDV,EAASQ,KAAKO","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/extensions/disableExtension.js";export default async(r,n)=>{const o=r.cookies.session_token,[t,i]=await s(o,"system:extensions:manage");if(t)return n.status(t.code).json({error:t.msg});if(!i)return n.status(403).json({error:"Insufficient permissions"});const a=r.params.name,[m,u]=await e({name:a});if(m)return n.status(m.code).json({error:m.msg});n.json(u)};
1
+ import s from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../../server/utils/extensions/disableExtension.js";export default async(r,n)=>{const o=r.cookies.session_token,[t,i]=await s(o,"system:extensions:manage");if(t)return n.status(t.code).json({error:t.msg});if(!i)return n.status(403).json({error:"Insufficient permissions"});const a=r.params.name,[m,u]=await e({name:a});if(m)return n.status(m.code).json({error:m.msg});n.json(u)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\extensions\[name]\disable\POST.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\extensions\\[name]\\disable\\POST.js","names":["currentUserHasPermission","disableExtension","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","name","params","data"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport disableExtension from '../../../../../server/utils/extensions/disableExtension.js';\r\n\r\nexport default async (request, response) => {\r\n const token = request.cookies.session_token;\r\n const [permError, hasPermission] = await currentUserHasPermission(token, 'system:extensions:manage');\r\n\r\n if(permError){\r\n return response.status(permError.code).json({ error: permError.msg });\r\n }\r\n\r\n if(!hasPermission){\r\n return response.status(403).json({ error: 'Insufficient permissions' });\r\n }\r\n\r\n const name = request.params.name;\r\n const [error, data] = await disableExtension({ name });\r\n\r\n if(error){\r\n return response.status(error.code).json({ error: error.msg });\r\n }\r\n\r\n response.json(data);\r\n};\r\n"],"mappings":"OAAOA,MAA8B,6EAC9BC,MAAsB,4EAEdC,MAAOC,EAASC,KAC7B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBT,EAAyBK,EAAO,4BAEzE,GAAGG,EACD,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGjE,IAAIL,EACF,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG5C,MAAME,EAAOZ,EAAQa,OAAOD,MACrBF,EAAOI,SAAchB,EAAiB,CAAEc,SAE/C,GAAGF,EACD,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGzDV,EAASQ,KAAKK","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\extensions\\[name]\\disable\\POST.js","names":["currentUserHasPermission","disableExtension","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","name","params","data"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport disableExtension from '../../../../../../server/utils/extensions/disableExtension.js';\r\n\r\nexport default async (request, response) => {\r\n const token = request.cookies.session_token;\r\n const [permError, hasPermission] = await currentUserHasPermission(token, 'system:extensions:manage');\r\n\r\n if(permError){\r\n return response.status(permError.code).json({ error: permError.msg });\r\n }\r\n\r\n if(!hasPermission){\r\n return response.status(403).json({ error: 'Insufficient permissions' });\r\n }\r\n\r\n const name = request.params.name;\r\n const [error, data] = await disableExtension({ name });\r\n\r\n if(error){\r\n return response.status(error.code).json({ error: error.msg });\r\n }\r\n\r\n response.json(data);\r\n};\r\n"],"mappings":"OAAOA,MAA8B,gFAC9BC,MAAsB,+EAEdC,MAAOC,EAASC,KAC7B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBT,EAAyBK,EAAO,4BAEzE,GAAGG,EACD,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGjE,IAAIL,EACF,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG5C,MAAME,EAAOZ,EAAQa,OAAOD,MACrBF,EAAOI,SAAchB,EAAiB,CAAEc,SAE/C,GAAGF,EACD,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGzDV,EAASQ,KAAKK","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/extensions/enableExtension.js";export default async(r,n)=>{const o=r.cookies.session_token,[t,i]=await s(o,"system:extensions:manage");if(t)return n.status(t.code).json({error:t.msg});if(!i)return n.status(403).json({error:"Insufficient permissions"});const a=r.params.name,[m,u]=await e({name:a});if(m)return n.status(m.code).json({error:m.msg});n.json(u)};
1
+ import s from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../../server/utils/extensions/enableExtension.js";export default async(r,n)=>{const o=r.cookies.session_token,[t,i]=await s(o,"system:extensions:manage");if(t)return n.status(t.code).json({error:t.msg});if(!i)return n.status(403).json({error:"Insufficient permissions"});const a=r.params.name,[m,u]=await e({name:a});if(m)return n.status(m.code).json({error:m.msg});n.json(u)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\extensions\[name]\enable\POST.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\extensions\\[name]\\enable\\POST.js","names":["currentUserHasPermission","enableExtension","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","name","params","data"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport enableExtension from '../../../../../server/utils/extensions/enableExtension.js';\r\n\r\nexport default async (request, response) => {\r\n const token = request.cookies.session_token;\r\n const [permError, hasPermission] = await currentUserHasPermission(token, 'system:extensions:manage');\r\n\r\n if(permError){\r\n return response.status(permError.code).json({ error: permError.msg });\r\n }\r\n\r\n if(!hasPermission){\r\n return response.status(403).json({ error: 'Insufficient permissions' });\r\n }\r\n\r\n const name = request.params.name;\r\n const [error, data] = await enableExtension({ name });\r\n\r\n if(error){\r\n return response.status(error.code).json({ error: error.msg });\r\n }\r\n\r\n response.json(data);\r\n};\r\n"],"mappings":"OAAOA,MAA8B,6EAC9BC,MAAqB,2EAEbC,MAAOC,EAASC,KAC7B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBT,EAAyBK,EAAO,4BAEzE,GAAGG,EACD,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGjE,IAAIL,EACF,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG5C,MAAME,EAAOZ,EAAQa,OAAOD,MACrBF,EAAOI,SAAchB,EAAgB,CAAEc,SAE9C,GAAGF,EACD,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGzDV,EAASQ,KAAKK","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\extensions\\[name]\\enable\\POST.js","names":["currentUserHasPermission","enableExtension","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","name","params","data"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport enableExtension from '../../../../../../server/utils/extensions/enableExtension.js';\r\n\r\nexport default async (request, response) => {\r\n const token = request.cookies.session_token;\r\n const [permError, hasPermission] = await currentUserHasPermission(token, 'system:extensions:manage');\r\n\r\n if(permError){\r\n return response.status(permError.code).json({ error: permError.msg });\r\n }\r\n\r\n if(!hasPermission){\r\n return response.status(403).json({ error: 'Insufficient permissions' });\r\n }\r\n\r\n const name = request.params.name;\r\n const [error, data] = await enableExtension({ name });\r\n\r\n if(error){\r\n return response.status(error.code).json({ error: error.msg });\r\n }\r\n\r\n response.json(data);\r\n};\r\n"],"mappings":"OAAOA,MAA8B,gFAC9BC,MAAqB,8EAEbC,MAAOC,EAASC,KAC7B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBT,EAAyBK,EAAO,4BAEzE,GAAGG,EACD,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGjE,IAAIL,EACF,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG5C,MAAME,EAAOZ,EAAQa,OAAOD,MACrBF,EAAOI,SAAchB,EAAgB,CAAEc,SAE9C,GAAGF,EACD,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGzDV,EAASQ,KAAKK","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/extensions/updateExtension.js";export default async(r,n)=>{const o=r.cookies.session_token,[t,i]=await s(o,"system:extensions:manage");if(t)return n.status(t.code).json({error:t.msg});if(!i)return n.status(403).json({error:"Insufficient permissions"});const a=r.params.name,m=r.body?.version||"latest",[u,c]=await e({name:a,version:m});if(u)return n.status(u.code).json({error:u.msg});n.json(c)};
1
+ import s from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../../server/utils/extensions/updateExtension.js";export default async(r,n)=>{const o=r.cookies.session_token,[t,i]=await s(o,"system:extensions:manage");if(t)return n.status(t.code).json({error:t.msg});if(!i)return n.status(403).json({error:"Insufficient permissions"});const a=r.params.name,m=r.body?.version||"latest",[u,c]=await e({name:a,version:m});if(u)return n.status(u.code).json({error:u.msg});n.json(c)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\extensions\[name]\update\POST.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\extensions\\[name]\\update\\POST.js","names":["currentUserHasPermission","updateExtension","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","name","params","version","body","data"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport updateExtension from '../../../../../server/utils/extensions/updateExtension.js';\r\n\r\nexport default async (request, response) => {\r\n const token = request.cookies.session_token;\r\n const [permError, hasPermission] = await currentUserHasPermission(token, 'system:extensions:manage');\r\n\r\n if(permError){\r\n return response.status(permError.code).json({ error: permError.msg });\r\n }\r\n\r\n if(!hasPermission){\r\n return response.status(403).json({ error: 'Insufficient permissions' });\r\n }\r\n\r\n const name = request.params.name;\r\n const version = request.body?.version || 'latest';\r\n const [error, data] = await updateExtension({ name, version });\r\n\r\n if(error){\r\n return response.status(error.code).json({ error: error.msg });\r\n }\r\n\r\n response.json(data);\r\n};\r\n"],"mappings":"OAAOA,MAA8B,6EAC9BC,MAAqB,2EAEbC,MAAOC,EAASC,KAC7B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBT,EAAyBK,EAAO,4BAEzE,GAAGG,EACD,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGjE,IAAIL,EACF,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG5C,MAAME,EAAOZ,EAAQa,OAAOD,KACtBE,EAAUd,EAAQe,MAAMD,SAAW,UAClCJ,EAAOM,SAAclB,EAAgB,CAAEc,OAAME,YAEpD,GAAGJ,EACD,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGzDV,EAASQ,KAAKO","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\extensions\\[name]\\update\\POST.js","names":["currentUserHasPermission","updateExtension","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","name","params","version","body","data"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport updateExtension from '../../../../../../server/utils/extensions/updateExtension.js';\r\n\r\nexport default async (request, response) => {\r\n const token = request.cookies.session_token;\r\n const [permError, hasPermission] = await currentUserHasPermission(token, 'system:extensions:manage');\r\n\r\n if(permError){\r\n return response.status(permError.code).json({ error: permError.msg });\r\n }\r\n\r\n if(!hasPermission){\r\n return response.status(403).json({ error: 'Insufficient permissions' });\r\n }\r\n\r\n const name = request.params.name;\r\n const version = request.body?.version || 'latest';\r\n const [error, data] = await updateExtension({ name, version });\r\n\r\n if(error){\r\n return response.status(error.code).json({ error: error.msg });\r\n }\r\n\r\n response.json(data);\r\n};\r\n"],"mappings":"OAAOA,MAA8B,gFAC9BC,MAAqB,8EAEbC,MAAOC,EAASC,KAC7B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBT,EAAyBK,EAAO,4BAEzE,GAAGG,EACD,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGjE,IAAIL,EACF,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG5C,MAAME,EAAOZ,EAAQa,OAAOD,KACtBE,EAAUd,EAAQe,MAAMD,SAAW,UAClCJ,EAAOM,SAAclB,EAAgB,CAAEc,OAAME,YAEpD,GAAGJ,EACD,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGzDV,EAASQ,KAAKO","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/extensions/checkExtensionUpdate.js";export default async(r,n)=>{const t=r.cookies.session_token,[o,i]=await s(t,"system:extensions:manage");if(o)return n.status(o.code).json({error:o.msg});if(!i)return n.status(403).json({error:"Insufficient permissions"});const a=r.params.name,[m,u]=await e({name:a});if(m)return n.status(m.code).json({error:m.msg});n.json(u)};
1
+ import s from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../../server/utils/extensions/checkExtensionUpdate.js";export default async(r,n)=>{const t=r.cookies.session_token,[o,i]=await s(t,"system:extensions:manage");if(o)return n.status(o.code).json({error:o.msg});if(!i)return n.status(403).json({error:"Insufficient permissions"});const a=r.params.name,[m,u]=await e({name:a});if(m)return n.status(m.code).json({error:m.msg});n.json(u)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\extensions\[name]\update-check\GET.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\extensions\\[name]\\update-check\\GET.js","names":["currentUserHasPermission","checkExtensionUpdate","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","name","params","data"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport checkExtensionUpdate from '../../../../../server/utils/extensions/checkExtensionUpdate.js';\r\n\r\nexport default async (request, response) => {\r\n const token = request.cookies.session_token;\r\n const [permError, hasPermission] = await currentUserHasPermission(token, 'system:extensions:manage');\r\n\r\n if(permError){\r\n return response.status(permError.code).json({ error: permError.msg });\r\n }\r\n\r\n if(!hasPermission){\r\n return response.status(403).json({ error: 'Insufficient permissions' });\r\n }\r\n\r\n const name = request.params.name;\r\n const [error, data] = await checkExtensionUpdate({ name });\r\n\r\n if(error){\r\n return response.status(error.code).json({ error: error.msg });\r\n }\r\n\r\n response.json(data);\r\n};\r\n"],"mappings":"OAAOA,MAA8B,6EAC9BC,MAA0B,gFAElBC,MAAOC,EAASC,KAC7B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBT,EAAyBK,EAAO,4BAEzE,GAAGG,EACD,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGjE,IAAIL,EACF,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG5C,MAAME,EAAOZ,EAAQa,OAAOD,MACrBF,EAAOI,SAAchB,EAAqB,CAAEc,SAEnD,GAAGF,EACD,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGzDV,EAASQ,KAAKK","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\extensions\\[name]\\update-check\\GET.js","names":["currentUserHasPermission","checkExtensionUpdate","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","name","params","data"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport checkExtensionUpdate from '../../../../../../server/utils/extensions/checkExtensionUpdate.js';\r\n\r\nexport default async (request, response) => {\r\n const token = request.cookies.session_token;\r\n const [permError, hasPermission] = await currentUserHasPermission(token, 'system:extensions:manage');\r\n\r\n if(permError){\r\n return response.status(permError.code).json({ error: permError.msg });\r\n }\r\n\r\n if(!hasPermission){\r\n return response.status(403).json({ error: 'Insufficient permissions' });\r\n }\r\n\r\n const name = request.params.name;\r\n const [error, data] = await checkExtensionUpdate({ name });\r\n\r\n if(error){\r\n return response.status(error.code).json({ error: error.msg });\r\n }\r\n\r\n response.json(data);\r\n};\r\n"],"mappings":"OAAOA,MAA8B,gFAC9BC,MAA0B,mFAElBC,MAAOC,EAASC,KAC7B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBT,EAAyBK,EAAO,4BAEzE,GAAGG,EACD,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGjE,IAAIL,EACF,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG5C,MAAME,EAAOZ,EAAQa,OAAOD,MACrBF,EAAOI,SAAchB,EAAqB,CAAEc,SAEnD,GAAGF,EACD,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGzDV,EAASQ,KAAKK","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{resolve as r,join as s}from"path";import e from"../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../server/utils/pages/searchByMetadata.js";const o=import.meta.dirname.includes("node_modules")?s(process.cwd(),"public"):r(import.meta.dirname,"../../../../app-public");export default async(r,s)=>{const a=r.cookies.session_token,[i,n]=await e(a,"system:pages:read");if(i)return s.status(i.code).json({error:i.msg});if(!n)return s.status(403).json({error:"Insufficient permissions"});const{query:u}=r.query;if(!u)return s.status(400).json({error:"query parameter is required"});let m;try{m=JSON.parse(u)}catch{return s.status(400).json({error:"query must be valid JSON"})}if("object"!=typeof m||Array.isArray(m)||!m)return s.status(400).json({error:"query must be a JSON object"});const[c,p]=await t({rootDir:o,query:m});if(c)return s.status(c.code).json({error:c.msg});s.json(p)};
1
+ import{resolve as r,join as s}from"path";import e from"../../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../../server/utils/pages/searchByMetadata.js";const o=import.meta.dirname.includes("node_modules")?s(process.cwd(),"public"):r(import.meta.dirname,"../../../../app-public");export default async(r,s)=>{const a=r.cookies.session_token,[i,n]=await e(a,"system:pages:read");if(i)return s.status(i.code).json({error:i.msg});if(!n)return s.status(403).json({error:"Insufficient permissions"});const{query:u}=r.query;if(!u)return s.status(400).json({error:"query parameter is required"});let m;try{m=JSON.parse(u)}catch{return s.status(400).json({error:"query must be valid JSON"})}if("object"!=typeof m||Array.isArray(m)||!m)return s.status(400).json({error:"query must be a JSON object"});const[c,p]=await t({rootDir:o,query:m});if(c)return s.status(c.code).json({error:c.msg});s.json(p)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\pages\search\GET.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\pages\\search\\GET.js","names":["resolve","join","currentUserHasPermission","searchByMetadata","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","query","parsedQuery","JSON","parse","Array","isArray","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport searchByMetadata from '../../../../server/utils/pages/searchByMetadata.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 { query } = request.query;\r\n\r\n\tif(!query){\r\n\t\treturn response.status(400).json({ error: 'query parameter is required' });\r\n\t}\r\n\r\n\tlet parsedQuery;\r\n\ttry {\r\n\t\tparsedQuery = JSON.parse(query);\r\n\t} catch {\r\n\t\treturn response.status(400).json({ error: 'query must be valid JSON' });\r\n\t}\r\n\r\n\tif(typeof parsedQuery !== 'object' || Array.isArray(parsedQuery) || !parsedQuery){\r\n\t\treturn response.status(400).json({ error: 'query must be a JSON object' });\r\n\t}\r\n\r\n\tconst [error, data] = await searchByMetadata({ rootDir, query: parsedQuery });\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,0EAC9BC,MAAsB,qDAE7B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBL,EAAKM,QAAQC,MAAO,UAAYR,cAAoBK,QAAS,yCAE7GI,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,MAAEA,GAAUZ,EAAQY,MAE1B,IAAIA,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,gCAG3C,IAAIG,EACJ,IACCA,EAAcC,KAAKC,MAAMH,EAC1B,CAAE,MACD,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,4BAC3C,CAEA,GAA0B,iBAAhBG,GAA4BG,MAAMC,QAAQJ,KAAiBA,EACpE,OAAOZ,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,gCAG3C,MAAOA,EAAOQ,SAAczB,EAAiB,CAAEC,UAASkB,MAAOC,IAE/D,GAAGH,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKS","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\pages\\search\\GET.js","names":["resolve","join","currentUserHasPermission","searchByMetadata","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","query","parsedQuery","JSON","parse","Array","isArray","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport searchByMetadata from '../../../../../server/utils/pages/searchByMetadata.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 { query } = request.query;\r\n\r\n\tif(!query){\r\n\t\treturn response.status(400).json({ error: 'query parameter is required' });\r\n\t}\r\n\r\n\tlet parsedQuery;\r\n\ttry {\r\n\t\tparsedQuery = JSON.parse(query);\r\n\t} catch {\r\n\t\treturn response.status(400).json({ error: 'query must be valid JSON' });\r\n\t}\r\n\r\n\tif(typeof parsedQuery !== 'object' || Array.isArray(parsedQuery) || !parsedQuery){\r\n\t\treturn response.status(400).json({ error: 'query must be a JSON object' });\r\n\t}\r\n\r\n\tconst [error, data] = await searchByMetadata({ rootDir, query: parsedQuery });\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,MAAsB,wDAE7B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBL,EAAKM,QAAQC,MAAO,UAAYR,cAAoBK,QAAS,yCAE7GI,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,MAAEA,GAAUZ,EAAQY,MAE1B,IAAIA,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,gCAG3C,IAAIG,EACJ,IACCA,EAAcC,KAAKC,MAAMH,EAC1B,CAAE,MACD,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,4BAC3C,CAEA,GAA0B,iBAAhBG,GAA4BG,MAAMC,QAAQJ,KAAiBA,EACpE,OAAOZ,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,gCAG3C,MAAOA,EAAOQ,SAAczB,EAAiB,CAAEC,UAASkB,MAAOC,IAE/D,GAAGH,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKS","ignoreList":[]}
@@ -0,0 +1,2 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\api\\user\\[userid]\\name\\GET.js","names":["getUserById","async","request","response","userid","params","error","user","status","code","json","msg","name"],"sources":["0"],"sourcesContent":["import getUserById from '../../../../../../server/utils/users/getUserById.js';\n\nexport default async (request, response) => {\n const { userid } = request.params;\n const [error, user] = await getUserById(userid);\n if(error) return response.status(error.code).json({ error: error.msg });\n response.json({ name: user.name });\n};\n"],"mappings":"OAAOA,MAAiB,qEAETC,MAAOC,EAASC,KAC7B,MAAMC,OAAEA,GAAWF,EAAQG,QACpBC,EAAOC,SAAcP,EAAYI,GACxC,GAAGE,EAAO,OAAOH,EAASK,OAAOF,EAAMG,MAAMC,KAAK,CAAEJ,MAAOA,EAAMK,MACjER,EAASO,KAAK,CAAEE,KAAML,EAAKK","ignoreList":[]}
@@ -0,0 +1,2 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\components\\UserDisplayName.js","names":["LightComponent","UserDisplayName","static","userId","type","String","attribute","reflect","constructor","super","this","updated","changed","has","load","res","fetch","ok","name","json","textContent","renderLightDom","customElements","define"],"sources":["0"],"sourcesContent":["import LightComponent from '/kempo-ui/components/LightComponent.js';\n\nexport default class UserDisplayName extends LightComponent {\n static properties = {\n userId: { type: String, attribute: 'user-id', reflect: true },\n };\n\n constructor(){\n super();\n this.userId = '';\n }\n\n updated(changed){\n super.updated?.(changed);\n if(changed.has('userId') && this.userId) this.load();\n }\n\n async load(){\n try {\n const res = await fetch(`/kempo/api/user/${this.userId}/name`);\n if(!res.ok) return;\n const { name } = await res.json();\n this.textContent = name || this.userId;\n } catch {\n this.textContent = this.userId;\n }\n }\n\n renderLightDom(){\n return this.userId;\n }\n}\n\ncustomElements.define('k-user-display-name', UserDisplayName);\n"],"mappings":"OAAOA,MAAoB,wDAEZ,MAAMC,UAAwBD,EAC3CE,kBAAoB,CAClBC,OAAQ,CAAEC,KAAMC,OAAQC,UAAW,UAAWC,SAAS,IAGzD,WAAAC,GACEC,QACAC,KAAKP,OAAS,EAChB,CAEA,OAAAQ,CAAQC,GACNH,MAAME,UAAUC,GACbA,EAAQC,IAAI,WAAaH,KAAKP,QAAQO,KAAKI,MAChD,CAEA,UAAMA,GACJ,IACE,MAAMC,QAAYC,MAAM,mBAAmBN,KAAKP,eAChD,IAAIY,EAAIE,GAAI,OACZ,MAAMC,KAAEA,SAAeH,EAAII,OAC3BT,KAAKU,YAAcF,GAAQR,KAAKP,MAClC,CAAE,MACAO,KAAKU,YAAcV,KAAKP,MAC1B,CACF,CAEA,cAAAkB,GACE,OAAOX,KAAKP,MACd,EAGFmB,eAAeC,OAAO,sBAAuBtB","ignoreList":[]}
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 r="/kempo/api";export const register=async({email:e,password:o,name:n})=>s(`${r}/auth/register/email`,{email:e,password:o,name:n});export const login=async({email:e,password:o})=>s(`${r}/auth/login/email`,{email:e,password:o});export const logout=async()=>s(`${r}/auth/logout`,{});export const getSession=async()=>e(`${r}/auth/session`);export const forgotPassword=async({email:e})=>s(`${r}/forgot-password`,{email:e});export const resetPassword=async({token:e,password:o,logoutAll:n=!1})=>s(`${r}/auth/reset-password`,{token:e,newPassword:o,logoutAll:n});export const changePassword=async({currentPassword:e,newPassword:o,logoutAll:n})=>s(`${r}/auth/change-password`,{currentPassword:e,newPassword:o,logoutAll:n});export const verifyEmail=async({token:e})=>s(`${r}/auth/verify-email`,{token:e});export const currentUserHasPermission=async({permission:s})=>e(`${r}/user/current/permissions`,{permission:s});export const currentUserHasAllPermissions=async({permissions:s})=>e(`${r}/user/current/permissions/all`,{permissions:s});export const currentUserHasSomePermissions=async({permissions:s})=>e(`${r}/user/current/permissions/some`,{permissions:s});export const getAllCurrentUserPermissions=async()=>e(`${r}/user/current/permissions/list`);export const userHasPermission=async({userid:s,permission:o})=>e(`${r}/user/${s}/permissions`,{permission:o});export const userHasAllPermissions=async({userid:s,permissions:o})=>e(`${r}/user/${s}/permissions/all`,{permissions:o});export const userHasSomePermissions=async({userid:s,permissions:o})=>e(`${r}/user/${s}/permissions/some`,{permissions:o});export const getAllUserPermissions=async({userid:s})=>e(`${r}/user/${s}/permissions/list`);export const getUsers=async({limit:s,offset:o}={})=>e(`${r}/user`,{limit:s,offset:o});export const searchUsers=async({q:s,limit:o,offset:n,inGroup:t,notInGroup:a}={})=>e(`${r}/user/search`,{q:s,limit:o,offset:n,inGroup:t,notInGroup:a});export const createUser=async({name:e,email:o,password:n,emailVerified:t})=>s(`${r}/user/create`,{name:e,email:o,password:n,emailVerified:t});export const deleteUsers=async e=>t(`${r}/user`,{ids:e});export const updateUser=async({id:e,name:s,email:o,emailVerified:t,createdAt:a})=>n(`${r}/user`,{id:e,name:s,email:o,emailVerified:t,createdAt:a});export const getUser=async s=>e(`${r}/user/${s}`);export const getUserSessions=async(s,{limit:o,offset:n}={})=>e(`${r}/user/${s}/sessions`,{limit:o,offset:n});export const deleteUserSession=async(e,s)=>t(`${r}/user/${e}/sessions`,{sessionToken:s});export const deleteExpiredUserSessions=async e=>t(`${r}/user/${e}/sessions/expired`);export const getUserGroups=async(s,{limit:o,offset:n}={})=>e(`${r}/user/${s}/groups`,{limit:o,offset:n});export const addUserToGroup=async(e,o)=>s(`${r}/user/${e}/groups`,{groupName:o});export const removeUserFromGroup=async(e,s)=>t(`${r}/user/${e}/groups`,{groupName:s});export const listGroups=async({limit:s,offset:o,owner:n}={})=>e(`${r}/groups`,{limit:s,offset:o,owner:n});export const createGroup=async({name:e,description:o})=>s(`${r}/groups`,{name:e,description:o});export const updateGroup=async({name:e,newName:s,description:o})=>n(`${r}/groups`,{name:e,newName:s,description:o});export const deleteGroups=async e=>t(`${r}/groups`,{names:e});export const getGroup=async s=>e(`${r}/groups/${encodeURIComponent(s)}`);export const getGroupMembers=async(s,{limit:o,offset:n}={})=>e(`${r}/groups/${encodeURIComponent(s)}/members`,{limit:o,offset:n});export const addMemberToGroup=async(e,o)=>s(`${r}/groups/${encodeURIComponent(e)}/members`,{userId:o});export const removeMemberFromGroup=async(e,s)=>t(`${r}/groups/${encodeURIComponent(e)}/members`,{userId:s});export const getGroupPermissions=async s=>e(`${r}/groups/${encodeURIComponent(s)}/permissions`);export const addPermissionToGroup=async(e,o)=>s(`${r}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:o});export const removePermissionFromGroup=async(e,s)=>t(`${r}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:s});export const listPermissions=async({limit:s,offset:o,owner:n}={})=>e(`${r}/permissions`,{limit:s,offset:o,owner:n});export const createPermissions=async e=>s(`${r}/permissions`,{permissions:e});export const updatePermission=async({name:e,description:s})=>n(`${r}/permissions`,{name:e,description:s});export const deletePermissions=async e=>t(`${r}/permissions`,{names:e});export const getSetting=async(s,o)=>e(`${r}/settings/${encodeURIComponent(s)}/${encodeURIComponent(o)}`);export const listSettings=async({owner:s,limit:o,offset:n}={})=>e(`${r}/settings/${encodeURIComponent(s)}`,{limit:o,offset:n});export const setSetting=async(e,o,n)=>s(`${r}/settings/${encodeURIComponent(e)}/${encodeURIComponent(o)}`,n);export const deleteSetting=async(e,s)=>t(`${r}/settings/${encodeURIComponent(e)}/${encodeURIComponent(s)}`);export const listPages=async({owner:s,showHidden:o,offset:n,limit:t}={})=>e(`${r}/pages`,{owner:s,showHidden:o,offset:n,limit:t});export const rescanPages=async()=>s(`${r}/pages/rescan`,{});export const listTemplates=async()=>e(`${r}/templates`);export const listDirectories=async()=>e(`${r}/pages/directories`);export const getPage=async s=>e(`${r}/pages/file`,{file:s});export const createPage=async({directory:e,name:o,template:n})=>s(`${r}/pages`,{directory:e,name:o,template:n});export const updatePage=async({file:e,name:s,title:n,description:t,author:a,template:i,contents:c,extraMetadata:l})=>o(`${r}/pages/file`,{file:e,name:s,title:n,description:t,author:a,template:i,contents:c,extraMetadata:l});export const deletePages=async e=>t(`${r}/pages`,{files:e});export const disablePage=async e=>o(`${r}/pages/disable`,{file:e});export const enablePage=async e=>o(`${r}/pages/enable`,{file:e});export const movePage=async({file:e,newFile:s})=>n(`${r}/pages/file`,{file:e,newFile:s});export const searchPagesByMetadata=async s=>e(`${r}/pages/search`,{query:JSON.stringify(s)});export const setPageLocked=async({file:e,locked:s})=>o(`${r}/pages/lock`,{file:e,locked:s});export const getTemplate=async s=>e(`${r}/templates/file`,{file:s});export const createTemplate=async({directory:e,name:o,copyFrom:n})=>s(`${r}/templates`,{directory:e,name:o,copyFrom:n});export const updateTemplate=async({file:e,name:s,author:n,markup:t})=>o(`${r}/templates/file`,{file:e,name:s,author:n,markup:t});export const deleteTemplates=async e=>t(`${r}/templates`,{files:e});export const disableTemplate=async e=>o(`${r}/templates/disable`,{file:e});export const enableTemplate=async e=>o(`${r}/templates/enable`,{file:e});export const moveTemplate=async({file:e,newFile:s})=>n(`${r}/templates/file`,{file:e,newFile:s});export const setTemplateLocked=async({file:e,locked:s})=>o(`${r}/templates/lock`,{file:e,locked:s});export const listFragments=async()=>e(`${r}/fragments`);export const getFragment=async s=>e(`${r}/fragments/file`,{file:s});export const createFragment=async({directory:e,name:o})=>s(`${r}/fragments`,{directory:e,name:o});export const updateFragment=async({file:e,author:s,markup:n})=>o(`${r}/fragments/file`,{file:e,author:s,markup:n});export const deleteFragments=async e=>t(`${r}/fragments`,{files:e});export const moveFragment=async({file:e,newFile:s})=>n(`${r}/fragments/file`,{file:e,newFile:s});export const disableFragment=async e=>o(`${r}/fragments/disable`,{file:e});export const enableFragment=async e=>o(`${r}/fragments/enable`,{file:e});export const setFragmentLocked=async({file:e,locked:s})=>o(`${r}/fragments/lock`,{file:e,locked:s});export const listGlobalContent=async()=>e(`${r}/globals`);export const getGlobalContent=async s=>e(`${r}/globals/entry`,{id:s});export const createGlobalContent=async({name:e,location:o,priority:n})=>s(`${r}/globals`,{name:e,location:o,priority:n});export const updateGlobalContent=async({id:e,name:s,location:n,priority:t,markup:a})=>o(`${r}/globals/entry`,{id:e,name:s,location:n,priority:t,markup:a});export const deleteGlobalContent=async e=>t(`${r}/globals`,{ids:e});export const disableGlobalContent=async e=>o(`${r}/globals/disable`,{id:e});export const enableGlobalContent=async e=>o(`${r}/globals/enable`,{id:e});export const setGlobalContentLocked=async({id:e,locked:s})=>o(`${r}/globals/lock`,{id:e,locked:s});export const listExtensions=async({limit:s,offset:o}={})=>e(`${r}/extensions`,{limit:s,offset:o});export const listAvailableExtensions=async()=>e(`${r}/extensions/available`);export const listKnownExtensions=async()=>e(`${r}/extensions/known`);export const installExtension=async e=>s(`${r}/extensions`,{name:e});export const uninstallExtension=async e=>t(`${r}/extensions`,{name:e});export const enableExtension=async e=>s(`${r}/extensions/${encodeURIComponent(e)}/enable`,{});export const disableExtension=async e=>s(`${r}/extensions/${encodeURIComponent(e)}/disable`,{});export const listAdminGlobalContent=async()=>e(`${r}/admin-globals`);export const getAdminGlobalContent=async s=>e(`${r}/admin-globals/${encodeURIComponent(s)}`);export const createAdminGlobalContent=async({name:e,location:o,priority:n,owner:t,markup:a})=>s(`${r}/admin-globals`,{name:e,location:o,priority:n,owner:t,markup:a});export const updateAdminGlobalContent=async(e,{name:s,location:n,priority:t,markup:a})=>o(`${r}/admin-globals/${encodeURIComponent(e)}`,{name:s,location:n,priority:t,markup:a});export const deleteAdminGlobalContent=async e=>t(`${r}/admin-globals`,{ids:e});export const enableAdminGlobalContent=async e=>o(`${r}/admin-globals/${encodeURIComponent(e)}/enable`,{});export const disableAdminGlobalContent=async e=>o(`${r}/admin-globals/${encodeURIComponent(e)}/disable`,{});
1
+ import{get as e,post as s,put as o,patch as n,del as t}from"./fetch.js";const r="/kempo/api";export const register=async({email:e,password:o,name:n})=>s(`${r}/auth/register/email`,{email:e,password:o,name:n});export const login=async({email:e,password:o})=>s(`${r}/auth/login/email`,{email:e,password:o});export const logout=async()=>s(`${r}/auth/logout`,{});export const getSession=async()=>e(`${r}/auth/session`);export const forgotPassword=async({email:e})=>s(`${r}/forgot-password`,{email:e});export const resetPassword=async({token:e,password:o,logoutAll:n=!1})=>s(`${r}/auth/reset-password`,{token:e,newPassword:o,logoutAll:n});export const changePassword=async({currentPassword:e,newPassword:o,logoutAll:n})=>s(`${r}/auth/change-password`,{currentPassword:e,newPassword:o,logoutAll:n});export const verifyEmail=async({token:e})=>s(`${r}/auth/verify-email`,{token:e});export const currentUserHasPermission=async({permission:s})=>e(`${r}/user/current/permissions`,{permission:s});export const currentUserHasAllPermissions=async({permissions:s})=>e(`${r}/user/current/permissions/all`,{permissions:s});export const currentUserHasSomePermissions=async({permissions:s})=>e(`${r}/user/current/permissions/some`,{permissions:s});export const getAllCurrentUserPermissions=async()=>e(`${r}/user/current/permissions/list`);export const userHasPermission=async({userid:s,permission:o})=>e(`${r}/user/${s}/permissions`,{permission:o});export const userHasAllPermissions=async({userid:s,permissions:o})=>e(`${r}/user/${s}/permissions/all`,{permissions:o});export const userHasSomePermissions=async({userid:s,permissions:o})=>e(`${r}/user/${s}/permissions/some`,{permissions:o});export const getAllUserPermissions=async({userid:s})=>e(`${r}/user/${s}/permissions/list`);export const getUsers=async({limit:s,offset:o}={})=>e(`${r}/user`,{limit:s,offset:o});export const searchUsers=async({q:s,limit:o,offset:n,inGroup:t,notInGroup:a}={})=>e(`${r}/user/search`,{q:s,limit:o,offset:n,inGroup:t,notInGroup:a});export const createUser=async({name:e,email:o,password:n,emailVerified:t})=>s(`${r}/user/create`,{name:e,email:o,password:n,emailVerified:t});export const deleteUsers=async e=>t(`${r}/user`,{ids:e});export const updateUser=async({id:e,name:s,email:o,emailVerified:t,createdAt:a})=>n(`${r}/user`,{id:e,name:s,email:o,emailVerified:t,createdAt:a});export const getUser=async s=>e(`${r}/user/${s}`);export const getUserSessions=async(s,{limit:o,offset:n}={})=>e(`${r}/user/${s}/sessions`,{limit:o,offset:n});export const deleteUserSession=async(e,s)=>t(`${r}/user/${e}/sessions`,{sessionToken:s});export const deleteExpiredUserSessions=async e=>t(`${r}/user/${e}/sessions/expired`);export const getUserGroups=async(s,{limit:o,offset:n}={})=>e(`${r}/user/${s}/groups`,{limit:o,offset:n});export const addUserToGroup=async(e,o)=>s(`${r}/user/${e}/groups`,{groupName:o});export const removeUserFromGroup=async(e,s)=>t(`${r}/user/${e}/groups`,{groupName:s});export const listGroups=async({limit:s,offset:o,owner:n}={})=>e(`${r}/groups`,{limit:s,offset:o,owner:n});export const createGroup=async({name:e,description:o})=>s(`${r}/groups`,{name:e,description:o});export const updateGroup=async({name:e,newName:s,description:o})=>n(`${r}/groups`,{name:e,newName:s,description:o});export const deleteGroups=async e=>t(`${r}/groups`,{names:e});export const getGroup=async s=>e(`${r}/groups/${encodeURIComponent(s)}`);export const getGroupMembers=async(s,{limit:o,offset:n}={})=>e(`${r}/groups/${encodeURIComponent(s)}/members`,{limit:o,offset:n});export const addMemberToGroup=async(e,o)=>s(`${r}/groups/${encodeURIComponent(e)}/members`,{userId:o});export const removeMemberFromGroup=async(e,s)=>t(`${r}/groups/${encodeURIComponent(e)}/members`,{userId:s});export const getGroupPermissions=async s=>e(`${r}/groups/${encodeURIComponent(s)}/permissions`);export const addPermissionToGroup=async(e,o)=>s(`${r}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:o});export const removePermissionFromGroup=async(e,s)=>t(`${r}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:s});export const listPermissions=async({limit:s,offset:o,owner:n}={})=>e(`${r}/permissions`,{limit:s,offset:o,owner:n});export const createPermissions=async e=>s(`${r}/permissions`,{permissions:e});export const updatePermission=async({name:e,description:s})=>n(`${r}/permissions`,{name:e,description:s});export const deletePermissions=async e=>t(`${r}/permissions`,{names:e});export const getSetting=async(s,o)=>e(`${r}/settings/${encodeURIComponent(s)}/${encodeURIComponent(o)}`);export const listSettings=async({owner:s,limit:o,offset:n}={})=>e(`${r}/settings/${encodeURIComponent(s)}`,{limit:o,offset:n});export const setSetting=async(e,o,n)=>s(`${r}/settings/${encodeURIComponent(e)}/${encodeURIComponent(o)}`,n);export const deleteSetting=async(e,s)=>t(`${r}/settings/${encodeURIComponent(e)}/${encodeURIComponent(s)}`);export const listPages=async({owner:s,showHidden:o,offset:n,limit:t}={})=>e(`${r}/pages`,{owner:s,showHidden:o,offset:n,limit:t});export const rescanPages=async()=>s(`${r}/pages/rescan`,{});export const listTemplates=async()=>e(`${r}/templates`);export const listDirectories=async()=>e(`${r}/pages/directories`);export const getPage=async s=>e(`${r}/pages/file`,{file:s});export const createPage=async({directory:e,name:o,template:n})=>s(`${r}/pages`,{directory:e,name:o,template:n});export const updatePage=async({file:e,name:s,title:n,description:t,author:a,template:i,contents:c,extraMetadata:l})=>o(`${r}/pages/file`,{file:e,name:s,title:n,description:t,author:a,template:i,contents:c,extraMetadata:l});export const deletePages=async e=>t(`${r}/pages`,{files:e});export const disablePage=async e=>o(`${r}/pages/disable`,{file:e});export const enablePage=async e=>o(`${r}/pages/enable`,{file:e});export const movePage=async({file:e,newFile:s})=>n(`${r}/pages/file`,{file:e,newFile:s});export const searchPagesByMetadata=async s=>e(`${r}/pages/search`,{query:JSON.stringify(s)});export const setPageLocked=async({file:e,locked:s})=>o(`${r}/pages/lock`,{file:e,locked:s});export const getTemplate=async s=>e(`${r}/templates/file`,{file:s});export const createTemplate=async({directory:e,name:o,copyFrom:n})=>s(`${r}/templates`,{directory:e,name:o,copyFrom:n});export const updateTemplate=async({file:e,name:s,author:n,markup:t})=>o(`${r}/templates/file`,{file:e,name:s,author:n,markup:t});export const deleteTemplates=async e=>t(`${r}/templates`,{files:e});export const disableTemplate=async e=>o(`${r}/templates/disable`,{file:e});export const enableTemplate=async e=>o(`${r}/templates/enable`,{file:e});export const moveTemplate=async({file:e,newFile:s})=>n(`${r}/templates/file`,{file:e,newFile:s});export const setTemplateLocked=async({file:e,locked:s})=>o(`${r}/templates/lock`,{file:e,locked:s});export const listFragments=async()=>e(`${r}/fragments`);export const getFragment=async s=>e(`${r}/fragments/file`,{file:s});export const createFragment=async({directory:e,name:o})=>s(`${r}/fragments`,{directory:e,name:o});export const updateFragment=async({file:e,author:s,markup:n})=>o(`${r}/fragments/file`,{file:e,author:s,markup:n});export const deleteFragments=async e=>t(`${r}/fragments`,{files:e});export const moveFragment=async({file:e,newFile:s})=>n(`${r}/fragments/file`,{file:e,newFile:s});export const disableFragment=async e=>o(`${r}/fragments/disable`,{file:e});export const enableFragment=async e=>o(`${r}/fragments/enable`,{file:e});export const setFragmentLocked=async({file:e,locked:s})=>o(`${r}/fragments/lock`,{file:e,locked:s});export const listGlobalContent=async()=>e(`${r}/globals`);export const getGlobalContent=async s=>e(`${r}/globals/entry`,{id:s});export const createGlobalContent=async({name:e,location:o,priority:n})=>s(`${r}/globals`,{name:e,location:o,priority:n});export const updateGlobalContent=async({id:e,name:s,location:n,priority:t,markup:a})=>o(`${r}/globals/entry`,{id:e,name:s,location:n,priority:t,markup:a});export const deleteGlobalContent=async e=>t(`${r}/globals`,{ids:e});export const disableGlobalContent=async e=>o(`${r}/globals/disable`,{id:e});export const enableGlobalContent=async e=>o(`${r}/globals/enable`,{id:e});export const setGlobalContentLocked=async({id:e,locked:s})=>o(`${r}/globals/lock`,{id:e,locked:s});export const listExtensions=async({limit:s,offset:o}={})=>e(`${r}/extensions`,{limit:s,offset:o});export const listAvailableExtensions=async()=>e(`${r}/extensions/available`);export const listKnownExtensions=async()=>e(`${r}/extensions/known`);export const installExtension=async e=>s(`${r}/extensions`,{name:e});export const uninstallExtension=async(e,s=!1)=>t(`${r}/extensions`,{name:e,purgeData:s});export const enableExtension=async e=>s(`${r}/extensions/${encodeURIComponent(e)}/enable`,{});export const disableExtension=async e=>s(`${r}/extensions/${encodeURIComponent(e)}/disable`,{});export const listAdminGlobalContent=async()=>e(`${r}/admin-globals`);export const getAdminGlobalContent=async s=>e(`${r}/admin-globals/${encodeURIComponent(s)}`);export const createAdminGlobalContent=async({name:e,location:o,priority:n,owner:t,markup:a})=>s(`${r}/admin-globals`,{name:e,location:o,priority:n,owner:t,markup:a});export const updateAdminGlobalContent=async(e,{name:s,location:n,priority:t,markup:a})=>o(`${r}/admin-globals/${encodeURIComponent(e)}`,{name:s,location:n,priority:t,markup:a});export const deleteAdminGlobalContent=async e=>t(`${r}/admin-globals`,{ids:e});export const enableAdminGlobalContent=async e=>o(`${r}/admin-globals/${encodeURIComponent(e)}/enable`,{});export const disableAdminGlobalContent=async e=>o(`${r}/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","installExtension","uninstallExtension","enableExtension","disableExtension","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 () =>\n get(`${API_BASE}/extensions/known`);\n\nexport const installExtension = async (name) =>\n post(`${API_BASE}/extensions`, { name });\n\nexport const uninstallExtension = async (name) =>\n del(`${API_BASE}/extensions`, { name });\n\nexport const enableExtension = async (name) =>\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/enable`, {});\n\nexport const disableExtension = async (name) =>\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/disable`, {});\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","listExtensions","listAvailableExtensions","listKnownExtensions","installExtension","uninstallExtension","purgeData","enableExtension","disableExtension","listAdminGlobalContent","getAdminGlobalContent","createAdminGlobalContent","updateAdminGlobalContent","deleteAdminGlobalContent","enableAdminGlobalContent","disableAdminGlobalContent"],"sources":["0"],"sourcesContent":["import { get, post, put, patch, del } from './fetch.js';\r\nconst API_BASE = '/kempo/api';\r\n\r\nexport const register = async ({ email, password, name }) =>\r\n post(`${API_BASE}/auth/register/email`, { email, password, name });\r\n\r\nexport const login = async ({ email, password }) =>\r\n post(`${API_BASE}/auth/login/email`, { email, password });\r\n\r\nexport const logout = async () => post(`${API_BASE}/auth/logout`, {});\r\n\r\nexport const getSession = async () => get(`${API_BASE}/auth/session`);\r\n\r\nexport const forgotPassword = async ({ email }) =>\r\n post(`${API_BASE}/forgot-password`, { email });\r\n\r\nexport const resetPassword = async ({ token, password, logoutAll = false }) =>\r\n post(`${API_BASE}/auth/reset-password`, { token, newPassword: password, logoutAll });\r\n \r\nexport const changePassword = async ({ currentPassword, newPassword, logoutAll }) => \r\n post(`${API_BASE}/auth/change-password`, { currentPassword, newPassword, logoutAll });\r\n\r\nexport const verifyEmail = async ({ token }) =>\r\n post(`${API_BASE}/auth/verify-email`, { token });\r\n\r\nexport const currentUserHasPermission = async ({ permission }) =>\r\n get(`${API_BASE}/user/current/permissions`, { permission });\r\n\r\nexport const currentUserHasAllPermissions = async ({ permissions }) =>\r\n get(`${API_BASE}/user/current/permissions/all`, { permissions });\r\n\r\nexport const currentUserHasSomePermissions = async ({ permissions }) =>\r\n get(`${API_BASE}/user/current/permissions/some`, { permissions });\r\n\r\nexport const getAllCurrentUserPermissions = async () =>\r\n get(`${API_BASE}/user/current/permissions/list`);\r\n\r\nexport const userHasPermission = async ({ userid, permission }) =>\r\n get(`${API_BASE}/user/${userid}/permissions`, { permission });\r\n\r\nexport const userHasAllPermissions = async ({ userid, permissions }) =>\r\n get(`${API_BASE}/user/${userid}/permissions/all`, { permissions });\r\n\r\nexport const userHasSomePermissions = async ({ userid, permissions }) =>\r\n get(`${API_BASE}/user/${userid}/permissions/some`, { permissions });\r\n\r\nexport const getAllUserPermissions = async ({ userid }) =>\r\n get(`${API_BASE}/user/${userid}/permissions/list`);\r\n\r\nexport const getUsers = async ({ limit, offset } = {}) =>\r\n get(`${API_BASE}/user`, { limit, offset });\r\n\r\nexport const searchUsers = async ({ q, limit, offset, inGroup, notInGroup } = {}) =>\r\n get(`${API_BASE}/user/search`, { q, limit, offset, inGroup, notInGroup });\r\n\r\nexport const createUser = async ({ name, email, password, emailVerified }) =>\r\n post(`${API_BASE}/user/create`, { name, email, password, emailVerified });\r\n\r\nexport const deleteUsers = async (ids) =>\r\n del(`${API_BASE}/user`, { ids });\r\n\r\nexport const updateUser = async ({ id, name, email, emailVerified, createdAt }) =>\r\n patch(`${API_BASE}/user`, { id, name, email, emailVerified, createdAt });\r\n\r\nexport const getUser = async (userid) =>\r\n get(`${API_BASE}/user/${userid}`);\r\n\r\nexport const getUserSessions = async (userid, { limit, offset } = {}) =>\r\n get(`${API_BASE}/user/${userid}/sessions`, { limit, offset });\r\n\r\nexport const deleteUserSession = async (userid, sessionToken) =>\r\n del(`${API_BASE}/user/${userid}/sessions`, { sessionToken });\r\n\r\nexport const deleteExpiredUserSessions = async (userid) =>\r\n del(`${API_BASE}/user/${userid}/sessions/expired`);\r\n\r\nexport const getUserGroups = async (userid, { limit, offset } = {}) =>\r\n get(`${API_BASE}/user/${userid}/groups`, { limit, offset });\r\n\r\nexport const addUserToGroup = async (userid, groupName) =>\r\n post(`${API_BASE}/user/${userid}/groups`, { groupName });\r\n\r\nexport const removeUserFromGroup = async (userid, groupName) =>\r\n del(`${API_BASE}/user/${userid}/groups`, { groupName });\r\n\r\nexport const listGroups = async ({ limit, offset, owner } = {}) =>\r\n get(`${API_BASE}/groups`, { limit, offset, owner });\r\n\r\nexport const createGroup = async ({ name, description }) =>\r\n post(`${API_BASE}/groups`, { name, description });\r\n\r\nexport const updateGroup = async ({ name, newName, description }) =>\r\n patch(`${API_BASE}/groups`, { name, newName, description });\r\n\r\nexport const deleteGroups = async (names) =>\r\n del(`${API_BASE}/groups`, { names });\r\n\r\nexport const getGroup = async (name) =>\r\n get(`${API_BASE}/groups/${encodeURIComponent(name)}`);\r\n\r\nexport const getGroupMembers = async (name, { limit, offset } = {}) =>\r\n get(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { limit, offset });\r\n\r\nexport const addMemberToGroup = async (name, userId) =>\r\n post(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { userId });\r\n\r\nexport const removeMemberFromGroup = async (name, userId) =>\r\n del(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { userId });\r\n\r\nexport const getGroupPermissions = async (name) =>\r\n get(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`);\r\n\r\nexport const addPermissionToGroup = async (name, permissionName) =>\r\n post(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`, { permissionName });\r\n\r\nexport const removePermissionFromGroup = async (name, permissionName) =>\r\n del(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`, { permissionName });\r\n\r\nexport const listPermissions = async ({ limit, offset, owner } = {}) =>\r\n get(`${API_BASE}/permissions`, { limit, offset, owner });\r\n\r\nexport const createPermissions = async (permissions) =>\r\n post(`${API_BASE}/permissions`, { permissions });\r\n\r\nexport const updatePermission = async ({ name, description }) =>\r\n patch(`${API_BASE}/permissions`, { name, description });\r\n\r\nexport const deletePermissions = async (names) =>\r\n del(`${API_BASE}/permissions`, { names });\r\n\r\nexport const getSetting = async (owner, name) =>\r\n get(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);\r\n\r\nexport const listSettings = async ({ owner, limit, offset } = {}) =>\r\n get(`${API_BASE}/settings/${encodeURIComponent(owner)}`, { limit, offset });\r\n\r\nexport const setSetting = async (owner, name, data) =>\r\n post(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`, data);\r\n\r\nexport const deleteSetting = async (owner, name) =>\r\n del(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);\r\n\r\n/*\r\n Pages\r\n*/\r\n\r\nexport const listPages = async ({ owner, showHidden, offset, limit } = {}) =>\r\n get(`${API_BASE}/pages`, { owner, showHidden, offset, limit });\r\n\r\nexport const rescanPages = async () =>\r\n post(`${API_BASE}/pages/rescan`, {});\r\n\r\nexport const listTemplates = async () =>\r\n get(`${API_BASE}/templates`);\r\n\r\nexport const listDirectories = async () =>\r\n get(`${API_BASE}/pages/directories`);\r\n\r\nexport const getPage = async (file) =>\r\n get(`${API_BASE}/pages/file`, { file });\r\n\r\nexport const createPage = async ({ directory, name, template }) =>\r\n post(`${API_BASE}/pages`, { directory, name, template });\r\n\r\nexport const updatePage = async ({ file, name, title, description, author, template, contents, extraMetadata }) =>\r\n put(`${API_BASE}/pages/file`, { file, name, title, description, author, template, contents, extraMetadata });\r\n\r\nexport const deletePages = async (files) =>\r\n del(`${API_BASE}/pages`, { files });\r\n\r\nexport const disablePage = async (file) =>\r\n put(`${API_BASE}/pages/disable`, { file });\r\n\r\nexport const enablePage = async (file) =>\r\n put(`${API_BASE}/pages/enable`, { file });\r\n\r\nexport const movePage = async ({ file, newFile }) =>\r\n patch(`${API_BASE}/pages/file`, { file, newFile });\r\n\r\nexport const searchPagesByMetadata = async (query) =>\r\n get(`${API_BASE}/pages/search`, { query: JSON.stringify(query) });\r\n\r\nexport const setPageLocked = async ({ file, locked }) =>\r\n put(`${API_BASE}/pages/lock`, { file, locked });\r\n\r\n/*\r\n Templates\r\n*/\r\n\r\nexport const getTemplate = async (file) =>\r\n get(`${API_BASE}/templates/file`, { file });\r\n\r\nexport const createTemplate = async ({ directory, name, copyFrom }) =>\r\n post(`${API_BASE}/templates`, { directory, name, copyFrom });\r\n\r\nexport const updateTemplate = async ({ file, name, author, markup }) =>\r\n put(`${API_BASE}/templates/file`, { file, name, author, markup });\r\n\r\nexport const deleteTemplates = async (files) =>\r\n del(`${API_BASE}/templates`, { files });\r\n\r\nexport const disableTemplate = async (file) =>\r\n put(`${API_BASE}/templates/disable`, { file });\r\n\r\nexport const enableTemplate = async (file) =>\r\n put(`${API_BASE}/templates/enable`, { file });\r\n\r\nexport const moveTemplate = async ({ file, newFile }) =>\r\n patch(`${API_BASE}/templates/file`, { file, newFile });\r\n\r\nexport const setTemplateLocked = async ({ file, locked }) =>\r\n put(`${API_BASE}/templates/lock`, { file, locked });\r\n\r\n/*\r\n Fragments\r\n*/\r\n\r\nexport const listFragments = async () =>\r\n get(`${API_BASE}/fragments`);\r\n\r\nexport const getFragment = async (file) =>\r\n get(`${API_BASE}/fragments/file`, { file });\r\n\r\nexport const createFragment = async ({ directory, name }) =>\r\n post(`${API_BASE}/fragments`, { directory, name });\r\n\r\nexport const updateFragment = async ({ file, author, markup }) =>\r\n put(`${API_BASE}/fragments/file`, { file, author, markup });\r\n\r\nexport const deleteFragments = async (files) =>\r\n del(`${API_BASE}/fragments`, { files });\r\n\r\nexport const moveFragment = async ({ file, newFile }) =>\r\n patch(`${API_BASE}/fragments/file`, { file, newFile });\r\n\r\nexport const disableFragment = async (file) =>\r\n put(`${API_BASE}/fragments/disable`, { file });\r\n\r\nexport const enableFragment = async (file) =>\r\n put(`${API_BASE}/fragments/enable`, { file });\r\n\r\nexport const setFragmentLocked = async ({ file, locked }) =>\r\n put(`${API_BASE}/fragments/lock`, { file, locked });\r\n\r\n/*\r\n Global Content\r\n*/\r\n\r\nexport const listGlobalContent = async () =>\r\n get(`${API_BASE}/globals`);\r\n\r\nexport const getGlobalContent = async (id) =>\r\n get(`${API_BASE}/globals/entry`, { id });\r\n\r\nexport const createGlobalContent = async ({ name, location, priority }) =>\r\n post(`${API_BASE}/globals`, { name, location, priority });\r\n\r\nexport const updateGlobalContent = async ({ id, name, location, priority, markup }) =>\r\n put(`${API_BASE}/globals/entry`, { id, name, location, priority, markup });\r\n\r\nexport const deleteGlobalContent = async (ids) =>\r\n del(`${API_BASE}/globals`, { ids });\r\n\r\nexport const disableGlobalContent = async (id) =>\r\n put(`${API_BASE}/globals/disable`, { id });\r\n\r\nexport const enableGlobalContent = async (id) =>\r\n put(`${API_BASE}/globals/enable`, { id });\r\n\r\nexport const setGlobalContentLocked = async ({ id, locked }) =>\r\n put(`${API_BASE}/globals/lock`, { id, locked });\r\n\r\n/*\r\n Extensions\r\n*/\r\n\r\nexport const listExtensions = async ({ limit, offset } = {}) =>\r\n get(`${API_BASE}/extensions`, { limit, offset });\r\n\r\nexport const listAvailableExtensions = async () =>\r\n get(`${API_BASE}/extensions/available`);\r\n\r\nexport const listKnownExtensions = async () =>\r\n get(`${API_BASE}/extensions/known`);\r\n\r\nexport const installExtension = async (name) =>\r\n post(`${API_BASE}/extensions`, { name });\r\n\r\nexport const uninstallExtension = async (name, purgeData = false) =>\r\n del(`${API_BASE}/extensions`, { name, purgeData });\r\n\r\nexport const enableExtension = async (name) =>\r\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/enable`, {});\r\n\r\nexport const disableExtension = async (name) =>\r\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/disable`, {});\r\n\r\n/*\r\n Admin Global Content\r\n*/\r\n\r\nexport const listAdminGlobalContent = async () =>\r\n get(`${API_BASE}/admin-globals`);\r\n\r\nexport const getAdminGlobalContent = async (id) =>\r\n get(`${API_BASE}/admin-globals/${encodeURIComponent(id)}`);\r\n\r\nexport const createAdminGlobalContent = async ({ name, location, priority, owner, markup }) =>\r\n post(`${API_BASE}/admin-globals`, { name, location, priority, owner, markup });\r\n\r\nexport const updateAdminGlobalContent = async (id, { name, location, priority, markup }) =>\r\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}`, { name, location, priority, markup });\r\n\r\nexport const deleteAdminGlobalContent = async (ids) =>\r\n del(`${API_BASE}/admin-globals`, { ids });\r\n\r\nexport const enableAdminGlobalContent = async (id) =>\r\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}/enable`, {});\r\n\r\nexport const disableAdminGlobalContent = async (id) =>\r\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}/disable`, {});\r\n\r\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { dirname, join, extname } from 'path';
1
+ import { dirname, join, extname, isAbsolute, resolve } from 'path';
2
2
  import { readFile, stat, readdir } from 'fs/promises';
3
3
  import { pathToFileURL, fileURLToPath } from 'url';
4
4
  import { renderExternalPage } from 'kempo-server/templating';
@@ -6,6 +6,7 @@ import getSession from '../server/utils/auth/getSession.js';
6
6
  import currentUserHasPermission from '../server/utils/permissions/currentUserHasPermission.js';
7
7
  import { getEnabledExtensions } from '../server/utils/extensions/scopeCache.js';
8
8
  import triggerHook from '../server/utils/hooks/triggerHook.js';
9
+ import { ADMIN_GLOBALS_DIR } from '../server/utils/admin-global-content/helpers.js';
9
10
 
10
11
  const MIME_TYPES = {
11
12
  '.js': 'application/javascript',
@@ -26,8 +27,17 @@ const ROUTE_FILES = ['GET.js','POST.js','PUT.js','DELETE.js','PATCH.js','HEAD.js
26
27
 
27
28
  const NODE_MODULES = join(process.cwd(), 'node_modules');
28
29
 
29
- // Resolves to dist/admin relative to this file — works both in this repo and as a consumer dependency
30
- const ADMIN_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', 'dist', 'admin');
30
+ /*
31
+ Admin portal source. Defaults to dist/admin relative to this file, which works both in this repo
32
+ and as a consumer dependency. Set `middleware.adminRoot` in the server config (resolved from cwd)
33
+ to point at src/admin instead, so admin pages can be edited without rebuilding.
34
+ */
35
+ const DEFAULT_ADMIN_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', 'dist', 'admin');
36
+
37
+ const resolveAdminRoot = adminRoot => {
38
+ if(!adminRoot) return DEFAULT_ADMIN_ROOT;
39
+ return isAbsolute(adminRoot) ? adminRoot : resolve(process.cwd(), adminRoot);
40
+ };
31
41
 
32
42
  const buildResolveDir = (base, url) => {
33
43
  const parts = url.replace(/\/+$/, '').split('/').filter(Boolean);
@@ -77,15 +87,55 @@ const executeRouteFile = async (filePath, request, response, params = {}) => {
77
87
  return true;
78
88
  };
79
89
 
80
- const serveDir = async (dirPath, method, request, response, resolveDir, rootDir, params = {}) => {
90
+ /*
91
+ Every .page.html render must go through here. The `middleware:before_page` hook lets extensions
92
+ veto a render (throw `{code}` to send that status, or `{redirect}` to redirect), which is how
93
+ extensions guard their own private pages. Rendering a page anywhere without this helper silently
94
+ bypasses those guards.
95
+ */
96
+ const renderGuardedPage = async (pageFilePath, request, response, rootDir, resolveDir, params = {}, extraGlobalDirs = []) => {
97
+ try {
98
+ await triggerHook('middleware:before_page', {
99
+ url: request.url.split('?')[0],
100
+ query: request.query || {},
101
+ params,
102
+ cookies: request.cookies || {},
103
+ }, { bail: true });
104
+ } catch(e) {
105
+ if(e?.redirect) return response.redirect(e.redirect);
106
+ response.writeHead(e?.code || 404, { 'Content-Type': 'text/html; charset=utf-8' });
107
+ response.end('');
108
+ return;
109
+ }
110
+
111
+ const html = await renderExternalPage(pageFilePath, rootDir, resolveDir, {}, {}, 10, extraGlobalDirs);
112
+ response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
113
+ response.end(html);
114
+ };
115
+
116
+ /*
117
+ Directories that contribute *.global.html to an admin render, on top of ADMIN_ROOT itself.
118
+
119
+ Each enabled extension's admin/ directory is read straight from its package at render time — the
120
+ same way its admin pages and public pages are resolved — so nothing is copied into kempo's
121
+ dist/admin on install. Enabling, disabling, upgrading or removing an extension takes effect
122
+ immediately, and a rebuild of kempo cannot discard it.
123
+
124
+ Admin globals authored through the admin UI live in the consumer's project instead, since those
125
+ are genuinely mutable and cannot live inside a package.
126
+ */
127
+ export const adminGlobalDirs = async () => [
128
+ ADMIN_GLOBALS_DIR,
129
+ ...(await getEnabledExtensions()).map(ext => join(NODE_MODULES, ext.name, 'admin')),
130
+ ];
131
+
132
+ const serveDir = async (dirPath, method, request, response, resolveDir, rootDir, params = {}, extraGlobalDirs = []) => {
81
133
  const candidates = [`${method}.js`, 'index.page.html', 'index.js', 'index.html', 'CATCH.js'];
82
134
  for(const candidate of candidates){
83
135
  const candidatePath = join(dirPath, candidate);
84
136
  try { await stat(candidatePath); } catch { continue; }
85
137
  if(candidate.endsWith('.page.html')){
86
- const html = await renderExternalPage(candidatePath, rootDir, resolveDir);
87
- response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
88
- response.end(html);
138
+ await renderGuardedPage(candidatePath, request, response, rootDir, resolveDir, params, extraGlobalDirs);
89
139
  return true;
90
140
  }
91
141
  if(ROUTE_FILES.includes(candidate)){
@@ -101,6 +151,7 @@ const serveDir = async (dirPath, method, request, response, resolveDir, rootDir,
101
151
 
102
152
  export default config => {
103
153
  const PROJECT_PUBLIC = config.rootPath || join(process.cwd(), 'public');
154
+ const ADMIN_ROOT = resolveAdminRoot(config.adminRoot);
104
155
 
105
156
  return async (request, response, next) => {
106
157
  const { path } = request;
@@ -135,9 +186,10 @@ export default config => {
135
186
  if(!url.startsWith('/admin/extension/')){
136
187
  const segments = url.slice('/admin'.length).replace(/^\//, '').split('/').filter(Boolean);
137
188
  const resolveDir = buildResolveDir(ADMIN_ROOT, url);
189
+ const globalDirs = await adminGlobalDirs();
138
190
 
139
191
  if(segments.length === 0){
140
- const served = await serveDir(ADMIN_ROOT, method, request, response, resolveDir, ADMIN_ROOT);
192
+ const served = await serveDir(ADMIN_ROOT, method, request, response, resolveDir, ADMIN_ROOT, {}, globalDirs);
141
193
  if(served) return;
142
194
  } else {
143
195
  const walked = await walkDynamic(ADMIN_ROOT, segments);
@@ -147,14 +199,12 @@ export default config => {
147
199
  try { fileStat = await stat(filePath); } catch { /* not found */ }
148
200
 
149
201
  if(fileStat?.isDirectory()){
150
- const served = await serveDir(filePath, method, request, response, resolveDir, ADMIN_ROOT, params);
202
+ const served = await serveDir(filePath, method, request, response, resolveDir, ADMIN_ROOT, params, globalDirs);
151
203
  if(served) return;
152
204
  } else if(fileStat?.isFile()){
153
205
  const name = filePath.split(/[/\\]/).pop();
154
206
  if(name.endsWith('.page.html')){
155
- const html = await renderExternalPage(filePath, ADMIN_ROOT, resolveDir);
156
- response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
157
- response.end(html);
207
+ await renderGuardedPage(filePath, request, response, ADMIN_ROOT, resolveDir, params, globalDirs);
158
208
  return;
159
209
  }
160
210
  if(ROUTE_FILES.includes(name)){
@@ -182,6 +232,7 @@ export default config => {
182
232
  const adminDir = join(NODE_MODULES, extName, 'admin');
183
233
  const resolveDir = buildResolveDir(ADMIN_ROOT, url);
184
234
  const method = request.method?.toUpperCase() || 'GET';
235
+ const globalDirs = await adminGlobalDirs();
185
236
 
186
237
  const pageCandidates = subPath.endsWith('/')
187
238
  ? [join(adminDir, subPath, 'index.page.html')]
@@ -193,11 +244,9 @@ export default config => {
193
244
  for(const pagePath of pageCandidates){
194
245
  try {
195
246
  await stat(pagePath);
196
- const html = await renderExternalPage(pagePath, ADMIN_ROOT, resolveDir);
197
- response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
198
- response.end(html);
199
- return;
200
- } catch { /* try next */ }
247
+ } catch { continue; }
248
+ await renderGuardedPage(pagePath, request, response, ADMIN_ROOT, resolveDir, {}, globalDirs);
249
+ return;
201
250
  }
202
251
 
203
252
  const staticPath = join(adminDir, subPath === '/' ? 'index.html' : subPath);
@@ -218,14 +267,12 @@ export default config => {
218
267
  let walkedStat;
219
268
  try { walkedStat = await stat(walkedPath); } catch { /* not found */ }
220
269
  if(walkedStat?.isDirectory()){
221
- const served = await serveDir(walkedPath, method, request, response, resolveDir, ADMIN_ROOT, params);
270
+ const served = await serveDir(walkedPath, method, request, response, resolveDir, ADMIN_ROOT, params, globalDirs);
222
271
  if(served) return;
223
272
  } else if(walkedStat?.isFile()){
224
273
  const name = walkedPath.split(/[/\\]/).pop();
225
274
  if(name.endsWith('.page.html')){
226
- const html = await renderExternalPage(walkedPath, ADMIN_ROOT, resolveDir);
227
- response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
228
- response.end(html);
275
+ await renderGuardedPage(walkedPath, request, response, ADMIN_ROOT, resolveDir, params, globalDirs);
229
276
  return;
230
277
  }
231
278
  if(ROUTE_FILES.includes(name)){
@@ -284,18 +331,7 @@ export default config => {
284
331
  } else if(fileStat?.isFile()){
285
332
  const name = filePath.split(/[/\\]/).pop();
286
333
  if(name.endsWith('.page.html')){
287
- try {
288
- await triggerHook('middleware:before_page', { url, query: request.query || {}, params, cookies: request.cookies || {} }, { bail: true });
289
- } catch(e) {
290
- if(e?.redirect) return response.redirect(e.redirect);
291
- const code = e?.code || 404;
292
- response.writeHead(code, { 'Content-Type': 'text/html; charset=utf-8' });
293
- response.end('');
294
- return;
295
- }
296
- const html = await renderExternalPage(filePath, PROJECT_PUBLIC, resolveDir);
297
- response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
298
- response.end(html);
334
+ await renderGuardedPage(filePath, request, response, PROJECT_PUBLIC, resolveDir, params);
299
335
  return;
300
336
  }
301
337
  if(ROUTE_FILES.includes(name)){
@@ -328,18 +364,7 @@ export default config => {
328
364
 
329
365
  for(const pageFilePath of candidates){
330
366
  try { await stat(pageFilePath); } catch { continue; }
331
- try {
332
- await triggerHook('middleware:before_page', { url, query: request.query || {}, params: {}, cookies: request.cookies || {} }, { bail: true });
333
- } catch(e) {
334
- if(e?.redirect) return response.redirect(e.redirect);
335
- const code = e?.code || 404;
336
- response.writeHead(code, { 'Content-Type': 'text/html; charset=utf-8' });
337
- response.end('');
338
- return;
339
- }
340
- const html = await renderExternalPage(pageFilePath, PROJECT_PUBLIC, resolveDir);
341
- response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
342
- response.end(html);
367
+ await renderGuardedPage(pageFilePath, request, response, PROJECT_PUBLIC, resolveDir);
343
368
  return;
344
369
  }
345
370
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kempo",
3
- "version": "4.2.20",
3
+ "version": "4.2.21",
4
4
  "type": "module",
5
5
  "description": "A fullstack CMS framework for creating websites with user authentication",
6
6
  "scripts": {
@@ -12,7 +12,10 @@
12
12
  "db:studio": "drizzle-kit studio",
13
13
  "makeAdmin": "node ./scripts/make-admin.js",
14
14
  "removeAdmin": "node ./scripts/removeAdmin.js",
15
- "test:email": "node ./scripts/test-email.js"
15
+ "test:email": "node ./scripts/test-email.js",
16
+ "test": "kempo-test -n",
17
+ "test:node": "kempo-test -n",
18
+ "link:local": "npm install ../kempo-server ../kempo-ui --no-save"
16
19
  },
17
20
  "author": "Dustin Poissant",
18
21
  "license": "MIT",
@@ -44,16 +47,20 @@
44
47
  "dotenv": "^17.2.3",
45
48
  "drizzle-kit": "^0.31.7",
46
49
  "drizzle-orm": "^0.44.7",
47
- "html-minifier-terser": "^7.2.0",
48
50
  "inquirer": "^12.6.1",
49
- "kempo": "^4.2.16",
50
- "kempo-server": "^3.1.0",
51
- "kempo-testing-framework": "^1.4.6",
52
- "kempo-ui": "^0.4.17",
53
51
  "lexical": "^0.42.0",
54
52
  "monaco-editor": "^0.55.1",
55
53
  "postgres": "^3.4.7",
56
- "resend": "^6.5.2",
54
+ "resend": "^6.5.2"
55
+ },
56
+ "peerDependencies": {
57
+ "kempo-css": ">=2.2.5",
58
+ "kempo-server": ">=3.1.4",
59
+ "kempo-ui": ">=0.4.39"
60
+ },
61
+ "devDependencies": {
62
+ "html-minifier-terser": "^7.2.0",
63
+ "kempo-testing-framework": "^1.4.6",
57
64
  "terser": "^5.46.2"
58
65
  },
59
66
  "repository": {
@@ -1,10 +1,10 @@
1
- import { readFile, writeFile } from 'fs/promises';
1
+ import { readFile, writeFile, mkdir } from 'fs/promises';
2
2
  import { join } from 'path';
3
3
  import { existsSync } from 'fs';
4
4
  import crypto from 'crypto';
5
- import { ADMIN_GLOBAL_FILE, parseEntries, serializeEntries } from './helpers.js';
5
+ import { ADMIN_GLOBAL_FILE, parseEntries, serializeEntries, ADMIN_GLOBALS_DIR } from './helpers.js';
6
6
 
7
- export default async ({ adminDir, name, location, priority, owner, markup }) => {
7
+ export default async ({ adminDir = ADMIN_GLOBALS_DIR, name, location, priority, owner, markup }) => {
8
8
  if(!adminDir){
9
9
  return [{ code: 400, msg: 'Admin directory is required' }, null];
10
10
  }
@@ -37,6 +37,7 @@ export default async ({ adminDir, name, location, priority, owner, markup }) =>
37
37
  };
38
38
 
39
39
  entries.push(entry);
40
+ await mkdir(adminDir, { recursive: true });
40
41
  await writeFile(filePath, serializeEntries(entries) + '\n', 'utf-8');
41
42
 
42
43
  return [null, entry];