@kyro-cms/core 0.5.4 → 0.5.5

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 (151) hide show
  1. package/dist/WebhookService-118ZTFis.d.ts +112 -0
  2. package/dist/WebhookService-AefJfqX0.d.cts +112 -0
  3. package/dist/adapter-BSvBudTG.d.cts +65 -0
  4. package/dist/adapter-CXGB2Elb.d.ts +65 -0
  5. package/dist/api-handler.cjs +26 -8
  6. package/dist/api-handler.cjs.map +1 -1
  7. package/dist/api-handler.d.cts +9 -0
  8. package/dist/api-handler.d.ts +9 -0
  9. package/dist/api-handler.js +25 -7
  10. package/dist/api-handler.js.map +1 -1
  11. package/dist/base-DvvNqnM-.d.cts +73 -0
  12. package/dist/base-eVegJ_Pr.d.ts +73 -0
  13. package/dist/bootstrap-4MH44YKG.js +6 -0
  14. package/dist/{bootstrap-PBMMLBQC.js.map → bootstrap-4MH44YKG.js.map} +1 -1
  15. package/dist/bootstrap-EE6BJZWL.cjs +31 -0
  16. package/dist/{bootstrap-QN77EVI3.cjs.map → bootstrap-EE6BJZWL.cjs.map} +1 -1
  17. package/dist/chunk-3YELQL7Z.cjs +4 -0
  18. package/dist/chunk-3YELQL7Z.cjs.map +1 -0
  19. package/dist/{chunk-AGAIUDAV.cjs → chunk-55BNRTLW.cjs} +7 -7
  20. package/dist/chunk-55BNRTLW.cjs.map +1 -0
  21. package/dist/{chunk-XJ2VYR47.cjs → chunk-5HA5OMFH.cjs} +10 -7
  22. package/dist/chunk-5HA5OMFH.cjs.map +1 -0
  23. package/dist/{chunk-C4JJEE42.js → chunk-6WXQRYTW.js} +262 -43
  24. package/dist/chunk-6WXQRYTW.js.map +1 -0
  25. package/dist/{chunk-SO25EHOE.js → chunk-AM4JKIPP.js} +180 -77
  26. package/dist/chunk-AM4JKIPP.js.map +1 -0
  27. package/dist/{chunk-VSTRLXMQ.cjs → chunk-CKVOU6MX.cjs} +4 -2
  28. package/dist/chunk-CKVOU6MX.cjs.map +1 -0
  29. package/dist/chunk-GTGRLD4Y.js +3 -0
  30. package/dist/chunk-GTGRLD4Y.js.map +1 -0
  31. package/dist/chunk-MTIRYI7F.cjs +4 -0
  32. package/dist/chunk-MTIRYI7F.cjs.map +1 -0
  33. package/dist/{chunk-342BJNBI.js → chunk-QKVA2SOG.js} +300 -6
  34. package/dist/chunk-QKVA2SOG.js.map +1 -0
  35. package/dist/chunk-QU2RFFH4.js +3 -0
  36. package/dist/chunk-QU2RFFH4.js.map +1 -0
  37. package/dist/{chunk-ATVNYGRQ.js → chunk-QYZKIPSD.js} +7 -18
  38. package/dist/chunk-QYZKIPSD.js.map +1 -0
  39. package/dist/{chunk-SYRDCLH7.cjs → chunk-R2YHJN6W.cjs} +184 -81
  40. package/dist/chunk-R2YHJN6W.cjs.map +1 -0
  41. package/dist/{chunk-IX3ABYKZ.cjs → chunk-RALQO47U.cjs} +170 -2
  42. package/dist/chunk-RALQO47U.cjs.map +1 -0
  43. package/dist/{chunk-EVEJC22G.cjs → chunk-RDRJVCL5.cjs} +37 -5
  44. package/dist/chunk-RDRJVCL5.cjs.map +1 -0
  45. package/dist/{chunk-6COM32WF.js → chunk-RP7VZUEL.js} +5 -3
  46. package/dist/chunk-RP7VZUEL.js.map +1 -0
  47. package/dist/{chunk-XR5EJS3C.js → chunk-S3FG2NY7.js} +7 -4
  48. package/dist/chunk-S3FG2NY7.js.map +1 -0
  49. package/dist/{chunk-WH4Y5MT6.js → chunk-TP5YQFIX.js} +36 -4
  50. package/dist/chunk-TP5YQFIX.js.map +1 -0
  51. package/dist/{chunk-DBUYB32X.js → chunk-TVVYZ2TH.js} +171 -3
  52. package/dist/chunk-TVVYZ2TH.js.map +1 -0
  53. package/dist/{chunk-GBH6DN5C.cjs → chunk-WBCIEYHC.cjs} +8 -18
  54. package/dist/chunk-WBCIEYHC.cjs.map +1 -0
  55. package/dist/{chunk-3ZZPZYCM.cjs → chunk-WVPOPOEQ.cjs} +269 -41
  56. package/dist/chunk-WVPOPOEQ.cjs.map +1 -0
  57. package/dist/{chunk-W3KPQX7V.cjs → chunk-XAEBVZTI.cjs} +304 -4
  58. package/dist/chunk-XAEBVZTI.cjs.map +1 -0
  59. package/dist/{chunk-Q4DNT7FO.js → chunk-XU7AFF6V.js} +6 -6
  60. package/dist/chunk-XU7AFF6V.js.map +1 -0
  61. package/dist/cli/index.cjs +6 -4
  62. package/dist/cli/index.cjs.map +1 -1
  63. package/dist/cli/index.d.cts +1 -0
  64. package/dist/cli/index.d.ts +1 -0
  65. package/dist/cli/index.js +6 -4
  66. package/dist/cli/index.js.map +1 -1
  67. package/dist/client.d.cts +12 -0
  68. package/dist/client.d.ts +12 -0
  69. package/dist/drizzle/index.cjs +18 -18
  70. package/dist/drizzle/index.d.cts +152 -0
  71. package/dist/drizzle/index.d.ts +152 -0
  72. package/dist/drizzle/index.js +3 -3
  73. package/dist/fields/index.d.cts +27 -0
  74. package/dist/fields/index.d.ts +27 -0
  75. package/dist/graphql/index.d.cts +22 -0
  76. package/dist/graphql/index.d.ts +22 -0
  77. package/dist/index-Bz9JqRGI.d.cts +86 -0
  78. package/dist/index-Bz9JqRGI.d.ts +86 -0
  79. package/dist/index-CLp-DRKA.d.ts +64 -0
  80. package/dist/index-DfO7G4kN.d.cts +64 -0
  81. package/dist/index.cjs +118 -86
  82. package/dist/index.cjs.map +1 -1
  83. package/dist/index.d.cts +1368 -0
  84. package/dist/index.d.ts +1368 -0
  85. package/dist/index.js +48 -14
  86. package/dist/index.js.map +1 -1
  87. package/dist/integration.cjs +2 -2
  88. package/dist/integration.d.cts +27 -0
  89. package/dist/integration.d.ts +27 -0
  90. package/dist/integration.js +1 -1
  91. package/dist/media-GPPTZ43E.js +4 -0
  92. package/dist/{media-HOT3O7RW.js.map → media-GPPTZ43E.js.map} +1 -1
  93. package/dist/media-XNTUFJZR.cjs +17 -0
  94. package/dist/{media-WKP5AOX2.cjs.map → media-XNTUFJZR.cjs.map} +1 -1
  95. package/dist/mongodb/index.cjs +12 -3
  96. package/dist/mongodb/index.d.cts +59 -0
  97. package/dist/mongodb/index.d.ts +59 -0
  98. package/dist/mongodb/index.js +2 -1
  99. package/dist/postgres-auth-adapter-6742WDCF.cjs +14 -0
  100. package/dist/{postgres-auth-adapter-Z463NYJZ.cjs.map → postgres-auth-adapter-6742WDCF.cjs.map} +1 -1
  101. package/dist/postgres-auth-adapter-B65BULNS.js +5 -0
  102. package/dist/{postgres-auth-adapter-7F3ECO7I.js.map → postgres-auth-adapter-B65BULNS.js.map} +1 -1
  103. package/dist/rest/index.cjs +9 -5
  104. package/dist/rest/index.d.cts +57 -0
  105. package/dist/rest/index.d.ts +57 -0
  106. package/dist/rest/index.js +7 -3
  107. package/dist/{schema-TIYTCIKX.cjs → schema-37SE2F4B.cjs} +5 -5
  108. package/dist/{schema-TIYTCIKX.cjs.map → schema-37SE2F4B.cjs.map} +1 -1
  109. package/dist/{schema-6Q4W6AE6.js → schema-5PHL5IVB.js} +3 -3
  110. package/dist/{schema-6Q4W6AE6.js.map → schema-5PHL5IVB.js.map} +1 -1
  111. package/dist/templates/index.d.cts +59 -0
  112. package/dist/templates/index.d.ts +59 -0
  113. package/dist/trpc/index.d.cts +136 -0
  114. package/dist/trpc/index.d.ts +136 -0
  115. package/dist/types-Bs1up4yP.d.ts +461 -0
  116. package/dist/types-DqN4ckOC.d.cts +130 -0
  117. package/dist/types-DqN4ckOC.d.ts +130 -0
  118. package/dist/types-J3R9nVsZ.d.cts +461 -0
  119. package/dist/types-VtjUxIMp.d.cts +246 -0
  120. package/dist/types-VtjUxIMp.d.ts +246 -0
  121. package/dist/ws/index.d.cts +88 -0
  122. package/dist/ws/index.d.ts +88 -0
  123. package/package.json +3 -2
  124. package/dist/bootstrap-PBMMLBQC.js +0 -6
  125. package/dist/bootstrap-QN77EVI3.cjs +0 -31
  126. package/dist/chunk-342BJNBI.js.map +0 -1
  127. package/dist/chunk-3ZZPZYCM.cjs.map +0 -1
  128. package/dist/chunk-6COM32WF.js.map +0 -1
  129. package/dist/chunk-7SXPHG3M.cjs +0 -67
  130. package/dist/chunk-7SXPHG3M.cjs.map +0 -1
  131. package/dist/chunk-AGAIUDAV.cjs.map +0 -1
  132. package/dist/chunk-ATVNYGRQ.js.map +0 -1
  133. package/dist/chunk-C4JJEE42.js.map +0 -1
  134. package/dist/chunk-DBUYB32X.js.map +0 -1
  135. package/dist/chunk-EVEJC22G.cjs.map +0 -1
  136. package/dist/chunk-GBH6DN5C.cjs.map +0 -1
  137. package/dist/chunk-IX3ABYKZ.cjs.map +0 -1
  138. package/dist/chunk-L4E76X2K.js +0 -57
  139. package/dist/chunk-L4E76X2K.js.map +0 -1
  140. package/dist/chunk-Q4DNT7FO.js.map +0 -1
  141. package/dist/chunk-SO25EHOE.js.map +0 -1
  142. package/dist/chunk-SYRDCLH7.cjs.map +0 -1
  143. package/dist/chunk-VSTRLXMQ.cjs.map +0 -1
  144. package/dist/chunk-W3KPQX7V.cjs.map +0 -1
  145. package/dist/chunk-WH4Y5MT6.js.map +0 -1
  146. package/dist/chunk-XJ2VYR47.cjs.map +0 -1
  147. package/dist/chunk-XR5EJS3C.js.map +0 -1
  148. package/dist/media-HOT3O7RW.js +0 -4
  149. package/dist/media-WKP5AOX2.cjs +0 -17
  150. package/dist/postgres-auth-adapter-7F3ECO7I.js +0 -5
  151. package/dist/postgres-auth-adapter-Z463NYJZ.cjs +0 -14
@@ -1,11 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkEVEJC22G_cjs = require('./chunk-EVEJC22G.cjs');
3
+ var chunkRDRJVCL5_cjs = require('./chunk-RDRJVCL5.cjs');
4
4
  var chunkADLJSJSN_cjs = require('./chunk-ADLJSJSN.cjs');
5
5
  var chunkIBG6V56E_cjs = require('./chunk-IBG6V56E.cjs');
6
6
  var chunkVJT6P4N6_cjs = require('./chunk-VJT6P4N6.cjs');
7
7
  var chunkR3XIBBAW_cjs = require('./chunk-R3XIBBAW.cjs');
8
- var chunk7SXPHG3M_cjs = require('./chunk-7SXPHG3M.cjs');
8
+ var chunkWVPOPOEQ_cjs = require('./chunk-WVPOPOEQ.cjs');
9
+ var chunkRALQO47U_cjs = require('./chunk-RALQO47U.cjs');
10
+ var chunkXAEBVZTI_cjs = require('./chunk-XAEBVZTI.cjs');
9
11
  var chunkG7VZBCD6_cjs = require('./chunk-G7VZBCD6.cjs');
10
12
  var crypto = require('crypto');
11
13
  var unstorage = require('unstorage');
@@ -952,7 +954,7 @@ var AuthRoutes = class {
952
954
  constructor(config) {
953
955
  this.authAdapter = config.redis;
954
956
  this.email = config.email;
955
- this.passwordPolicy = config.passwordPolicy || new chunkEVEJC22G_cjs.PasswordPolicy();
957
+ this.passwordPolicy = config.passwordPolicy || new chunkRDRJVCL5_cjs.PasswordPolicy();
956
958
  this.lockout = config.lockout;
957
959
  this.rateLimiter = config.rateLimiter;
958
960
  this.auditLogger = config.auditLogger;
@@ -1017,6 +1019,7 @@ var AuthRoutes = class {
1017
1019
  201
1018
1020
  );
1019
1021
  } catch (error) {
1022
+ console.error("[AuthRoutes.register] Registration error:", error);
1020
1023
  return this.errorResponse("Registration failed", 500);
1021
1024
  }
1022
1025
  }
@@ -2668,6 +2671,7 @@ async function processImage(buffer) {
2668
2671
  }
2669
2672
 
2670
2673
  // src/storage/MediaService.ts
2674
+ var _mediaTablesEnsured = false;
2671
2675
  var MediaService = class _MediaService {
2672
2676
  db;
2673
2677
  storage;
@@ -2679,60 +2683,98 @@ var MediaService = class _MediaService {
2679
2683
  this.db = db;
2680
2684
  this.storage = storage2;
2681
2685
  this.dialect = options?.dialect || "sqlite";
2682
- this.genId = options?.genId || chunk7SXPHG3M_cjs.genId;
2686
+ this.genId = options?.genId || chunkWVPOPOEQ_cjs.genId;
2683
2687
  }
2684
2688
  static async init(db, options) {
2685
2689
  let storage2;
2686
2690
  if (options?.storageConfig) {
2687
2691
  storage2 = await resolveProviderWithConfig(options.storageConfig);
2688
2692
  } else {
2689
- const configService = new chunkEVEJC22G_cjs.ConfigService(db);
2693
+ const configService = new chunkRDRJVCL5_cjs.ConfigService(db);
2690
2694
  if (typeof db?.select === "function") {
2691
2695
  await configService.load();
2692
2696
  }
2693
2697
  storage2 = await resolveProvider(configService);
2694
2698
  }
2695
2699
  const service = new _MediaService(db, storage2, options);
2696
- service.ensureTables();
2700
+ await service.ensureTables();
2697
2701
  return service;
2698
2702
  }
2699
- ensureTables() {
2700
- if (this.dialect !== "sqlite") return;
2701
- this.db.exec(`
2702
- CREATE TABLE IF NOT EXISTS media (
2703
- id TEXT PRIMARY KEY,
2704
- filename TEXT NOT NULL UNIQUE,
2705
- title TEXT,
2706
- original_name TEXT NOT NULL,
2707
- mime_type TEXT NOT NULL,
2708
- file_size INTEGER NOT NULL,
2709
- width INTEGER,
2710
- height INTEGER,
2711
- url TEXT NOT NULL UNIQUE,
2712
- thumbnail_url TEXT,
2713
- folder TEXT,
2714
- provider TEXT NOT NULL,
2715
- alt TEXT,
2716
- caption TEXT,
2717
- metadata TEXT,
2718
- created_at TEXT NOT NULL,
2719
- updated_at TEXT NOT NULL
2720
- );
2721
- CREATE INDEX IF NOT EXISTS idx_media_folder ON media(folder);
2722
- CREATE INDEX IF NOT EXISTS idx_media_provider ON media(provider);
2723
- CREATE INDEX IF NOT EXISTS idx_media_filename ON media(filename);
2724
- CREATE INDEX IF NOT EXISTS idx_media_folders_path ON media_folders(path);
2725
- `);
2726
- this.db.exec(`
2727
- CREATE TABLE IF NOT EXISTS media_folders (
2728
- id TEXT PRIMARY KEY,
2729
- name TEXT NOT NULL,
2730
- path TEXT NOT NULL,
2731
- parent_path TEXT,
2732
- created_at TEXT
2733
- );
2734
- CREATE INDEX IF NOT EXISTS idx_media_folders_path ON media_folders(path);
2735
- `);
2703
+ async ensureTables() {
2704
+ if (this.dialect === "sqlite") {
2705
+ this.db.exec(`
2706
+ CREATE TABLE IF NOT EXISTS media (
2707
+ id TEXT PRIMARY KEY,
2708
+ filename TEXT NOT NULL UNIQUE,
2709
+ title TEXT,
2710
+ original_name TEXT NOT NULL,
2711
+ mime_type TEXT NOT NULL,
2712
+ file_size INTEGER NOT NULL,
2713
+ width INTEGER,
2714
+ height INTEGER,
2715
+ url TEXT NOT NULL UNIQUE,
2716
+ thumbnail_url TEXT,
2717
+ folder TEXT,
2718
+ provider TEXT NOT NULL,
2719
+ alt TEXT,
2720
+ caption TEXT,
2721
+ metadata TEXT,
2722
+ created_at TEXT NOT NULL,
2723
+ updated_at TEXT NOT NULL
2724
+ );
2725
+ CREATE INDEX IF NOT EXISTS idx_media_folder ON media(folder);
2726
+ CREATE INDEX IF NOT EXISTS idx_media_provider ON media(provider);
2727
+ CREATE INDEX IF NOT EXISTS idx_media_filename ON media(filename);
2728
+ `);
2729
+ this.db.exec(`
2730
+ CREATE TABLE IF NOT EXISTS media_folders (
2731
+ id TEXT PRIMARY KEY,
2732
+ name TEXT NOT NULL,
2733
+ path TEXT NOT NULL,
2734
+ parent_path TEXT,
2735
+ created_at TEXT
2736
+ );
2737
+ CREATE INDEX IF NOT EXISTS idx_media_folders_path ON media_folders(path);
2738
+ `);
2739
+ } else if (this.dialect === "postgres") {
2740
+ if (_mediaTablesEnsured) return;
2741
+ const { sql } = await import('drizzle-orm');
2742
+ await this.db.execute(sql`
2743
+ CREATE TABLE IF NOT EXISTS "media" (
2744
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
2745
+ "filename" VARCHAR(255) NOT NULL UNIQUE,
2746
+ "title" VARCHAR(255),
2747
+ "original_name" VARCHAR(255) NOT NULL,
2748
+ "mime_type" VARCHAR(100),
2749
+ "file_size" INTEGER,
2750
+ "width" INTEGER,
2751
+ "height" INTEGER,
2752
+ "url" TEXT NOT NULL UNIQUE,
2753
+ "thumbnail_url" TEXT,
2754
+ "folder" VARCHAR(255),
2755
+ "provider" VARCHAR(50) NOT NULL,
2756
+ "alt" TEXT,
2757
+ "caption" TEXT,
2758
+ "metadata" JSONB,
2759
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW(),
2760
+ "updated_at" TIMESTAMP NOT NULL DEFAULT NOW()
2761
+ )
2762
+ `);
2763
+ await this.db.execute(sql`CREATE INDEX IF NOT EXISTS "idx_media_folder" ON "media" ("folder")`);
2764
+ await this.db.execute(sql`CREATE INDEX IF NOT EXISTS "idx_media_provider" ON "media" ("provider")`);
2765
+ await this.db.execute(sql`CREATE INDEX IF NOT EXISTS "idx_media_filename" ON "media" ("filename")`);
2766
+ await this.db.execute(sql`
2767
+ CREATE TABLE IF NOT EXISTS "media_folders" (
2768
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
2769
+ "name" VARCHAR(255) NOT NULL,
2770
+ "path" TEXT NOT NULL,
2771
+ "parent_path" TEXT,
2772
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
2773
+ )
2774
+ `);
2775
+ await this.db.execute(sql`CREATE INDEX IF NOT EXISTS "idx_media_folders_path" ON "media_folders" ("path")`);
2776
+ _mediaTablesEnsured = true;
2777
+ }
2736
2778
  }
2737
2779
  now() {
2738
2780
  return (/* @__PURE__ */ new Date()).toISOString();
@@ -2853,13 +2895,15 @@ var MediaService = class _MediaService {
2853
2895
  ]
2854
2896
  );
2855
2897
  } else {
2856
- const { media: mediaSchema } = await import('./media-WKP5AOX2.cjs');
2898
+ const { media: mediaSchema } = await import('./media-XNTUFJZR.cjs');
2899
+ const mime = storageResult.mimeType;
2900
+ const mediaType = mime.startsWith("image/") ? "image" : mime.startsWith("video/") ? "video" : mime.startsWith("audio/") ? "audio" : mime.startsWith("application/pdf") ? "document" : ["application/zip", "application/x-zip", "application/x-tar", "application/gzip", "application/x-7z"].includes(mime) ? "archive" : "other";
2857
2901
  await this.db.insert(mediaSchema).values({
2858
2902
  id,
2859
2903
  filename: storageResult.filename,
2860
2904
  title: file.name.replace(/\.[^/.]+$/, ""),
2861
2905
  originalName: file.name,
2862
- mimeType: storageResult.mimeType,
2906
+ mimeType: mime,
2863
2907
  fileSize: storageResult.size,
2864
2908
  width,
2865
2909
  height,
@@ -2867,6 +2911,10 @@ var MediaService = class _MediaService {
2867
2911
  thumbnailUrl,
2868
2912
  folder: folder || "",
2869
2913
  provider: this.storage.name,
2914
+ type: mediaType,
2915
+ status: "active",
2916
+ alt: null,
2917
+ caption: null,
2870
2918
  createdAt: /* @__PURE__ */ new Date(),
2871
2919
  updatedAt: /* @__PURE__ */ new Date()
2872
2920
  }).returning();
@@ -2909,8 +2957,9 @@ var MediaService = class _MediaService {
2909
2957
  id
2910
2958
  ]);
2911
2959
  } else {
2912
- const { media: mediaSchema } = await import('./media-WKP5AOX2.cjs');
2913
- const [row] = await this.db.select().from(mediaSchema).where(mediaSchema.id.equals(id));
2960
+ const { media: mediaSchema } = await import('./media-XNTUFJZR.cjs');
2961
+ const { eq } = await import('drizzle-orm');
2962
+ const [row] = await this.db.select().from(mediaSchema).where(eq(mediaSchema.id, id));
2914
2963
  if (row) item = this.rowToMedia(row);
2915
2964
  }
2916
2965
  if (!item) return;
@@ -2924,8 +2973,9 @@ var MediaService = class _MediaService {
2924
2973
  if (this.dialect === "sqlite") {
2925
2974
  await this.sqliteRun(`DELETE FROM ${this.mediaTable} WHERE id = ?`, [id]);
2926
2975
  } else {
2927
- const { media: mediaSchema } = await import('./media-WKP5AOX2.cjs');
2928
- await this.db.delete(mediaSchema).where(mediaSchema.id.equals(id));
2976
+ const { media: mediaSchema } = await import('./media-XNTUFJZR.cjs');
2977
+ const { eq } = await import('drizzle-orm');
2978
+ await this.db.delete(mediaSchema).where(eq(mediaSchema.id, id));
2929
2979
  }
2930
2980
  }
2931
2981
  async deleteFile(url) {
@@ -2938,8 +2988,9 @@ var MediaService = class _MediaService {
2938
2988
  id
2939
2989
  ]);
2940
2990
  } else {
2941
- const { media: mediaSchema } = await import('./media-WKP5AOX2.cjs');
2942
- const [row] = await this.db.select().from(mediaSchema).where(mediaSchema.id.equals(id));
2991
+ const { media: mediaSchema } = await import('./media-XNTUFJZR.cjs');
2992
+ const { eq } = await import('drizzle-orm');
2993
+ const [row] = await this.db.select().from(mediaSchema).where(eq(mediaSchema.id, id));
2943
2994
  if (row) item = this.rowToMedia(row);
2944
2995
  }
2945
2996
  if (!item) return null;
@@ -2972,8 +3023,9 @@ var MediaService = class _MediaService {
2972
3023
  [...vals, this.now(), id]
2973
3024
  );
2974
3025
  } else {
2975
- const { media: mediaSchema } = await import('./media-WKP5AOX2.cjs');
2976
- await this.db.update(mediaSchema).set({ ...updateData, updatedAt: this.now() }).where(mediaSchema.id.equals(id));
3026
+ const { media: mediaSchema } = await import('./media-XNTUFJZR.cjs');
3027
+ const { eq } = await import('drizzle-orm');
3028
+ await this.db.update(mediaSchema).set({ ...updateData, updatedAt: this.now() }).where(eq(mediaSchema.id, id));
2977
3029
  }
2978
3030
  return {
2979
3031
  ...item,
@@ -2990,8 +3042,9 @@ var MediaService = class _MediaService {
2990
3042
  );
2991
3043
  return row2 ? this.rowToMedia(row2) : null;
2992
3044
  }
2993
- const { media: mediaSchema } = await import('./media-WKP5AOX2.cjs');
2994
- const [row] = await this.db.select().from(mediaSchema).where(mediaSchema.id.equals(id));
3045
+ const { media: mediaSchema } = await import('./media-XNTUFJZR.cjs');
3046
+ const { eq } = await import('drizzle-orm');
3047
+ const [row] = await this.db.select().from(mediaSchema).where(eq(mediaSchema.id, id));
2995
3048
  return row ? this.rowToMedia(row) : null;
2996
3049
  }
2997
3050
  async find(params = {}) {
@@ -3037,8 +3090,8 @@ var MediaService = class _MediaService {
3037
3090
  totalPages: Math.ceil(totalDocs2 / limit)
3038
3091
  };
3039
3092
  }
3040
- const { media: mediaSchema } = await import('./media-WKP5AOX2.cjs');
3041
- const { like, or, and, asc, desc, eq, sql } = await import('drizzle-orm/pg-core');
3093
+ const { media: mediaSchema } = await import('./media-XNTUFJZR.cjs');
3094
+ const { like, or, and, asc, desc, eq, sql } = await import('drizzle-orm');
3042
3095
  const conditions = [];
3043
3096
  if (search) {
3044
3097
  conditions.push(
@@ -3062,7 +3115,17 @@ var MediaService = class _MediaService {
3062
3115
  );
3063
3116
  }
3064
3117
  const whereClause = conditions.length > 0 ? and(...conditions) : void 0;
3065
- const order = sortDir === "asc" ? asc(mediaSchema[sortCol]) : desc(mediaSchema[sortCol]);
3118
+ const sortKey = {
3119
+ created_at: "createdAt",
3120
+ updated_at: "updatedAt",
3121
+ title: "title",
3122
+ filename: "filename",
3123
+ file_size: "fileSize",
3124
+ mime_type: "mimeType",
3125
+ original_name: "originalName"
3126
+ };
3127
+ const col = mediaSchema[sortKey[sortCol] || "createdAt"];
3128
+ const order = sortDir === "asc" ? asc(col) : desc(col);
3066
3129
  const docs = await this.db.select().from(mediaSchema).where(whereClause).orderBy(order).limit(limit).offset(offset);
3067
3130
  const [{ count }] = await this.db.select({ count: sql`count(*)` }).from(mediaSchema).where(whereClause);
3068
3131
  const totalDocs = Number(count);
@@ -3106,8 +3169,9 @@ var MediaService = class _MediaService {
3106
3169
  );
3107
3170
  return row ? this.rowToMedia(row) : null;
3108
3171
  }
3109
- const { media: mediaSchema } = await import('./media-WKP5AOX2.cjs');
3110
- const [updated] = await this.db.update(mediaSchema).set({ ...data, updatedAt: /* @__PURE__ */ new Date() }).where(mediaSchema.id.equals(id)).returning();
3172
+ const { media: mediaSchema } = await import('./media-XNTUFJZR.cjs');
3173
+ const { eq } = await import('drizzle-orm');
3174
+ const [updated] = await this.db.update(mediaSchema).set({ ...data, updatedAt: /* @__PURE__ */ new Date() }).where(eq(mediaSchema.id, id)).returning();
3111
3175
  return updated ? this.rowToMedia(updated) : null;
3112
3176
  }
3113
3177
  async updateMany(ids, data) {
@@ -3127,9 +3191,10 @@ var MediaService = class _MediaService {
3127
3191
  );
3128
3192
  }
3129
3193
  } else {
3130
- const { media: mediaSchema } = await import('./media-WKP5AOX2.cjs');
3194
+ const { media: mediaSchema } = await import('./media-XNTUFJZR.cjs');
3195
+ const { eq } = await import('drizzle-orm');
3131
3196
  for (const id of ids) {
3132
- await this.db.update(mediaSchema).set({ ...data, updatedAt: /* @__PURE__ */ new Date() }).where(mediaSchema.id.equals(id));
3197
+ await this.db.update(mediaSchema).set({ ...data, updatedAt: /* @__PURE__ */ new Date() }).where(eq(mediaSchema.id, id));
3133
3198
  }
3134
3199
  }
3135
3200
  }
@@ -3141,8 +3206,8 @@ var MediaService = class _MediaService {
3141
3206
  );
3142
3207
  return rows.map((r) => r.path).filter((f) => f && f !== "").sort();
3143
3208
  }
3144
- const { media: mediaSchema, mediaFolders: folderSchema } = await import('./media-WKP5AOX2.cjs');
3145
- const { eq, sql } = await import('drizzle-orm/pg-core');
3209
+ const { media: mediaSchema, mediaFolders: folderSchema } = await import('./media-XNTUFJZR.cjs');
3210
+ const { eq, sql } = await import('drizzle-orm');
3146
3211
  const fromMedia = await this.db.select({ folder: mediaSchema.folder }).from(mediaSchema).groupBy(mediaSchema.folder);
3147
3212
  const fromFolders = await this.db.select({ path: folderSchema.path }).from(folderSchema);
3148
3213
  const allPaths = /* @__PURE__ */ new Set([
@@ -3161,7 +3226,7 @@ var MediaService = class _MediaService {
3161
3226
  [fullPath, name, parentPath || null, now]
3162
3227
  );
3163
3228
  } else {
3164
- const { mediaFolders: folderSchema } = await import('./media-WKP5AOX2.cjs');
3229
+ const { mediaFolders: folderSchema } = await import('./media-XNTUFJZR.cjs');
3165
3230
  await this.db.insert(folderSchema).values({
3166
3231
  path: fullPath,
3167
3232
  name,
@@ -3182,8 +3247,8 @@ var MediaService = class _MediaService {
3182
3247
  [folder, `${folder}/%`]
3183
3248
  );
3184
3249
  } else {
3185
- const { mediaFolders: folderSchema } = await import('./media-WKP5AOX2.cjs');
3186
- const { like, or, eq } = await import('./media-WKP5AOX2.cjs');
3250
+ const { mediaFolders: folderSchema } = await import('./media-XNTUFJZR.cjs');
3251
+ const { like, or, eq } = await import('drizzle-orm');
3187
3252
  await this.db.delete(folderSchema).where(
3188
3253
  or(
3189
3254
  eq(folderSchema.path, folder),
@@ -3551,6 +3616,18 @@ async function resolveAuthContext(req, authMw, staticUser, staticTenantID) {
3551
3616
  authType: result.authType
3552
3617
  };
3553
3618
  }
3619
+ function createDefaultAuthAdapter(db, rootDir) {
3620
+ if (db instanceof chunkWVPOPOEQ_cjs.DrizzleAdapter && db.dialect === "postgres") {
3621
+ return new chunkRALQO47U_cjs.PostgresAuthAdapter({ db: db.client });
3622
+ }
3623
+ if (db instanceof chunkXAEBVZTI_cjs.MongoDBAdapter) {
3624
+ return new chunkXAEBVZTI_cjs.MongoDBAuthAdapter({ db: db.db });
3625
+ }
3626
+ const defaultAuthDbPath = path.resolve(rootDir, "data", "kyro.db");
3627
+ return new chunkRDRJVCL5_cjs.SQLiteAuthAdapter({
3628
+ path: process.env.KYRO_AUTH_DB_PATH || defaultAuthDbPath
3629
+ });
3630
+ }
3554
3631
  function createHonoApp(options) {
3555
3632
  const {
3556
3633
  registry,
@@ -3577,10 +3654,7 @@ function createHonoApp(options) {
3577
3654
  apiAccess?.requireAuth;
3578
3655
  const cwd = process.cwd();
3579
3656
  const rootDir = cwd.endsWith("admin") ? path.resolve(cwd, "..") : cwd;
3580
- const defaultAuthDbPath = path.resolve(rootDir, "data", "kyro.db");
3581
- const sessionAuthAdapter = authAdapter || new chunkEVEJC22G_cjs.SQLiteAuthAdapter({
3582
- path: process.env.KYRO_AUTH_DB_PATH || defaultAuthDbPath
3583
- });
3657
+ const sessionAuthAdapter = authAdapter || createDefaultAuthAdapter(db, rootDir);
3584
3658
  const authMw = authSecret ? createAuthMiddleware({
3585
3659
  db,
3586
3660
  userLookup: async (userId) => {
@@ -4080,7 +4154,9 @@ function createHonoApp(options) {
4080
4154
  }
4081
4155
  if (!mediaService) {
4082
4156
  try {
4083
- mediaService = await MediaService.init(db);
4157
+ const dialect = db instanceof chunkWVPOPOEQ_cjs.DrizzleAdapter ? db.dialect : "sqlite";
4158
+ const mediaDb = dialect === "postgres" && db instanceof chunkWVPOPOEQ_cjs.DrizzleAdapter ? db.client : db;
4159
+ mediaService = await MediaService.init(mediaDb, { dialect });
4084
4160
  } catch (error) {
4085
4161
  console.error("[getMedia] Init error:", error);
4086
4162
  mediaServiceInitError = error;
@@ -4091,6 +4167,8 @@ function createHonoApp(options) {
4091
4167
  };
4092
4168
  app.get("/api/media", async (c) => {
4093
4169
  try {
4170
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4171
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4094
4172
  const service = await getMedia();
4095
4173
  const page = parseInt(c.req.query("page") || "1");
4096
4174
  const limit = parseInt(c.req.query("limit") || "30");
@@ -4101,11 +4179,13 @@ function createHonoApp(options) {
4101
4179
  return c.json(result);
4102
4180
  } catch (error) {
4103
4181
  console.error("[Media] find error:", error);
4104
- return c.json({ error: error.message, stack: error.stack }, 500);
4182
+ return c.json({ error: error.message }, 500);
4105
4183
  }
4106
4184
  });
4107
4185
  app.post("/api/media/upload", async (c) => {
4108
4186
  try {
4187
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4188
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4109
4189
  const service = await getMedia();
4110
4190
  const contentType = c.req.header("content-type") || "";
4111
4191
  if (contentType.includes("multipart/form-data")) {
@@ -4127,6 +4207,8 @@ function createHonoApp(options) {
4127
4207
  });
4128
4208
  app.get("/api/media/folders", async (c) => {
4129
4209
  try {
4210
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4211
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4130
4212
  const service = await getMedia();
4131
4213
  const folders = await service.listFolders();
4132
4214
  return c.json(folders);
@@ -4137,6 +4219,8 @@ function createHonoApp(options) {
4137
4219
  });
4138
4220
  app.post("/api/media/folders", async (c) => {
4139
4221
  try {
4222
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4223
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4140
4224
  const service = await getMedia();
4141
4225
  const body = await c.req.json();
4142
4226
  const { name, parentPath } = body;
@@ -4155,6 +4239,8 @@ function createHonoApp(options) {
4155
4239
  });
4156
4240
  app.delete("/api/media/folders", async (c) => {
4157
4241
  try {
4242
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4243
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4158
4244
  const service = await getMedia();
4159
4245
  const path2 = c.req.query("path");
4160
4246
  if (!path2) {
@@ -4169,6 +4255,8 @@ function createHonoApp(options) {
4169
4255
  });
4170
4256
  app.delete("/api/media/:id", async (c) => {
4171
4257
  try {
4258
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4259
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4172
4260
  const service = await getMedia();
4173
4261
  const id = c.req.param("id");
4174
4262
  await service.delete(id);
@@ -4180,6 +4268,8 @@ function createHonoApp(options) {
4180
4268
  });
4181
4269
  app.get("/api/media/resize", async (c) => {
4182
4270
  try {
4271
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4272
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4183
4273
  const url = c.req.query("url");
4184
4274
  const w = parseInt(c.req.query("w") || "0");
4185
4275
  const h = parseInt(c.req.query("h") || "0");
@@ -4221,6 +4311,8 @@ function createHonoApp(options) {
4221
4311
  });
4222
4312
  app.get("/api/media/:id", async (c) => {
4223
4313
  try {
4314
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4315
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4224
4316
  const service = await getMedia();
4225
4317
  const id = c.req.param("id");
4226
4318
  const doc = await service.findById(id);
@@ -4233,6 +4325,8 @@ function createHonoApp(options) {
4233
4325
  });
4234
4326
  app.patch("/api/media/:id", async (c) => {
4235
4327
  try {
4328
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4329
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4236
4330
  const service = await getMedia();
4237
4331
  const id = c.req.param("id");
4238
4332
  const body = await c.req.json();
@@ -4248,6 +4342,8 @@ function createHonoApp(options) {
4248
4342
  });
4249
4343
  app.get("/api/media/test", async (c) => {
4250
4344
  try {
4345
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4346
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4251
4347
  const service = await getMedia();
4252
4348
  return c.json({
4253
4349
  status: service ? "initialized" : "failed",
@@ -4267,6 +4363,8 @@ function createHonoApp(options) {
4267
4363
  });
4268
4364
  app.get("/api/storage-status", async (c) => {
4269
4365
  try {
4366
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4367
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4270
4368
  let configured = false;
4271
4369
  let provider = "local";
4272
4370
  if (db) {
@@ -4309,7 +4407,9 @@ function createHonoApp(options) {
4309
4407
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
4310
4408
  });
4311
4409
  });
4312
- app.get("/api/collections", (c) => {
4410
+ app.get("/api/collections", async (c) => {
4411
+ const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
4412
+ if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
4313
4413
  const collections2 = registry.getCollections().map((col) => ({
4314
4414
  slug: col.slug,
4315
4415
  label: col.label || col.slug,
@@ -5530,6 +5630,10 @@ function createHonoApp(options) {
5530
5630
  } catch (zodErr) {
5531
5631
  return c.json({ error: "Validation failed", details: zodErr.errors }, 400);
5532
5632
  }
5633
+ const SYSTEM_FIELDS = /* @__PURE__ */ new Set(["id", "createdAt", "updatedAt", "_status", "_has_draft"]);
5634
+ const userData = Object.fromEntries(
5635
+ Object.entries(validated).filter(([k]) => !SYSTEM_FIELDS.has(k))
5636
+ );
5533
5637
  const collectionSlug = `_globals_${slug}`;
5534
5638
  const originalDoc = await db.findOne({
5535
5639
  collection: collectionSlug,
@@ -5544,8 +5648,7 @@ function createHonoApp(options) {
5544
5648
  await db.createVersion({
5545
5649
  collection: collectionSlug,
5546
5650
  documentId: slug,
5547
- // Global ID is the slug
5548
- data: validated,
5651
+ data: userData,
5549
5652
  status: "draft",
5550
5653
  createdBy: ctxUser?.id,
5551
5654
  changeDescription: "Manual save (Draft)",
@@ -5558,7 +5661,7 @@ function createHonoApp(options) {
5558
5661
  tenantID: ctxTenantID
5559
5662
  });
5560
5663
  } else {
5561
- const saveData = isDraftEnabled ? { ...validated, _status: "draft", _has_draft: false } : { ...validated, _status: "published", _has_draft: false };
5664
+ const saveData = isDraftEnabled ? { ...userData, _status: "draft", _has_draft: false } : { ...userData, _status: "published", _has_draft: false };
5562
5665
  if (originalDoc) {
5563
5666
  doc = await db.update({
5564
5667
  collection: collectionSlug,
@@ -5577,7 +5680,7 @@ function createHonoApp(options) {
5577
5680
  await db.createVersion({
5578
5681
  collection: collectionSlug,
5579
5682
  documentId: slug,
5580
- data: validated,
5683
+ data: userData,
5581
5684
  status: "draft",
5582
5685
  createdBy: ctxUser?.id,
5583
5686
  changeDescription: "Manual save",
@@ -5764,7 +5867,7 @@ function createHonoApp(options) {
5764
5867
  mailgun: body.mailgun,
5765
5868
  ses: body.ses
5766
5869
  };
5767
- const transport = new chunkEVEJC22G_cjs.EmailTransport(transportConfig);
5870
+ const transport = new chunkRDRJVCL5_cjs.EmailTransport(transportConfig);
5768
5871
  const recipient = body.testEmail || body.testEmailSection && body.testEmailSection.testEmail;
5769
5872
  if (!recipient) {
5770
5873
  return c.json({ error: "No test recipient email provided" }, 400);
@@ -5838,5 +5941,5 @@ exports.init_secret = init_secret;
5838
5941
  exports.loadSecrets = loadSecrets;
5839
5942
  exports.resolveProvider = resolveProvider;
5840
5943
  exports.setDbAdapter = setDbAdapter;
5841
- //# sourceMappingURL=chunk-SYRDCLH7.cjs.map
5842
- //# sourceMappingURL=chunk-SYRDCLH7.cjs.map
5944
+ //# sourceMappingURL=chunk-R2YHJN6W.cjs.map
5945
+ //# sourceMappingURL=chunk-R2YHJN6W.cjs.map