@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.
- package/dist/WebhookService-118ZTFis.d.ts +112 -0
- package/dist/WebhookService-AefJfqX0.d.cts +112 -0
- package/dist/adapter-BSvBudTG.d.cts +65 -0
- package/dist/adapter-CXGB2Elb.d.ts +65 -0
- package/dist/api-handler.cjs +26 -8
- package/dist/api-handler.cjs.map +1 -1
- package/dist/api-handler.d.cts +9 -0
- package/dist/api-handler.d.ts +9 -0
- package/dist/api-handler.js +25 -7
- package/dist/api-handler.js.map +1 -1
- package/dist/base-DvvNqnM-.d.cts +73 -0
- package/dist/base-eVegJ_Pr.d.ts +73 -0
- package/dist/bootstrap-4MH44YKG.js +6 -0
- package/dist/{bootstrap-PBMMLBQC.js.map → bootstrap-4MH44YKG.js.map} +1 -1
- package/dist/bootstrap-EE6BJZWL.cjs +31 -0
- package/dist/{bootstrap-QN77EVI3.cjs.map → bootstrap-EE6BJZWL.cjs.map} +1 -1
- package/dist/chunk-3YELQL7Z.cjs +4 -0
- package/dist/chunk-3YELQL7Z.cjs.map +1 -0
- package/dist/{chunk-AGAIUDAV.cjs → chunk-55BNRTLW.cjs} +7 -7
- package/dist/chunk-55BNRTLW.cjs.map +1 -0
- package/dist/{chunk-XJ2VYR47.cjs → chunk-5HA5OMFH.cjs} +10 -7
- package/dist/chunk-5HA5OMFH.cjs.map +1 -0
- package/dist/{chunk-C4JJEE42.js → chunk-6WXQRYTW.js} +262 -43
- package/dist/chunk-6WXQRYTW.js.map +1 -0
- package/dist/{chunk-SO25EHOE.js → chunk-AM4JKIPP.js} +180 -77
- package/dist/chunk-AM4JKIPP.js.map +1 -0
- package/dist/{chunk-VSTRLXMQ.cjs → chunk-CKVOU6MX.cjs} +4 -2
- package/dist/chunk-CKVOU6MX.cjs.map +1 -0
- package/dist/chunk-GTGRLD4Y.js +3 -0
- package/dist/chunk-GTGRLD4Y.js.map +1 -0
- package/dist/chunk-MTIRYI7F.cjs +4 -0
- package/dist/chunk-MTIRYI7F.cjs.map +1 -0
- package/dist/{chunk-342BJNBI.js → chunk-QKVA2SOG.js} +300 -6
- package/dist/chunk-QKVA2SOG.js.map +1 -0
- package/dist/chunk-QU2RFFH4.js +3 -0
- package/dist/chunk-QU2RFFH4.js.map +1 -0
- package/dist/{chunk-ATVNYGRQ.js → chunk-QYZKIPSD.js} +7 -18
- package/dist/chunk-QYZKIPSD.js.map +1 -0
- package/dist/{chunk-SYRDCLH7.cjs → chunk-R2YHJN6W.cjs} +184 -81
- package/dist/chunk-R2YHJN6W.cjs.map +1 -0
- package/dist/{chunk-IX3ABYKZ.cjs → chunk-RALQO47U.cjs} +170 -2
- package/dist/chunk-RALQO47U.cjs.map +1 -0
- package/dist/{chunk-EVEJC22G.cjs → chunk-RDRJVCL5.cjs} +37 -5
- package/dist/chunk-RDRJVCL5.cjs.map +1 -0
- package/dist/{chunk-6COM32WF.js → chunk-RP7VZUEL.js} +5 -3
- package/dist/chunk-RP7VZUEL.js.map +1 -0
- package/dist/{chunk-XR5EJS3C.js → chunk-S3FG2NY7.js} +7 -4
- package/dist/chunk-S3FG2NY7.js.map +1 -0
- package/dist/{chunk-WH4Y5MT6.js → chunk-TP5YQFIX.js} +36 -4
- package/dist/chunk-TP5YQFIX.js.map +1 -0
- package/dist/{chunk-DBUYB32X.js → chunk-TVVYZ2TH.js} +171 -3
- package/dist/chunk-TVVYZ2TH.js.map +1 -0
- package/dist/{chunk-GBH6DN5C.cjs → chunk-WBCIEYHC.cjs} +8 -18
- package/dist/chunk-WBCIEYHC.cjs.map +1 -0
- package/dist/{chunk-3ZZPZYCM.cjs → chunk-WVPOPOEQ.cjs} +269 -41
- package/dist/chunk-WVPOPOEQ.cjs.map +1 -0
- package/dist/{chunk-W3KPQX7V.cjs → chunk-XAEBVZTI.cjs} +304 -4
- package/dist/chunk-XAEBVZTI.cjs.map +1 -0
- package/dist/{chunk-Q4DNT7FO.js → chunk-XU7AFF6V.js} +6 -6
- package/dist/chunk-XU7AFF6V.js.map +1 -0
- package/dist/cli/index.cjs +6 -4
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +6 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/client.d.cts +12 -0
- package/dist/client.d.ts +12 -0
- package/dist/drizzle/index.cjs +18 -18
- package/dist/drizzle/index.d.cts +152 -0
- package/dist/drizzle/index.d.ts +152 -0
- package/dist/drizzle/index.js +3 -3
- package/dist/fields/index.d.cts +27 -0
- package/dist/fields/index.d.ts +27 -0
- package/dist/graphql/index.d.cts +22 -0
- package/dist/graphql/index.d.ts +22 -0
- package/dist/index-Bz9JqRGI.d.cts +86 -0
- package/dist/index-Bz9JqRGI.d.ts +86 -0
- package/dist/index-CLp-DRKA.d.ts +64 -0
- package/dist/index-DfO7G4kN.d.cts +64 -0
- package/dist/index.cjs +118 -86
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1368 -0
- package/dist/index.d.ts +1368 -0
- package/dist/index.js +48 -14
- package/dist/index.js.map +1 -1
- package/dist/integration.cjs +2 -2
- package/dist/integration.d.cts +27 -0
- package/dist/integration.d.ts +27 -0
- package/dist/integration.js +1 -1
- package/dist/media-GPPTZ43E.js +4 -0
- package/dist/{media-HOT3O7RW.js.map → media-GPPTZ43E.js.map} +1 -1
- package/dist/media-XNTUFJZR.cjs +17 -0
- package/dist/{media-WKP5AOX2.cjs.map → media-XNTUFJZR.cjs.map} +1 -1
- package/dist/mongodb/index.cjs +12 -3
- package/dist/mongodb/index.d.cts +59 -0
- package/dist/mongodb/index.d.ts +59 -0
- package/dist/mongodb/index.js +2 -1
- package/dist/postgres-auth-adapter-6742WDCF.cjs +14 -0
- package/dist/{postgres-auth-adapter-Z463NYJZ.cjs.map → postgres-auth-adapter-6742WDCF.cjs.map} +1 -1
- package/dist/postgres-auth-adapter-B65BULNS.js +5 -0
- package/dist/{postgres-auth-adapter-7F3ECO7I.js.map → postgres-auth-adapter-B65BULNS.js.map} +1 -1
- package/dist/rest/index.cjs +9 -5
- package/dist/rest/index.d.cts +57 -0
- package/dist/rest/index.d.ts +57 -0
- package/dist/rest/index.js +7 -3
- package/dist/{schema-TIYTCIKX.cjs → schema-37SE2F4B.cjs} +5 -5
- package/dist/{schema-TIYTCIKX.cjs.map → schema-37SE2F4B.cjs.map} +1 -1
- package/dist/{schema-6Q4W6AE6.js → schema-5PHL5IVB.js} +3 -3
- package/dist/{schema-6Q4W6AE6.js.map → schema-5PHL5IVB.js.map} +1 -1
- package/dist/templates/index.d.cts +59 -0
- package/dist/templates/index.d.ts +59 -0
- package/dist/trpc/index.d.cts +136 -0
- package/dist/trpc/index.d.ts +136 -0
- package/dist/types-Bs1up4yP.d.ts +461 -0
- package/dist/types-DqN4ckOC.d.cts +130 -0
- package/dist/types-DqN4ckOC.d.ts +130 -0
- package/dist/types-J3R9nVsZ.d.cts +461 -0
- package/dist/types-VtjUxIMp.d.cts +246 -0
- package/dist/types-VtjUxIMp.d.ts +246 -0
- package/dist/ws/index.d.cts +88 -0
- package/dist/ws/index.d.ts +88 -0
- package/package.json +3 -2
- package/dist/bootstrap-PBMMLBQC.js +0 -6
- package/dist/bootstrap-QN77EVI3.cjs +0 -31
- package/dist/chunk-342BJNBI.js.map +0 -1
- package/dist/chunk-3ZZPZYCM.cjs.map +0 -1
- package/dist/chunk-6COM32WF.js.map +0 -1
- package/dist/chunk-7SXPHG3M.cjs +0 -67
- package/dist/chunk-7SXPHG3M.cjs.map +0 -1
- package/dist/chunk-AGAIUDAV.cjs.map +0 -1
- package/dist/chunk-ATVNYGRQ.js.map +0 -1
- package/dist/chunk-C4JJEE42.js.map +0 -1
- package/dist/chunk-DBUYB32X.js.map +0 -1
- package/dist/chunk-EVEJC22G.cjs.map +0 -1
- package/dist/chunk-GBH6DN5C.cjs.map +0 -1
- package/dist/chunk-IX3ABYKZ.cjs.map +0 -1
- package/dist/chunk-L4E76X2K.js +0 -57
- package/dist/chunk-L4E76X2K.js.map +0 -1
- package/dist/chunk-Q4DNT7FO.js.map +0 -1
- package/dist/chunk-SO25EHOE.js.map +0 -1
- package/dist/chunk-SYRDCLH7.cjs.map +0 -1
- package/dist/chunk-VSTRLXMQ.cjs.map +0 -1
- package/dist/chunk-W3KPQX7V.cjs.map +0 -1
- package/dist/chunk-WH4Y5MT6.js.map +0 -1
- package/dist/chunk-XJ2VYR47.cjs.map +0 -1
- package/dist/chunk-XR5EJS3C.js.map +0 -1
- package/dist/media-HOT3O7RW.js +0 -4
- package/dist/media-WKP5AOX2.cjs +0 -17
- package/dist/postgres-auth-adapter-7F3ECO7I.js +0 -5
- package/dist/postgres-auth-adapter-Z463NYJZ.cjs +0 -14
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
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
|
|
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
|
|
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 ||
|
|
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
|
|
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
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2718
|
-
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
2734
|
-
|
|
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-
|
|
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:
|
|
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-
|
|
2913
|
-
const
|
|
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-
|
|
2928
|
-
await
|
|
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-
|
|
2942
|
-
const
|
|
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-
|
|
2976
|
-
|
|
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-
|
|
2994
|
-
const
|
|
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-
|
|
3041
|
-
const { like, or, and, asc, desc, eq, sql } = await import('drizzle-orm
|
|
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
|
|
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-
|
|
3110
|
-
const
|
|
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-
|
|
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
|
|
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-
|
|
3145
|
-
const { eq, sql } = await import('drizzle-orm
|
|
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-
|
|
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-
|
|
3186
|
-
const { like, or, eq } = await import('
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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 ? { ...
|
|
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:
|
|
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
|
|
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-
|
|
5842
|
-
//# sourceMappingURL=chunk-
|
|
5944
|
+
//# sourceMappingURL=chunk-R2YHJN6W.cjs.map
|
|
5945
|
+
//# sourceMappingURL=chunk-R2YHJN6W.cjs.map
|