kempo 4.7.0 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +10 -4
  2. package/bin/cli.js +38 -34
  3. package/dist/admin/components/EmailTemplates.js +25 -0
  4. package/dist/admin/components/EmailTemplates.js.map +1 -0
  5. package/dist/admin/components/Emails.js +49 -0
  6. package/dist/admin/components/Emails.js.map +1 -0
  7. package/dist/admin/components/Updates.js +117 -0
  8. package/dist/admin/components/Updates.js.map +1 -0
  9. package/dist/admin/components/settings/AdminSettings.js +7 -0
  10. package/dist/admin/components/settings/AdminSettings.js.map +1 -0
  11. package/dist/admin/components/settings/BooleanSetting.js +2 -0
  12. package/dist/admin/components/settings/BooleanSetting.js.map +1 -0
  13. package/dist/admin/components/settings/JsonSetting.js +2 -0
  14. package/dist/admin/components/settings/JsonSetting.js.map +1 -0
  15. package/dist/admin/components/settings/NumberSetting.js +2 -0
  16. package/dist/admin/components/settings/NumberSetting.js.map +1 -0
  17. package/dist/admin/components/settings/SecretSetting.js +2 -0
  18. package/dist/admin/components/settings/SecretSetting.js.map +1 -0
  19. package/dist/admin/components/settings/Setting.js +2 -0
  20. package/dist/admin/components/settings/Setting.js.map +1 -0
  21. package/dist/admin/components/settings/SettingEditor.js +2 -0
  22. package/dist/admin/components/settings/SettingEditor.js.map +1 -0
  23. package/dist/admin/components/settings/SettingsPanel.js +24 -0
  24. package/dist/admin/components/settings/SettingsPanel.js.map +1 -0
  25. package/dist/admin/components/settings/StringSetting.js +2 -0
  26. package/dist/admin/components/settings/StringSetting.js.map +1 -0
  27. package/dist/admin/components/settings/humanize.js +2 -0
  28. package/dist/admin/components/settings/humanize.js.map +1 -0
  29. package/dist/admin/emails/index.page.html +14 -0
  30. package/dist/admin/icons/mail.svg +1 -0
  31. package/dist/admin/nav.fragment.html +12 -0
  32. package/dist/admin/settings/[owner]/[name]/index.page.html +1 -1
  33. package/dist/admin/settings/index.page.html +6 -289
  34. package/dist/admin/updates/index.page.html +14 -0
  35. package/dist/kempo/api/email-templates/GET.js +2 -0
  36. package/dist/kempo/api/email-templates/GET.js.map +1 -0
  37. package/dist/kempo/api/email-templates/file/DELETE.js +2 -0
  38. package/dist/kempo/api/email-templates/file/DELETE.js.map +1 -0
  39. package/dist/kempo/api/email-templates/file/GET.js +2 -0
  40. package/dist/kempo/api/email-templates/file/GET.js.map +1 -0
  41. package/dist/kempo/api/email-templates/file/PUT.js +2 -0
  42. package/dist/kempo/api/email-templates/file/PUT.js.map +1 -0
  43. package/dist/kempo/api/email-templates/preview/GET.js +2 -0
  44. package/dist/kempo/api/email-templates/preview/GET.js.map +1 -0
  45. package/dist/kempo/api/emails/GET.js +2 -0
  46. package/dist/kempo/api/emails/GET.js.map +1 -0
  47. package/dist/kempo/api/emails/[id]/GET.js +2 -0
  48. package/dist/kempo/api/emails/[id]/GET.js.map +1 -0
  49. package/dist/kempo/api/emails/[id]/retry/POST.js +2 -0
  50. package/dist/kempo/api/emails/[id]/retry/POST.js.map +1 -0
  51. package/dist/kempo/api/emails/test/POST.js +2 -0
  52. package/dist/kempo/api/emails/test/POST.js.map +1 -0
  53. package/dist/kempo/api/settings/[owner]/[name]/POST.js +1 -1
  54. package/dist/kempo/api/settings/[owner]/[name]/POST.js.map +1 -1
  55. package/dist/kempo/api/updates/GET.js +2 -0
  56. package/dist/kempo/api/updates/GET.js.map +1 -0
  57. package/dist/kempo/api/updates/apply/POST.js +2 -0
  58. package/dist/kempo/api/updates/apply/POST.js.map +1 -0
  59. package/dist/kempo/api/updates/check/POST.js +2 -0
  60. package/dist/kempo/api/updates/check/POST.js.map +1 -0
  61. package/dist/kempo/api/updates/discard/POST.js +2 -0
  62. package/dist/kempo/api/updates/discard/POST.js.map +1 -0
  63. package/dist/kempo/api/updates/prepare/POST.js +2 -0
  64. package/dist/kempo/api/updates/prepare/POST.js.map +1 -0
  65. package/dist/kempo/api/updates/rollback/POST.js +2 -0
  66. package/dist/kempo/api/updates/rollback/POST.js.map +1 -0
  67. package/dist/kempo/fetch.js +1 -1
  68. package/dist/kempo/fetch.js.map +1 -1
  69. package/dist/kempo/sdk.js +1 -1
  70. package/dist/kempo/sdk.js.map +1 -1
  71. package/docker/.dockerignore +9 -0
  72. package/docker/Dockerfile +25 -0
  73. package/docker/docker-compose.prod.yml +39 -0
  74. package/docker/entrypoint.mjs +96 -0
  75. package/middleware/kempo.js +71 -0
  76. package/package.json +4 -3
  77. package/server/db/schema.js +44 -0
  78. package/server/db/upgrades/README.md +20 -0
  79. package/server/sdk.js +8 -0
  80. package/server/utils/email/defaultSender.js +2 -0
  81. package/server/utils/email/dispatchEmail.js +56 -0
  82. package/server/utils/email/emailSettings.js +21 -0
  83. package/server/utils/email/emailTemplatePaths.js +36 -0
  84. package/server/utils/email/getEmail.js +14 -0
  85. package/server/utils/email/getSenderEmail.js +11 -0
  86. package/server/utils/email/getSenderFrom.js +18 -0
  87. package/server/utils/email/isValidSender.js +4 -0
  88. package/server/utils/email/listEmailTemplates.js +23 -0
  89. package/server/utils/email/listEmails.js +35 -0
  90. package/server/utils/email/maintainEmails.js +46 -0
  91. package/server/utils/email/pruneEmails.js +29 -0
  92. package/server/utils/email/readEmailTemplate.js +28 -0
  93. package/server/utils/email/resetEmailTemplate.js +15 -0
  94. package/server/utils/email/retryEmail.js +21 -0
  95. package/server/utils/email/saveEmailTemplate.js +38 -0
  96. package/server/utils/email/sendEmail.js +22 -32
  97. package/server/utils/email/sendEmailFromTemplate.js +2 -2
  98. package/server/utils/extensions/checkExtensionUpdate.js +9 -36
  99. package/server/utils/extensions/reconcileExtensions.js +90 -0
  100. package/server/utils/extensions/updateExtension.js +14 -153
  101. package/server/utils/extensions/upgradeExtension.js +117 -0
  102. package/server/utils/extensions/writeSiteFile.js +66 -0
  103. package/server/utils/hooks/triggerHook.js +17 -4
  104. package/server/utils/settings/listSettings.js +10 -5
  105. package/server/utils/settings/setSetting.js +4 -0
  106. package/server/utils/settings/settingRules.js +21 -0
  107. package/server/utils/settings/systemSettings.js +41 -0
  108. package/server/utils/setup/runUpgrades.js +70 -0
  109. package/server/utils/setup/seedDatabase.js +5 -60
  110. package/server/utils/setup/seedIfNew.js +21 -0
  111. package/server/utils/setup/syncCoreSchema.js +130 -0
  112. package/server/utils/setup/systemPermissions.js +77 -0
  113. package/server/utils/updates/applyStagedUpdate.js +95 -0
  114. package/server/utils/updates/applyUpdate.js +76 -0
  115. package/server/utils/updates/backupDatabase.js +35 -0
  116. package/server/utils/updates/discardUpdate.js +11 -0
  117. package/server/utils/updates/extensionTargets.js +101 -0
  118. package/server/utils/updates/fetchManifest.js +26 -0
  119. package/server/utils/updates/getExtensionUpdates.js +70 -0
  120. package/server/utils/updates/getInstallInfo.js +25 -0
  121. package/server/utils/updates/getUpdateStatus.js +57 -0
  122. package/server/utils/updates/helpers.js +30 -0
  123. package/server/utils/updates/notifySchemaAttention.js +35 -0
  124. package/server/utils/updates/npm.js +41 -0
  125. package/server/utils/updates/prepareUpdate.js +109 -0
  126. package/server/utils/updates/releaseStatus.js +23 -0
  127. package/server/utils/updates/restart.js +64 -0
  128. package/server/utils/updates/rollbackUpdate.js +56 -0
  129. package/server/utils/updates/runUpdateCheck.js +52 -0
  130. package/server/utils/updates/runtime.js +15 -0
  131. package/server/utils/updates/siteLayout.js +200 -0
  132. package/server/utils/updates/starterFiles.js +118 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\api\\emails\\[id]\\GET.js","names":["currentUserHasPermission","getEmail","async","request","response","permError","hasPermission","cookies","session_token","status","code","json","error","msg","found","params","id"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\nimport getEmail from '../../../../../server/utils/email/getEmail.js';\n\n/* One email with its whole body. */\nexport default async (request, response) => {\n\tconst [permError, hasPermission] = await currentUserHasPermission(request.cookies.session_token, 'system:emails:read');\n\tif(permError) return response.status(permError.code).json({ error: permError.msg });\n\tif(!hasPermission) return response.status(403).json({ error: 'Insufficient permissions' });\n\n\tconst [error, found] = await getEmail(request.params.id);\n\tif(error) return response.status(error.code).json({ error: error.msg });\n\n\tresponse.json(found);\n};\n"],"mappings":"OAAOA,MAA8B,6EAC9BC,MAAc,+DAGNC,MAAOC,EAASC,KAC9B,MAAOC,EAAWC,SAAuBN,EAAyBG,EAAQI,QAAQC,cAAe,sBACjG,GAAGH,EAAW,OAAOD,EAASK,OAAOJ,EAAUK,MAAMC,KAAK,CAAEC,MAAOP,EAAUQ,MAC7E,IAAIP,EAAe,OAAOF,EAASK,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAE7D,MAAOA,EAAOE,SAAeb,EAASE,EAAQY,OAAOC,IACrD,GAAGJ,EAAO,OAAOR,EAASK,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAEjET,EAASO,KAAKG","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import s from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../../../server/utils/email/retryEmail.js";export default async(e,o)=>{const[t,i]=await s(e.cookies.session_token,"system:emails:manage");if(t)return o.status(t.code).json({error:t.msg});if(!i)return o.status(403).json({error:"Insufficient permissions"});const[n,a]=await r(e.params.id);if(n)return 502===n.code||503===n.code?o.json({sent:!1,error:n.msg}):o.status(n.code).json({error:n.msg});o.json({sent:!0,...a})};
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\emails\[id]\retry\POST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\api\\emails\\[id]\\retry\\POST.js","names":["currentUserHasPermission","retryEmail","async","request","response","permError","hasPermission","cookies","session_token","status","code","json","error","msg","result","params","id","sent"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../../server/utils/permissions/currentUserHasPermission.js';\nimport retryEmail from '../../../../../../server/utils/email/retryEmail.js';\n\n/* Tries an email that is waiting or failed again. Answers with how that try went. */\nexport default async (request, response) => {\n\tconst [permError, hasPermission] = await currentUserHasPermission(request.cookies.session_token, 'system:emails:manage');\n\tif(permError) return response.status(permError.code).json({ error: permError.msg });\n\tif(!hasPermission) return response.status(403).json({ error: 'Insufficient permissions' });\n\n\tconst [error, result] = await retryEmail(request.params.id);\n\tif(error) return error.code === 502 || error.code === 503 ? response.json({ sent: false, error: error.msg }) : response.status(error.code).json({ error: error.msg });\n\n\tresponse.json({ sent: true, ...result });\n};\n"],"mappings":"OAAOA,MAA8B,gFAC9BC,MAAgB,oEAGRC,MAAOC,EAASC,KAC9B,MAAOC,EAAWC,SAAuBN,EAAyBG,EAAQI,QAAQC,cAAe,wBACjG,GAAGH,EAAW,OAAOD,EAASK,OAAOJ,EAAUK,MAAMC,KAAK,CAAEC,MAAOP,EAAUQ,MAC7E,IAAIP,EAAe,OAAOF,EAASK,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAE7D,MAAOA,EAAOE,SAAgBb,EAAWE,EAAQY,OAAOC,IACxD,GAAGJ,EAAO,OAAsB,MAAfA,EAAMF,MAA+B,MAAfE,EAAMF,KAAeN,EAASO,KAAK,CAAEM,MAAM,EAAOL,MAAOA,EAAMC,MAAST,EAASK,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAE/JT,EAASO,KAAK,CAAEM,MAAM,KAASH","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/email/sendEmail.js";import t from"../../../../../server/utils/email/isValidSender.js";export default async(r,i)=>{const[o,n]=await s(r.cookies.session_token,"system:emails:manage");if(o)return i.status(o.code).json({error:o.msg});if(!n)return i.status(403).json({error:"Insufficient permissions"});const a=String(r.body?.to??"").trim();if(!t(a)||a.includes("<"))return i.status(400).json({error:"Enter an email address to send the test to"});const[m,l]=await e({to:a,subject:"A test email from Kempo",html:"<p>This is a test email. If you can read it, sending email works.</p>",template:"test"});if(m)return i.json({sent:!1,error:m.msg,emailId:m.emailId});i.json({sent:!0,...l})};
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\emails\test\POST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\api\\emails\\test\\POST.js","names":["currentUserHasPermission","sendEmail","isValidSender","async","request","response","permError","hasPermission","cookies","session_token","status","code","json","error","msg","to","String","body","trim","includes","result","subject","html","template","sent","emailId"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\nimport sendEmail from '../../../../../server/utils/email/sendEmail.js';\nimport isValidSender from '../../../../../server/utils/email/isValidSender.js';\n\n/* Sends a short test email to an address, through whichever email extension is installed. Body: `{ to }`. Answers with how it went. */\nexport default async (request, response) => {\n\tconst [permError, hasPermission] = await currentUserHasPermission(request.cookies.session_token, 'system:emails:manage');\n\tif(permError) return response.status(permError.code).json({ error: permError.msg });\n\tif(!hasPermission) return response.status(403).json({ error: 'Insufficient permissions' });\n\n\tconst to = String(request.body?.to ?? '').trim();\n\tif(!isValidSender(to) || to.includes('<')) return response.status(400).json({ error: 'Enter an email address to send the test to' });\n\n\tconst [error, result] = await sendEmail({\n\t\tto,\n\t\tsubject: 'A test email from Kempo',\n\t\thtml: '<p>This is a test email. If you can read it, sending email works.</p>',\n\t\ttemplate: 'test',\n\t});\n\tif(error) return response.json({ sent: false, error: error.msg, emailId: error.emailId });\n\n\tresponse.json({ sent: true, ...result });\n};\n"],"mappings":"OAAOA,MAA8B,6EAC9BC,MAAe,wDACfC,MAAmB,oEAGXC,MAAOC,EAASC,KAC9B,MAAOC,EAAWC,SAAuBP,EAAyBI,EAAQI,QAAQC,cAAe,wBACjG,GAAGH,EAAW,OAAOD,EAASK,OAAOJ,EAAUK,MAAMC,KAAK,CAAEC,MAAOP,EAAUQ,MAC7E,IAAIP,EAAe,OAAOF,EAASK,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAE7D,MAAME,EAAKC,OAAOZ,EAAQa,MAAMF,IAAM,IAAIG,OAC1C,IAAIhB,EAAca,IAAOA,EAAGI,SAAS,KAAM,OAAOd,EAASK,OAAO,KAAKE,KAAK,CAAEC,MAAO,+CAErF,MAAOA,EAAOO,SAAgBnB,EAAU,CACvCc,KACAM,QAAS,0BACTC,KAAM,wEACNC,SAAU,SAEX,GAAGV,EAAO,OAAOR,EAASO,KAAK,CAAEY,MAAM,EAAOX,MAAOA,EAAMC,IAAKW,QAASZ,EAAMY,UAE/EpB,EAASO,KAAK,CAAEY,MAAM,KAASJ","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import s from"../../../../../../server/utils/auth/getSession.js";import t from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../../server/utils/settings/setSetting.js";import r from"../../../../../../server/utils/settings/getSettingWithMetadata.js";export default async(o,n)=>{const i=o.cookies.session_token,[a,u]=await s({token:i});if(a||!u)return n.status(401).json({error:"Unauthorized"});const{owner:m,name:c}=o.params;if("system"===m){const[s,e]=await t(i,"system:settings:update");if(s||!e)return n.status(403).json({error:"Forbidden: Cannot modify system settings"})}else if("custom"===m){const[s,e]=await t(i,"system:custom-settings:manage");if(s||!e)return n.status(403).json({error:"Forbidden: Cannot manage custom settings"})}else{const[s,e]=await t(i,"system:extension:configure");if(s||!e)return n.status(403).json({error:"Forbidden: Cannot modify extension settings"})}const{value:d,type:f,isPublic:g,description:j}=o.body;if(void 0===d)return n.status(400).json({error:"Value is required"});if("custom"!==m){const[s,t]=await r(m,c);if(s)return n.status(s.code).json({error:s.msg});const[o,i]=await e(m,c,d,t.type,t.isPublic,t.description);return o?n.status(o.code).json({error:o.msg}):n.json(i)}const[p,l]=await e(m,c,d,f,g,j);if(p)return n.status(p.code).json({error:p.msg});n.json(l)};
1
+ import s from"../../../../../../server/utils/auth/getSession.js";import t from"../../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../../server/utils/settings/setSetting.js";import r from"../../../../../../server/utils/settings/getSettingWithMetadata.js";export default async(o,n)=>{const i=o.cookies.session_token,[a,u]=await s({token:i});if(a||!u)return n.status(401).json({error:"Unauthorized"});const{owner:m,name:c}=o.params;if("system"===m){const[s,e]=await t(i,"system:settings:update");if(s||!e)return n.status(403).json({error:"Forbidden: Cannot modify system settings"})}else if("custom"===m){const[s,e]=await t(i,"system:custom-settings:manage");if(s||!e)return n.status(403).json({error:"Forbidden: Cannot manage custom settings"})}else{const[s,e]=await t(i,"system:extensions:manage");if(s||!e)return n.status(403).json({error:"Forbidden: Cannot modify extension settings"})}const{value:d,type:f,isPublic:g,description:j}=o.body;if(void 0===d)return n.status(400).json({error:"Value is required"});if("custom"!==m){const[s,t]=await r(m,c);if(s)return n.status(s.code).json({error:s.msg});const[o,i]=await e(m,c,d,t.type,t.isPublic,t.description);return o?n.status(o.code).json({error:o.msg}):n.json(i)}const[p,l]=await e(m,c,d,f,g,j);if(p)return n.status(p.code).json({error:p.msg});n.json(l)};
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\settings\[owner]\[name]\POST.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\api\\settings\\[owner]\\[name]\\POST.js","names":["getSession","currentUserHasPermission","setSetting","getSettingWithMetadata","async","request","response","sessionToken","cookies","session_token","sessionError","session","token","status","json","error","owner","name","params","permError","hasPermission","value","type","isPublic","description","body","undefined","existingError","existing","code","msg","result"],"sources":["0"],"sourcesContent":["import getSession from '../../../../../../server/utils/auth/getSession.js';\r\nimport currentUserHasPermission from '../../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport setSetting from '../../../../../../server/utils/settings/setSetting.js';\r\nimport getSettingWithMetadata from '../../../../../../server/utils/settings/getSettingWithMetadata.js';\r\n\r\nexport default async (request, response) => {\r\n const sessionToken = request.cookies.session_token;\r\n const [sessionError, session] = await getSession({ token: sessionToken });\r\n if(sessionError || !session){\r\n return response.status(401).json({ error: 'Unauthorized' });\r\n }\r\n\r\n const { owner, name } = request.params;\r\n\r\n if(owner === 'system'){\r\n const [permError, hasPermission] = await currentUserHasPermission(sessionToken, 'system:settings:update');\r\n if(permError || !hasPermission){\r\n return response.status(403).json({ error: 'Forbidden: Cannot modify system settings' });\r\n }\r\n } else if(owner === 'custom'){\r\n const [permError, hasPermission] = await currentUserHasPermission(sessionToken, 'system:custom-settings:manage');\r\n if(permError || !hasPermission){\r\n return response.status(403).json({ error: 'Forbidden: Cannot manage custom settings' });\r\n }\r\n } else {\r\n const [permError, hasPermission] = await currentUserHasPermission(sessionToken, 'system:extension:configure');\r\n if(permError || !hasPermission){\r\n return response.status(403).json({ error: 'Forbidden: Cannot modify extension settings' });\r\n }\r\n }\r\n\r\n const { value, type, isPublic, description } = request.body;\r\n\r\n if(value === undefined){\r\n return response.status(400).json({ error: 'Value is required' });\r\n }\r\n\r\n /*\r\n System and extension settings: only value can change, metadata is preserved\r\n */\r\n\r\n if(owner !== 'custom'){\r\n const [existingError, existing] = await getSettingWithMetadata(owner, name);\r\n if(existingError){\r\n return response.status(existingError.code).json({ error: existingError.msg });\r\n }\r\n const [error, result] = await setSetting(owner, name, value, existing.type, existing.isPublic, existing.description);\r\n if(error){\r\n return response.status(error.code).json({ error: error.msg });\r\n }\r\n return response.json(result);\r\n }\r\n\r\n const [error, result] = await setSetting(owner, name, value, type, isPublic, description);\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(result);\r\n};\r\n"],"mappings":"OAAOA,MAAgB,2DAChBC,MAA8B,gFAC9BC,MAAgB,+DAChBC,MAA4B,mFAEpBC,MAAOC,EAASC,KAC7B,MAAMC,EAAeF,EAAQG,QAAQC,eAC9BC,EAAcC,SAAiBX,EAAW,CAAEY,MAAOL,IAC1D,GAAGG,IAAiBC,EAClB,OAAOL,EAASO,OAAO,KAAKC,KAAK,CAAEC,MAAO,iBAG5C,MAAMC,MAAEA,EAAKC,KAAEA,GAASZ,EAAQa,OAEhC,GAAa,WAAVF,EAAmB,CACpB,MAAOG,EAAWC,SAAuBnB,EAAyBM,EAAc,0BAChF,GAAGY,IAAcC,EACf,OAAOd,EAASO,OAAO,KAAKC,KAAK,CAAEC,MAAO,4CAE9C,MAAO,GAAa,WAAVC,EAAmB,CAC3B,MAAOG,EAAWC,SAAuBnB,EAAyBM,EAAc,iCAChF,GAAGY,IAAcC,EACf,OAAOd,EAASO,OAAO,KAAKC,KAAK,CAAEC,MAAO,4CAE9C,KAAO,CACL,MAAOI,EAAWC,SAAuBnB,EAAyBM,EAAc,8BAChF,GAAGY,IAAcC,EACf,OAAOd,EAASO,OAAO,KAAKC,KAAK,CAAEC,MAAO,+CAE9C,CAEA,MAAMM,MAAEA,EAAKC,KAAEA,EAAIC,SAAEA,EAAQC,YAAEA,GAAgBnB,EAAQoB,KAEvD,QAAaC,IAAVL,EACD,OAAOf,EAASO,OAAO,KAAKC,KAAK,CAAEC,MAAO,sBAO5C,GAAa,WAAVC,EAAmB,CACpB,MAAOW,EAAeC,SAAkBzB,EAAuBa,EAAOC,GACtE,GAAGU,EACD,OAAOrB,EAASO,OAAOc,EAAcE,MAAMf,KAAK,CAAEC,MAAOY,EAAcG,MAEzE,MAAOf,EAAOgB,SAAgB7B,EAAWc,EAAOC,EAAMI,EAAOO,EAASN,KAAMM,EAASL,SAAUK,EAASJ,aACxG,OAAGT,EACMT,EAASO,OAAOE,EAAMc,MAAMf,KAAK,CAAEC,MAAOA,EAAMe,MAElDxB,EAASQ,KAAKiB,EACvB,CAEA,MAAOhB,EAAOgB,SAAgB7B,EAAWc,EAAOC,EAAMI,EAAOC,EAAMC,EAAUC,GAE7E,GAAGT,EACD,OAAOT,EAASO,OAAOE,EAAMc,MAAMf,KAAK,CAAEC,MAAOA,EAAMe,MAGzDxB,EAASQ,KAAKiB","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\api\\settings\\[owner]\\[name]\\POST.js","names":["getSession","currentUserHasPermission","setSetting","getSettingWithMetadata","async","request","response","sessionToken","cookies","session_token","sessionError","session","token","status","json","error","owner","name","params","permError","hasPermission","value","type","isPublic","description","body","undefined","existingError","existing","code","msg","result"],"sources":["0"],"sourcesContent":["import getSession from '../../../../../../server/utils/auth/getSession.js';\nimport currentUserHasPermission from '../../../../../../server/utils/permissions/currentUserHasPermission.js';\nimport setSetting from '../../../../../../server/utils/settings/setSetting.js';\nimport getSettingWithMetadata from '../../../../../../server/utils/settings/getSettingWithMetadata.js';\n\nexport default async (request, response) => {\n const sessionToken = request.cookies.session_token;\n const [sessionError, session] = await getSession({ token: sessionToken });\n if(sessionError || !session){\n return response.status(401).json({ error: 'Unauthorized' });\n }\n\n const { owner, name } = request.params;\n\n if(owner === 'system'){\n const [permError, hasPermission] = await currentUserHasPermission(sessionToken, 'system:settings:update');\n if(permError || !hasPermission){\n return response.status(403).json({ error: 'Forbidden: Cannot modify system settings' });\n }\n } else if(owner === 'custom'){\n const [permError, hasPermission] = await currentUserHasPermission(sessionToken, 'system:custom-settings:manage');\n if(permError || !hasPermission){\n return response.status(403).json({ error: 'Forbidden: Cannot manage custom settings' });\n }\n } else {\n const [permError, hasPermission] = await currentUserHasPermission(sessionToken, 'system:extensions:manage');\n if(permError || !hasPermission){\n return response.status(403).json({ error: 'Forbidden: Cannot modify extension settings' });\n }\n }\n\n const { value, type, isPublic, description } = request.body;\n\n if(value === undefined){\n return response.status(400).json({ error: 'Value is required' });\n }\n\n /*\n System and extension settings: only value can change, metadata is preserved\n */\n\n if(owner !== 'custom'){\n const [existingError, existing] = await getSettingWithMetadata(owner, name);\n if(existingError){\n return response.status(existingError.code).json({ error: existingError.msg });\n }\n const [error, result] = await setSetting(owner, name, value, existing.type, existing.isPublic, existing.description);\n if(error){\n return response.status(error.code).json({ error: error.msg });\n }\n return response.json(result);\n }\n\n const [error, result] = await setSetting(owner, name, value, type, isPublic, description);\n\n if(error){\n return response.status(error.code).json({ error: error.msg });\n }\n\n response.json(result);\n};\n"],"mappings":"OAAOA,MAAgB,2DAChBC,MAA8B,gFAC9BC,MAAgB,+DAChBC,MAA4B,mFAEpBC,MAAOC,EAASC,KAC7B,MAAMC,EAAeF,EAAQG,QAAQC,eAC9BC,EAAcC,SAAiBX,EAAW,CAAEY,MAAOL,IAC1D,GAAGG,IAAiBC,EAClB,OAAOL,EAASO,OAAO,KAAKC,KAAK,CAAEC,MAAO,iBAG5C,MAAMC,MAAEA,EAAKC,KAAEA,GAASZ,EAAQa,OAEhC,GAAa,WAAVF,EAAmB,CACpB,MAAOG,EAAWC,SAAuBnB,EAAyBM,EAAc,0BAChF,GAAGY,IAAcC,EACf,OAAOd,EAASO,OAAO,KAAKC,KAAK,CAAEC,MAAO,4CAE9C,MAAO,GAAa,WAAVC,EAAmB,CAC3B,MAAOG,EAAWC,SAAuBnB,EAAyBM,EAAc,iCAChF,GAAGY,IAAcC,EACf,OAAOd,EAASO,OAAO,KAAKC,KAAK,CAAEC,MAAO,4CAE9C,KAAO,CACL,MAAOI,EAAWC,SAAuBnB,EAAyBM,EAAc,4BAChF,GAAGY,IAAcC,EACf,OAAOd,EAASO,OAAO,KAAKC,KAAK,CAAEC,MAAO,+CAE9C,CAEA,MAAMM,MAAEA,EAAKC,KAAEA,EAAIC,SAAEA,EAAQC,YAAEA,GAAgBnB,EAAQoB,KAEvD,QAAaC,IAAVL,EACD,OAAOf,EAASO,OAAO,KAAKC,KAAK,CAAEC,MAAO,sBAO5C,GAAa,WAAVC,EAAmB,CACpB,MAAOW,EAAeC,SAAkBzB,EAAuBa,EAAOC,GACtE,GAAGU,EACD,OAAOrB,EAASO,OAAOc,EAAcE,MAAMf,KAAK,CAAEC,MAAOY,EAAcG,MAEzE,MAAOf,EAAOgB,SAAgB7B,EAAWc,EAAOC,EAAMI,EAAOO,EAASN,KAAMM,EAASL,SAAUK,EAASJ,aACxG,OAAGT,EACMT,EAASO,OAAOE,EAAMc,MAAMf,KAAK,CAAEC,MAAOA,EAAMe,MAElDxB,EAASQ,KAAKiB,EACvB,CAEA,MAAOhB,EAAOgB,SAAgB7B,EAAWc,EAAOC,EAAMI,EAAOC,EAAMC,EAAUC,GAE7E,GAAGT,EACD,OAAOT,EAASO,OAAOE,EAAMc,MAAMf,KAAK,CAAEC,MAAOA,EAAMe,MAGzDxB,EAASQ,KAAKiB","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import s from"../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../server/utils/updates/getUpdateStatus.js";export default async(r,t)=>{const[o,i]=await s(r.cookies.session_token,"system:updates:manage");if(o)return t.status(o.code).json({error:o.msg});if(!i)return t.status(403).json({error:"Insufficient permissions"});const[n,a]=await e({offline:"true"===r.query.offline});if(n)return t.status(n.code).json({error:n.msg});t.json(a)};
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\GET.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\api\\updates\\GET.js","names":["currentUserHasPermission","getUpdateStatus","async","request","response","permError","hasPermission","cookies","session_token","status","code","json","error","msg","data","offline","query"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../server/utils/permissions/currentUserHasPermission.js';\nimport getUpdateStatus from '../../../../server/utils/updates/getUpdateStatus.js';\n\n/* Where the site stands: what is running, the newest version on npm and whether it can be installed. `?offline=true` never asks npm, which is what the screen polls with while the server restarts. */\nexport default async (request, response) => {\n\tconst [permError, hasPermission] = await currentUserHasPermission(request.cookies.session_token, 'system:updates:manage');\n\tif(permError) return response.status(permError.code).json({ error: permError.msg });\n\tif(!hasPermission) return response.status(403).json({ error: 'Insufficient permissions' });\n\n\tconst [error, data] = await getUpdateStatus({ offline: request.query.offline === 'true' });\n\tif(error) return response.status(error.code).json({ error: error.msg });\n\n\tresponse.json(data);\n};\n"],"mappings":"OAAOA,MAA8B,0EAC9BC,MAAqB,qEAGbC,MAAOC,EAASC,KAC9B,MAAOC,EAAWC,SAAuBN,EAAyBG,EAAQI,QAAQC,cAAe,yBACjG,GAAGH,EAAW,OAAOD,EAASK,OAAOJ,EAAUK,MAAMC,KAAK,CAAEC,MAAOP,EAAUQ,MAC7E,IAAIP,EAAe,OAAOF,EAASK,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAE7D,MAAOA,EAAOE,SAAcb,EAAgB,CAAEc,QAAmC,SAA1BZ,EAAQa,MAAMD,UACrE,GAAGH,EAAO,OAAOR,EAASK,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAEjET,EAASO,KAAKG","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/updates/applyUpdate.js";import r from"../../../../../server/utils/updates/applyStagedUpdate.js";export default async(t,o)=>{const[i,n]=await s(t.cookies.session_token,"system:updates:manage");if(i)return o.status(i.code).json({error:i.msg});if(!n)return o.status(403).json({error:"Insufficient permissions"});const[a,d]=process.env.KEMPO_SITE_ROOT?await r({confirm:t.body?.confirm||{}}):await e({version:null===t.body?.version?null:t.body?.version||"latest",extensions:Array.isArray(t.body?.extensions)?t.body.extensions:[]});if(a)return o.status(a.code).json({error:a.msg,...a.details?{details:a.details}:{}});o.json(d)};
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\apply\POST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\api\\updates\\apply\\POST.js","names":["currentUserHasPermission","applyUpdate","applyStagedUpdate","async","request","response","permError","hasPermission","cookies","session_token","status","code","json","error","msg","data","process","env","KEMPO_SITE_ROOT","confirm","body","version","extensions","Array","isArray","details"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\nimport applyUpdate from '../../../../../server/utils/updates/applyUpdate.js';\nimport applyStagedUpdate from '../../../../../server/utils/updates/applyStagedUpdate.js';\n\n/*\n Updates kempo and restarts the server a second after this answers. A site that runs from a Docker volume switches to the update\n that was prepared (`{ confirm: { forced: true, breaking: true } }` where it needs the owner's word, see applyStagedUpdate); any\n other site installs `{ version, extensions }` (kempo's version, the newest by default, null to leave it; a list of extension names) in place.\n*/\nexport default async (request, response) => {\n\tconst [permError, hasPermission] = await currentUserHasPermission(request.cookies.session_token, 'system:updates:manage');\n\tif(permError) return response.status(permError.code).json({ error: permError.msg });\n\tif(!hasPermission) return response.status(403).json({ error: 'Insufficient permissions' });\n\n\tconst [error, data] = process.env.KEMPO_SITE_ROOT\n\t\t? await applyStagedUpdate({ confirm: request.body?.confirm || {} })\n\t\t: await applyUpdate({ version: request.body?.version === null ? null : (request.body?.version || 'latest'), extensions: Array.isArray(request.body?.extensions) ? request.body.extensions : [] });\n\tif(error) return response.status(error.code).json({ error: error.msg, ...(error.details ? { details: error.details } : {}) });\n\n\tresponse.json(data);\n};\n"],"mappings":"OAAOA,MAA8B,6EAC9BC,MAAiB,4DACjBC,MAAuB,0EAOfC,MAAOC,EAASC,KAC9B,MAAOC,EAAWC,SAAuBP,EAAyBI,EAAQI,QAAQC,cAAe,yBACjG,GAAGH,EAAW,OAAOD,EAASK,OAAOJ,EAAUK,MAAMC,KAAK,CAAEC,MAAOP,EAAUQ,MAC7E,IAAIP,EAAe,OAAOF,EAASK,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAE7D,MAAOA,EAAOE,GAAQC,QAAQC,IAAIC,sBACzBhB,EAAkB,CAAEiB,QAASf,EAAQgB,MAAMD,SAAW,CAAC,UACvDlB,EAAY,CAAEoB,QAAmC,OAA1BjB,EAAQgB,MAAMC,QAAmB,KAAQjB,EAAQgB,MAAMC,SAAW,SAAWC,WAAYC,MAAMC,QAAQpB,EAAQgB,MAAME,YAAclB,EAAQgB,KAAKE,WAAa,KAC7L,GAAGT,EAAO,OAAOR,EAASK,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,OAASD,EAAMY,QAAU,CAAEA,QAASZ,EAAMY,SAAY,CAAC,IAExHpB,EAASO,KAAKG","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../../server/utils/updates/getUpdateStatus.js";export default async(e,t)=>{const[o,i]=await s(e.cookies.session_token,"system:updates:manage");if(o)return t.status(o.code).json({error:o.msg});if(!i)return t.status(403).json({error:"Insufficient permissions"});const[n,a]=await r({force:!0});if(n)return t.status(n.code).json({error:n.msg});t.json(a)};
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\check\POST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\api\\updates\\check\\POST.js","names":["currentUserHasPermission","getUpdateStatus","async","request","response","permError","hasPermission","cookies","session_token","status","code","json","error","msg","data","force"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\nimport getUpdateStatus from '../../../../../server/utils/updates/getUpdateStatus.js';\n\n/* Asks npm for the newest version now, whatever was found earlier. */\nexport default async (request, response) => {\n\tconst [permError, hasPermission] = await currentUserHasPermission(request.cookies.session_token, 'system:updates:manage');\n\tif(permError) return response.status(permError.code).json({ error: permError.msg });\n\tif(!hasPermission) return response.status(403).json({ error: 'Insufficient permissions' });\n\n\tconst [error, data] = await getUpdateStatus({ force: true });\n\tif(error) return response.status(error.code).json({ error: error.msg });\n\n\tresponse.json(data);\n};\n"],"mappings":"OAAOA,MAA8B,6EAC9BC,MAAqB,wEAGbC,MAAOC,EAASC,KAC9B,MAAOC,EAAWC,SAAuBN,EAAyBG,EAAQI,QAAQC,cAAe,yBACjG,GAAGH,EAAW,OAAOD,EAASK,OAAOJ,EAAUK,MAAMC,KAAK,CAAEC,MAAOP,EAAUQ,MAC7E,IAAIP,EAAe,OAAOF,EAASK,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAE7D,MAAOA,EAAOE,SAAcb,EAAgB,CAAEc,OAAO,IACrD,GAAGH,EAAO,OAAOR,EAASK,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAEjET,EAASO,KAAKG","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/updates/discardUpdate.js";export default async(r,t)=>{const[i,o]=await s(r.cookies.session_token,"system:updates:manage");if(i)return t.status(i.code).json({error:i.msg});if(!o)return t.status(403).json({error:"Insufficient permissions"});const[a,n]=await e();if(a)return t.status(a.code).json({error:a.msg,...a.details?{details:a.details}:{}});t.json(n)};
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\discard\POST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\api\\updates\\discard\\POST.js","names":["currentUserHasPermission","discardUpdate","async","request","response","permError","hasPermission","cookies","session_token","status","code","json","error","msg","data","details"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\nimport discardUpdate from '../../../../../server/utils/updates/discardUpdate.js';\n\n/* Throws away a prepared update that will not be switched to. */\nexport default async (request, response) => {\n\tconst [permError, hasPermission] = await currentUserHasPermission(request.cookies.session_token, 'system:updates:manage');\n\tif(permError) return response.status(permError.code).json({ error: permError.msg });\n\tif(!hasPermission) return response.status(403).json({ error: 'Insufficient permissions' });\n\n\tconst [error, data] = await discardUpdate();\n\tif(error) return response.status(error.code).json({ error: error.msg, ...(error.details ? { details: error.details } : {}) });\n\n\tresponse.json(data);\n};\n"],"mappings":"OAAOA,MAA8B,6EAC9BC,MAAmB,sEAGXC,MAAOC,EAASC,KAC9B,MAAOC,EAAWC,SAAuBN,EAAyBG,EAAQI,QAAQC,cAAe,yBACjG,GAAGH,EAAW,OAAOD,EAASK,OAAOJ,EAAUK,MAAMC,KAAK,CAAEC,MAAOP,EAAUQ,MAC7E,IAAIP,EAAe,OAAOF,EAASK,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAE7D,MAAOA,EAAOE,SAAcb,IAC5B,GAAGW,EAAO,OAAOR,EAASK,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,OAASD,EAAMG,QAAU,CAAEA,QAASH,EAAMG,SAAY,CAAC,IAExHX,EAASO,KAAKG","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import e from"../../../../../server/utils/updates/prepareUpdate.js";export default async(r,t)=>{const[o,n]=await s(r.cookies.session_token,"system:updates:manage");if(o)return t.status(o.code).json({error:o.msg});if(!n)return t.status(403).json({error:"Insufficient permissions"});const[i,a]=await e({version:null===r.body?.version?null:r.body?.version||"latest",extensions:Array.isArray(r.body?.extensions)?r.body.extensions:[]});if(i)return t.status(i.code).json({error:i.msg,...i.details?{details:i.details}:{}});t.json(a)};
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\prepare\POST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\api\\updates\\prepare\\POST.js","names":["currentUserHasPermission","prepareUpdate","async","request","response","permError","hasPermission","cookies","session_token","status","code","json","error","msg","data","version","body","extensions","Array","isArray","details"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\nimport prepareUpdate from '../../../../../server/utils/updates/prepareUpdate.js';\n\n/*\n Installs a newer kempo and/or newer versions of installed extensions next to the running site (Docker volume sites) and answers\n with what switching to them would change. The site is not touched. `{ version, extensions }`: version is the kempo version (the\n newest by default, null to leave kempo as it is), extensions a list of names.\n*/\nexport default async (request, response) => {\n\tconst [permError, hasPermission] = await currentUserHasPermission(request.cookies.session_token, 'system:updates:manage');\n\tif(permError) return response.status(permError.code).json({ error: permError.msg });\n\tif(!hasPermission) return response.status(403).json({ error: 'Insufficient permissions' });\n\n\tconst [error, data] = await prepareUpdate({ version: request.body?.version === null ? null : (request.body?.version || 'latest'), extensions: Array.isArray(request.body?.extensions) ? request.body.extensions : [] });\n\tif(error) return response.status(error.code).json({ error: error.msg, ...(error.details ? { details: error.details } : {}) });\n\n\tresponse.json(data);\n};\n"],"mappings":"OAAOA,MAA8B,6EAC9BC,MAAmB,sEAOXC,MAAOC,EAASC,KAC9B,MAAOC,EAAWC,SAAuBN,EAAyBG,EAAQI,QAAQC,cAAe,yBACjG,GAAGH,EAAW,OAAOD,EAASK,OAAOJ,EAAUK,MAAMC,KAAK,CAAEC,MAAOP,EAAUQ,MAC7E,IAAIP,EAAe,OAAOF,EAASK,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAE7D,MAAOA,EAAOE,SAAcb,EAAc,CAAEc,QAAmC,OAA1BZ,EAAQa,MAAMD,QAAmB,KAAQZ,EAAQa,MAAMD,SAAW,SAAWE,WAAYC,MAAMC,QAAQhB,EAAQa,MAAMC,YAAcd,EAAQa,KAAKC,WAAa,KAClN,GAAGL,EAAO,OAAOR,EAASK,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,OAASD,EAAMQ,QAAU,CAAEA,QAASR,EAAMQ,SAAY,CAAC,IAExHhB,EAASO,KAAKG","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import r from"../../../../../server/utils/updates/rollbackUpdate.js";export default async(e,t)=>{const[o,i]=await s(e.cookies.session_token,"system:updates:manage");if(o)return t.status(o.code).json({error:o.msg});if(!i)return t.status(403).json({error:"Insufficient permissions"});const[n,a]=await r({confirm:e.body?.confirm||{}});if(n)return t.status(n.code).json({error:n.msg,...n.details?{details:n.details}:{}});t.json(a)};
2
+ //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\updates\rollback\POST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src\\kempo\\api\\updates\\rollback\\POST.js","names":["currentUserHasPermission","rollbackUpdate","async","request","response","permError","hasPermission","cookies","session_token","status","code","json","error","msg","data","confirm","body","details"],"sources":["0"],"sourcesContent":["import currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\nimport rollbackUpdate from '../../../../../server/utils/updates/rollbackUpdate.js';\n\n/* Goes back to the version before the last update and restarts. `{ confirm: { data: true } }` when that also restores the database. */\nexport default async (request, response) => {\n\tconst [permError, hasPermission] = await currentUserHasPermission(request.cookies.session_token, 'system:updates:manage');\n\tif(permError) return response.status(permError.code).json({ error: permError.msg });\n\tif(!hasPermission) return response.status(403).json({ error: 'Insufficient permissions' });\n\n\tconst [error, data] = await rollbackUpdate({ confirm: request.body?.confirm || {} });\n\tif(error) return response.status(error.code).json({ error: error.msg, ...(error.details ? { details: error.details } : {}) });\n\n\tresponse.json(data);\n};\n"],"mappings":"OAAOA,MAA8B,6EAC9BC,MAAoB,uEAGZC,MAAOC,EAASC,KAC9B,MAAOC,EAAWC,SAAuBN,EAAyBG,EAAQI,QAAQC,cAAe,yBACjG,GAAGH,EAAW,OAAOD,EAASK,OAAOJ,EAAUK,MAAMC,KAAK,CAAEC,MAAOP,EAAUQ,MAC7E,IAAIP,EAAe,OAAOF,EAASK,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAE7D,MAAOA,EAAOE,SAAcb,EAAe,CAAEc,QAASZ,EAAQa,MAAMD,SAAW,CAAC,IAChF,GAAGH,EAAO,OAAOR,EAASK,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,OAASD,EAAMK,QAAU,CAAEA,QAASL,EAAMK,SAAY,CAAC,IAExHb,EAASO,KAAKG","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- const e=new Map,t=async(t,r)=>{const a=((e,t={})=>`${t.method||"GET"}:${e}:${t.body||""}`)(t,r);if(e.has(a)){const t=e.get(a);return new Promise((e,r)=>{t.callbacks.add({resolve:e,reject:r})}).then(async e=>{if(!e.ok){let t;try{t=await e.json()}catch(t){return[{code:e.status,msg:"Service temporarily unavailable. Please try again later."},null]}return[{code:e.status,msg:t.error||t.message||"An error occurred"},null]}try{return[null,await e.json()]}catch(e){return[{code:500,msg:"Service temporarily unavailable. Please try again later."},null]}})}const n=new Set,o=fetch(t,r).then(t=>(n.forEach(({resolve:e})=>e(t.clone())),e.delete(a),t)).catch(t=>{throw n.forEach(({reject:e})=>e(t)),e.delete(a),t});e.set(a,{fetchPromise:o,callbacks:n});try{const e=await o;if(!e.ok){let t;try{t=await e.json()}catch(t){return[{code:e.status,msg:"Service temporarily unavailable. Please try again later."},null]}return[{code:e.status,msg:t.error||t.message||"An error occurred"},null]}try{return[null,await e.json()]}catch(e){return[{code:500,msg:"Service temporarily unavailable. Please try again later."},null]}}catch(e){return"Service temporarily unavailable. Please try again later."===e.message||e.message.includes("Failed to fetch")?[{code:503,msg:"Service temporarily unavailable. Please try again later."},null]:[{code:500,msg:e.message||"An error occurred"},null]}};export const get=(e,r)=>{if(r){const a=Object.entries(r).filter(([,e])=>null!=e);if(a.length){const r=a.map(([e,t])=>Array.isArray(t)?`${encodeURIComponent(e)}=${t.map(e=>encodeURIComponent(e)).join(",")}`:`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&");return t(`${e}?${r}`,{method:"GET"})}}return t(e,{method:"GET"})};export const post=(e,r)=>t(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});export const put=(e,r)=>t(e,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});export const patch=(e,r)=>t(e,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});export const del=(e,r)=>t(e,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});
1
+ const e=new Map,t=async(t,a)=>{const r=((e,t={})=>`${t.method||"GET"}:${e}:${t.body||""}`)(t,a);if(e.has(r)){const t=e.get(r);return new Promise((e,a)=>{t.callbacks.add({resolve:e,reject:a})}).then(async e=>{if(!e.ok){let t;try{t=await e.json()}catch(t){return[{code:e.status,msg:"Service temporarily unavailable. Please try again later."},null]}return[{code:e.status,msg:t.error||t.message||"An error occurred",...t.details?{details:t.details}:{}},null]}try{return[null,await e.json()]}catch(e){return[{code:500,msg:"Service temporarily unavailable. Please try again later."},null]}})}const n=new Set,o=fetch(t,a).then(t=>(n.forEach(({resolve:e})=>e(t.clone())),e.delete(r),t)).catch(t=>{throw n.forEach(({reject:e})=>e(t)),e.delete(r),t});e.set(r,{fetchPromise:o,callbacks:n});try{const e=await o;if(!e.ok){let t;try{t=await e.json()}catch(t){return[{code:e.status,msg:"Service temporarily unavailable. Please try again later."},null]}return[{code:e.status,msg:t.error||t.message||"An error occurred",...t.details?{details:t.details}:{}},null]}try{return[null,await e.json()]}catch(e){return[{code:500,msg:"Service temporarily unavailable. Please try again later."},null]}}catch(e){return"Service temporarily unavailable. Please try again later."===e.message||e.message.includes("Failed to fetch")?[{code:503,msg:"Service temporarily unavailable. Please try again later."},null]:[{code:500,msg:e.message||"An error occurred"},null]}};export const get=(e,a)=>{if(a){const r=Object.entries(a).filter(([,e])=>null!=e);if(r.length){const a=r.map(([e,t])=>Array.isArray(t)?`${encodeURIComponent(e)}=${t.map(e=>encodeURIComponent(e)).join(",")}`:`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&");return t(`${e}?${a}`,{method:"GET"})}}return t(e,{method:"GET"})};export const post=(e,a)=>t(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});export const put=(e,a)=>t(e,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});export const patch=(e,a)=>t(e,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});export const del=(e,a)=>t(e,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});
2
2
  //# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\fetch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src\\kempo\\fetch.js","names":["pendingRequests","Map","dedupFetch","async","url","options","key","method","body","createRequestKey","has","existingRequest","get","Promise","resolve","reject","callbacks","add","then","response","ok","errorData","json","e","code","status","msg","error","message","Set","fetchPromise","fetch","forEach","clone","delete","catch","set","includes","params","entries","Object","filter","v","length","queryString","map","value","Array","isArray","encodeURIComponent","join","post","data","headers","JSON","stringify","put","patch","del"],"sources":["0"],"sourcesContent":["const pendingRequests = new Map();\r\n\r\nconst createRequestKey = (url, options = {}) => {\r\n const method = options.method || 'GET';\r\n const body = options.body || '';\r\n return `${method}:${url}:${body}`;\r\n};\r\n\r\nconst dedupFetch = async (url, options) => {\r\n const key = createRequestKey(url, options);\r\n if(pendingRequests.has(key)){\r\n const existingRequest = pendingRequests.get(key);\r\n return new Promise((resolve, reject) => {\r\n existingRequest.callbacks.add({ resolve, reject });\r\n }).then(async response => {\r\n if(!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch(e) {\r\n return [{ code: response.status, msg: 'Service temporarily unavailable. Please try again later.' }, null];\r\n }\r\n return [{ code: response.status, msg: errorData.error || errorData.message || 'An error occurred' }, null];\r\n }\r\n try {\r\n return [null, await response.json()];\r\n } catch(e) {\r\n return [{ code: 500, msg: 'Service temporarily unavailable. Please try again later.' }, null];\r\n }\r\n });\r\n }\r\n const callbacks = new Set();\r\n const fetchPromise = fetch(url, options)\r\n .then(response => {\r\n callbacks.forEach(({ resolve }) => resolve(response.clone()));\r\n pendingRequests.delete(key);\r\n return response;\r\n })\r\n .catch(error => {\r\n callbacks.forEach(({ reject }) => reject(error));\r\n pendingRequests.delete(key);\r\n throw error;\r\n });\r\n pendingRequests.set(key, { fetchPromise, callbacks });\r\n try {\r\n const response = await fetchPromise;\r\n if(!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch(e) {\r\n return [{ code: response.status, msg: 'Service temporarily unavailable. Please try again later.' }, null];\r\n }\r\n return [{ code: response.status, msg: errorData.error || errorData.message || 'An error occurred' }, null];\r\n }\r\n try {\r\n return [null, await response.json()];\r\n } catch(e) {\r\n return [{ code: 500, msg: 'Service temporarily unavailable. Please try again later.' }, null];\r\n }\r\n } catch(error) {\r\n if(error.message === 'Service temporarily unavailable. Please try again later.' || error.message.includes('Failed to fetch')) {\r\n return [{ code: 503, msg: 'Service temporarily unavailable. Please try again later.' }, null];\r\n }\r\n return [{ code: 500, msg: error.message || 'An error occurred' }, null];\r\n }\r\n};\r\n\r\nexport const get = (url, params) => {\r\n if(params){\r\n const entries = Object.entries(params).filter(([, v]) => v !== undefined && v !== null);\r\n if(entries.length){\r\n const queryString = entries\r\n .map(([key, value]) => {\r\n if(Array.isArray(value)){\r\n return `${encodeURIComponent(key)}=${value.map(v => encodeURIComponent(v)).join(',')}`;\r\n }\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\r\n })\r\n .join('&');\r\n return dedupFetch(`${url}?${queryString}`, { method: 'GET' });\r\n }\r\n }\r\n return dedupFetch(url, { method: 'GET' });\r\n};\r\n\r\nexport const post = (url, data) => dedupFetch(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n});\r\n\r\nexport const put = (url, data) => dedupFetch(url, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n});\r\n\r\nexport const patch = (url, data) => dedupFetch(url, {\r\n method: 'PATCH',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n});\r\n\r\nexport const del = (url, data) => dedupFetch(url, {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n});\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"src\\kempo\\fetch.js","names":["pendingRequests","Map","dedupFetch","async","url","options","key","method","body","createRequestKey","has","existingRequest","get","Promise","resolve","reject","callbacks","add","then","response","ok","errorData","json","e","code","status","msg","error","message","details","Set","fetchPromise","fetch","forEach","clone","delete","catch","set","includes","params","entries","Object","filter","v","length","queryString","map","value","Array","isArray","encodeURIComponent","join","post","data","headers","JSON","stringify","put","patch","del"],"sources":["0"],"sourcesContent":["const pendingRequests = new Map();\r\n\r\nconst createRequestKey = (url, options = {}) => {\r\n const method = options.method || 'GET';\r\n const body = options.body || '';\r\n return `${method}:${url}:${body}`;\r\n};\r\n\r\nconst dedupFetch = async (url, options) => {\r\n const key = createRequestKey(url, options);\r\n if(pendingRequests.has(key)){\r\n const existingRequest = pendingRequests.get(key);\r\n return new Promise((resolve, reject) => {\r\n existingRequest.callbacks.add({ resolve, reject });\r\n }).then(async response => {\r\n if(!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch(e) {\r\n return [{ code: response.status, msg: 'Service temporarily unavailable. Please try again later.' }, null];\r\n }\r\n return [{ code: response.status, msg: errorData.error || errorData.message || 'An error occurred', ...(errorData.details ? { details: errorData.details } : {}) }, null];\r\n }\r\n try {\r\n return [null, await response.json()];\r\n } catch(e) {\r\n return [{ code: 500, msg: 'Service temporarily unavailable. Please try again later.' }, null];\r\n }\r\n });\r\n }\r\n const callbacks = new Set();\r\n const fetchPromise = fetch(url, options)\r\n .then(response => {\r\n callbacks.forEach(({ resolve }) => resolve(response.clone()));\r\n pendingRequests.delete(key);\r\n return response;\r\n })\r\n .catch(error => {\r\n callbacks.forEach(({ reject }) => reject(error));\r\n pendingRequests.delete(key);\r\n throw error;\r\n });\r\n pendingRequests.set(key, { fetchPromise, callbacks });\r\n try {\r\n const response = await fetchPromise;\r\n if(!response.ok) {\r\n let errorData;\r\n try {\r\n errorData = await response.json();\r\n } catch(e) {\r\n return [{ code: response.status, msg: 'Service temporarily unavailable. Please try again later.' }, null];\r\n }\r\n return [{ code: response.status, msg: errorData.error || errorData.message || 'An error occurred', ...(errorData.details ? { details: errorData.details } : {}) }, null];\r\n }\r\n try {\r\n return [null, await response.json()];\r\n } catch(e) {\r\n return [{ code: 500, msg: 'Service temporarily unavailable. Please try again later.' }, null];\r\n }\r\n } catch(error) {\r\n if(error.message === 'Service temporarily unavailable. Please try again later.' || error.message.includes('Failed to fetch')) {\r\n return [{ code: 503, msg: 'Service temporarily unavailable. Please try again later.' }, null];\r\n }\r\n return [{ code: 500, msg: error.message || 'An error occurred' }, null];\r\n }\r\n};\r\n\r\nexport const get = (url, params) => {\r\n if(params){\r\n const entries = Object.entries(params).filter(([, v]) => v !== undefined && v !== null);\r\n if(entries.length){\r\n const queryString = entries\r\n .map(([key, value]) => {\r\n if(Array.isArray(value)){\r\n return `${encodeURIComponent(key)}=${value.map(v => encodeURIComponent(v)).join(',')}`;\r\n }\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\r\n })\r\n .join('&');\r\n return dedupFetch(`${url}?${queryString}`, { method: 'GET' });\r\n }\r\n }\r\n return dedupFetch(url, { method: 'GET' });\r\n};\r\n\r\nexport const post = (url, data) => dedupFetch(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n});\r\n\r\nexport const put = (url, data) => dedupFetch(url, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n});\r\n\r\nexport const patch = (url, data) => dedupFetch(url, {\r\n method: 'PATCH',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n});\r\n\r\nexport const del = (url, data) => dedupFetch(url, {\r\n method: 'DELETE',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n});\r\n"],"mappings":"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","ignoreList":[]}
package/dist/kempo/sdk.js CHANGED
@@ -1,2 +1,2 @@
1
- import{get as e,post as s,put as n,patch as o,del as t}from"./fetch.js";const a="/kempo/api";export const register=async({email:e,password:n,name:o})=>s(`${a}/auth/register/email`,{email:e,password:n,name:o});export const login=async({email:e,password:n})=>s(`${a}/auth/login/email`,{email:e,password:n});export const logout=async()=>s(`${a}/auth/logout`,{});export const getSession=async()=>e(`${a}/auth/session`);export const forgotPassword=async({email:e})=>s(`${a}/forgot-password`,{email:e});export const resetPassword=async({token:e,password:n,logoutAll:o=!1})=>s(`${a}/auth/reset-password`,{token:e,newPassword:n,logoutAll:o});export const changePassword=async({currentPassword:e,newPassword:n,logoutAll:o})=>s(`${a}/auth/change-password`,{currentPassword:e,newPassword:n,logoutAll:o});export const verifyEmail=async({token:e})=>s(`${a}/auth/verify-email`,{token:e});export const currentUserHasPermission=async({permission:s})=>e(`${a}/user/current/permissions`,{permission:s});export const currentUserHasAllPermissions=async({permissions:s})=>e(`${a}/user/current/permissions/all`,{permissions:s});export const currentUserHasSomePermissions=async({permissions:s})=>e(`${a}/user/current/permissions/some`,{permissions:s});export const getAllCurrentUserPermissions=async()=>e(`${a}/user/current/permissions/list`);export const userHasPermission=async({userid:s,permission:n})=>e(`${a}/user/${s}/permissions`,{permission:n});export const userHasAllPermissions=async({userid:s,permissions:n})=>e(`${a}/user/${s}/permissions/all`,{permissions:n});export const userHasSomePermissions=async({userid:s,permissions:n})=>e(`${a}/user/${s}/permissions/some`,{permissions:n});export const getAllUserPermissions=async({userid:s})=>e(`${a}/user/${s}/permissions/list`);export const getUsers=async({limit:s,offset:n}={})=>e(`${a}/user`,{limit:s,offset:n});export const searchUsers=async({q:s,limit:n,offset:o,inGroup:t,notInGroup:i}={})=>e(`${a}/user/search`,{q:s,limit:n,offset:o,inGroup:t,notInGroup:i});export const createUser=async({name:e,email:n,password:o,emailVerified:t})=>s(`${a}/user/create`,{name:e,email:n,password:o,emailVerified:t});export const deleteUsers=async e=>t(`${a}/user`,{ids:e});export const updateUser=async({id:e,name:s,email:n,emailVerified:t,createdAt:i})=>o(`${a}/user`,{id:e,name:s,email:n,emailVerified:t,createdAt:i});export const getUser=async s=>e(`${a}/user/${s}`);export const getUserSessions=async(s,{limit:n,offset:o}={})=>e(`${a}/user/${s}/sessions`,{limit:n,offset:o});export const deleteUserSession=async(e,s)=>t(`${a}/user/${e}/sessions`,{sessionToken:s});export const deleteExpiredUserSessions=async e=>t(`${a}/user/${e}/sessions/expired`);export const getUserGroups=async(s,{limit:n,offset:o}={})=>e(`${a}/user/${s}/groups`,{limit:n,offset:o});export const addUserToGroup=async(e,n)=>s(`${a}/user/${e}/groups`,{groupName:n});export const removeUserFromGroup=async(e,s)=>t(`${a}/user/${e}/groups`,{groupName:s});export const listGroups=async({limit:s,offset:n,owner:o}={})=>e(`${a}/groups`,{limit:s,offset:n,owner:o});export const createGroup=async({name:e,description:n})=>s(`${a}/groups`,{name:e,description:n});export const updateGroup=async({name:e,newName:s,description:n})=>o(`${a}/groups`,{name:e,newName:s,description:n});export const deleteGroups=async e=>t(`${a}/groups`,{names:e});export const getGroup=async s=>e(`${a}/groups/${encodeURIComponent(s)}`);export const getGroupMembers=async(s,{limit:n,offset:o}={})=>e(`${a}/groups/${encodeURIComponent(s)}/members`,{limit:n,offset:o});export const addMemberToGroup=async(e,n)=>s(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:n});export const removeMemberFromGroup=async(e,s)=>t(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:s});export const getGroupPermissions=async s=>e(`${a}/groups/${encodeURIComponent(s)}/permissions`);export const addPermissionToGroup=async(e,n)=>s(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:n});export const removePermissionFromGroup=async(e,s)=>t(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:s});export const listPermissions=async({limit:s,offset:n,owner:o}={})=>e(`${a}/permissions`,{limit:s,offset:n,owner:o});export const createPermissions=async e=>s(`${a}/permissions`,{permissions:e});export const updatePermission=async({name:e,description:s})=>o(`${a}/permissions`,{name:e,description:s});export const deletePermissions=async e=>t(`${a}/permissions`,{names:e});export const getSetting=async(s,n)=>e(`${a}/settings/${encodeURIComponent(s)}/${encodeURIComponent(n)}`);export const listSettings=async({owner:s,limit:n,offset:o}={})=>e(`${a}/settings/${encodeURIComponent(s)}`,{limit:n,offset:o});export const setSetting=async(e,n,o)=>s(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(n)}`,o);export const deleteSetting=async(e,s)=>t(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(s)}`);export const listPages=async({owner:s,showHidden:n,offset:o,limit:t}={})=>e(`${a}/pages`,{owner:s,showHidden:n,offset:o,limit:t});export const rescanPages=async()=>s(`${a}/pages/rescan`,{});export const listTemplates=async()=>e(`${a}/templates`);export const listDirectories=async()=>e(`${a}/pages/directories`);export const getPage=async s=>e(`${a}/pages/file`,{file:s});export const createPage=async({directory:e,name:n,template:o})=>s(`${a}/pages`,{directory:e,name:n,template:o});export const updatePage=async({file:e,name:s,title:o,description:t,author:i,template:r,contents:c,extraMetadata:l})=>n(`${a}/pages/file`,{file:e,name:s,title:o,description:t,author:i,template:r,contents:c,extraMetadata:l});export const deletePages=async e=>t(`${a}/pages`,{files:e});export const disablePage=async e=>n(`${a}/pages/disable`,{file:e});export const enablePage=async e=>n(`${a}/pages/enable`,{file:e});export const movePage=async({file:e,newFile:s})=>o(`${a}/pages/file`,{file:e,newFile:s});export const searchPagesByMetadata=async s=>e(`${a}/pages/search`,{query:JSON.stringify(s)});export const setPageLocked=async({file:e,locked:s})=>n(`${a}/pages/lock`,{file:e,locked:s});export const getTemplate=async s=>e(`${a}/templates/file`,{file:s});export const createTemplate=async({directory:e,name:n,copyFrom:o})=>s(`${a}/templates`,{directory:e,name:n,copyFrom:o});export const updateTemplate=async({file:e,name:s,author:o,markup:t})=>n(`${a}/templates/file`,{file:e,name:s,author:o,markup:t});export const deleteTemplates=async e=>t(`${a}/templates`,{files:e});export const disableTemplate=async e=>n(`${a}/templates/disable`,{file:e});export const enableTemplate=async e=>n(`${a}/templates/enable`,{file:e});export const moveTemplate=async({file:e,newFile:s})=>o(`${a}/templates/file`,{file:e,newFile:s});export const setTemplateLocked=async({file:e,locked:s})=>n(`${a}/templates/lock`,{file:e,locked:s});export const listFragments=async()=>e(`${a}/fragments`);export const getFragment=async s=>e(`${a}/fragments/file`,{file:s});export const createFragment=async({directory:e,name:n})=>s(`${a}/fragments`,{directory:e,name:n});export const updateFragment=async({file:e,author:s,markup:o})=>n(`${a}/fragments/file`,{file:e,author:s,markup:o});export const deleteFragments=async e=>t(`${a}/fragments`,{files:e});export const moveFragment=async({file:e,newFile:s})=>o(`${a}/fragments/file`,{file:e,newFile:s});export const disableFragment=async e=>n(`${a}/fragments/disable`,{file:e});export const enableFragment=async e=>n(`${a}/fragments/enable`,{file:e});export const setFragmentLocked=async({file:e,locked:s})=>n(`${a}/fragments/lock`,{file:e,locked:s});export const listGlobalContent=async()=>e(`${a}/globals`);export const getGlobalContent=async s=>e(`${a}/globals/entry`,{id:s});export const createGlobalContent=async({name:e,location:n,priority:o})=>s(`${a}/globals`,{name:e,location:n,priority:o});export const updateGlobalContent=async({id:e,name:s,location:o,priority:t,markup:i})=>n(`${a}/globals/entry`,{id:e,name:s,location:o,priority:t,markup:i});export const deleteGlobalContent=async e=>t(`${a}/globals`,{ids:e});export const disableGlobalContent=async e=>n(`${a}/globals/disable`,{id:e});export const enableGlobalContent=async e=>n(`${a}/globals/enable`,{id:e});export const setGlobalContentLocked=async({id:e,locked:s})=>n(`${a}/globals/lock`,{id:e,locked:s});export const listMenus=async()=>e(`${a}/menus`);export const saveMenu=async({id:e,name:n})=>s(`${a}/menus`,{id:e,name:n});export const deleteMenu=async e=>t(`${a}/menus`,{id:e});export const assignMenuLocation=async({location:e,menuId:s})=>n(`${a}/menus/location`,{location:e,menuId:s});export const saveMenuItem=async({id:e,menuId:n,location:o,navItem:t,label:i,href:r,icon:c,newTab:l})=>s(`${a}/menus/items`,{id:e,menuId:n,location:o,navItem:t,label:i,href:r,icon:c,newTab:l});export const deleteMenuItems=async e=>t(`${a}/menus/items`,{ids:e});export const setMenuItemEnabled=async({id:e,enabled:s})=>n(`${a}/menus/items/enabled`,{id:e,enabled:s});export const reorderMenuItems=async({menuId:e,ids:s})=>n(`${a}/menus/items/order`,{menuId:e,ids:s});export const adoptMenuItem=async({id:e,menuId:s,menuName:o})=>n(`${a}/menus/adopt`,{id:e,menuId:s,menuName:o});export const listExtensions=async({limit:s,offset:n}={})=>e(`${a}/extensions`,{limit:s,offset:n});export const listAvailableExtensions=async()=>e(`${a}/extensions/available`);export const listKnownExtensions=async({search:s,sort:n,limit:o,offset:t}={})=>e(`${a}/extensions/known`,{search:s,sort:n,limit:o,offset:t});export const getKnownExtension=async s=>e(`${a}/extensions/known`,{name:s});export const rateExtension=async(e,s)=>n(`${a}/extensions/rating`,{name:e,rating:s});export const getDashboardWidgets=async()=>e(`${a}/dashboard/widgets`);export const getNotifications=async({unreadOnly:s=!1,limit:n,offset:o}={})=>e(`${a}/notifications`,{unreadOnly:s,limit:n,offset:o});export const getUnreadNotificationCount=async()=>e(`${a}/notifications/count`);export const markNotificationRead=async e=>s(`${a}/notifications/${encodeURIComponent(e)}/read`,{});export const markNotificationHandled=async e=>s(`${a}/notifications/${encodeURIComponent(e)}/handled`,{});export const markAllNotificationsRead=async()=>s(`${a}/notifications/read-all`,{});export const dismissNotification=async e=>t(`${a}/notifications/${encodeURIComponent(e)}`);export const listRealtimeConnections=async()=>e(`${a}/realtime/connections`);export const installExtension=async(e,{withDependencies:n=!1}={})=>s(`${a}/extensions`,{name:e,withDependencies:n});export const uninstallExtension=async(e,s=!1,{cascade:n=!1}={})=>t(`${a}/extensions`,{name:e,purgeData:s,cascade:n});export const enableExtension=async(e,{cascade:n=!1}={})=>s(`${a}/extensions/${encodeURIComponent(e)}/enable`,{cascade:n});export const getExtensionRequirements=async s=>e(`${a}/extensions/${encodeURIComponent(s)}/requirements`);export const disableExtension=async(e,{cascade:n=!1}={})=>s(`${a}/extensions/${encodeURIComponent(e)}/disable`,{cascade:n});export const getExtensionDependents=async(s,{includeDisabled:n=!1}={})=>e(`${a}/extensions/${encodeURIComponent(s)}/dependents`,{includeDisabled:n?"true":void 0});export const listAdminGlobalContent=async()=>e(`${a}/admin-globals`);export const getAdminGlobalContent=async s=>e(`${a}/admin-globals/${encodeURIComponent(s)}`);export const createAdminGlobalContent=async({name:e,location:n,priority:o,owner:t,markup:i})=>s(`${a}/admin-globals`,{name:e,location:n,priority:o,owner:t,markup:i});export const updateAdminGlobalContent=async(e,{name:s,location:o,priority:t,markup:i})=>n(`${a}/admin-globals/${encodeURIComponent(e)}`,{name:s,location:o,priority:t,markup:i});export const deleteAdminGlobalContent=async e=>t(`${a}/admin-globals`,{ids:e});export const enableAdminGlobalContent=async e=>n(`${a}/admin-globals/${encodeURIComponent(e)}/enable`,{});export const disableAdminGlobalContent=async e=>n(`${a}/admin-globals/${encodeURIComponent(e)}/disable`,{});
1
+ import{get as e,post as s,put as t,patch as n,del as o}from"./fetch.js";const a="/kempo/api";export const register=async({email:e,password:t,name:n})=>s(`${a}/auth/register/email`,{email:e,password:t,name:n});export const login=async({email:e,password:t})=>s(`${a}/auth/login/email`,{email:e,password:t});export const logout=async()=>s(`${a}/auth/logout`,{});export const getSession=async()=>e(`${a}/auth/session`);export const forgotPassword=async({email:e})=>s(`${a}/forgot-password`,{email:e});export const resetPassword=async({token:e,password:t,logoutAll:n=!1})=>s(`${a}/auth/reset-password`,{token:e,newPassword:t,logoutAll:n});export const changePassword=async({currentPassword:e,newPassword:t,logoutAll:n})=>s(`${a}/auth/change-password`,{currentPassword:e,newPassword:t,logoutAll:n});export const verifyEmail=async({token:e})=>s(`${a}/auth/verify-email`,{token:e});export const currentUserHasPermission=async({permission:s})=>e(`${a}/user/current/permissions`,{permission:s});export const currentUserHasAllPermissions=async({permissions:s})=>e(`${a}/user/current/permissions/all`,{permissions:s});export const currentUserHasSomePermissions=async({permissions:s})=>e(`${a}/user/current/permissions/some`,{permissions:s});export const getAllCurrentUserPermissions=async()=>e(`${a}/user/current/permissions/list`);export const userHasPermission=async({userid:s,permission:t})=>e(`${a}/user/${s}/permissions`,{permission:t});export const userHasAllPermissions=async({userid:s,permissions:t})=>e(`${a}/user/${s}/permissions/all`,{permissions:t});export const userHasSomePermissions=async({userid:s,permissions:t})=>e(`${a}/user/${s}/permissions/some`,{permissions:t});export const getAllUserPermissions=async({userid:s})=>e(`${a}/user/${s}/permissions/list`);export const getUsers=async({limit:s,offset:t}={})=>e(`${a}/user`,{limit:s,offset:t});export const searchUsers=async({q:s,limit:t,offset:n,inGroup:o,notInGroup:i}={})=>e(`${a}/user/search`,{q:s,limit:t,offset:n,inGroup:o,notInGroup:i});export const createUser=async({name:e,email:t,password:n,emailVerified:o})=>s(`${a}/user/create`,{name:e,email:t,password:n,emailVerified:o});export const deleteUsers=async e=>o(`${a}/user`,{ids:e});export const updateUser=async({id:e,name:s,email:t,emailVerified:o,createdAt:i})=>n(`${a}/user`,{id:e,name:s,email:t,emailVerified:o,createdAt:i});export const getUser=async s=>e(`${a}/user/${s}`);export const getUserSessions=async(s,{limit:t,offset:n}={})=>e(`${a}/user/${s}/sessions`,{limit:t,offset:n});export const deleteUserSession=async(e,s)=>o(`${a}/user/${e}/sessions`,{sessionToken:s});export const deleteExpiredUserSessions=async e=>o(`${a}/user/${e}/sessions/expired`);export const getUserGroups=async(s,{limit:t,offset:n}={})=>e(`${a}/user/${s}/groups`,{limit:t,offset:n});export const addUserToGroup=async(e,t)=>s(`${a}/user/${e}/groups`,{groupName:t});export const removeUserFromGroup=async(e,s)=>o(`${a}/user/${e}/groups`,{groupName:s});export const listGroups=async({limit:s,offset:t,owner:n}={})=>e(`${a}/groups`,{limit:s,offset:t,owner:n});export const createGroup=async({name:e,description:t})=>s(`${a}/groups`,{name:e,description:t});export const updateGroup=async({name:e,newName:s,description:t})=>n(`${a}/groups`,{name:e,newName:s,description:t});export const deleteGroups=async e=>o(`${a}/groups`,{names:e});export const getGroup=async s=>e(`${a}/groups/${encodeURIComponent(s)}`);export const getGroupMembers=async(s,{limit:t,offset:n}={})=>e(`${a}/groups/${encodeURIComponent(s)}/members`,{limit:t,offset:n});export const addMemberToGroup=async(e,t)=>s(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:t});export const removeMemberFromGroup=async(e,s)=>o(`${a}/groups/${encodeURIComponent(e)}/members`,{userId:s});export const getGroupPermissions=async s=>e(`${a}/groups/${encodeURIComponent(s)}/permissions`);export const addPermissionToGroup=async(e,t)=>s(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:t});export const removePermissionFromGroup=async(e,s)=>o(`${a}/groups/${encodeURIComponent(e)}/permissions`,{permissionName:s});export const listPermissions=async({limit:s,offset:t,owner:n}={})=>e(`${a}/permissions`,{limit:s,offset:t,owner:n});export const createPermissions=async e=>s(`${a}/permissions`,{permissions:e});export const updatePermission=async({name:e,description:s})=>n(`${a}/permissions`,{name:e,description:s});export const deletePermissions=async e=>o(`${a}/permissions`,{names:e});export const getSetting=async(s,t)=>e(`${a}/settings/${encodeURIComponent(s)}/${encodeURIComponent(t)}`);export const listSettings=async({owner:s,limit:t,offset:n}={})=>e(`${a}/settings/${encodeURIComponent(s)}`,{limit:t,offset:n});export const setSetting=async(e,t,n)=>s(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(t)}`,n);export const deleteSetting=async(e,s)=>o(`${a}/settings/${encodeURIComponent(e)}/${encodeURIComponent(s)}`);export const listEmails=async({status:s,type:t,search:n,limit:o,offset:i}={})=>e(`${a}/emails`,{status:s,type:t,search:n,limit:o,offset:i});export const getEmail=async s=>e(`${a}/emails/${encodeURIComponent(s)}`);export const retryEmail=async e=>s(`${a}/emails/${encodeURIComponent(e)}/retry`,{});export const sendTestEmail=async e=>s(`${a}/emails/test`,{to:e});export const getUpdateStatus=async()=>e(`${a}/updates`);export const checkForUpdate=async()=>s(`${a}/updates/check`,{});export const prepareUpdate=async({version:e,extensions:t}={})=>s(`${a}/updates/prepare`,{version:e,extensions:t});export const applyUpdate=async({version:e,extensions:t,confirm:n}={})=>s(`${a}/updates/apply`,{version:e,extensions:t,confirm:n});export const rollbackUpdate=async e=>s(`${a}/updates/rollback`,{confirm:e});export const discardUpdate=async()=>s(`${a}/updates/discard`,{});export const listPages=async({owner:s,showHidden:t,offset:n,limit:o}={})=>e(`${a}/pages`,{owner:s,showHidden:t,offset:n,limit:o});export const rescanPages=async()=>s(`${a}/pages/rescan`,{});export const listTemplates=async()=>e(`${a}/templates`);export const listDirectories=async()=>e(`${a}/pages/directories`);export const getPage=async s=>e(`${a}/pages/file`,{file:s});export const createPage=async({directory:e,name:t,template:n})=>s(`${a}/pages`,{directory:e,name:t,template:n});export const updatePage=async({file:e,name:s,title:n,description:o,author:i,template:r,contents:c,extraMetadata:p})=>t(`${a}/pages/file`,{file:e,name:s,title:n,description:o,author:i,template:r,contents:c,extraMetadata:p});export const deletePages=async e=>o(`${a}/pages`,{files:e});export const disablePage=async e=>t(`${a}/pages/disable`,{file:e});export const enablePage=async e=>t(`${a}/pages/enable`,{file:e});export const movePage=async({file:e,newFile:s})=>n(`${a}/pages/file`,{file:e,newFile:s});export const searchPagesByMetadata=async s=>e(`${a}/pages/search`,{query:JSON.stringify(s)});export const setPageLocked=async({file:e,locked:s})=>t(`${a}/pages/lock`,{file:e,locked:s});export const getTemplate=async s=>e(`${a}/templates/file`,{file:s});export const createTemplate=async({directory:e,name:t,copyFrom:n})=>s(`${a}/templates`,{directory:e,name:t,copyFrom:n});export const updateTemplate=async({file:e,name:s,author:n,markup:o})=>t(`${a}/templates/file`,{file:e,name:s,author:n,markup:o});export const deleteTemplates=async e=>o(`${a}/templates`,{files:e});export const listEmailTemplates=async s=>e(`${a}/email-templates`,s?{owner:s}:{});export const getEmailTemplate=async s=>e(`${a}/email-templates/file`,{template:s});export const saveEmailTemplate=async({template:e,source:s})=>t(`${a}/email-templates/file`,{template:e,source:s});export const resetEmailTemplate=async e=>o(`${a}/email-templates/file`,{template:e});export const disableTemplate=async e=>t(`${a}/templates/disable`,{file:e});export const enableTemplate=async e=>t(`${a}/templates/enable`,{file:e});export const moveTemplate=async({file:e,newFile:s})=>n(`${a}/templates/file`,{file:e,newFile:s});export const setTemplateLocked=async({file:e,locked:s})=>t(`${a}/templates/lock`,{file:e,locked:s});export const listFragments=async()=>e(`${a}/fragments`);export const getFragment=async s=>e(`${a}/fragments/file`,{file:s});export const createFragment=async({directory:e,name:t})=>s(`${a}/fragments`,{directory:e,name:t});export const updateFragment=async({file:e,author:s,markup:n})=>t(`${a}/fragments/file`,{file:e,author:s,markup:n});export const deleteFragments=async e=>o(`${a}/fragments`,{files:e});export const moveFragment=async({file:e,newFile:s})=>n(`${a}/fragments/file`,{file:e,newFile:s});export const disableFragment=async e=>t(`${a}/fragments/disable`,{file:e});export const enableFragment=async e=>t(`${a}/fragments/enable`,{file:e});export const setFragmentLocked=async({file:e,locked:s})=>t(`${a}/fragments/lock`,{file:e,locked:s});export const listGlobalContent=async()=>e(`${a}/globals`);export const getGlobalContent=async s=>e(`${a}/globals/entry`,{id:s});export const createGlobalContent=async({name:e,location:t,priority:n})=>s(`${a}/globals`,{name:e,location:t,priority:n});export const updateGlobalContent=async({id:e,name:s,location:n,priority:o,markup:i})=>t(`${a}/globals/entry`,{id:e,name:s,location:n,priority:o,markup:i});export const deleteGlobalContent=async e=>o(`${a}/globals`,{ids:e});export const disableGlobalContent=async e=>t(`${a}/globals/disable`,{id:e});export const enableGlobalContent=async e=>t(`${a}/globals/enable`,{id:e});export const setGlobalContentLocked=async({id:e,locked:s})=>t(`${a}/globals/lock`,{id:e,locked:s});export const listMenus=async()=>e(`${a}/menus`);export const saveMenu=async({id:e,name:t})=>s(`${a}/menus`,{id:e,name:t});export const deleteMenu=async e=>o(`${a}/menus`,{id:e});export const assignMenuLocation=async({location:e,menuId:s})=>t(`${a}/menus/location`,{location:e,menuId:s});export const saveMenuItem=async({id:e,menuId:t,location:n,navItem:o,label:i,href:r,icon:c,newTab:p})=>s(`${a}/menus/items`,{id:e,menuId:t,location:n,navItem:o,label:i,href:r,icon:c,newTab:p});export const deleteMenuItems=async e=>o(`${a}/menus/items`,{ids:e});export const setMenuItemEnabled=async({id:e,enabled:s})=>t(`${a}/menus/items/enabled`,{id:e,enabled:s});export const reorderMenuItems=async({menuId:e,ids:s})=>t(`${a}/menus/items/order`,{menuId:e,ids:s});export const adoptMenuItem=async({id:e,menuId:s,menuName:n})=>t(`${a}/menus/adopt`,{id:e,menuId:s,menuName:n});export const listExtensions=async({limit:s,offset:t}={})=>e(`${a}/extensions`,{limit:s,offset:t});export const listAvailableExtensions=async()=>e(`${a}/extensions/available`);export const listKnownExtensions=async({search:s,sort:t,limit:n,offset:o}={})=>e(`${a}/extensions/known`,{search:s,sort:t,limit:n,offset:o});export const getKnownExtension=async s=>e(`${a}/extensions/known`,{name:s});export const rateExtension=async(e,s)=>t(`${a}/extensions/rating`,{name:e,rating:s});export const getDashboardWidgets=async()=>e(`${a}/dashboard/widgets`);export const getNotifications=async({unreadOnly:s=!1,limit:t,offset:n}={})=>e(`${a}/notifications`,{unreadOnly:s,limit:t,offset:n});export const getUnreadNotificationCount=async()=>e(`${a}/notifications/count`);export const markNotificationRead=async e=>s(`${a}/notifications/${encodeURIComponent(e)}/read`,{});export const markNotificationHandled=async e=>s(`${a}/notifications/${encodeURIComponent(e)}/handled`,{});export const markAllNotificationsRead=async()=>s(`${a}/notifications/read-all`,{});export const dismissNotification=async e=>o(`${a}/notifications/${encodeURIComponent(e)}`);export const listRealtimeConnections=async()=>e(`${a}/realtime/connections`);export const installExtension=async(e,{withDependencies:t=!1}={})=>s(`${a}/extensions`,{name:e,withDependencies:t});export const uninstallExtension=async(e,s=!1,{cascade:t=!1}={})=>o(`${a}/extensions`,{name:e,purgeData:s,cascade:t});export const enableExtension=async(e,{cascade:t=!1}={})=>s(`${a}/extensions/${encodeURIComponent(e)}/enable`,{cascade:t});export const getExtensionRequirements=async s=>e(`${a}/extensions/${encodeURIComponent(s)}/requirements`);export const disableExtension=async(e,{cascade:t=!1}={})=>s(`${a}/extensions/${encodeURIComponent(e)}/disable`,{cascade:t});export const getExtensionDependents=async(s,{includeDisabled:t=!1}={})=>e(`${a}/extensions/${encodeURIComponent(s)}/dependents`,{includeDisabled:t?"true":void 0});export const listAdminGlobalContent=async()=>e(`${a}/admin-globals`);export const getAdminGlobalContent=async s=>e(`${a}/admin-globals/${encodeURIComponent(s)}`);export const createAdminGlobalContent=async({name:e,location:t,priority:n,owner:o,markup:i})=>s(`${a}/admin-globals`,{name:e,location:t,priority:n,owner:o,markup:i});export const updateAdminGlobalContent=async(e,{name:s,location:n,priority:o,markup:i})=>t(`${a}/admin-globals/${encodeURIComponent(e)}`,{name:s,location:n,priority:o,markup:i});export const deleteAdminGlobalContent=async e=>o(`${a}/admin-globals`,{ids:e});export const enableAdminGlobalContent=async e=>t(`${a}/admin-globals/${encodeURIComponent(e)}/enable`,{});export const disableAdminGlobalContent=async e=>t(`${a}/admin-globals/${encodeURIComponent(e)}/disable`,{});
2
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","listMenus","saveMenu","deleteMenu","assignMenuLocation","menuId","saveMenuItem","navItem","label","href","icon","newTab","deleteMenuItems","setMenuItemEnabled","enabled","reorderMenuItems","adoptMenuItem","menuName","listExtensions","listAvailableExtensions","listKnownExtensions","search","sort","getKnownExtension","rateExtension","rating","getDashboardWidgets","getNotifications","unreadOnly","getUnreadNotificationCount","markNotificationRead","markNotificationHandled","markAllNotificationsRead","dismissNotification","listRealtimeConnections","installExtension","withDependencies","uninstallExtension","purgeData","cascade","enableExtension","getExtensionRequirements","disableExtension","getExtensionDependents","includeDisabled","undefined","listAdminGlobalContent","getAdminGlobalContent","createAdminGlobalContent","updateAdminGlobalContent","deleteAdminGlobalContent","enableAdminGlobalContent","disableAdminGlobalContent"],"sources":["0"],"sourcesContent":["import { get, post, put, patch, del } from './fetch.js';\nconst API_BASE = '/kempo/api';\n\nexport const register = async ({ email, password, name }) =>\n post(`${API_BASE}/auth/register/email`, { email, password, name });\n\nexport const login = async ({ email, password }) =>\n post(`${API_BASE}/auth/login/email`, { email, password });\n\nexport const logout = async () => post(`${API_BASE}/auth/logout`, {});\n\nexport const getSession = async () => get(`${API_BASE}/auth/session`);\n\nexport const forgotPassword = async ({ email }) =>\n post(`${API_BASE}/forgot-password`, { email });\n\nexport const resetPassword = async ({ token, password, logoutAll = false }) =>\n post(`${API_BASE}/auth/reset-password`, { token, newPassword: password, logoutAll });\n \nexport const changePassword = async ({ currentPassword, newPassword, logoutAll }) => \n post(`${API_BASE}/auth/change-password`, { currentPassword, newPassword, logoutAll });\n\nexport const verifyEmail = async ({ token }) =>\n post(`${API_BASE}/auth/verify-email`, { token });\n\nexport const currentUserHasPermission = async ({ permission }) =>\n get(`${API_BASE}/user/current/permissions`, { permission });\n\nexport const currentUserHasAllPermissions = async ({ permissions }) =>\n get(`${API_BASE}/user/current/permissions/all`, { permissions });\n\nexport const currentUserHasSomePermissions = async ({ permissions }) =>\n get(`${API_BASE}/user/current/permissions/some`, { permissions });\n\nexport const getAllCurrentUserPermissions = async () =>\n get(`${API_BASE}/user/current/permissions/list`);\n\nexport const userHasPermission = async ({ userid, permission }) =>\n get(`${API_BASE}/user/${userid}/permissions`, { permission });\n\nexport const userHasAllPermissions = async ({ userid, permissions }) =>\n get(`${API_BASE}/user/${userid}/permissions/all`, { permissions });\n\nexport const userHasSomePermissions = async ({ userid, permissions }) =>\n get(`${API_BASE}/user/${userid}/permissions/some`, { permissions });\n\nexport const getAllUserPermissions = async ({ userid }) =>\n get(`${API_BASE}/user/${userid}/permissions/list`);\n\nexport const getUsers = async ({ limit, offset } = {}) =>\n get(`${API_BASE}/user`, { limit, offset });\n\nexport const searchUsers = async ({ q, limit, offset, inGroup, notInGroup } = {}) =>\n get(`${API_BASE}/user/search`, { q, limit, offset, inGroup, notInGroup });\n\nexport const createUser = async ({ name, email, password, emailVerified }) =>\n post(`${API_BASE}/user/create`, { name, email, password, emailVerified });\n\nexport const deleteUsers = async (ids) =>\n del(`${API_BASE}/user`, { ids });\n\nexport const updateUser = async ({ id, name, email, emailVerified, createdAt }) =>\n patch(`${API_BASE}/user`, { id, name, email, emailVerified, createdAt });\n\nexport const getUser = async (userid) =>\n get(`${API_BASE}/user/${userid}`);\n\nexport const getUserSessions = async (userid, { limit, offset } = {}) =>\n get(`${API_BASE}/user/${userid}/sessions`, { limit, offset });\n\nexport const deleteUserSession = async (userid, sessionToken) =>\n del(`${API_BASE}/user/${userid}/sessions`, { sessionToken });\n\nexport const deleteExpiredUserSessions = async (userid) =>\n del(`${API_BASE}/user/${userid}/sessions/expired`);\n\nexport const getUserGroups = async (userid, { limit, offset } = {}) =>\n get(`${API_BASE}/user/${userid}/groups`, { limit, offset });\n\nexport const addUserToGroup = async (userid, groupName) =>\n post(`${API_BASE}/user/${userid}/groups`, { groupName });\n\nexport const removeUserFromGroup = async (userid, groupName) =>\n del(`${API_BASE}/user/${userid}/groups`, { groupName });\n\nexport const listGroups = async ({ limit, offset, owner } = {}) =>\n get(`${API_BASE}/groups`, { limit, offset, owner });\n\nexport const createGroup = async ({ name, description }) =>\n post(`${API_BASE}/groups`, { name, description });\n\nexport const updateGroup = async ({ name, newName, description }) =>\n patch(`${API_BASE}/groups`, { name, newName, description });\n\nexport const deleteGroups = async (names) =>\n del(`${API_BASE}/groups`, { names });\n\nexport const getGroup = async (name) =>\n get(`${API_BASE}/groups/${encodeURIComponent(name)}`);\n\nexport const getGroupMembers = async (name, { limit, offset } = {}) =>\n get(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { limit, offset });\n\nexport const addMemberToGroup = async (name, userId) =>\n post(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { userId });\n\nexport const removeMemberFromGroup = async (name, userId) =>\n del(`${API_BASE}/groups/${encodeURIComponent(name)}/members`, { userId });\n\nexport const getGroupPermissions = async (name) =>\n get(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`);\n\nexport const addPermissionToGroup = async (name, permissionName) =>\n post(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`, { permissionName });\n\nexport const removePermissionFromGroup = async (name, permissionName) =>\n del(`${API_BASE}/groups/${encodeURIComponent(name)}/permissions`, { permissionName });\n\nexport const listPermissions = async ({ limit, offset, owner } = {}) =>\n get(`${API_BASE}/permissions`, { limit, offset, owner });\n\nexport const createPermissions = async (permissions) =>\n post(`${API_BASE}/permissions`, { permissions });\n\nexport const updatePermission = async ({ name, description }) =>\n patch(`${API_BASE}/permissions`, { name, description });\n\nexport const deletePermissions = async (names) =>\n del(`${API_BASE}/permissions`, { names });\n\nexport const getSetting = async (owner, name) =>\n get(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);\n\nexport const listSettings = async ({ owner, limit, offset } = {}) =>\n get(`${API_BASE}/settings/${encodeURIComponent(owner)}`, { limit, offset });\n\nexport const setSetting = async (owner, name, data) =>\n post(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`, data);\n\nexport const deleteSetting = async (owner, name) =>\n del(`${API_BASE}/settings/${encodeURIComponent(owner)}/${encodeURIComponent(name)}`);\n\n/*\n Pages\n*/\n\nexport const listPages = async ({ owner, showHidden, offset, limit } = {}) =>\n get(`${API_BASE}/pages`, { owner, showHidden, offset, limit });\n\nexport const rescanPages = async () =>\n post(`${API_BASE}/pages/rescan`, {});\n\nexport const listTemplates = async () =>\n get(`${API_BASE}/templates`);\n\nexport const listDirectories = async () =>\n get(`${API_BASE}/pages/directories`);\n\nexport const getPage = async (file) =>\n get(`${API_BASE}/pages/file`, { file });\n\nexport const createPage = async ({ directory, name, template }) =>\n post(`${API_BASE}/pages`, { directory, name, template });\n\nexport const updatePage = async ({ file, name, title, description, author, template, contents, extraMetadata }) =>\n put(`${API_BASE}/pages/file`, { file, name, title, description, author, template, contents, extraMetadata });\n\nexport const deletePages = async (files) =>\n del(`${API_BASE}/pages`, { files });\n\nexport const disablePage = async (file) =>\n put(`${API_BASE}/pages/disable`, { file });\n\nexport const enablePage = async (file) =>\n put(`${API_BASE}/pages/enable`, { file });\n\nexport const movePage = async ({ file, newFile }) =>\n patch(`${API_BASE}/pages/file`, { file, newFile });\n\nexport const searchPagesByMetadata = async (query) =>\n get(`${API_BASE}/pages/search`, { query: JSON.stringify(query) });\n\nexport const setPageLocked = async ({ file, locked }) =>\n put(`${API_BASE}/pages/lock`, { file, locked });\n\n/*\n Templates\n*/\n\nexport const getTemplate = async (file) =>\n get(`${API_BASE}/templates/file`, { file });\n\nexport const createTemplate = async ({ directory, name, copyFrom }) =>\n post(`${API_BASE}/templates`, { directory, name, copyFrom });\n\nexport const updateTemplate = async ({ file, name, author, markup }) =>\n put(`${API_BASE}/templates/file`, { file, name, author, markup });\n\nexport const deleteTemplates = async (files) =>\n del(`${API_BASE}/templates`, { files });\n\nexport const disableTemplate = async (file) =>\n put(`${API_BASE}/templates/disable`, { file });\n\nexport const enableTemplate = async (file) =>\n put(`${API_BASE}/templates/enable`, { file });\n\nexport const moveTemplate = async ({ file, newFile }) =>\n patch(`${API_BASE}/templates/file`, { file, newFile });\n\nexport const setTemplateLocked = async ({ file, locked }) =>\n put(`${API_BASE}/templates/lock`, { file, locked });\n\n/*\n Fragments\n*/\n\nexport const listFragments = async () =>\n get(`${API_BASE}/fragments`);\n\nexport const getFragment = async (file) =>\n get(`${API_BASE}/fragments/file`, { file });\n\nexport const createFragment = async ({ directory, name }) =>\n post(`${API_BASE}/fragments`, { directory, name });\n\nexport const updateFragment = async ({ file, author, markup }) =>\n put(`${API_BASE}/fragments/file`, { file, author, markup });\n\nexport const deleteFragments = async (files) =>\n del(`${API_BASE}/fragments`, { files });\n\nexport const moveFragment = async ({ file, newFile }) =>\n patch(`${API_BASE}/fragments/file`, { file, newFile });\n\nexport const disableFragment = async (file) =>\n put(`${API_BASE}/fragments/disable`, { file });\n\nexport const enableFragment = async (file) =>\n put(`${API_BASE}/fragments/enable`, { file });\n\nexport const setFragmentLocked = async ({ file, locked }) =>\n put(`${API_BASE}/fragments/lock`, { file, locked });\n\n/*\n Global Content\n*/\n\nexport const listGlobalContent = async () =>\n get(`${API_BASE}/globals`);\n\nexport const getGlobalContent = async (id) =>\n get(`${API_BASE}/globals/entry`, { id });\n\nexport const createGlobalContent = async ({ name, location, priority }) =>\n post(`${API_BASE}/globals`, { name, location, priority });\n\nexport const updateGlobalContent = async ({ id, name, location, priority, markup }) =>\n put(`${API_BASE}/globals/entry`, { id, name, location, priority, markup });\n\nexport const deleteGlobalContent = async (ids) =>\n del(`${API_BASE}/globals`, { ids });\n\nexport const disableGlobalContent = async (id) =>\n put(`${API_BASE}/globals/disable`, { id });\n\nexport const enableGlobalContent = async (id) =>\n put(`${API_BASE}/globals/enable`, { id });\n\nexport const setGlobalContentLocked = async ({ id, locked }) =>\n put(`${API_BASE}/globals/lock`, { id, locked });\n\n/*\n Menus\n*/\n\nexport const listMenus = async () =>\n get(`${API_BASE}/menus`);\n\nexport const saveMenu = async ({ id, name }) =>\n post(`${API_BASE}/menus`, { id, name });\n\nexport const deleteMenu = async (id) =>\n del(`${API_BASE}/menus`, { id });\n\nexport const assignMenuLocation = async ({ location, menuId }) =>\n put(`${API_BASE}/menus/location`, { location, menuId });\n\nexport const saveMenuItem = async ({ id, menuId, location, navItem, label, href, icon, newTab }) =>\n post(`${API_BASE}/menus/items`, { id, menuId, location, navItem, label, href, icon, newTab });\n\nexport const deleteMenuItems = async (ids) =>\n del(`${API_BASE}/menus/items`, { ids });\n\nexport const setMenuItemEnabled = async ({ id, enabled }) =>\n put(`${API_BASE}/menus/items/enabled`, { id, enabled });\n\nexport const reorderMenuItems = async ({ menuId, ids }) =>\n put(`${API_BASE}/menus/items/order`, { menuId, ids });\n\nexport const adoptMenuItem = async ({ id, menuId, menuName }) =>\n put(`${API_BASE}/menus/adopt`, { id, menuId, menuName });\n\n/*\n Extensions\n*/\n\nexport const listExtensions = async ({ limit, offset } = {}) =>\n get(`${API_BASE}/extensions`, { limit, offset });\n\nexport const listAvailableExtensions = async () =>\n get(`${API_BASE}/extensions/available`);\n\nexport const listKnownExtensions = async ({ search, sort, limit, offset } = {}) =>\n get(`${API_BASE}/extensions/known`, { search, sort, limit, offset });\n\nexport const getKnownExtension = async (name) =>\n get(`${API_BASE}/extensions/known`, { name });\n\nexport const rateExtension = async (name, rating) =>\n put(`${API_BASE}/extensions/rating`, { name, rating });\n\n/*\n Dashboard\n*/\n\nexport const getDashboardWidgets = async () =>\n get(`${API_BASE}/dashboard/widgets`);\n\n/*\n Notifications\n*/\n\nexport const getNotifications = async ({ unreadOnly = false, limit, offset } = {}) =>\n get(`${API_BASE}/notifications`, { unreadOnly, limit, offset });\n\nexport const getUnreadNotificationCount = async () =>\n get(`${API_BASE}/notifications/count`);\n\nexport const markNotificationRead = async (id) =>\n post(`${API_BASE}/notifications/${encodeURIComponent(id)}/read`, {});\n\nexport const markNotificationHandled = async (id) =>\n post(`${API_BASE}/notifications/${encodeURIComponent(id)}/handled`, {});\n\nexport const markAllNotificationsRead = async () =>\n post(`${API_BASE}/notifications/read-all`, {});\n\nexport const dismissNotification = async (id) =>\n del(`${API_BASE}/notifications/${encodeURIComponent(id)}`);\n\nexport const listRealtimeConnections = async () =>\n get(`${API_BASE}/realtime/connections`);\n\nexport const installExtension = async (name, { withDependencies = false } = {}) =>\n post(`${API_BASE}/extensions`, { name, withDependencies });\n\nexport const uninstallExtension = async (name, purgeData = false, { cascade = false } = {}) =>\n del(`${API_BASE}/extensions`, { name, purgeData, cascade });\n\nexport const enableExtension = async (name, { cascade = false } = {}) =>\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/enable`, { cascade });\n\nexport const getExtensionRequirements = async (name) =>\n get(`${API_BASE}/extensions/${encodeURIComponent(name)}/requirements`);\n\nexport const disableExtension = async (name, { cascade = false } = {}) =>\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/disable`, { cascade });\n\nexport const getExtensionDependents = async (name, { includeDisabled = false } = {}) =>\n get(`${API_BASE}/extensions/${encodeURIComponent(name)}/dependents`, { includeDisabled: includeDisabled ? 'true' : undefined });\n\n/*\n Admin Global Content\n*/\n\nexport const listAdminGlobalContent = async () =>\n get(`${API_BASE}/admin-globals`);\n\nexport const getAdminGlobalContent = async (id) =>\n get(`${API_BASE}/admin-globals/${encodeURIComponent(id)}`);\n\nexport const createAdminGlobalContent = async ({ name, location, priority, owner, markup }) =>\n post(`${API_BASE}/admin-globals`, { name, location, priority, owner, markup });\n\nexport const updateAdminGlobalContent = async (id, { name, location, priority, markup }) =>\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}`, { name, location, priority, markup });\n\nexport const deleteAdminGlobalContent = async (ids) =>\n del(`${API_BASE}/admin-globals`, { ids });\n\nexport const enableAdminGlobalContent = async (id) =>\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}/enable`, {});\n\nexport const disableAdminGlobalContent = async (id) =>\n put(`${API_BASE}/admin-globals/${encodeURIComponent(id)}/disable`, {});\n\n"],"mappings":"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","ignoreList":[]}
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","listEmails","status","type","search","getEmail","retryEmail","sendTestEmail","to","getUpdateStatus","checkForUpdate","prepareUpdate","version","extensions","applyUpdate","confirm","rollbackUpdate","discardUpdate","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","listEmailTemplates","getEmailTemplate","saveEmailTemplate","source","resetEmailTemplate","disableTemplate","enableTemplate","moveTemplate","setTemplateLocked","listFragments","getFragment","createFragment","updateFragment","deleteFragments","moveFragment","disableFragment","enableFragment","setFragmentLocked","listGlobalContent","getGlobalContent","createGlobalContent","location","priority","updateGlobalContent","deleteGlobalContent","disableGlobalContent","enableGlobalContent","setGlobalContentLocked","listMenus","saveMenu","deleteMenu","assignMenuLocation","menuId","saveMenuItem","navItem","label","href","icon","newTab","deleteMenuItems","setMenuItemEnabled","enabled","reorderMenuItems","adoptMenuItem","menuName","listExtensions","listAvailableExtensions","listKnownExtensions","sort","getKnownExtension","rateExtension","rating","getDashboardWidgets","getNotifications","unreadOnly","getUnreadNotificationCount","markNotificationRead","markNotificationHandled","markAllNotificationsRead","dismissNotification","listRealtimeConnections","installExtension","withDependencies","uninstallExtension","purgeData","cascade","enableExtension","getExtensionRequirements","disableExtension","getExtensionDependents","includeDisabled","undefined","listAdminGlobalContent","getAdminGlobalContent","createAdminGlobalContent","updateAdminGlobalContent","deleteAdminGlobalContent","enableAdminGlobalContent","disableAdminGlobalContent"],"sources":["0"],"sourcesContent":["import { get, post, put, patch, del } from './fetch.js';\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 Emails\r\n*/\r\nexport const listEmails = async ({ status, type, search, limit, offset } = {}) =>\r\n get(`${API_BASE}/emails`, { status, type, search, limit, offset });\r\n\r\nexport const getEmail = async (id) =>\r\n get(`${API_BASE}/emails/${encodeURIComponent(id)}`);\r\n\r\nexport const retryEmail = async (id) =>\r\n post(`${API_BASE}/emails/${encodeURIComponent(id)}/retry`, {});\r\n\r\nexport const sendTestEmail = async (to) =>\r\n post(`${API_BASE}/emails/test`, { to });\r\n\r\n/*\r\n Updates\r\n*/\r\nexport const getUpdateStatus = async () =>\r\n get(`${API_BASE}/updates`);\r\n\r\nexport const checkForUpdate = async () =>\r\n post(`${API_BASE}/updates/check`, {});\r\n\r\nexport const prepareUpdate = async ({ version, extensions } = {}) =>\r\n post(`${API_BASE}/updates/prepare`, { version, extensions });\r\n\r\nexport const applyUpdate = async ({ version, extensions, confirm } = {}) =>\r\n post(`${API_BASE}/updates/apply`, { version, extensions, confirm });\r\n\r\nexport const rollbackUpdate = async (confirm) =>\r\n post(`${API_BASE}/updates/rollback`, { confirm });\r\n\r\nexport const discardUpdate = async () =>\r\n post(`${API_BASE}/updates/discard`, {});\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 listEmailTemplates = async (owner) =>\r\n get(`${API_BASE}/email-templates`, owner ? { owner } : {});\r\n\r\nexport const getEmailTemplate = async (template) =>\r\n get(`${API_BASE}/email-templates/file`, { template });\r\n\r\nexport const saveEmailTemplate = async ({ template, source }) =>\r\n put(`${API_BASE}/email-templates/file`, { template, source });\r\n\r\nexport const resetEmailTemplate = async (template) =>\r\n del(`${API_BASE}/email-templates/file`, { template });\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 Menus\r\n*/\r\n\r\nexport const listMenus = async () =>\r\n get(`${API_BASE}/menus`);\r\n\r\nexport const saveMenu = async ({ id, name }) =>\r\n post(`${API_BASE}/menus`, { id, name });\r\n\r\nexport const deleteMenu = async (id) =>\r\n del(`${API_BASE}/menus`, { id });\r\n\r\nexport const assignMenuLocation = async ({ location, menuId }) =>\r\n put(`${API_BASE}/menus/location`, { location, menuId });\r\n\r\nexport const saveMenuItem = async ({ id, menuId, location, navItem, label, href, icon, newTab }) =>\r\n post(`${API_BASE}/menus/items`, { id, menuId, location, navItem, label, href, icon, newTab });\r\n\r\nexport const deleteMenuItems = async (ids) =>\r\n del(`${API_BASE}/menus/items`, { ids });\r\n\r\nexport const setMenuItemEnabled = async ({ id, enabled }) =>\r\n put(`${API_BASE}/menus/items/enabled`, { id, enabled });\r\n\r\nexport const reorderMenuItems = async ({ menuId, ids }) =>\r\n put(`${API_BASE}/menus/items/order`, { menuId, ids });\r\n\r\nexport const adoptMenuItem = async ({ id, menuId, menuName }) =>\r\n put(`${API_BASE}/menus/adopt`, { id, menuId, menuName });\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 ({ search, sort, limit, offset } = {}) =>\r\n get(`${API_BASE}/extensions/known`, { search, sort, limit, offset });\r\n\r\nexport const getKnownExtension = async (name) =>\r\n get(`${API_BASE}/extensions/known`, { name });\r\n\r\nexport const rateExtension = async (name, rating) =>\r\n put(`${API_BASE}/extensions/rating`, { name, rating });\r\n\r\n/*\r\n Dashboard\r\n*/\r\n\r\nexport const getDashboardWidgets = async () =>\r\n get(`${API_BASE}/dashboard/widgets`);\r\n\r\n/*\r\n Notifications\r\n*/\r\n\r\nexport const getNotifications = async ({ unreadOnly = false, limit, offset } = {}) =>\r\n get(`${API_BASE}/notifications`, { unreadOnly, limit, offset });\r\n\r\nexport const getUnreadNotificationCount = async () =>\r\n get(`${API_BASE}/notifications/count`);\r\n\r\nexport const markNotificationRead = async (id) =>\r\n post(`${API_BASE}/notifications/${encodeURIComponent(id)}/read`, {});\r\n\r\nexport const markNotificationHandled = async (id) =>\r\n post(`${API_BASE}/notifications/${encodeURIComponent(id)}/handled`, {});\r\n\r\nexport const markAllNotificationsRead = async () =>\r\n post(`${API_BASE}/notifications/read-all`, {});\r\n\r\nexport const dismissNotification = async (id) =>\r\n del(`${API_BASE}/notifications/${encodeURIComponent(id)}`);\r\n\r\nexport const listRealtimeConnections = async () =>\r\n get(`${API_BASE}/realtime/connections`);\r\n\r\nexport const installExtension = async (name, { withDependencies = false } = {}) =>\r\n post(`${API_BASE}/extensions`, { name, withDependencies });\r\n\r\nexport const uninstallExtension = async (name, purgeData = false, { cascade = false } = {}) =>\r\n del(`${API_BASE}/extensions`, { name, purgeData, cascade });\r\n\r\nexport const enableExtension = async (name, { cascade = false } = {}) =>\r\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/enable`, { cascade });\r\n\r\nexport const getExtensionRequirements = async (name) =>\r\n get(`${API_BASE}/extensions/${encodeURIComponent(name)}/requirements`);\r\n\r\nexport const disableExtension = async (name, { cascade = false } = {}) =>\r\n post(`${API_BASE}/extensions/${encodeURIComponent(name)}/disable`, { cascade });\r\n\r\nexport const getExtensionDependents = async (name, { includeDisabled = false } = {}) =>\r\n get(`${API_BASE}/extensions/${encodeURIComponent(name)}/dependents`, { includeDisabled: includeDisabled ? 'true' : undefined });\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":"cAASA,UAAKC,SAAMC,WAAKC,SAAOC,MAAW,aAC3C,MAAMC,EAAW,oBAEV,MAAMC,SAAWC,OAASC,QAAOC,WAAUC,UAChDT,EAAK,GAAGI,wBAAgC,CAAEG,QAAOC,WAAUC,gBAEtD,MAAMC,MAAQJ,OAASC,QAAOC,cACnCR,EAAK,GAAGI,qBAA6B,CAAEG,QAAOC,oBAEzC,MAAMG,OAASL,SAAYN,EAAK,GAAGI,gBAAwB,CAAC,UAE5D,MAAMQ,WAAaN,SAAYP,EAAI,GAAGK,yBAEtC,MAAMS,eAAiBP,OAASC,WACrCP,EAAK,GAAGI,oBAA4B,CAAEG,iBAEjC,MAAMO,cAAgBR,OAASS,QAAOP,WAAUQ,aAAY,KACjEhB,EAAK,GAAGI,wBAAgC,CAAEW,QAAOE,YAAaT,EAAUQ,qBAEnE,MAAME,eAAiBZ,OAASa,kBAAiBF,cAAaD,eACnEhB,EAAK,GAAGI,yBAAiC,CAAEe,kBAAiBF,cAAaD,qBAEpE,MAAMI,YAAcd,OAASS,WAClCf,EAAK,GAAGI,sBAA8B,CAAEW,iBAEnC,MAAMM,yBAA2Bf,OAASgB,gBAC/CvB,EAAI,GAAGK,6BAAqC,CAAEkB,sBAEzC,MAAMC,6BAA+BjB,OAASkB,iBACnDzB,EAAI,GAAGK,iCAAyC,CAAEoB,uBAE7C,MAAMC,8BAAgCnB,OAASkB,iBACpDzB,EAAI,GAAGK,kCAA0C,CAAEoB,uBAE9C,MAAME,6BAA+BpB,SAC1CP,EAAI,GAAGK,0CAEF,MAAMuB,kBAAoBrB,OAASsB,SAAQN,gBAChDvB,EAAI,GAAGK,UAAiBwB,gBAAsB,CAAEN,sBAE3C,MAAMO,sBAAwBvB,OAASsB,SAAQJ,iBACpDzB,EAAI,GAAGK,UAAiBwB,oBAA0B,CAAEJ,uBAE/C,MAAMM,uBAAyBxB,OAASsB,SAAQJ,iBACrDzB,EAAI,GAAGK,UAAiBwB,qBAA2B,CAAEJ,uBAEhD,MAAMO,sBAAwBzB,OAASsB,YAC5C7B,EAAI,GAAGK,UAAiBwB,6BAEnB,MAAMI,SAAW1B,OAAS2B,QAAOC,UAAW,CAAC,IAClDnC,EAAI,GAAGK,SAAiB,CAAE6B,QAAOC,kBAE5B,MAAMC,YAAc7B,OAAS8B,IAAGH,QAAOC,SAAQG,UAASC,cAAe,CAAC,IAC7EvC,EAAI,GAAGK,gBAAwB,CAAEgC,IAAGH,QAAOC,SAAQG,UAASC,sBAEvD,MAAMC,WAAajC,OAASG,OAAMF,QAAOC,WAAUgC,mBACxDxC,EAAK,GAAGI,gBAAwB,CAAEK,OAAMF,QAAOC,WAAUgC,yBAEpD,MAAMC,YAAcnC,MAAOoC,GAChCvC,EAAI,GAAGC,SAAiB,CAAEsC,eAErB,MAAMC,WAAarC,OAASsC,KAAInC,OAAMF,QAAOiC,gBAAeK,eACjE3C,EAAM,GAAGE,SAAiB,CAAEwC,KAAInC,OAAMF,QAAOiC,gBAAeK,qBAEvD,MAAMC,QAAUxC,MAAOsB,GAC5B7B,EAAI,GAAGK,UAAiBwB,YAEnB,MAAMmB,gBAAkBzC,MAAOsB,GAAUK,QAAOC,UAAW,CAAC,IACjEnC,EAAI,GAAGK,UAAiBwB,aAAmB,CAAEK,QAAOC,kBAE/C,MAAMc,kBAAoB1C,MAAOsB,EAAQqB,IAC9C9C,EAAI,GAAGC,UAAiBwB,aAAmB,CAAEqB,wBAExC,MAAMC,0BAA4B5C,MAAOsB,GAC9CzB,EAAI,GAAGC,UAAiBwB,6BAEnB,MAAMuB,cAAgB7C,MAAOsB,GAAUK,QAAOC,UAAW,CAAC,IAC/DnC,EAAI,GAAGK,UAAiBwB,WAAiB,CAAEK,QAAOC,kBAE7C,MAAMkB,eAAiB9C,MAAOsB,EAAQyB,IAC3CrD,EAAK,GAAGI,UAAiBwB,WAAiB,CAAEyB,qBAEvC,MAAMC,oBAAsBhD,MAAOsB,EAAQyB,IAChDlD,EAAI,GAAGC,UAAiBwB,WAAiB,CAAEyB,qBAEtC,MAAME,WAAajD,OAAS2B,QAAOC,SAAQsB,SAAU,CAAC,IAC3DzD,EAAI,GAAGK,WAAmB,CAAE6B,QAAOC,SAAQsB,iBAEtC,MAAMC,YAAcnD,OAASG,OAAMiD,iBACxC1D,EAAK,GAAGI,WAAmB,CAAEK,OAAMiD,uBAE9B,MAAMC,YAAcrD,OAASG,OAAMmD,UAASF,iBACjDxD,EAAM,GAAGE,WAAmB,CAAEK,OAAMmD,UAASF,uBAExC,MAAMG,aAAevD,MAAOwD,GACjC3D,EAAI,GAAGC,WAAmB,CAAE0D,iBAEvB,MAAMC,SAAWzD,MAAOG,GAC7BV,EAAI,GAAGK,YAAmB4D,mBAAmBvD,aAExC,MAAMwD,gBAAkB3D,MAAOG,GAAQwB,QAAOC,UAAW,CAAC,IAC/DnC,EAAI,GAAGK,YAAmB4D,mBAAmBvD,aAAiB,CAAEwB,QAAOC,kBAElE,MAAMgC,iBAAmB5D,MAAOG,EAAM0D,IAC3CnE,EAAK,GAAGI,YAAmB4D,mBAAmBvD,aAAiB,CAAE0D,kBAE5D,MAAMC,sBAAwB9D,MAAOG,EAAM0D,IAChDhE,EAAI,GAAGC,YAAmB4D,mBAAmBvD,aAAiB,CAAE0D,kBAE3D,MAAME,oBAAsB/D,MAAOG,GACxCV,EAAI,GAAGK,YAAmB4D,mBAAmBvD,yBAExC,MAAM6D,qBAAuBhE,MAAOG,EAAM8D,IAC/CvE,EAAK,GAAGI,YAAmB4D,mBAAmBvD,iBAAqB,CAAE8D,0BAEhE,MAAMC,0BAA4BlE,MAAOG,EAAM8D,IACpDpE,EAAI,GAAGC,YAAmB4D,mBAAmBvD,iBAAqB,CAAE8D,0BAE/D,MAAME,gBAAkBnE,OAAS2B,QAAOC,SAAQsB,SAAU,CAAC,IAChEzD,EAAI,GAAGK,gBAAwB,CAAE6B,QAAOC,SAAQsB,iBAE3C,MAAMkB,kBAAoBpE,MAAOkB,GACtCxB,EAAK,GAAGI,gBAAwB,CAAEoB,uBAE7B,MAAMmD,iBAAmBrE,OAASG,OAAMiD,iBAC7CxD,EAAM,GAAGE,gBAAwB,CAAEK,OAAMiD,uBAEpC,MAAMkB,kBAAoBtE,MAAOwD,GACtC3D,EAAI,GAAGC,gBAAwB,CAAE0D,iBAE5B,MAAMe,WAAavE,MAAOkD,EAAO/C,IACtCV,EAAI,GAAGK,cAAqB4D,mBAAmBR,MAAUQ,mBAAmBvD,aAEvE,MAAMqE,aAAexE,OAASkD,QAAOvB,QAAOC,UAAW,CAAC,IAC7DnC,EAAI,GAAGK,cAAqB4D,mBAAmBR,KAAU,CAAEvB,QAAOC,kBAE7D,MAAM6C,WAAazE,MAAOkD,EAAO/C,EAAMuE,IAC5ChF,EAAK,GAAGI,cAAqB4D,mBAAmBR,MAAUQ,mBAAmBvD,KAASuE,UAEjF,MAAMC,cAAgB3E,MAAOkD,EAAO/C,IACzCN,EAAI,GAAGC,cAAqB4D,mBAAmBR,MAAUQ,mBAAmBvD,aAKvE,MAAMyE,WAAa5E,OAAS6E,SAAQC,OAAMC,SAAQpD,QAAOC,UAAW,CAAC,IAC1EnC,EAAI,GAAGK,WAAmB,CAAE+E,SAAQC,OAAMC,SAAQpD,QAAOC,kBAEpD,MAAMoD,SAAWhF,MAAOsC,GAC7B7C,EAAI,GAAGK,YAAmB4D,mBAAmBpB,aAExC,MAAM2C,WAAajF,MAAOsC,GAC/B5C,EAAK,GAAGI,YAAmB4D,mBAAmBpB,WAAa,CAAC,UAEvD,MAAM4C,cAAgBlF,MAAOmF,GAClCzF,EAAK,GAAGI,gBAAwB,CAAEqF,cAK7B,MAAMC,gBAAkBpF,SAC7BP,EAAI,GAAGK,oBAEF,MAAMuF,eAAiBrF,SAC5BN,EAAK,GAAGI,kBAA0B,CAAC,UAE9B,MAAMwF,cAAgBtF,OAASuF,UAASC,cAAe,CAAC,IAC7D9F,EAAK,GAAGI,oBAA4B,CAAEyF,UAASC,sBAE1C,MAAMC,YAAczF,OAASuF,UAASC,aAAYE,WAAY,CAAC,IACpEhG,EAAK,GAAGI,kBAA0B,CAAEyF,UAASC,aAAYE,mBAEpD,MAAMC,eAAiB3F,MAAO0F,GACnChG,EAAK,GAAGI,qBAA6B,CAAE4F,mBAElC,MAAME,cAAgB5F,SAC3BN,EAAK,GAAGI,oBAA4B,CAAC,UAMhC,MAAM+F,UAAY7F,OAASkD,QAAO4C,aAAYlE,SAAQD,SAAU,CAAC,IACtElC,EAAI,GAAGK,UAAkB,CAAEoD,QAAO4C,aAAYlE,SAAQD,iBAEjD,MAAMoE,YAAc/F,SACzBN,EAAK,GAAGI,iBAAyB,CAAC,UAE7B,MAAMkG,cAAgBhG,SAC3BP,EAAI,GAAGK,sBAEF,MAAMmG,gBAAkBjG,SAC7BP,EAAI,GAAGK,8BAEF,MAAMoG,QAAUlG,MAAOmG,GAC5B1G,EAAI,GAAGK,eAAuB,CAAEqG,gBAE3B,MAAMC,WAAapG,OAASqG,YAAWlG,OAAMmG,cAClD5G,EAAK,GAAGI,UAAkB,CAAEuG,YAAWlG,OAAMmG,oBAExC,MAAMC,WAAavG,OAASmG,OAAMhG,OAAMqG,QAAOpD,cAAaqD,SAAQH,WAAUI,WAAUC,mBAC7FhH,EAAI,GAAGG,eAAuB,CAAEqG,OAAMhG,OAAMqG,QAAOpD,cAAaqD,SAAQH,WAAUI,WAAUC,yBAEvF,MAAMC,YAAc5G,MAAO6G,GAChChH,EAAI,GAAGC,UAAkB,CAAE+G,iBAEtB,MAAMC,YAAc9G,MAAOmG,GAChCxG,EAAI,GAAGG,kBAA0B,CAAEqG,gBAE9B,MAAMY,WAAa/G,MAAOmG,GAC/BxG,EAAI,GAAGG,iBAAyB,CAAEqG,gBAE7B,MAAMa,SAAWhH,OAASmG,OAAMc,aACrCrH,EAAM,GAAGE,eAAuB,CAAEqG,OAAMc,mBAEnC,MAAMC,sBAAwBlH,MAAOmH,GAC1C1H,EAAI,GAAGK,iBAAyB,CAAEqH,MAAOC,KAAKC,UAAUF,YAEnD,MAAMG,cAAgBtH,OAASmG,OAAMoB,YAC1C5H,EAAI,GAAGG,eAAuB,CAAEqG,OAAMoB,kBAMjC,MAAMC,YAAcxH,MAAOmG,GAChC1G,EAAI,GAAGK,mBAA2B,CAAEqG,gBAE/B,MAAMsB,eAAiBzH,OAASqG,YAAWlG,OAAMuH,cACtDhI,EAAK,GAAGI,cAAsB,CAAEuG,YAAWlG,OAAMuH,oBAE5C,MAAMC,eAAiB3H,OAASmG,OAAMhG,OAAMsG,SAAQmB,YACzDjI,EAAI,GAAGG,mBAA2B,CAAEqG,OAAMhG,OAAMsG,SAAQmB,kBAEnD,MAAMC,gBAAkB7H,MAAO6G,GACpChH,EAAI,GAAGC,cAAsB,CAAE+G,iBAE1B,MAAMiB,mBAAqB9H,MAAOkD,GACvCzD,EAAI,GAAGK,oBAA4BoD,EAAQ,CAAEA,SAAU,CAAC,UAEnD,MAAM6E,iBAAmB/H,MAAOsG,GACrC7G,EAAI,GAAGK,yBAAiC,CAAEwG,oBAErC,MAAM0B,kBAAoBhI,OAASsG,WAAU2B,YAClDtI,EAAI,GAAGG,yBAAiC,CAAEwG,WAAU2B,kBAE/C,MAAMC,mBAAqBlI,MAAOsG,GACvCzG,EAAI,GAAGC,yBAAiC,CAAEwG,oBAErC,MAAM6B,gBAAkBnI,MAAOmG,GACpCxG,EAAI,GAAGG,sBAA8B,CAAEqG,gBAElC,MAAMiC,eAAiBpI,MAAOmG,GACnCxG,EAAI,GAAGG,qBAA6B,CAAEqG,gBAEjC,MAAMkC,aAAerI,OAASmG,OAAMc,aACzCrH,EAAM,GAAGE,mBAA2B,CAAEqG,OAAMc,mBAEvC,MAAMqB,kBAAoBtI,OAASmG,OAAMoB,YAC9C5H,EAAI,GAAGG,mBAA2B,CAAEqG,OAAMoB,kBAMrC,MAAMgB,cAAgBvI,SAC3BP,EAAI,GAAGK,sBAEF,MAAM0I,YAAcxI,MAAOmG,GAChC1G,EAAI,GAAGK,mBAA2B,CAAEqG,gBAE/B,MAAMsC,eAAiBzI,OAASqG,YAAWlG,UAChDT,EAAK,GAAGI,cAAsB,CAAEuG,YAAWlG,gBAEtC,MAAMuI,eAAiB1I,OAASmG,OAAMM,SAAQmB,YACnDjI,EAAI,GAAGG,mBAA2B,CAAEqG,OAAMM,SAAQmB,kBAE7C,MAAMe,gBAAkB3I,MAAO6G,GACpChH,EAAI,GAAGC,cAAsB,CAAE+G,iBAE1B,MAAM+B,aAAe5I,OAASmG,OAAMc,aACzCrH,EAAM,GAAGE,mBAA2B,CAAEqG,OAAMc,mBAEvC,MAAM4B,gBAAkB7I,MAAOmG,GACpCxG,EAAI,GAAGG,sBAA8B,CAAEqG,gBAElC,MAAM2C,eAAiB9I,MAAOmG,GACnCxG,EAAI,GAAGG,qBAA6B,CAAEqG,gBAEjC,MAAM4C,kBAAoB/I,OAASmG,OAAMoB,YAC9C5H,EAAI,GAAGG,mBAA2B,CAAEqG,OAAMoB,kBAMrC,MAAMyB,kBAAoBhJ,SAC/BP,EAAI,GAAGK,oBAEF,MAAMmJ,iBAAmBjJ,MAAOsC,GACrC7C,EAAI,GAAGK,kBAA0B,CAAEwC,cAE9B,MAAM4G,oBAAsBlJ,OAASG,OAAMgJ,WAAUC,cAC1D1J,EAAK,GAAGI,YAAoB,CAAEK,OAAMgJ,WAAUC,oBAEzC,MAAMC,oBAAsBrJ,OAASsC,KAAInC,OAAMgJ,WAAUC,WAAUxB,YACxEjI,EAAI,GAAGG,kBAA0B,CAAEwC,KAAInC,OAAMgJ,WAAUC,WAAUxB,kBAE5D,MAAM0B,oBAAsBtJ,MAAOoC,GACxCvC,EAAI,GAAGC,YAAoB,CAAEsC,eAExB,MAAMmH,qBAAuBvJ,MAAOsC,GACzC3C,EAAI,GAAGG,oBAA4B,CAAEwC,cAEhC,MAAMkH,oBAAsBxJ,MAAOsC,GACxC3C,EAAI,GAAGG,mBAA2B,CAAEwC,cAE/B,MAAMmH,uBAAyBzJ,OAASsC,KAAIiF,YACjD5H,EAAI,GAAGG,iBAAyB,CAAEwC,KAAIiF,kBAMjC,MAAMmC,UAAY1J,SACvBP,EAAI,GAAGK,kBAEF,MAAM6J,SAAW3J,OAASsC,KAAInC,UACnCT,EAAK,GAAGI,UAAkB,CAAEwC,KAAInC,gBAE3B,MAAMyJ,WAAa5J,MAAOsC,GAC/BzC,EAAI,GAAGC,UAAkB,CAAEwC,cAEtB,MAAMuH,mBAAqB7J,OAASmJ,WAAUW,YACnDnK,EAAI,GAAGG,mBAA2B,CAAEqJ,WAAUW,kBAEzC,MAAMC,aAAe/J,OAASsC,KAAIwH,SAAQX,WAAUa,UAASC,QAAOC,OAAMC,OAAMC,YACrF1K,EAAK,GAAGI,gBAAwB,CAAEwC,KAAIwH,SAAQX,WAAUa,UAASC,QAAOC,OAAMC,OAAMC,kBAE/E,MAAMC,gBAAkBrK,MAAOoC,GACpCvC,EAAI,GAAGC,gBAAwB,CAAEsC,eAE5B,MAAMkI,mBAAqBtK,OAASsC,KAAIiI,aAC7C5K,EAAI,GAAGG,wBAAgC,CAAEwC,KAAIiI,mBAExC,MAAMC,iBAAmBxK,OAAS8J,SAAQ1H,SAC/CzC,EAAI,GAAGG,sBAA8B,CAAEgK,SAAQ1H,eAE1C,MAAMqI,cAAgBzK,OAASsC,KAAIwH,SAAQY,cAChD/K,EAAI,GAAGG,gBAAwB,CAAEwC,KAAIwH,SAAQY,oBAMxC,MAAMC,eAAiB3K,OAAS2B,QAAOC,UAAW,CAAC,IACxDnC,EAAI,GAAGK,eAAuB,CAAE6B,QAAOC,kBAElC,MAAMgJ,wBAA0B5K,SACrCP,EAAI,GAAGK,iCAEF,MAAM+K,oBAAsB7K,OAAS+E,SAAQ+F,OAAMnJ,QAAOC,UAAW,CAAC,IAC3EnC,EAAI,GAAGK,qBAA6B,CAAEiF,SAAQ+F,OAAMnJ,QAAOC,kBAEtD,MAAMmJ,kBAAoB/K,MAAOG,GACtCV,EAAI,GAAGK,qBAA6B,CAAEK,gBAEjC,MAAM6K,cAAgBhL,MAAOG,EAAM8K,IACxCtL,EAAI,GAAGG,sBAA8B,CAAEK,OAAM8K,kBAMxC,MAAMC,oBAAsBlL,SACjCP,EAAI,GAAGK,8BAMF,MAAMqL,iBAAmBnL,OAASoL,cAAa,EAAOzJ,QAAOC,UAAW,CAAC,IAC9EnC,EAAI,GAAGK,kBAA0B,CAAEsL,aAAYzJ,QAAOC,kBAEjD,MAAMyJ,2BAA6BrL,SACxCP,EAAI,GAAGK,gCAEF,MAAMwL,qBAAuBtL,MAAOsC,GACzC5C,EAAK,GAAGI,mBAA0B4D,mBAAmBpB,UAAY,CAAC,UAE7D,MAAMiJ,wBAA0BvL,MAAOsC,GAC5C5C,EAAK,GAAGI,mBAA0B4D,mBAAmBpB,aAAe,CAAC,UAEhE,MAAMkJ,yBAA2BxL,SACtCN,EAAK,GAAGI,2BAAmC,CAAC,UAEvC,MAAM2L,oBAAsBzL,MAAOsC,GACxCzC,EAAI,GAAGC,mBAA0B4D,mBAAmBpB,aAE/C,MAAMoJ,wBAA0B1L,SACrCP,EAAI,GAAGK,iCAEF,MAAM6L,iBAAmB3L,MAAOG,GAAQyL,oBAAmB,GAAU,CAAC,IAC3ElM,EAAK,GAAGI,eAAuB,CAAEK,OAAMyL,4BAElC,MAAMC,mBAAqB7L,MAAOG,EAAM2L,GAAY,GAASC,WAAU,GAAU,CAAC,IACvFlM,EAAI,GAAGC,eAAuB,CAAEK,OAAM2L,YAAWC,mBAE5C,MAAMC,gBAAkBhM,MAAOG,GAAQ4L,WAAU,GAAU,CAAC,IACjErM,EAAK,GAAGI,gBAAuB4D,mBAAmBvD,YAAgB,CAAE4L,mBAE/D,MAAME,yBAA2BjM,MAAOG,GAC7CV,EAAI,GAAGK,gBAAuB4D,mBAAmBvD,0BAE5C,MAAM+L,iBAAmBlM,MAAOG,GAAQ4L,WAAU,GAAU,CAAC,IAClErM,EAAK,GAAGI,gBAAuB4D,mBAAmBvD,aAAiB,CAAE4L,mBAEhE,MAAMI,uBAAyBnM,MAAOG,GAAQiM,mBAAkB,GAAU,CAAC,IAChF3M,EAAI,GAAGK,gBAAuB4D,mBAAmBvD,gBAAoB,CAAEiM,gBAAiBA,EAAkB,YAASC,WAM9G,MAAMC,uBAAyBtM,SACpCP,EAAI,GAAGK,0BAEF,MAAMyM,sBAAwBvM,MAAOsC,GAC1C7C,EAAI,GAAGK,mBAA0B4D,mBAAmBpB,aAE/C,MAAMkK,yBAA2BxM,OAASG,OAAMgJ,WAAUC,WAAUlG,QAAO0E,YAChFlI,EAAK,GAAGI,kBAA0B,CAAEK,OAAMgJ,WAAUC,WAAUlG,QAAO0E,kBAEhE,MAAM6E,yBAA2BzM,MAAOsC,GAAMnC,OAAMgJ,WAAUC,WAAUxB,YAC7EjI,EAAI,GAAGG,mBAA0B4D,mBAAmBpB,KAAO,CAAEnC,OAAMgJ,WAAUC,WAAUxB,kBAElF,MAAM8E,yBAA2B1M,MAAOoC,GAC7CvC,EAAI,GAAGC,kBAA0B,CAAEsC,eAE9B,MAAMuK,yBAA2B3M,MAAOsC,GAC7C3C,EAAI,GAAGG,mBAA0B4D,mBAAmBpB,YAAc,CAAC,UAE9D,MAAMsK,0BAA4B5M,MAAOsC,GAC9C3C,EAAI,GAAGG,mBAA0B4D,mBAAmBpB,aAAe,CAAC","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ node_modules
2
+ .git
3
+ .env
4
+ .env.*
5
+ docker-compose*.yml
6
+ Dockerfile
7
+ .dockerignore
8
+ .kempo
9
+ files
@@ -0,0 +1,25 @@
1
+ FROM node:22-alpine
2
+
3
+ # pg_dump and psql: Kempo backs the database up before an update that changes data, and puts the backup back if that update fails.
4
+ RUN apk add --no-cache postgresql16-client
5
+
6
+ # The site as it is when the image is built. The first time a container starts it is copied onto the /site volume, and from
7
+ # then on the volume is the site (its pages, templates, uploads and the Kempo it runs), so what the admin changes, installs and
8
+ # updates survives rebuilding or replacing the container. Rebuild the image to change Node, not to change the site.
9
+ WORKDIR /seed
10
+ COPY package.json package-lock.json ./
11
+ RUN npm ci --omit=dev
12
+ COPY . .
13
+
14
+ # The startup script and the module it shares with the site.
15
+ RUN mkdir -p /opt/kempo \
16
+ && cp node_modules/kempo/docker/entrypoint.mjs node_modules/kempo/server/utils/updates/siteLayout.js /opt/kempo/
17
+
18
+ ENV NODE_ENV=production \
19
+ KEMPO_SITE_ROOT=/site \
20
+ KEMPO_SEED=/seed \
21
+ KEMPO_RESTART=exit
22
+
23
+ VOLUME /site
24
+ EXPOSE 9876
25
+ ENTRYPOINT ["node", "/opt/kempo/entrypoint.mjs"]
@@ -0,0 +1,39 @@
1
+ # Runs the site and its database. Put DB_PASSWORD and SETTINGS_ENCRYPTION_KEY in a file called .env next to this one
2
+ # (SETTINGS_ENCRYPTION_KEY is 64 hex characters; back it up with the database, the credentials saved in the admin cannot be
3
+ # read without it), then: docker compose -f docker-compose.prod.yml up -d --build
4
+ #
5
+ # Everything the admin does (pages, templates, uploads, installing and updating Kempo and extensions) is kept on the `site`
6
+ # volume, and the data on the `db` volume. Back both up. `docker compose down -v` deletes them.
7
+ services:
8
+ app:
9
+ build: .
10
+ restart: unless-stopped
11
+ depends_on:
12
+ db:
13
+ condition: service_healthy
14
+ environment:
15
+ DATABASE_URL: postgresql://kempo:${DB_PASSWORD:?Put DB_PASSWORD in .env}@db:5432/kempo
16
+ SETTINGS_ENCRYPTION_KEY: ${SETTINGS_ENCRYPTION_KEY:?Put SETTINGS_ENCRYPTION_KEY in .env}
17
+ volumes:
18
+ - site:/site
19
+ ports:
20
+ - "9876:9876"
21
+
22
+ db:
23
+ image: postgres:16-alpine
24
+ restart: unless-stopped
25
+ environment:
26
+ POSTGRES_USER: kempo
27
+ POSTGRES_PASSWORD: ${DB_PASSWORD:?Put DB_PASSWORD in .env}
28
+ POSTGRES_DB: kempo
29
+ volumes:
30
+ - db:/var/lib/postgresql/data
31
+ healthcheck:
32
+ test: ["CMD-SHELL", "pg_isready -U kempo -d kempo"]
33
+ interval: 5s
34
+ timeout: 5s
35
+ retries: 12
36
+
37
+ volumes:
38
+ site:
39
+ db: