@sonicjs-cms/core 2.0.10 → 2.1.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 (77) hide show
  1. package/dist/chunk-22EFGHAX.cjs +801 -0
  2. package/dist/chunk-22EFGHAX.cjs.map +1 -0
  3. package/dist/{chunk-3PHG75W4.cjs → chunk-2MBNRFS5.cjs} +7 -5
  4. package/dist/chunk-2MBNRFS5.cjs.map +1 -0
  5. package/dist/{chunk-LW33AOBF.js → chunk-5RKQB2JG.js} +6 -222
  6. package/dist/chunk-5RKQB2JG.js.map +1 -0
  7. package/dist/{chunk-HXA5QSI3.cjs → chunk-7EGKU7OO.cjs} +22 -6
  8. package/dist/chunk-7EGKU7OO.cjs.map +1 -0
  9. package/dist/{chunk-6FR25MPC.js → chunk-F4K5QAN6.js} +246 -3
  10. package/dist/chunk-F4K5QAN6.js.map +1 -0
  11. package/dist/{chunk-MXJJN4IA.js → chunk-K5JZ4JI3.js} +7 -5
  12. package/dist/chunk-K5JZ4JI3.js.map +1 -0
  13. package/dist/{chunk-Z4H6DBVF.js → chunk-KZ5XDGE6.js} +11991 -10731
  14. package/dist/chunk-KZ5XDGE6.js.map +1 -0
  15. package/dist/{chunk-Q7SL7U43.cjs → chunk-LPM3NPAX.cjs} +12001 -10740
  16. package/dist/chunk-LPM3NPAX.cjs.map +1 -0
  17. package/dist/chunk-LWMMMW43.js +787 -0
  18. package/dist/chunk-LWMMMW43.js.map +1 -0
  19. package/dist/chunk-NMVOTNSL.js +61 -0
  20. package/dist/chunk-NMVOTNSL.js.map +1 -0
  21. package/dist/{chunk-FTMKKKNH.js → chunk-QNWYQZ55.js} +3 -3
  22. package/dist/{chunk-FTMKKKNH.js.map → chunk-QNWYQZ55.js.map} +1 -1
  23. package/dist/{chunk-COBUPOMD.js → chunk-T7IYBGGO.cjs} +5 -770
  24. package/dist/chunk-T7IYBGGO.cjs.map +1 -0
  25. package/dist/{chunk-YHG45LMU.js → chunk-UJ4K4B23.js} +20 -4
  26. package/dist/chunk-UJ4K4B23.js.map +1 -0
  27. package/dist/chunk-WBX5YMTB.cjs +70 -0
  28. package/dist/chunk-WBX5YMTB.cjs.map +1 -0
  29. package/dist/{chunk-DOR2IU73.cjs → chunk-YP52USGX.cjs} +249 -2
  30. package/dist/chunk-YP52USGX.cjs.map +1 -0
  31. package/dist/{chunk-MU3MR2QR.cjs → chunk-YU6QFFI4.cjs} +5 -222
  32. package/dist/chunk-YU6QFFI4.cjs.map +1 -0
  33. package/dist/{chunk-CAP6QQR2.cjs → chunk-ZMSYKV62.cjs} +5 -5
  34. package/dist/{chunk-CAP6QQR2.cjs.map → chunk-ZMSYKV62.cjs.map} +1 -1
  35. package/dist/{chunk-NBDPIRQS.cjs → chunk-ZPMFT2JW.js} +4 -786
  36. package/dist/chunk-ZPMFT2JW.js.map +1 -0
  37. package/dist/index.cjs +520 -147
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.js +389 -12
  40. package/dist/index.js.map +1 -1
  41. package/dist/middleware.cjs +24 -23
  42. package/dist/middleware.js +3 -2
  43. package/dist/migrations-IHERIQVD.js +4 -0
  44. package/dist/migrations-IHERIQVD.js.map +1 -0
  45. package/dist/migrations-POFD5KNG.cjs +13 -0
  46. package/dist/migrations-POFD5KNG.cjs.map +1 -0
  47. package/dist/routes.cjs +31 -29
  48. package/dist/routes.js +8 -6
  49. package/dist/services.cjs +42 -24
  50. package/dist/services.js +4 -2
  51. package/dist/templates.cjs +17 -21
  52. package/dist/templates.js +2 -2
  53. package/dist/utils.cjs +44 -11
  54. package/dist/utils.js +2 -1
  55. package/migrations/001_initial_schema.sql +2 -2
  56. package/migrations/007_demo_login_plugin.sql +1 -1
  57. package/migrations/020_add_email_plugin.sql +22 -0
  58. package/migrations/021_add_magic_link_auth_plugin.sql +42 -0
  59. package/migrations/021_add_otp_login.sql +42 -0
  60. package/migrations/022_add_tinymce_plugin.sql +25 -0
  61. package/migrations/023_add_easy_mdx_plugin.sql +25 -0
  62. package/migrations/024_add_quill_editor_plugin.sql +25 -0
  63. package/migrations/025_rename_mdxeditor_to_easy_mdx.sql +22 -0
  64. package/package.json +5 -3
  65. package/dist/chunk-3PHG75W4.cjs.map +0 -1
  66. package/dist/chunk-6FR25MPC.js.map +0 -1
  67. package/dist/chunk-COBUPOMD.js.map +0 -1
  68. package/dist/chunk-DOR2IU73.cjs.map +0 -1
  69. package/dist/chunk-HXA5QSI3.cjs.map +0 -1
  70. package/dist/chunk-LW33AOBF.js.map +0 -1
  71. package/dist/chunk-MU3MR2QR.cjs.map +0 -1
  72. package/dist/chunk-MXJJN4IA.js.map +0 -1
  73. package/dist/chunk-NBDPIRQS.cjs.map +0 -1
  74. package/dist/chunk-Q7SL7U43.cjs.map +0 -1
  75. package/dist/chunk-YHG45LMU.js.map +0 -1
  76. package/dist/chunk-Z4H6DBVF.js.map +0 -1
  77. package/migrations/002_faq_plugin.sql +0 -86
package/dist/index.cjs CHANGED
@@ -1,17 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var chunkQ7SL7U43_cjs = require('./chunk-Q7SL7U43.cjs');
4
- var chunkDOR2IU73_cjs = require('./chunk-DOR2IU73.cjs');
5
- var chunkHXA5QSI3_cjs = require('./chunk-HXA5QSI3.cjs');
6
- var chunkNBDPIRQS_cjs = require('./chunk-NBDPIRQS.cjs');
7
- var chunkCAP6QQR2_cjs = require('./chunk-CAP6QQR2.cjs');
8
- var chunkMU3MR2QR_cjs = require('./chunk-MU3MR2QR.cjs');
3
+ var chunkLPM3NPAX_cjs = require('./chunk-LPM3NPAX.cjs');
4
+ var chunkYP52USGX_cjs = require('./chunk-YP52USGX.cjs');
5
+ var chunk7EGKU7OO_cjs = require('./chunk-7EGKU7OO.cjs');
6
+ var chunk22EFGHAX_cjs = require('./chunk-22EFGHAX.cjs');
7
+ var chunkT7IYBGGO_cjs = require('./chunk-T7IYBGGO.cjs');
8
+ var chunkZMSYKV62_cjs = require('./chunk-ZMSYKV62.cjs');
9
+ var chunkYU6QFFI4_cjs = require('./chunk-YU6QFFI4.cjs');
9
10
  var chunkF5ESJXI2_cjs = require('./chunk-F5ESJXI2.cjs');
10
- var chunk3PHG75W4_cjs = require('./chunk-3PHG75W4.cjs');
11
+ var chunk2MBNRFS5_cjs = require('./chunk-2MBNRFS5.cjs');
12
+ require('./chunk-WBX5YMTB.cjs');
11
13
  var chunkRCQ2HIQD_cjs = require('./chunk-RCQ2HIQD.cjs');
12
14
  var chunkKYGRJCZM_cjs = require('./chunk-KYGRJCZM.cjs');
13
15
  require('./chunk-IGJUBJBW.cjs');
14
16
  var hono = require('hono');
17
+ var html = require('hono/html');
15
18
  var d1 = require('drizzle-orm/d1');
16
19
 
17
20
  // src/plugins/core-plugins/database-tools-plugin/services/database-service.ts
@@ -229,7 +232,7 @@ var DatabaseToolsService = class {
229
232
  };
230
233
 
231
234
  // src/templates/pages/admin-database-table.template.ts
232
- chunkMU3MR2QR_cjs.init_admin_layout_catalyst_template();
235
+ chunkYU6QFFI4_cjs.init_admin_layout_catalyst_template();
233
236
  function renderDatabaseTablePage(data) {
234
237
  const totalPages = Math.ceil(data.totalRows / data.pageSize);
235
238
  const startRow = (data.currentPage - 1) * data.pageSize + 1;
@@ -478,7 +481,7 @@ function renderDatabaseTablePage(data) {
478
481
  user: data.user,
479
482
  content: pageContent
480
483
  };
481
- return chunkMU3MR2QR_cjs.renderAdminLayoutCatalyst(layoutData);
484
+ return chunkYU6QFFI4_cjs.renderAdminLayoutCatalyst(layoutData);
482
485
  }
483
486
  function generatePageNumbers(currentPage, totalPages) {
484
487
  const pages = [];
@@ -553,7 +556,7 @@ function formatCellValue(value) {
553
556
  // src/plugins/core-plugins/database-tools-plugin/admin-routes.ts
554
557
  function createDatabaseToolsAdminRoutes() {
555
558
  const router2 = new hono.Hono();
556
- router2.use("*", chunkHXA5QSI3_cjs.requireAuth());
559
+ router2.use("*", chunk7EGKU7OO_cjs.requireAuth());
557
560
  router2.get("/api/stats", async (c) => {
558
561
  try {
559
562
  const user = c.get("user");
@@ -733,18 +736,386 @@ function createDatabaseToolsAdminRoutes() {
733
736
  });
734
737
  return router2;
735
738
  }
739
+ function createEmailPlugin() {
740
+ const builder = chunkLPM3NPAX_cjs.PluginBuilder.create({
741
+ name: "email",
742
+ version: "1.0.0-beta.1",
743
+ description: "Send transactional emails using Resend"
744
+ });
745
+ builder.metadata({
746
+ author: {
747
+ name: "SonicJS Team",
748
+ email: "team@sonicjs.com"
749
+ },
750
+ license: "MIT",
751
+ compatibility: "^2.0.0"
752
+ });
753
+ const emailRoutes = new hono.Hono();
754
+ emailRoutes.get("/settings", async (c) => {
755
+ const user = c.get("user");
756
+ const db = c.env.DB;
757
+ const plugin = await db.prepare(`
758
+ SELECT settings FROM plugins WHERE id = 'email'
759
+ `).first();
760
+ const settings = plugin?.settings ? JSON.parse(plugin.settings) : {};
761
+ const contentHTML = html.html`
762
+ <div class="p-8">
763
+ <!-- Header -->
764
+ <div class="mb-8">
765
+ <h1 class="text-3xl font-bold text-zinc-950 dark:text-white mb-2">Email Settings</h1>
766
+ <p class="text-zinc-600 dark:text-zinc-400">Configure Resend API for sending transactional emails</p>
767
+ </div>
768
+
769
+ <!-- Settings Form -->
770
+ <div class="max-w-3xl">
771
+ <!-- Main Settings Card -->
772
+ <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-6 mb-6">
773
+ <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-4">Resend Configuration</h2>
774
+
775
+ <form id="emailSettingsForm" class="space-y-6">
776
+ <!-- API Key -->
777
+ <div>
778
+ <label for="apiKey" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
779
+ Resend API Key <span class="text-red-500">*</span>
780
+ </label>
781
+ <input
782
+ type="password"
783
+ id="apiKey"
784
+ name="apiKey"
785
+ value="${settings.apiKey || ""}"
786
+ class="w-full rounded-lg bg-white dark:bg-white/5 px-3 py-2 text-sm text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-500 dark:placeholder:text-zinc-400 focus:ring-2 focus:ring-inset focus:ring-indigo-500 dark:focus:ring-indigo-400"
787
+ placeholder="re_..."
788
+ required
789
+ />
790
+ <p class="text-xs text-zinc-500 dark:text-zinc-400 mt-1">
791
+ Get your API key from <a href="https://resend.com/api-keys" target="_blank" class="text-indigo-600 dark:text-indigo-400 hover:underline">resend.com/api-keys</a>
792
+ </p>
793
+ </div>
794
+
795
+ <!-- From Email -->
796
+ <div>
797
+ <label for="fromEmail" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
798
+ From Email <span class="text-red-500">*</span>
799
+ </label>
800
+ <input
801
+ type="email"
802
+ id="fromEmail"
803
+ name="fromEmail"
804
+ value="${settings.fromEmail || ""}"
805
+ class="w-full rounded-lg bg-white dark:bg-white/5 px-3 py-2 text-sm text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-500 dark:placeholder:text-zinc-400 focus:ring-2 focus:ring-inset focus:ring-indigo-500 dark:focus:ring-indigo-400"
806
+ placeholder="noreply@yourdomain.com"
807
+ required
808
+ />
809
+ <p class="text-xs text-zinc-500 dark:text-zinc-400 mt-1">
810
+ Must be a verified domain in Resend
811
+ </p>
812
+ </div>
813
+
814
+ <!-- From Name -->
815
+ <div>
816
+ <label for="fromName" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
817
+ From Name <span class="text-red-500">*</span>
818
+ </label>
819
+ <input
820
+ type="text"
821
+ id="fromName"
822
+ name="fromName"
823
+ value="${settings.fromName || ""}"
824
+ class="w-full rounded-lg bg-white dark:bg-white/5 px-3 py-2 text-sm text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-500 dark:placeholder:text-zinc-400 focus:ring-2 focus:ring-inset focus:ring-indigo-500 dark:focus:ring-indigo-400"
825
+ placeholder="Your App Name"
826
+ required
827
+ />
828
+ </div>
829
+
830
+ <!-- Reply To -->
831
+ <div>
832
+ <label for="replyTo" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
833
+ Reply-To Email
834
+ </label>
835
+ <input
836
+ type="email"
837
+ id="replyTo"
838
+ name="replyTo"
839
+ value="${settings.replyTo || ""}"
840
+ class="w-full rounded-lg bg-white dark:bg-white/5 px-3 py-2 text-sm text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-500 dark:placeholder:text-zinc-400 focus:ring-2 focus:ring-inset focus:ring-indigo-500 dark:focus:ring-indigo-400"
841
+ placeholder="support@yourdomain.com"
842
+ />
843
+ </div>
844
+
845
+ <!-- Logo URL -->
846
+ <div>
847
+ <label for="logoUrl" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
848
+ Logo URL
849
+ </label>
850
+ <input
851
+ type="url"
852
+ id="logoUrl"
853
+ name="logoUrl"
854
+ value="${settings.logoUrl || ""}"
855
+ class="w-full rounded-lg bg-white dark:bg-white/5 px-3 py-2 text-sm text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-500 dark:placeholder:text-zinc-400 focus:ring-2 focus:ring-inset focus:ring-indigo-500 dark:focus:ring-indigo-400"
856
+ placeholder="https://yourdomain.com/logo.png"
857
+ />
858
+ <p class="text-xs text-zinc-500 dark:text-zinc-400 mt-1">
859
+ Logo to display in email templates
860
+ </p>
861
+ </div>
862
+
863
+ <!-- Action Buttons -->
864
+ <div class="flex gap-3 pt-4">
865
+ <button
866
+ type="submit"
867
+ class="inline-flex items-center justify-center rounded-lg bg-zinc-950 dark:bg-white px-3.5 py-2.5 text-sm font-semibold text-white dark:text-zinc-950 hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors shadow-sm"
868
+ >
869
+ Save Settings
870
+ </button>
871
+ <button
872
+ type="button"
873
+ id="testEmailBtn"
874
+ class="inline-flex items-center justify-center rounded-lg bg-white dark:bg-zinc-800 px-3.5 py-2.5 text-sm font-semibold text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 hover:bg-zinc-50 dark:hover:bg-zinc-700 transition-colors shadow-sm"
875
+ >
876
+ Send Test Email
877
+ </button>
878
+ <button
879
+ type="button"
880
+ id="resetBtn"
881
+ class="inline-flex items-center justify-center rounded-lg bg-white dark:bg-zinc-800 px-3.5 py-2.5 text-sm font-semibold text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 hover:bg-zinc-50 dark:hover:bg-zinc-700 transition-colors shadow-sm"
882
+ >
883
+ Reset
884
+ </button>
885
+ </div>
886
+ </form>
887
+ </div>
888
+
889
+ <!-- Status Message -->
890
+ <div id="statusMessage" class="hidden rounded-xl p-4 mb-6"></div>
891
+
892
+ <!-- Info Card -->
893
+ <div class="rounded-xl bg-indigo-50 dark:bg-indigo-950/30 ring-1 ring-indigo-100 dark:ring-indigo-900/50 p-6">
894
+ <h3 class="font-semibold text-indigo-900 dark:text-indigo-300 mb-3">
895
+ 📧 Email Templates Included
896
+ </h3>
897
+ <ul class="text-sm text-indigo-800 dark:text-indigo-200 space-y-2">
898
+ <li>✓ Registration confirmation</li>
899
+ <li>✓ Email verification</li>
900
+ <li>✓ Password reset</li>
901
+ <li>✓ One-time code (2FA)</li>
902
+ </ul>
903
+ <p class="text-xs text-indigo-700 dark:text-indigo-300 mt-4">
904
+ Templates are code-based and can be customized by editing the plugin files.
905
+ </p>
906
+ </div>
907
+ </div>
908
+ </div>
909
+
910
+ <script>
911
+ // Form submission handler
912
+ document.getElementById('emailSettingsForm').addEventListener('submit', async (e) => {
913
+ e.preventDefault()
914
+ const formData = new FormData(e.target)
915
+ const data = Object.fromEntries(formData.entries())
916
+
917
+ const statusEl = document.getElementById('statusMessage')
918
+
919
+ try {
920
+ const response = await fetch('/admin/plugins/email/settings', {
921
+ method: 'POST',
922
+ headers: { 'Content-Type': 'application/json' },
923
+ body: JSON.stringify(data)
924
+ })
925
+
926
+ if (response.ok) {
927
+ statusEl.className = 'rounded-xl bg-green-50 dark:bg-green-950/30 ring-1 ring-green-100 dark:ring-green-900/50 p-4 mb-6 text-green-900 dark:text-green-200'
928
+ statusEl.innerHTML = '✅ Settings saved successfully!'
929
+ statusEl.classList.remove('hidden')
930
+ setTimeout(() => statusEl.classList.add('hidden'), 3000)
931
+ } else {
932
+ throw new Error('Failed to save settings')
933
+ }
934
+ } catch (error) {
935
+ statusEl.className = 'rounded-xl bg-red-50 dark:bg-red-950/30 ring-1 ring-red-100 dark:ring-red-900/50 p-4 mb-6 text-red-900 dark:text-red-200'
936
+ statusEl.innerHTML = '❌ Failed to save settings. Please try again.'
937
+ statusEl.classList.remove('hidden')
938
+ }
939
+ })
940
+
941
+ // Test email handler
942
+ document.getElementById('testEmailBtn').addEventListener('click', async () => {
943
+ // Prompt for destination email
944
+ const toEmail = prompt('Enter destination email address for test:')
945
+ if (!toEmail) return
946
+
947
+ // Basic email validation
948
+ if (!toEmail.match(/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/)) {
949
+ alert('Please enter a valid email address')
950
+ return
951
+ }
952
+
953
+ const statusEl = document.getElementById('statusMessage')
954
+
955
+ statusEl.className = 'rounded-xl bg-indigo-50 dark:bg-indigo-950/30 ring-1 ring-indigo-100 dark:ring-indigo-900/50 p-4 mb-6 text-indigo-900 dark:text-indigo-200'
956
+ statusEl.innerHTML = \`📧 Sending test email to \${toEmail}...\`
957
+ statusEl.classList.remove('hidden')
958
+
959
+ try {
960
+ const response = await fetch('/admin/plugins/email/test', {
961
+ method: 'POST',
962
+ headers: { 'Content-Type': 'application/json' },
963
+ body: JSON.stringify({ toEmail })
964
+ })
965
+
966
+ const data = await response.json()
967
+
968
+ if (response.ok) {
969
+ statusEl.className = 'rounded-xl bg-green-50 dark:bg-green-950/30 ring-1 ring-green-100 dark:ring-green-900/50 p-4 mb-6 text-green-900 dark:text-green-200'
970
+ statusEl.innerHTML = \`✅ \${data.message || 'Test email sent! Check your inbox.'}\`
971
+ } else {
972
+ statusEl.className = 'rounded-xl bg-red-50 dark:bg-red-950/30 ring-1 ring-red-100 dark:ring-red-900/50 p-4 mb-6 text-red-900 dark:text-red-200'
973
+ statusEl.innerHTML = \`❌ \${data.error || 'Failed to send test email. Check your settings.'}\`
974
+ }
975
+ } catch (error) {
976
+ statusEl.className = 'rounded-xl bg-red-50 dark:bg-red-950/30 ring-1 ring-red-100 dark:ring-red-900/50 p-4 mb-6 text-red-900 dark:text-red-200'
977
+ statusEl.innerHTML = '❌ Network error. Please try again.'
978
+ }
979
+ })
980
+
981
+ // Reset button handler
982
+ document.getElementById('resetBtn').addEventListener('click', () => {
983
+ document.getElementById('emailSettingsForm').reset()
984
+ })
985
+ </script>
986
+ `;
987
+ return c.html(
988
+ chunkYU6QFFI4_cjs.renderAdminLayout({
989
+ title: "Email Settings",
990
+ content: contentHTML,
991
+ user,
992
+ currentPath: "/admin/plugins/email/settings"
993
+ })
994
+ );
995
+ });
996
+ emailRoutes.post("/settings", async (c) => {
997
+ try {
998
+ const body = await c.req.json();
999
+ const db = c.env.DB;
1000
+ await db.prepare(`
1001
+ UPDATE plugins
1002
+ SET settings = ?,
1003
+ updated_at = unixepoch()
1004
+ WHERE id = 'email'
1005
+ `).bind(JSON.stringify(body)).run();
1006
+ return c.json({ success: true });
1007
+ } catch (error) {
1008
+ console.error("Error saving email settings:", error);
1009
+ return c.json({ success: false, error: "Failed to save settings" }, 500);
1010
+ }
1011
+ });
1012
+ emailRoutes.post("/test", async (c) => {
1013
+ try {
1014
+ const db = c.env.DB;
1015
+ const body = await c.req.json();
1016
+ const plugin = await db.prepare(`
1017
+ SELECT settings FROM plugins WHERE id = 'email'
1018
+ `).first();
1019
+ if (!plugin?.settings) {
1020
+ return c.json({
1021
+ success: false,
1022
+ error: "Email settings not configured. Please save your settings first."
1023
+ }, 400);
1024
+ }
1025
+ const settings = JSON.parse(plugin.settings);
1026
+ if (!settings.apiKey || !settings.fromEmail || !settings.fromName) {
1027
+ return c.json({
1028
+ success: false,
1029
+ error: "Missing required settings. Please configure API Key, From Email, and From Name."
1030
+ }, 400);
1031
+ }
1032
+ const toEmail = body.toEmail || settings.fromEmail;
1033
+ if (!toEmail.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)) {
1034
+ return c.json({
1035
+ success: false,
1036
+ error: "Invalid email address format"
1037
+ }, 400);
1038
+ }
1039
+ const response = await fetch("https://api.resend.com/emails", {
1040
+ method: "POST",
1041
+ headers: {
1042
+ "Authorization": `Bearer ${settings.apiKey}`,
1043
+ "Content-Type": "application/json"
1044
+ },
1045
+ body: JSON.stringify({
1046
+ from: `${settings.fromName} <${settings.fromEmail}>`,
1047
+ to: [toEmail],
1048
+ subject: "Test Email from SonicJS",
1049
+ html: `
1050
+ <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
1051
+ <h1 style="color: #667eea;">Test Email Successful! \u{1F389}</h1>
1052
+ <p>This is a test email from your SonicJS Email plugin.</p>
1053
+ <p><strong>Configuration:</strong></p>
1054
+ <ul>
1055
+ <li>From: ${settings.fromName} &lt;${settings.fromEmail}&gt;</li>
1056
+ <li>Reply-To: ${settings.replyTo || "Not set"}</li>
1057
+ <li>Sent at: ${(/* @__PURE__ */ new Date()).toISOString()}</li>
1058
+ </ul>
1059
+ <p>Your email settings are working correctly!</p>
1060
+ </div>
1061
+ `,
1062
+ reply_to: settings.replyTo || settings.fromEmail
1063
+ })
1064
+ });
1065
+ const data = await response.json();
1066
+ if (!response.ok) {
1067
+ console.error("Resend API error:", data);
1068
+ return c.json({
1069
+ success: false,
1070
+ error: data.message || "Failed to send test email. Check your API key and domain verification."
1071
+ }, response.status);
1072
+ }
1073
+ return c.json({
1074
+ success: true,
1075
+ message: `Test email sent successfully to ${toEmail}`,
1076
+ emailId: data.id
1077
+ });
1078
+ } catch (error) {
1079
+ console.error("Test email error:", error);
1080
+ return c.json({
1081
+ success: false,
1082
+ error: error.message || "An error occurred while sending test email"
1083
+ }, 500);
1084
+ }
1085
+ });
1086
+ builder.addRoute("/admin/plugins/email", emailRoutes, {
1087
+ description: "Email plugin settings",
1088
+ requiresAuth: true,
1089
+ priority: 80
1090
+ });
1091
+ builder.addMenuItem("Email", "/admin/plugins/email/settings", {
1092
+ icon: "envelope",
1093
+ order: 80,
1094
+ permissions: ["email:manage"]
1095
+ });
1096
+ builder.lifecycle({
1097
+ activate: async () => {
1098
+ console.info("\u2705 Email plugin activated");
1099
+ },
1100
+ deactivate: async () => {
1101
+ console.info("\u274C Email plugin deactivated");
1102
+ }
1103
+ });
1104
+ return builder.build();
1105
+ }
1106
+ var emailPlugin = createEmailPlugin();
736
1107
 
737
1108
  // src/app.ts
738
1109
  function createSonicJSApp(config = {}) {
739
1110
  const app = new hono.Hono();
740
- const appVersion = config.version || chunk3PHG75W4_cjs.getCoreVersion();
1111
+ const appVersion = config.version || chunk2MBNRFS5_cjs.getCoreVersion();
741
1112
  const appName = config.name || "SonicJS AI";
742
1113
  app.use("*", async (c, next) => {
743
1114
  c.set("appVersion", appVersion);
744
1115
  await next();
745
1116
  });
746
- app.use("*", chunkHXA5QSI3_cjs.metricsMiddleware());
747
- app.use("*", chunkHXA5QSI3_cjs.bootstrapMiddleware(config));
1117
+ app.use("*", chunk7EGKU7OO_cjs.metricsMiddleware());
1118
+ app.use("*", chunk7EGKU7OO_cjs.bootstrapMiddleware(config));
748
1119
  if (config.middleware?.beforeAuth) {
749
1120
  for (const middleware of config.middleware.beforeAuth) {
750
1121
  app.use("*", middleware);
@@ -761,20 +1132,26 @@ function createSonicJSApp(config = {}) {
761
1132
  app.use("*", middleware);
762
1133
  }
763
1134
  }
764
- app.route("/api", chunkQ7SL7U43_cjs.api_default);
765
- app.route("/api/media", chunkQ7SL7U43_cjs.api_media_default);
766
- app.route("/api/system", chunkQ7SL7U43_cjs.api_system_default);
767
- app.route("/admin/api", chunkQ7SL7U43_cjs.admin_api_default);
768
- app.route("/admin/dashboard", chunkQ7SL7U43_cjs.router);
769
- app.route("/admin/collections", chunkQ7SL7U43_cjs.adminCollectionsRoutes);
770
- app.route("/admin/settings", chunkQ7SL7U43_cjs.adminSettingsRoutes);
1135
+ app.route("/api", chunkLPM3NPAX_cjs.api_default);
1136
+ app.route("/api/media", chunkLPM3NPAX_cjs.api_media_default);
1137
+ app.route("/api/system", chunkLPM3NPAX_cjs.api_system_default);
1138
+ app.route("/admin/api", chunkLPM3NPAX_cjs.admin_api_default);
1139
+ app.route("/admin/dashboard", chunkLPM3NPAX_cjs.router);
1140
+ app.route("/admin/collections", chunkLPM3NPAX_cjs.adminCollectionsRoutes);
1141
+ app.route("/admin/settings", chunkLPM3NPAX_cjs.adminSettingsRoutes);
771
1142
  app.route("/admin/database-tools", createDatabaseToolsAdminRoutes());
772
- app.route("/admin/content", chunkQ7SL7U43_cjs.admin_content_default);
773
- app.route("/admin/media", chunkQ7SL7U43_cjs.adminMediaRoutes);
774
- app.route("/admin/plugins", chunkQ7SL7U43_cjs.adminPluginRoutes);
775
- app.route("/admin/logs", chunkQ7SL7U43_cjs.adminLogsRoutes);
776
- app.route("/admin", chunkQ7SL7U43_cjs.userRoutes);
777
- app.route("/auth", chunkQ7SL7U43_cjs.auth_default);
1143
+ app.route("/admin/content", chunkLPM3NPAX_cjs.admin_content_default);
1144
+ app.route("/admin/media", chunkLPM3NPAX_cjs.adminMediaRoutes);
1145
+ app.route("/admin/plugins", chunkLPM3NPAX_cjs.adminPluginRoutes);
1146
+ app.route("/admin/logs", chunkLPM3NPAX_cjs.adminLogsRoutes);
1147
+ app.route("/admin", chunkLPM3NPAX_cjs.userRoutes);
1148
+ app.route("/auth", chunkLPM3NPAX_cjs.auth_default);
1149
+ app.route("/", chunkLPM3NPAX_cjs.test_cleanup_default);
1150
+ if (emailPlugin.routes && emailPlugin.routes.length > 0) {
1151
+ for (const route of emailPlugin.routes) {
1152
+ app.route(route.path, route.handler);
1153
+ }
1154
+ }
778
1155
  app.get("/files/*", async (c) => {
779
1156
  try {
780
1157
  const url = new URL(c.req.url);
@@ -834,423 +1211,419 @@ function setupCoreRoutes(_app) {
834
1211
  console.warn("setupCoreRoutes is deprecated. Use createSonicJSApp() instead.");
835
1212
  }
836
1213
  function createDb(d1$1) {
837
- return d1.drizzle(d1$1, { schema: chunkDOR2IU73_cjs.schema_exports });
1214
+ return d1.drizzle(d1$1, { schema: chunkYP52USGX_cjs.schema_exports });
838
1215
  }
839
1216
 
840
1217
  // src/index.ts
841
- var VERSION = chunk3PHG75W4_cjs.package_default.version;
1218
+ var VERSION = chunk2MBNRFS5_cjs.package_default.version;
842
1219
 
843
1220
  Object.defineProperty(exports, "ROUTES_INFO", {
844
1221
  enumerable: true,
845
- get: function () { return chunkQ7SL7U43_cjs.ROUTES_INFO; }
1222
+ get: function () { return chunkLPM3NPAX_cjs.ROUTES_INFO; }
846
1223
  });
847
1224
  Object.defineProperty(exports, "adminApiRoutes", {
848
1225
  enumerable: true,
849
- get: function () { return chunkQ7SL7U43_cjs.admin_api_default; }
1226
+ get: function () { return chunkLPM3NPAX_cjs.admin_api_default; }
850
1227
  });
851
1228
  Object.defineProperty(exports, "adminCheckboxRoutes", {
852
1229
  enumerable: true,
853
- get: function () { return chunkQ7SL7U43_cjs.adminCheckboxRoutes; }
1230
+ get: function () { return chunkLPM3NPAX_cjs.adminCheckboxRoutes; }
854
1231
  });
855
1232
  Object.defineProperty(exports, "adminCodeExamplesRoutes", {
856
1233
  enumerable: true,
857
- get: function () { return chunkQ7SL7U43_cjs.admin_code_examples_default; }
1234
+ get: function () { return chunkLPM3NPAX_cjs.admin_code_examples_default; }
858
1235
  });
859
1236
  Object.defineProperty(exports, "adminCollectionsRoutes", {
860
1237
  enumerable: true,
861
- get: function () { return chunkQ7SL7U43_cjs.adminCollectionsRoutes; }
1238
+ get: function () { return chunkLPM3NPAX_cjs.adminCollectionsRoutes; }
862
1239
  });
863
1240
  Object.defineProperty(exports, "adminContentRoutes", {
864
1241
  enumerable: true,
865
- get: function () { return chunkQ7SL7U43_cjs.admin_content_default; }
1242
+ get: function () { return chunkLPM3NPAX_cjs.admin_content_default; }
866
1243
  });
867
1244
  Object.defineProperty(exports, "adminDashboardRoutes", {
868
1245
  enumerable: true,
869
- get: function () { return chunkQ7SL7U43_cjs.router; }
1246
+ get: function () { return chunkLPM3NPAX_cjs.router; }
870
1247
  });
871
1248
  Object.defineProperty(exports, "adminDesignRoutes", {
872
1249
  enumerable: true,
873
- get: function () { return chunkQ7SL7U43_cjs.adminDesignRoutes; }
874
- });
875
- Object.defineProperty(exports, "adminFAQRoutes", {
876
- enumerable: true,
877
- get: function () { return chunkQ7SL7U43_cjs.admin_faq_default; }
1250
+ get: function () { return chunkLPM3NPAX_cjs.adminDesignRoutes; }
878
1251
  });
879
1252
  Object.defineProperty(exports, "adminLogsRoutes", {
880
1253
  enumerable: true,
881
- get: function () { return chunkQ7SL7U43_cjs.adminLogsRoutes; }
1254
+ get: function () { return chunkLPM3NPAX_cjs.adminLogsRoutes; }
882
1255
  });
883
1256
  Object.defineProperty(exports, "adminMediaRoutes", {
884
1257
  enumerable: true,
885
- get: function () { return chunkQ7SL7U43_cjs.adminMediaRoutes; }
1258
+ get: function () { return chunkLPM3NPAX_cjs.adminMediaRoutes; }
886
1259
  });
887
1260
  Object.defineProperty(exports, "adminPluginRoutes", {
888
1261
  enumerable: true,
889
- get: function () { return chunkQ7SL7U43_cjs.adminPluginRoutes; }
1262
+ get: function () { return chunkLPM3NPAX_cjs.adminPluginRoutes; }
890
1263
  });
891
1264
  Object.defineProperty(exports, "adminSettingsRoutes", {
892
1265
  enumerable: true,
893
- get: function () { return chunkQ7SL7U43_cjs.adminSettingsRoutes; }
1266
+ get: function () { return chunkLPM3NPAX_cjs.adminSettingsRoutes; }
894
1267
  });
895
1268
  Object.defineProperty(exports, "adminTestimonialsRoutes", {
896
1269
  enumerable: true,
897
- get: function () { return chunkQ7SL7U43_cjs.admin_testimonials_default; }
1270
+ get: function () { return chunkLPM3NPAX_cjs.admin_testimonials_default; }
898
1271
  });
899
1272
  Object.defineProperty(exports, "adminUsersRoutes", {
900
1273
  enumerable: true,
901
- get: function () { return chunkQ7SL7U43_cjs.userRoutes; }
1274
+ get: function () { return chunkLPM3NPAX_cjs.userRoutes; }
902
1275
  });
903
1276
  Object.defineProperty(exports, "apiContentCrudRoutes", {
904
1277
  enumerable: true,
905
- get: function () { return chunkQ7SL7U43_cjs.api_content_crud_default; }
1278
+ get: function () { return chunkLPM3NPAX_cjs.api_content_crud_default; }
906
1279
  });
907
1280
  Object.defineProperty(exports, "apiMediaRoutes", {
908
1281
  enumerable: true,
909
- get: function () { return chunkQ7SL7U43_cjs.api_media_default; }
1282
+ get: function () { return chunkLPM3NPAX_cjs.api_media_default; }
910
1283
  });
911
1284
  Object.defineProperty(exports, "apiRoutes", {
912
1285
  enumerable: true,
913
- get: function () { return chunkQ7SL7U43_cjs.api_default; }
1286
+ get: function () { return chunkLPM3NPAX_cjs.api_default; }
914
1287
  });
915
1288
  Object.defineProperty(exports, "apiSystemRoutes", {
916
1289
  enumerable: true,
917
- get: function () { return chunkQ7SL7U43_cjs.api_system_default; }
1290
+ get: function () { return chunkLPM3NPAX_cjs.api_system_default; }
918
1291
  });
919
1292
  Object.defineProperty(exports, "authRoutes", {
920
1293
  enumerable: true,
921
- get: function () { return chunkQ7SL7U43_cjs.auth_default; }
1294
+ get: function () { return chunkLPM3NPAX_cjs.auth_default; }
922
1295
  });
923
1296
  Object.defineProperty(exports, "Logger", {
924
1297
  enumerable: true,
925
- get: function () { return chunkDOR2IU73_cjs.Logger; }
1298
+ get: function () { return chunkYP52USGX_cjs.Logger; }
926
1299
  });
927
1300
  Object.defineProperty(exports, "apiTokens", {
928
1301
  enumerable: true,
929
- get: function () { return chunkDOR2IU73_cjs.apiTokens; }
1302
+ get: function () { return chunkYP52USGX_cjs.apiTokens; }
930
1303
  });
931
1304
  Object.defineProperty(exports, "collections", {
932
1305
  enumerable: true,
933
- get: function () { return chunkDOR2IU73_cjs.collections; }
1306
+ get: function () { return chunkYP52USGX_cjs.collections; }
934
1307
  });
935
1308
  Object.defineProperty(exports, "content", {
936
1309
  enumerable: true,
937
- get: function () { return chunkDOR2IU73_cjs.content; }
1310
+ get: function () { return chunkYP52USGX_cjs.content; }
938
1311
  });
939
1312
  Object.defineProperty(exports, "contentVersions", {
940
1313
  enumerable: true,
941
- get: function () { return chunkDOR2IU73_cjs.contentVersions; }
1314
+ get: function () { return chunkYP52USGX_cjs.contentVersions; }
942
1315
  });
943
1316
  Object.defineProperty(exports, "getLogger", {
944
1317
  enumerable: true,
945
- get: function () { return chunkDOR2IU73_cjs.getLogger; }
1318
+ get: function () { return chunkYP52USGX_cjs.getLogger; }
946
1319
  });
947
1320
  Object.defineProperty(exports, "initLogger", {
948
1321
  enumerable: true,
949
- get: function () { return chunkDOR2IU73_cjs.initLogger; }
1322
+ get: function () { return chunkYP52USGX_cjs.initLogger; }
950
1323
  });
951
1324
  Object.defineProperty(exports, "insertCollectionSchema", {
952
1325
  enumerable: true,
953
- get: function () { return chunkDOR2IU73_cjs.insertCollectionSchema; }
1326
+ get: function () { return chunkYP52USGX_cjs.insertCollectionSchema; }
954
1327
  });
955
1328
  Object.defineProperty(exports, "insertContentSchema", {
956
1329
  enumerable: true,
957
- get: function () { return chunkDOR2IU73_cjs.insertContentSchema; }
1330
+ get: function () { return chunkYP52USGX_cjs.insertContentSchema; }
958
1331
  });
959
1332
  Object.defineProperty(exports, "insertLogConfigSchema", {
960
1333
  enumerable: true,
961
- get: function () { return chunkDOR2IU73_cjs.insertLogConfigSchema; }
1334
+ get: function () { return chunkYP52USGX_cjs.insertLogConfigSchema; }
962
1335
  });
963
1336
  Object.defineProperty(exports, "insertMediaSchema", {
964
1337
  enumerable: true,
965
- get: function () { return chunkDOR2IU73_cjs.insertMediaSchema; }
1338
+ get: function () { return chunkYP52USGX_cjs.insertMediaSchema; }
966
1339
  });
967
1340
  Object.defineProperty(exports, "insertPluginActivityLogSchema", {
968
1341
  enumerable: true,
969
- get: function () { return chunkDOR2IU73_cjs.insertPluginActivityLogSchema; }
1342
+ get: function () { return chunkYP52USGX_cjs.insertPluginActivityLogSchema; }
970
1343
  });
971
1344
  Object.defineProperty(exports, "insertPluginAssetSchema", {
972
1345
  enumerable: true,
973
- get: function () { return chunkDOR2IU73_cjs.insertPluginAssetSchema; }
1346
+ get: function () { return chunkYP52USGX_cjs.insertPluginAssetSchema; }
974
1347
  });
975
1348
  Object.defineProperty(exports, "insertPluginHookSchema", {
976
1349
  enumerable: true,
977
- get: function () { return chunkDOR2IU73_cjs.insertPluginHookSchema; }
1350
+ get: function () { return chunkYP52USGX_cjs.insertPluginHookSchema; }
978
1351
  });
979
1352
  Object.defineProperty(exports, "insertPluginRouteSchema", {
980
1353
  enumerable: true,
981
- get: function () { return chunkDOR2IU73_cjs.insertPluginRouteSchema; }
1354
+ get: function () { return chunkYP52USGX_cjs.insertPluginRouteSchema; }
982
1355
  });
983
1356
  Object.defineProperty(exports, "insertPluginSchema", {
984
1357
  enumerable: true,
985
- get: function () { return chunkDOR2IU73_cjs.insertPluginSchema; }
1358
+ get: function () { return chunkYP52USGX_cjs.insertPluginSchema; }
986
1359
  });
987
1360
  Object.defineProperty(exports, "insertSystemLogSchema", {
988
1361
  enumerable: true,
989
- get: function () { return chunkDOR2IU73_cjs.insertSystemLogSchema; }
1362
+ get: function () { return chunkYP52USGX_cjs.insertSystemLogSchema; }
990
1363
  });
991
1364
  Object.defineProperty(exports, "insertUserSchema", {
992
1365
  enumerable: true,
993
- get: function () { return chunkDOR2IU73_cjs.insertUserSchema; }
1366
+ get: function () { return chunkYP52USGX_cjs.insertUserSchema; }
994
1367
  });
995
1368
  Object.defineProperty(exports, "insertWorkflowHistorySchema", {
996
1369
  enumerable: true,
997
- get: function () { return chunkDOR2IU73_cjs.insertWorkflowHistorySchema; }
1370
+ get: function () { return chunkYP52USGX_cjs.insertWorkflowHistorySchema; }
998
1371
  });
999
1372
  Object.defineProperty(exports, "logConfig", {
1000
1373
  enumerable: true,
1001
- get: function () { return chunkDOR2IU73_cjs.logConfig; }
1374
+ get: function () { return chunkYP52USGX_cjs.logConfig; }
1002
1375
  });
1003
1376
  Object.defineProperty(exports, "media", {
1004
1377
  enumerable: true,
1005
- get: function () { return chunkDOR2IU73_cjs.media; }
1378
+ get: function () { return chunkYP52USGX_cjs.media; }
1006
1379
  });
1007
1380
  Object.defineProperty(exports, "pluginActivityLog", {
1008
1381
  enumerable: true,
1009
- get: function () { return chunkDOR2IU73_cjs.pluginActivityLog; }
1382
+ get: function () { return chunkYP52USGX_cjs.pluginActivityLog; }
1010
1383
  });
1011
1384
  Object.defineProperty(exports, "pluginAssets", {
1012
1385
  enumerable: true,
1013
- get: function () { return chunkDOR2IU73_cjs.pluginAssets; }
1386
+ get: function () { return chunkYP52USGX_cjs.pluginAssets; }
1014
1387
  });
1015
1388
  Object.defineProperty(exports, "pluginHooks", {
1016
1389
  enumerable: true,
1017
- get: function () { return chunkDOR2IU73_cjs.pluginHooks; }
1390
+ get: function () { return chunkYP52USGX_cjs.pluginHooks; }
1018
1391
  });
1019
1392
  Object.defineProperty(exports, "pluginRoutes", {
1020
1393
  enumerable: true,
1021
- get: function () { return chunkDOR2IU73_cjs.pluginRoutes; }
1394
+ get: function () { return chunkYP52USGX_cjs.pluginRoutes; }
1022
1395
  });
1023
1396
  Object.defineProperty(exports, "plugins", {
1024
1397
  enumerable: true,
1025
- get: function () { return chunkDOR2IU73_cjs.plugins; }
1398
+ get: function () { return chunkYP52USGX_cjs.plugins; }
1026
1399
  });
1027
1400
  Object.defineProperty(exports, "selectCollectionSchema", {
1028
1401
  enumerable: true,
1029
- get: function () { return chunkDOR2IU73_cjs.selectCollectionSchema; }
1402
+ get: function () { return chunkYP52USGX_cjs.selectCollectionSchema; }
1030
1403
  });
1031
1404
  Object.defineProperty(exports, "selectContentSchema", {
1032
1405
  enumerable: true,
1033
- get: function () { return chunkDOR2IU73_cjs.selectContentSchema; }
1406
+ get: function () { return chunkYP52USGX_cjs.selectContentSchema; }
1034
1407
  });
1035
1408
  Object.defineProperty(exports, "selectLogConfigSchema", {
1036
1409
  enumerable: true,
1037
- get: function () { return chunkDOR2IU73_cjs.selectLogConfigSchema; }
1410
+ get: function () { return chunkYP52USGX_cjs.selectLogConfigSchema; }
1038
1411
  });
1039
1412
  Object.defineProperty(exports, "selectMediaSchema", {
1040
1413
  enumerable: true,
1041
- get: function () { return chunkDOR2IU73_cjs.selectMediaSchema; }
1414
+ get: function () { return chunkYP52USGX_cjs.selectMediaSchema; }
1042
1415
  });
1043
1416
  Object.defineProperty(exports, "selectPluginActivityLogSchema", {
1044
1417
  enumerable: true,
1045
- get: function () { return chunkDOR2IU73_cjs.selectPluginActivityLogSchema; }
1418
+ get: function () { return chunkYP52USGX_cjs.selectPluginActivityLogSchema; }
1046
1419
  });
1047
1420
  Object.defineProperty(exports, "selectPluginAssetSchema", {
1048
1421
  enumerable: true,
1049
- get: function () { return chunkDOR2IU73_cjs.selectPluginAssetSchema; }
1422
+ get: function () { return chunkYP52USGX_cjs.selectPluginAssetSchema; }
1050
1423
  });
1051
1424
  Object.defineProperty(exports, "selectPluginHookSchema", {
1052
1425
  enumerable: true,
1053
- get: function () { return chunkDOR2IU73_cjs.selectPluginHookSchema; }
1426
+ get: function () { return chunkYP52USGX_cjs.selectPluginHookSchema; }
1054
1427
  });
1055
1428
  Object.defineProperty(exports, "selectPluginRouteSchema", {
1056
1429
  enumerable: true,
1057
- get: function () { return chunkDOR2IU73_cjs.selectPluginRouteSchema; }
1430
+ get: function () { return chunkYP52USGX_cjs.selectPluginRouteSchema; }
1058
1431
  });
1059
1432
  Object.defineProperty(exports, "selectPluginSchema", {
1060
1433
  enumerable: true,
1061
- get: function () { return chunkDOR2IU73_cjs.selectPluginSchema; }
1434
+ get: function () { return chunkYP52USGX_cjs.selectPluginSchema; }
1062
1435
  });
1063
1436
  Object.defineProperty(exports, "selectSystemLogSchema", {
1064
1437
  enumerable: true,
1065
- get: function () { return chunkDOR2IU73_cjs.selectSystemLogSchema; }
1438
+ get: function () { return chunkYP52USGX_cjs.selectSystemLogSchema; }
1066
1439
  });
1067
1440
  Object.defineProperty(exports, "selectUserSchema", {
1068
1441
  enumerable: true,
1069
- get: function () { return chunkDOR2IU73_cjs.selectUserSchema; }
1442
+ get: function () { return chunkYP52USGX_cjs.selectUserSchema; }
1070
1443
  });
1071
1444
  Object.defineProperty(exports, "selectWorkflowHistorySchema", {
1072
1445
  enumerable: true,
1073
- get: function () { return chunkDOR2IU73_cjs.selectWorkflowHistorySchema; }
1446
+ get: function () { return chunkYP52USGX_cjs.selectWorkflowHistorySchema; }
1074
1447
  });
1075
1448
  Object.defineProperty(exports, "systemLogs", {
1076
1449
  enumerable: true,
1077
- get: function () { return chunkDOR2IU73_cjs.systemLogs; }
1450
+ get: function () { return chunkYP52USGX_cjs.systemLogs; }
1078
1451
  });
1079
1452
  Object.defineProperty(exports, "users", {
1080
1453
  enumerable: true,
1081
- get: function () { return chunkDOR2IU73_cjs.users; }
1454
+ get: function () { return chunkYP52USGX_cjs.users; }
1082
1455
  });
1083
1456
  Object.defineProperty(exports, "workflowHistory", {
1084
1457
  enumerable: true,
1085
- get: function () { return chunkDOR2IU73_cjs.workflowHistory; }
1458
+ get: function () { return chunkYP52USGX_cjs.workflowHistory; }
1086
1459
  });
1087
1460
  Object.defineProperty(exports, "AuthManager", {
1088
1461
  enumerable: true,
1089
- get: function () { return chunkHXA5QSI3_cjs.AuthManager; }
1462
+ get: function () { return chunk7EGKU7OO_cjs.AuthManager; }
1090
1463
  });
1091
1464
  Object.defineProperty(exports, "PermissionManager", {
1092
1465
  enumerable: true,
1093
- get: function () { return chunkHXA5QSI3_cjs.PermissionManager; }
1466
+ get: function () { return chunk7EGKU7OO_cjs.PermissionManager; }
1094
1467
  });
1095
1468
  Object.defineProperty(exports, "bootstrapMiddleware", {
1096
1469
  enumerable: true,
1097
- get: function () { return chunkHXA5QSI3_cjs.bootstrapMiddleware; }
1470
+ get: function () { return chunk7EGKU7OO_cjs.bootstrapMiddleware; }
1098
1471
  });
1099
1472
  Object.defineProperty(exports, "cacheHeaders", {
1100
1473
  enumerable: true,
1101
- get: function () { return chunkHXA5QSI3_cjs.cacheHeaders; }
1474
+ get: function () { return chunk7EGKU7OO_cjs.cacheHeaders; }
1102
1475
  });
1103
1476
  Object.defineProperty(exports, "compressionMiddleware", {
1104
1477
  enumerable: true,
1105
- get: function () { return chunkHXA5QSI3_cjs.compressionMiddleware; }
1478
+ get: function () { return chunk7EGKU7OO_cjs.compressionMiddleware; }
1106
1479
  });
1107
1480
  Object.defineProperty(exports, "detailedLoggingMiddleware", {
1108
1481
  enumerable: true,
1109
- get: function () { return chunkHXA5QSI3_cjs.detailedLoggingMiddleware; }
1482
+ get: function () { return chunk7EGKU7OO_cjs.detailedLoggingMiddleware; }
1110
1483
  });
1111
1484
  Object.defineProperty(exports, "getActivePlugins", {
1112
1485
  enumerable: true,
1113
- get: function () { return chunkHXA5QSI3_cjs.getActivePlugins; }
1486
+ get: function () { return chunk7EGKU7OO_cjs.getActivePlugins; }
1114
1487
  });
1115
1488
  Object.defineProperty(exports, "isPluginActive", {
1116
1489
  enumerable: true,
1117
- get: function () { return chunkHXA5QSI3_cjs.isPluginActive; }
1490
+ get: function () { return chunk7EGKU7OO_cjs.isPluginActive; }
1118
1491
  });
1119
1492
  Object.defineProperty(exports, "logActivity", {
1120
1493
  enumerable: true,
1121
- get: function () { return chunkHXA5QSI3_cjs.logActivity; }
1494
+ get: function () { return chunk7EGKU7OO_cjs.logActivity; }
1122
1495
  });
1123
1496
  Object.defineProperty(exports, "loggingMiddleware", {
1124
1497
  enumerable: true,
1125
- get: function () { return chunkHXA5QSI3_cjs.loggingMiddleware; }
1498
+ get: function () { return chunk7EGKU7OO_cjs.loggingMiddleware; }
1126
1499
  });
1127
1500
  Object.defineProperty(exports, "optionalAuth", {
1128
1501
  enumerable: true,
1129
- get: function () { return chunkHXA5QSI3_cjs.optionalAuth; }
1502
+ get: function () { return chunk7EGKU7OO_cjs.optionalAuth; }
1130
1503
  });
1131
1504
  Object.defineProperty(exports, "performanceLoggingMiddleware", {
1132
1505
  enumerable: true,
1133
- get: function () { return chunkHXA5QSI3_cjs.performanceLoggingMiddleware; }
1506
+ get: function () { return chunk7EGKU7OO_cjs.performanceLoggingMiddleware; }
1134
1507
  });
1135
1508
  Object.defineProperty(exports, "requireActivePlugin", {
1136
1509
  enumerable: true,
1137
- get: function () { return chunkHXA5QSI3_cjs.requireActivePlugin; }
1510
+ get: function () { return chunk7EGKU7OO_cjs.requireActivePlugin; }
1138
1511
  });
1139
1512
  Object.defineProperty(exports, "requireActivePlugins", {
1140
1513
  enumerable: true,
1141
- get: function () { return chunkHXA5QSI3_cjs.requireActivePlugins; }
1514
+ get: function () { return chunk7EGKU7OO_cjs.requireActivePlugins; }
1142
1515
  });
1143
1516
  Object.defineProperty(exports, "requireAnyPermission", {
1144
1517
  enumerable: true,
1145
- get: function () { return chunkHXA5QSI3_cjs.requireAnyPermission; }
1518
+ get: function () { return chunk7EGKU7OO_cjs.requireAnyPermission; }
1146
1519
  });
1147
1520
  Object.defineProperty(exports, "requireAuth", {
1148
1521
  enumerable: true,
1149
- get: function () { return chunkHXA5QSI3_cjs.requireAuth; }
1522
+ get: function () { return chunk7EGKU7OO_cjs.requireAuth; }
1150
1523
  });
1151
1524
  Object.defineProperty(exports, "requirePermission", {
1152
1525
  enumerable: true,
1153
- get: function () { return chunkHXA5QSI3_cjs.requirePermission; }
1526
+ get: function () { return chunk7EGKU7OO_cjs.requirePermission; }
1154
1527
  });
1155
1528
  Object.defineProperty(exports, "requireRole", {
1156
1529
  enumerable: true,
1157
- get: function () { return chunkHXA5QSI3_cjs.requireRole; }
1530
+ get: function () { return chunk7EGKU7OO_cjs.requireRole; }
1158
1531
  });
1159
1532
  Object.defineProperty(exports, "securityHeaders", {
1160
1533
  enumerable: true,
1161
- get: function () { return chunkHXA5QSI3_cjs.securityHeaders; }
1534
+ get: function () { return chunk7EGKU7OO_cjs.securityHeaders; }
1162
1535
  });
1163
1536
  Object.defineProperty(exports, "securityLoggingMiddleware", {
1164
1537
  enumerable: true,
1165
- get: function () { return chunkHXA5QSI3_cjs.securityLoggingMiddleware; }
1166
- });
1167
- Object.defineProperty(exports, "MigrationService", {
1168
- enumerable: true,
1169
- get: function () { return chunkNBDPIRQS_cjs.MigrationService; }
1538
+ get: function () { return chunk7EGKU7OO_cjs.securityLoggingMiddleware; }
1170
1539
  });
1171
1540
  Object.defineProperty(exports, "PluginBootstrapService", {
1172
1541
  enumerable: true,
1173
- get: function () { return chunkNBDPIRQS_cjs.PluginBootstrapService; }
1542
+ get: function () { return chunk22EFGHAX_cjs.PluginBootstrapService; }
1174
1543
  });
1175
1544
  Object.defineProperty(exports, "PluginServiceClass", {
1176
1545
  enumerable: true,
1177
- get: function () { return chunkNBDPIRQS_cjs.PluginService; }
1546
+ get: function () { return chunk22EFGHAX_cjs.PluginService; }
1178
1547
  });
1179
1548
  Object.defineProperty(exports, "cleanupRemovedCollections", {
1180
1549
  enumerable: true,
1181
- get: function () { return chunkNBDPIRQS_cjs.cleanupRemovedCollections; }
1550
+ get: function () { return chunk22EFGHAX_cjs.cleanupRemovedCollections; }
1182
1551
  });
1183
1552
  Object.defineProperty(exports, "fullCollectionSync", {
1184
1553
  enumerable: true,
1185
- get: function () { return chunkNBDPIRQS_cjs.fullCollectionSync; }
1554
+ get: function () { return chunk22EFGHAX_cjs.fullCollectionSync; }
1186
1555
  });
1187
1556
  Object.defineProperty(exports, "getAvailableCollectionNames", {
1188
1557
  enumerable: true,
1189
- get: function () { return chunkNBDPIRQS_cjs.getAvailableCollectionNames; }
1558
+ get: function () { return chunk22EFGHAX_cjs.getAvailableCollectionNames; }
1190
1559
  });
1191
1560
  Object.defineProperty(exports, "getManagedCollections", {
1192
1561
  enumerable: true,
1193
- get: function () { return chunkNBDPIRQS_cjs.getManagedCollections; }
1562
+ get: function () { return chunk22EFGHAX_cjs.getManagedCollections; }
1194
1563
  });
1195
1564
  Object.defineProperty(exports, "isCollectionManaged", {
1196
1565
  enumerable: true,
1197
- get: function () { return chunkNBDPIRQS_cjs.isCollectionManaged; }
1566
+ get: function () { return chunk22EFGHAX_cjs.isCollectionManaged; }
1198
1567
  });
1199
1568
  Object.defineProperty(exports, "loadCollectionConfig", {
1200
1569
  enumerable: true,
1201
- get: function () { return chunkNBDPIRQS_cjs.loadCollectionConfig; }
1570
+ get: function () { return chunk22EFGHAX_cjs.loadCollectionConfig; }
1202
1571
  });
1203
1572
  Object.defineProperty(exports, "loadCollectionConfigs", {
1204
1573
  enumerable: true,
1205
- get: function () { return chunkNBDPIRQS_cjs.loadCollectionConfigs; }
1574
+ get: function () { return chunk22EFGHAX_cjs.loadCollectionConfigs; }
1206
1575
  });
1207
1576
  Object.defineProperty(exports, "registerCollections", {
1208
1577
  enumerable: true,
1209
- get: function () { return chunkNBDPIRQS_cjs.registerCollections; }
1578
+ get: function () { return chunk22EFGHAX_cjs.registerCollections; }
1210
1579
  });
1211
1580
  Object.defineProperty(exports, "syncCollection", {
1212
1581
  enumerable: true,
1213
- get: function () { return chunkNBDPIRQS_cjs.syncCollection; }
1582
+ get: function () { return chunk22EFGHAX_cjs.syncCollection; }
1214
1583
  });
1215
1584
  Object.defineProperty(exports, "syncCollections", {
1216
1585
  enumerable: true,
1217
- get: function () { return chunkNBDPIRQS_cjs.syncCollections; }
1586
+ get: function () { return chunk22EFGHAX_cjs.syncCollections; }
1218
1587
  });
1219
1588
  Object.defineProperty(exports, "validateCollectionConfig", {
1220
1589
  enumerable: true,
1221
- get: function () { return chunkNBDPIRQS_cjs.validateCollectionConfig; }
1590
+ get: function () { return chunk22EFGHAX_cjs.validateCollectionConfig; }
1591
+ });
1592
+ Object.defineProperty(exports, "MigrationService", {
1593
+ enumerable: true,
1594
+ get: function () { return chunkT7IYBGGO_cjs.MigrationService; }
1222
1595
  });
1223
1596
  Object.defineProperty(exports, "renderFilterBar", {
1224
1597
  enumerable: true,
1225
- get: function () { return chunkCAP6QQR2_cjs.renderFilterBar; }
1598
+ get: function () { return chunkZMSYKV62_cjs.renderFilterBar; }
1226
1599
  });
1227
1600
  Object.defineProperty(exports, "getConfirmationDialogScript", {
1228
1601
  enumerable: true,
1229
- get: function () { return chunkMU3MR2QR_cjs.getConfirmationDialogScript; }
1602
+ get: function () { return chunkYU6QFFI4_cjs.getConfirmationDialogScript; }
1230
1603
  });
1231
1604
  Object.defineProperty(exports, "renderAlert", {
1232
1605
  enumerable: true,
1233
- get: function () { return chunkMU3MR2QR_cjs.renderAlert; }
1606
+ get: function () { return chunkYU6QFFI4_cjs.renderAlert; }
1234
1607
  });
1235
1608
  Object.defineProperty(exports, "renderConfirmationDialog", {
1236
1609
  enumerable: true,
1237
- get: function () { return chunkMU3MR2QR_cjs.renderConfirmationDialog; }
1610
+ get: function () { return chunkYU6QFFI4_cjs.renderConfirmationDialog; }
1238
1611
  });
1239
1612
  Object.defineProperty(exports, "renderForm", {
1240
1613
  enumerable: true,
1241
- get: function () { return chunkMU3MR2QR_cjs.renderForm; }
1614
+ get: function () { return chunkYU6QFFI4_cjs.renderForm; }
1242
1615
  });
1243
1616
  Object.defineProperty(exports, "renderFormField", {
1244
1617
  enumerable: true,
1245
- get: function () { return chunkMU3MR2QR_cjs.renderFormField; }
1618
+ get: function () { return chunkYU6QFFI4_cjs.renderFormField; }
1246
1619
  });
1247
1620
  Object.defineProperty(exports, "renderPagination", {
1248
1621
  enumerable: true,
1249
- get: function () { return chunkMU3MR2QR_cjs.renderPagination; }
1622
+ get: function () { return chunkYU6QFFI4_cjs.renderPagination; }
1250
1623
  });
1251
1624
  Object.defineProperty(exports, "renderTable", {
1252
1625
  enumerable: true,
1253
- get: function () { return chunkMU3MR2QR_cjs.renderTable; }
1626
+ get: function () { return chunkYU6QFFI4_cjs.renderTable; }
1254
1627
  });
1255
1628
  Object.defineProperty(exports, "HookSystemImpl", {
1256
1629
  enumerable: true,
@@ -1278,43 +1651,43 @@ Object.defineProperty(exports, "ScopedHookSystemClass", {
1278
1651
  });
1279
1652
  Object.defineProperty(exports, "QueryFilterBuilder", {
1280
1653
  enumerable: true,
1281
- get: function () { return chunk3PHG75W4_cjs.QueryFilterBuilder; }
1654
+ get: function () { return chunk2MBNRFS5_cjs.QueryFilterBuilder; }
1282
1655
  });
1283
1656
  Object.defineProperty(exports, "SONICJS_VERSION", {
1284
1657
  enumerable: true,
1285
- get: function () { return chunk3PHG75W4_cjs.SONICJS_VERSION; }
1658
+ get: function () { return chunk2MBNRFS5_cjs.SONICJS_VERSION; }
1286
1659
  });
1287
1660
  Object.defineProperty(exports, "TemplateRenderer", {
1288
1661
  enumerable: true,
1289
- get: function () { return chunk3PHG75W4_cjs.TemplateRenderer; }
1662
+ get: function () { return chunk2MBNRFS5_cjs.TemplateRenderer; }
1290
1663
  });
1291
1664
  Object.defineProperty(exports, "buildQuery", {
1292
1665
  enumerable: true,
1293
- get: function () { return chunk3PHG75W4_cjs.buildQuery; }
1666
+ get: function () { return chunk2MBNRFS5_cjs.buildQuery; }
1294
1667
  });
1295
1668
  Object.defineProperty(exports, "escapeHtml", {
1296
1669
  enumerable: true,
1297
- get: function () { return chunk3PHG75W4_cjs.escapeHtml; }
1670
+ get: function () { return chunk2MBNRFS5_cjs.escapeHtml; }
1298
1671
  });
1299
1672
  Object.defineProperty(exports, "getCoreVersion", {
1300
1673
  enumerable: true,
1301
- get: function () { return chunk3PHG75W4_cjs.getCoreVersion; }
1674
+ get: function () { return chunk2MBNRFS5_cjs.getCoreVersion; }
1302
1675
  });
1303
1676
  Object.defineProperty(exports, "renderTemplate", {
1304
1677
  enumerable: true,
1305
- get: function () { return chunk3PHG75W4_cjs.renderTemplate; }
1678
+ get: function () { return chunk2MBNRFS5_cjs.renderTemplate; }
1306
1679
  });
1307
1680
  Object.defineProperty(exports, "sanitizeInput", {
1308
1681
  enumerable: true,
1309
- get: function () { return chunk3PHG75W4_cjs.sanitizeInput; }
1682
+ get: function () { return chunk2MBNRFS5_cjs.sanitizeInput; }
1310
1683
  });
1311
1684
  Object.defineProperty(exports, "sanitizeObject", {
1312
1685
  enumerable: true,
1313
- get: function () { return chunk3PHG75W4_cjs.sanitizeObject; }
1686
+ get: function () { return chunk2MBNRFS5_cjs.sanitizeObject; }
1314
1687
  });
1315
1688
  Object.defineProperty(exports, "templateRenderer", {
1316
1689
  enumerable: true,
1317
- get: function () { return chunk3PHG75W4_cjs.templateRenderer; }
1690
+ get: function () { return chunk2MBNRFS5_cjs.templateRenderer; }
1318
1691
  });
1319
1692
  Object.defineProperty(exports, "metricsTracker", {
1320
1693
  enumerable: true,