@kyro-cms/core 0.5.4 → 0.6.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.
- 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,9 +1,11 @@
|
|
|
1
|
-
import { PasswordPolicy, ConfigService,
|
|
1
|
+
import { PasswordPolicy, ConfigService, EmailTransport, SQLiteAuthAdapter } from './chunk-TP5YQFIX.js';
|
|
2
2
|
import { createAuditContext } from './chunk-P2YW545G.js';
|
|
3
3
|
import { WEBHOOK_EVENTS, extractApiKeyFromRequest, validateApiKey, createApiKeyContext, API_KEY_COLLECTION, generateApiKey, generateApiKeyPrefix, hasApiKeyPermission } from './chunk-QXIQWPAP.js';
|
|
4
4
|
import { buildGraphQLSchema } from './chunk-REK7AYOC.js';
|
|
5
5
|
import { evaluateAccess } from './chunk-SDMNUYVU.js';
|
|
6
|
-
import { genId } from './chunk-
|
|
6
|
+
import { genId, DrizzleAdapter } from './chunk-6WXQRYTW.js';
|
|
7
|
+
import { PostgresAuthAdapter } from './chunk-TVVYZ2TH.js';
|
|
8
|
+
import { MongoDBAdapter, MongoDBAuthAdapter } from './chunk-QKVA2SOG.js';
|
|
7
9
|
import { __esm, __export, __toCommonJS, __require } from './chunk-Z6ZWNWWR.js';
|
|
8
10
|
import crypto, { randomBytes, createHash } from 'crypto';
|
|
9
11
|
import { createStorage } from 'unstorage';
|
|
@@ -1008,6 +1010,7 @@ var AuthRoutes = class {
|
|
|
1008
1010
|
201
|
|
1009
1011
|
);
|
|
1010
1012
|
} catch (error) {
|
|
1013
|
+
console.error("[AuthRoutes.register] Registration error:", error);
|
|
1011
1014
|
return this.errorResponse("Registration failed", 500);
|
|
1012
1015
|
}
|
|
1013
1016
|
}
|
|
@@ -2659,6 +2662,7 @@ async function processImage(buffer) {
|
|
|
2659
2662
|
}
|
|
2660
2663
|
|
|
2661
2664
|
// src/storage/MediaService.ts
|
|
2665
|
+
var _mediaTablesEnsured = false;
|
|
2662
2666
|
var MediaService = class _MediaService {
|
|
2663
2667
|
db;
|
|
2664
2668
|
storage;
|
|
@@ -2684,46 +2688,84 @@ var MediaService = class _MediaService {
|
|
|
2684
2688
|
storage2 = await resolveProvider(configService);
|
|
2685
2689
|
}
|
|
2686
2690
|
const service = new _MediaService(db, storage2, options);
|
|
2687
|
-
service.ensureTables();
|
|
2691
|
+
await service.ensureTables();
|
|
2688
2692
|
return service;
|
|
2689
2693
|
}
|
|
2690
|
-
ensureTables() {
|
|
2691
|
-
if (this.dialect
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
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
|
-
|
|
2694
|
+
async ensureTables() {
|
|
2695
|
+
if (this.dialect === "sqlite") {
|
|
2696
|
+
this.db.exec(`
|
|
2697
|
+
CREATE TABLE IF NOT EXISTS media (
|
|
2698
|
+
id TEXT PRIMARY KEY,
|
|
2699
|
+
filename TEXT NOT NULL UNIQUE,
|
|
2700
|
+
title TEXT,
|
|
2701
|
+
original_name TEXT NOT NULL,
|
|
2702
|
+
mime_type TEXT NOT NULL,
|
|
2703
|
+
file_size INTEGER NOT NULL,
|
|
2704
|
+
width INTEGER,
|
|
2705
|
+
height INTEGER,
|
|
2706
|
+
url TEXT NOT NULL UNIQUE,
|
|
2707
|
+
thumbnail_url TEXT,
|
|
2708
|
+
folder TEXT,
|
|
2709
|
+
provider TEXT NOT NULL,
|
|
2710
|
+
alt TEXT,
|
|
2711
|
+
caption TEXT,
|
|
2712
|
+
metadata TEXT,
|
|
2713
|
+
created_at TEXT NOT NULL,
|
|
2714
|
+
updated_at TEXT NOT NULL
|
|
2715
|
+
);
|
|
2716
|
+
CREATE INDEX IF NOT EXISTS idx_media_folder ON media(folder);
|
|
2717
|
+
CREATE INDEX IF NOT EXISTS idx_media_provider ON media(provider);
|
|
2718
|
+
CREATE INDEX IF NOT EXISTS idx_media_filename ON media(filename);
|
|
2719
|
+
`);
|
|
2720
|
+
this.db.exec(`
|
|
2721
|
+
CREATE TABLE IF NOT EXISTS media_folders (
|
|
2722
|
+
id TEXT PRIMARY KEY,
|
|
2723
|
+
name TEXT NOT NULL,
|
|
2724
|
+
path TEXT NOT NULL,
|
|
2725
|
+
parent_path TEXT,
|
|
2726
|
+
created_at TEXT
|
|
2727
|
+
);
|
|
2728
|
+
CREATE INDEX IF NOT EXISTS idx_media_folders_path ON media_folders(path);
|
|
2729
|
+
`);
|
|
2730
|
+
} else if (this.dialect === "postgres") {
|
|
2731
|
+
if (_mediaTablesEnsured) return;
|
|
2732
|
+
const { sql } = await import('drizzle-orm');
|
|
2733
|
+
await this.db.execute(sql`
|
|
2734
|
+
CREATE TABLE IF NOT EXISTS "media" (
|
|
2735
|
+
"id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
2736
|
+
"filename" VARCHAR(255) NOT NULL UNIQUE,
|
|
2737
|
+
"title" VARCHAR(255),
|
|
2738
|
+
"original_name" VARCHAR(255) NOT NULL,
|
|
2739
|
+
"mime_type" VARCHAR(100),
|
|
2740
|
+
"file_size" INTEGER,
|
|
2741
|
+
"width" INTEGER,
|
|
2742
|
+
"height" INTEGER,
|
|
2743
|
+
"url" TEXT NOT NULL UNIQUE,
|
|
2744
|
+
"thumbnail_url" TEXT,
|
|
2745
|
+
"folder" VARCHAR(255),
|
|
2746
|
+
"provider" VARCHAR(50) NOT NULL,
|
|
2747
|
+
"alt" TEXT,
|
|
2748
|
+
"caption" TEXT,
|
|
2749
|
+
"metadata" JSONB,
|
|
2750
|
+
"created_at" TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
2751
|
+
"updated_at" TIMESTAMP NOT NULL DEFAULT NOW()
|
|
2752
|
+
)
|
|
2753
|
+
`);
|
|
2754
|
+
await this.db.execute(sql`CREATE INDEX IF NOT EXISTS "idx_media_folder" ON "media" ("folder")`);
|
|
2755
|
+
await this.db.execute(sql`CREATE INDEX IF NOT EXISTS "idx_media_provider" ON "media" ("provider")`);
|
|
2756
|
+
await this.db.execute(sql`CREATE INDEX IF NOT EXISTS "idx_media_filename" ON "media" ("filename")`);
|
|
2757
|
+
await this.db.execute(sql`
|
|
2758
|
+
CREATE TABLE IF NOT EXISTS "media_folders" (
|
|
2759
|
+
"id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
2760
|
+
"name" VARCHAR(255) NOT NULL,
|
|
2761
|
+
"path" TEXT NOT NULL,
|
|
2762
|
+
"parent_path" TEXT,
|
|
2763
|
+
"created_at" TIMESTAMP NOT NULL DEFAULT NOW()
|
|
2764
|
+
)
|
|
2765
|
+
`);
|
|
2766
|
+
await this.db.execute(sql`CREATE INDEX IF NOT EXISTS "idx_media_folders_path" ON "media_folders" ("path")`);
|
|
2767
|
+
_mediaTablesEnsured = true;
|
|
2768
|
+
}
|
|
2727
2769
|
}
|
|
2728
2770
|
now() {
|
|
2729
2771
|
return (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -2844,13 +2886,15 @@ var MediaService = class _MediaService {
|
|
|
2844
2886
|
]
|
|
2845
2887
|
);
|
|
2846
2888
|
} else {
|
|
2847
|
-
const { media: mediaSchema } = await import('./media-
|
|
2889
|
+
const { media: mediaSchema } = await import('./media-GPPTZ43E.js');
|
|
2890
|
+
const mime = storageResult.mimeType;
|
|
2891
|
+
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";
|
|
2848
2892
|
await this.db.insert(mediaSchema).values({
|
|
2849
2893
|
id,
|
|
2850
2894
|
filename: storageResult.filename,
|
|
2851
2895
|
title: file.name.replace(/\.[^/.]+$/, ""),
|
|
2852
2896
|
originalName: file.name,
|
|
2853
|
-
mimeType:
|
|
2897
|
+
mimeType: mime,
|
|
2854
2898
|
fileSize: storageResult.size,
|
|
2855
2899
|
width,
|
|
2856
2900
|
height,
|
|
@@ -2858,6 +2902,10 @@ var MediaService = class _MediaService {
|
|
|
2858
2902
|
thumbnailUrl,
|
|
2859
2903
|
folder: folder || "",
|
|
2860
2904
|
provider: this.storage.name,
|
|
2905
|
+
type: mediaType,
|
|
2906
|
+
status: "active",
|
|
2907
|
+
alt: null,
|
|
2908
|
+
caption: null,
|
|
2861
2909
|
createdAt: /* @__PURE__ */ new Date(),
|
|
2862
2910
|
updatedAt: /* @__PURE__ */ new Date()
|
|
2863
2911
|
}).returning();
|
|
@@ -2900,8 +2948,9 @@ var MediaService = class _MediaService {
|
|
|
2900
2948
|
id
|
|
2901
2949
|
]);
|
|
2902
2950
|
} else {
|
|
2903
|
-
const { media: mediaSchema } = await import('./media-
|
|
2904
|
-
const
|
|
2951
|
+
const { media: mediaSchema } = await import('./media-GPPTZ43E.js');
|
|
2952
|
+
const { eq } = await import('drizzle-orm');
|
|
2953
|
+
const [row] = await this.db.select().from(mediaSchema).where(eq(mediaSchema.id, id));
|
|
2905
2954
|
if (row) item = this.rowToMedia(row);
|
|
2906
2955
|
}
|
|
2907
2956
|
if (!item) return;
|
|
@@ -2915,8 +2964,9 @@ var MediaService = class _MediaService {
|
|
|
2915
2964
|
if (this.dialect === "sqlite") {
|
|
2916
2965
|
await this.sqliteRun(`DELETE FROM ${this.mediaTable} WHERE id = ?`, [id]);
|
|
2917
2966
|
} else {
|
|
2918
|
-
const { media: mediaSchema } = await import('./media-
|
|
2919
|
-
await
|
|
2967
|
+
const { media: mediaSchema } = await import('./media-GPPTZ43E.js');
|
|
2968
|
+
const { eq } = await import('drizzle-orm');
|
|
2969
|
+
await this.db.delete(mediaSchema).where(eq(mediaSchema.id, id));
|
|
2920
2970
|
}
|
|
2921
2971
|
}
|
|
2922
2972
|
async deleteFile(url) {
|
|
@@ -2929,8 +2979,9 @@ var MediaService = class _MediaService {
|
|
|
2929
2979
|
id
|
|
2930
2980
|
]);
|
|
2931
2981
|
} else {
|
|
2932
|
-
const { media: mediaSchema } = await import('./media-
|
|
2933
|
-
const
|
|
2982
|
+
const { media: mediaSchema } = await import('./media-GPPTZ43E.js');
|
|
2983
|
+
const { eq } = await import('drizzle-orm');
|
|
2984
|
+
const [row] = await this.db.select().from(mediaSchema).where(eq(mediaSchema.id, id));
|
|
2934
2985
|
if (row) item = this.rowToMedia(row);
|
|
2935
2986
|
}
|
|
2936
2987
|
if (!item) return null;
|
|
@@ -2963,8 +3014,9 @@ var MediaService = class _MediaService {
|
|
|
2963
3014
|
[...vals, this.now(), id]
|
|
2964
3015
|
);
|
|
2965
3016
|
} else {
|
|
2966
|
-
const { media: mediaSchema } = await import('./media-
|
|
2967
|
-
|
|
3017
|
+
const { media: mediaSchema } = await import('./media-GPPTZ43E.js');
|
|
3018
|
+
const { eq } = await import('drizzle-orm');
|
|
3019
|
+
await this.db.update(mediaSchema).set({ ...updateData, updatedAt: this.now() }).where(eq(mediaSchema.id, id));
|
|
2968
3020
|
}
|
|
2969
3021
|
return {
|
|
2970
3022
|
...item,
|
|
@@ -2981,8 +3033,9 @@ var MediaService = class _MediaService {
|
|
|
2981
3033
|
);
|
|
2982
3034
|
return row2 ? this.rowToMedia(row2) : null;
|
|
2983
3035
|
}
|
|
2984
|
-
const { media: mediaSchema } = await import('./media-
|
|
2985
|
-
const
|
|
3036
|
+
const { media: mediaSchema } = await import('./media-GPPTZ43E.js');
|
|
3037
|
+
const { eq } = await import('drizzle-orm');
|
|
3038
|
+
const [row] = await this.db.select().from(mediaSchema).where(eq(mediaSchema.id, id));
|
|
2986
3039
|
return row ? this.rowToMedia(row) : null;
|
|
2987
3040
|
}
|
|
2988
3041
|
async find(params = {}) {
|
|
@@ -3028,8 +3081,8 @@ var MediaService = class _MediaService {
|
|
|
3028
3081
|
totalPages: Math.ceil(totalDocs2 / limit)
|
|
3029
3082
|
};
|
|
3030
3083
|
}
|
|
3031
|
-
const { media: mediaSchema } = await import('./media-
|
|
3032
|
-
const { like, or, and, asc, desc, eq, sql } = await import('drizzle-orm
|
|
3084
|
+
const { media: mediaSchema } = await import('./media-GPPTZ43E.js');
|
|
3085
|
+
const { like, or, and, asc, desc, eq, sql } = await import('drizzle-orm');
|
|
3033
3086
|
const conditions = [];
|
|
3034
3087
|
if (search) {
|
|
3035
3088
|
conditions.push(
|
|
@@ -3053,7 +3106,17 @@ var MediaService = class _MediaService {
|
|
|
3053
3106
|
);
|
|
3054
3107
|
}
|
|
3055
3108
|
const whereClause = conditions.length > 0 ? and(...conditions) : void 0;
|
|
3056
|
-
const
|
|
3109
|
+
const sortKey = {
|
|
3110
|
+
created_at: "createdAt",
|
|
3111
|
+
updated_at: "updatedAt",
|
|
3112
|
+
title: "title",
|
|
3113
|
+
filename: "filename",
|
|
3114
|
+
file_size: "fileSize",
|
|
3115
|
+
mime_type: "mimeType",
|
|
3116
|
+
original_name: "originalName"
|
|
3117
|
+
};
|
|
3118
|
+
const col = mediaSchema[sortKey[sortCol] || "createdAt"];
|
|
3119
|
+
const order = sortDir === "asc" ? asc(col) : desc(col);
|
|
3057
3120
|
const docs = await this.db.select().from(mediaSchema).where(whereClause).orderBy(order).limit(limit).offset(offset);
|
|
3058
3121
|
const [{ count }] = await this.db.select({ count: sql`count(*)` }).from(mediaSchema).where(whereClause);
|
|
3059
3122
|
const totalDocs = Number(count);
|
|
@@ -3097,8 +3160,9 @@ var MediaService = class _MediaService {
|
|
|
3097
3160
|
);
|
|
3098
3161
|
return row ? this.rowToMedia(row) : null;
|
|
3099
3162
|
}
|
|
3100
|
-
const { media: mediaSchema } = await import('./media-
|
|
3101
|
-
const
|
|
3163
|
+
const { media: mediaSchema } = await import('./media-GPPTZ43E.js');
|
|
3164
|
+
const { eq } = await import('drizzle-orm');
|
|
3165
|
+
const [updated] = await this.db.update(mediaSchema).set({ ...data, updatedAt: /* @__PURE__ */ new Date() }).where(eq(mediaSchema.id, id)).returning();
|
|
3102
3166
|
return updated ? this.rowToMedia(updated) : null;
|
|
3103
3167
|
}
|
|
3104
3168
|
async updateMany(ids, data) {
|
|
@@ -3118,9 +3182,10 @@ var MediaService = class _MediaService {
|
|
|
3118
3182
|
);
|
|
3119
3183
|
}
|
|
3120
3184
|
} else {
|
|
3121
|
-
const { media: mediaSchema } = await import('./media-
|
|
3185
|
+
const { media: mediaSchema } = await import('./media-GPPTZ43E.js');
|
|
3186
|
+
const { eq } = await import('drizzle-orm');
|
|
3122
3187
|
for (const id of ids) {
|
|
3123
|
-
await this.db.update(mediaSchema).set({ ...data, updatedAt: /* @__PURE__ */ new Date() }).where(mediaSchema.id
|
|
3188
|
+
await this.db.update(mediaSchema).set({ ...data, updatedAt: /* @__PURE__ */ new Date() }).where(eq(mediaSchema.id, id));
|
|
3124
3189
|
}
|
|
3125
3190
|
}
|
|
3126
3191
|
}
|
|
@@ -3132,8 +3197,8 @@ var MediaService = class _MediaService {
|
|
|
3132
3197
|
);
|
|
3133
3198
|
return rows.map((r) => r.path).filter((f) => f && f !== "").sort();
|
|
3134
3199
|
}
|
|
3135
|
-
const { media: mediaSchema, mediaFolders: folderSchema } = await import('./media-
|
|
3136
|
-
const { eq, sql } = await import('drizzle-orm
|
|
3200
|
+
const { media: mediaSchema, mediaFolders: folderSchema } = await import('./media-GPPTZ43E.js');
|
|
3201
|
+
const { eq, sql } = await import('drizzle-orm');
|
|
3137
3202
|
const fromMedia = await this.db.select({ folder: mediaSchema.folder }).from(mediaSchema).groupBy(mediaSchema.folder);
|
|
3138
3203
|
const fromFolders = await this.db.select({ path: folderSchema.path }).from(folderSchema);
|
|
3139
3204
|
const allPaths = /* @__PURE__ */ new Set([
|
|
@@ -3152,7 +3217,7 @@ var MediaService = class _MediaService {
|
|
|
3152
3217
|
[fullPath, name, parentPath || null, now]
|
|
3153
3218
|
);
|
|
3154
3219
|
} else {
|
|
3155
|
-
const { mediaFolders: folderSchema } = await import('./media-
|
|
3220
|
+
const { mediaFolders: folderSchema } = await import('./media-GPPTZ43E.js');
|
|
3156
3221
|
await this.db.insert(folderSchema).values({
|
|
3157
3222
|
path: fullPath,
|
|
3158
3223
|
name,
|
|
@@ -3173,8 +3238,8 @@ var MediaService = class _MediaService {
|
|
|
3173
3238
|
[folder, `${folder}/%`]
|
|
3174
3239
|
);
|
|
3175
3240
|
} else {
|
|
3176
|
-
const { mediaFolders: folderSchema } = await import('./media-
|
|
3177
|
-
const { like, or, eq } = await import('
|
|
3241
|
+
const { mediaFolders: folderSchema } = await import('./media-GPPTZ43E.js');
|
|
3242
|
+
const { like, or, eq } = await import('drizzle-orm');
|
|
3178
3243
|
await this.db.delete(folderSchema).where(
|
|
3179
3244
|
or(
|
|
3180
3245
|
eq(folderSchema.path, folder),
|
|
@@ -3542,6 +3607,18 @@ async function resolveAuthContext(req, authMw, staticUser, staticTenantID) {
|
|
|
3542
3607
|
authType: result.authType
|
|
3543
3608
|
};
|
|
3544
3609
|
}
|
|
3610
|
+
function createDefaultAuthAdapter(db, rootDir) {
|
|
3611
|
+
if (db instanceof DrizzleAdapter && db.dialect === "postgres") {
|
|
3612
|
+
return new PostgresAuthAdapter({ db: db.client });
|
|
3613
|
+
}
|
|
3614
|
+
if (db instanceof MongoDBAdapter) {
|
|
3615
|
+
return new MongoDBAuthAdapter({ db: db.db });
|
|
3616
|
+
}
|
|
3617
|
+
const defaultAuthDbPath = resolve(rootDir, "data", "kyro.db");
|
|
3618
|
+
return new SQLiteAuthAdapter({
|
|
3619
|
+
path: process.env.KYRO_AUTH_DB_PATH || defaultAuthDbPath
|
|
3620
|
+
});
|
|
3621
|
+
}
|
|
3545
3622
|
function createHonoApp(options) {
|
|
3546
3623
|
const {
|
|
3547
3624
|
registry,
|
|
@@ -3568,10 +3645,7 @@ function createHonoApp(options) {
|
|
|
3568
3645
|
apiAccess?.requireAuth;
|
|
3569
3646
|
const cwd = process.cwd();
|
|
3570
3647
|
const rootDir = cwd.endsWith("admin") ? resolve(cwd, "..") : cwd;
|
|
3571
|
-
const
|
|
3572
|
-
const sessionAuthAdapter = authAdapter || new SQLiteAuthAdapter({
|
|
3573
|
-
path: process.env.KYRO_AUTH_DB_PATH || defaultAuthDbPath
|
|
3574
|
-
});
|
|
3648
|
+
const sessionAuthAdapter = authAdapter || createDefaultAuthAdapter(db, rootDir);
|
|
3575
3649
|
const authMw = authSecret ? createAuthMiddleware({
|
|
3576
3650
|
db,
|
|
3577
3651
|
userLookup: async (userId) => {
|
|
@@ -4071,7 +4145,9 @@ function createHonoApp(options) {
|
|
|
4071
4145
|
}
|
|
4072
4146
|
if (!mediaService) {
|
|
4073
4147
|
try {
|
|
4074
|
-
|
|
4148
|
+
const dialect = db instanceof DrizzleAdapter ? db.dialect : "sqlite";
|
|
4149
|
+
const mediaDb = dialect === "postgres" && db instanceof DrizzleAdapter ? db.client : db;
|
|
4150
|
+
mediaService = await MediaService.init(mediaDb, { dialect });
|
|
4075
4151
|
} catch (error) {
|
|
4076
4152
|
console.error("[getMedia] Init error:", error);
|
|
4077
4153
|
mediaServiceInitError = error;
|
|
@@ -4082,6 +4158,8 @@ function createHonoApp(options) {
|
|
|
4082
4158
|
};
|
|
4083
4159
|
app.get("/api/media", async (c) => {
|
|
4084
4160
|
try {
|
|
4161
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4162
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4085
4163
|
const service = await getMedia();
|
|
4086
4164
|
const page = parseInt(c.req.query("page") || "1");
|
|
4087
4165
|
const limit = parseInt(c.req.query("limit") || "30");
|
|
@@ -4092,11 +4170,13 @@ function createHonoApp(options) {
|
|
|
4092
4170
|
return c.json(result);
|
|
4093
4171
|
} catch (error) {
|
|
4094
4172
|
console.error("[Media] find error:", error);
|
|
4095
|
-
return c.json({ error: error.message
|
|
4173
|
+
return c.json({ error: error.message }, 500);
|
|
4096
4174
|
}
|
|
4097
4175
|
});
|
|
4098
4176
|
app.post("/api/media/upload", async (c) => {
|
|
4099
4177
|
try {
|
|
4178
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4179
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4100
4180
|
const service = await getMedia();
|
|
4101
4181
|
const contentType = c.req.header("content-type") || "";
|
|
4102
4182
|
if (contentType.includes("multipart/form-data")) {
|
|
@@ -4118,6 +4198,8 @@ function createHonoApp(options) {
|
|
|
4118
4198
|
});
|
|
4119
4199
|
app.get("/api/media/folders", async (c) => {
|
|
4120
4200
|
try {
|
|
4201
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4202
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4121
4203
|
const service = await getMedia();
|
|
4122
4204
|
const folders = await service.listFolders();
|
|
4123
4205
|
return c.json(folders);
|
|
@@ -4128,6 +4210,8 @@ function createHonoApp(options) {
|
|
|
4128
4210
|
});
|
|
4129
4211
|
app.post("/api/media/folders", async (c) => {
|
|
4130
4212
|
try {
|
|
4213
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4214
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4131
4215
|
const service = await getMedia();
|
|
4132
4216
|
const body = await c.req.json();
|
|
4133
4217
|
const { name, parentPath } = body;
|
|
@@ -4146,6 +4230,8 @@ function createHonoApp(options) {
|
|
|
4146
4230
|
});
|
|
4147
4231
|
app.delete("/api/media/folders", async (c) => {
|
|
4148
4232
|
try {
|
|
4233
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4234
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4149
4235
|
const service = await getMedia();
|
|
4150
4236
|
const path2 = c.req.query("path");
|
|
4151
4237
|
if (!path2) {
|
|
@@ -4160,6 +4246,8 @@ function createHonoApp(options) {
|
|
|
4160
4246
|
});
|
|
4161
4247
|
app.delete("/api/media/:id", async (c) => {
|
|
4162
4248
|
try {
|
|
4249
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4250
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4163
4251
|
const service = await getMedia();
|
|
4164
4252
|
const id = c.req.param("id");
|
|
4165
4253
|
await service.delete(id);
|
|
@@ -4171,6 +4259,8 @@ function createHonoApp(options) {
|
|
|
4171
4259
|
});
|
|
4172
4260
|
app.get("/api/media/resize", async (c) => {
|
|
4173
4261
|
try {
|
|
4262
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4263
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4174
4264
|
const url = c.req.query("url");
|
|
4175
4265
|
const w = parseInt(c.req.query("w") || "0");
|
|
4176
4266
|
const h = parseInt(c.req.query("h") || "0");
|
|
@@ -4212,6 +4302,8 @@ function createHonoApp(options) {
|
|
|
4212
4302
|
});
|
|
4213
4303
|
app.get("/api/media/:id", async (c) => {
|
|
4214
4304
|
try {
|
|
4305
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4306
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4215
4307
|
const service = await getMedia();
|
|
4216
4308
|
const id = c.req.param("id");
|
|
4217
4309
|
const doc = await service.findById(id);
|
|
@@ -4224,6 +4316,8 @@ function createHonoApp(options) {
|
|
|
4224
4316
|
});
|
|
4225
4317
|
app.patch("/api/media/:id", async (c) => {
|
|
4226
4318
|
try {
|
|
4319
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4320
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4227
4321
|
const service = await getMedia();
|
|
4228
4322
|
const id = c.req.param("id");
|
|
4229
4323
|
const body = await c.req.json();
|
|
@@ -4239,6 +4333,8 @@ function createHonoApp(options) {
|
|
|
4239
4333
|
});
|
|
4240
4334
|
app.get("/api/media/test", async (c) => {
|
|
4241
4335
|
try {
|
|
4336
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4337
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4242
4338
|
const service = await getMedia();
|
|
4243
4339
|
return c.json({
|
|
4244
4340
|
status: service ? "initialized" : "failed",
|
|
@@ -4258,6 +4354,8 @@ function createHonoApp(options) {
|
|
|
4258
4354
|
});
|
|
4259
4355
|
app.get("/api/storage-status", async (c) => {
|
|
4260
4356
|
try {
|
|
4357
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4358
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4261
4359
|
let configured = false;
|
|
4262
4360
|
let provider = "local";
|
|
4263
4361
|
if (db) {
|
|
@@ -4300,7 +4398,9 @@ function createHonoApp(options) {
|
|
|
4300
4398
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
4301
4399
|
});
|
|
4302
4400
|
});
|
|
4303
|
-
app.get("/api/collections", (c) => {
|
|
4401
|
+
app.get("/api/collections", async (c) => {
|
|
4402
|
+
const { user: ctxUser } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
4403
|
+
if (!ctxUser) return c.json({ error: "Authentication required" }, 401);
|
|
4304
4404
|
const collections2 = registry.getCollections().map((col) => ({
|
|
4305
4405
|
slug: col.slug,
|
|
4306
4406
|
label: col.label || col.slug,
|
|
@@ -5521,6 +5621,10 @@ function createHonoApp(options) {
|
|
|
5521
5621
|
} catch (zodErr) {
|
|
5522
5622
|
return c.json({ error: "Validation failed", details: zodErr.errors }, 400);
|
|
5523
5623
|
}
|
|
5624
|
+
const SYSTEM_FIELDS = /* @__PURE__ */ new Set(["id", "createdAt", "updatedAt", "_status", "_has_draft"]);
|
|
5625
|
+
const userData = Object.fromEntries(
|
|
5626
|
+
Object.entries(validated).filter(([k]) => !SYSTEM_FIELDS.has(k))
|
|
5627
|
+
);
|
|
5524
5628
|
const collectionSlug = `_globals_${slug}`;
|
|
5525
5629
|
const originalDoc = await db.findOne({
|
|
5526
5630
|
collection: collectionSlug,
|
|
@@ -5535,8 +5639,7 @@ function createHonoApp(options) {
|
|
|
5535
5639
|
await db.createVersion({
|
|
5536
5640
|
collection: collectionSlug,
|
|
5537
5641
|
documentId: slug,
|
|
5538
|
-
|
|
5539
|
-
data: validated,
|
|
5642
|
+
data: userData,
|
|
5540
5643
|
status: "draft",
|
|
5541
5644
|
createdBy: ctxUser?.id,
|
|
5542
5645
|
changeDescription: "Manual save (Draft)",
|
|
@@ -5549,7 +5652,7 @@ function createHonoApp(options) {
|
|
|
5549
5652
|
tenantID: ctxTenantID
|
|
5550
5653
|
});
|
|
5551
5654
|
} else {
|
|
5552
|
-
const saveData = isDraftEnabled ? { ...
|
|
5655
|
+
const saveData = isDraftEnabled ? { ...userData, _status: "draft", _has_draft: false } : { ...userData, _status: "published", _has_draft: false };
|
|
5553
5656
|
if (originalDoc) {
|
|
5554
5657
|
doc = await db.update({
|
|
5555
5658
|
collection: collectionSlug,
|
|
@@ -5568,7 +5671,7 @@ function createHonoApp(options) {
|
|
|
5568
5671
|
await db.createVersion({
|
|
5569
5672
|
collection: collectionSlug,
|
|
5570
5673
|
documentId: slug,
|
|
5571
|
-
data:
|
|
5674
|
+
data: userData,
|
|
5572
5675
|
status: "draft",
|
|
5573
5676
|
createdBy: ctxUser?.id,
|
|
5574
5677
|
changeDescription: "Manual save",
|
|
@@ -5814,5 +5917,5 @@ function createRESTAPI(registry, db, options) {
|
|
|
5814
5917
|
}
|
|
5815
5918
|
|
|
5816
5919
|
export { AuditLogger, AuthRoutes, InMemoryAuditLogger, InMemoryRateLimiter, MediaService, createAuditContext2 as createAuditContext, createHonoApp, createLocalStorage, createRESTAPI, getAppSecret, getEncryptionKey, getSessionConfig, init_secret, loadSecrets, resolveProvider, setDbAdapter };
|
|
5817
|
-
//# sourceMappingURL=chunk-
|
|
5818
|
-
//# sourceMappingURL=chunk-
|
|
5920
|
+
//# sourceMappingURL=chunk-AM4JKIPP.js.map
|
|
5921
|
+
//# sourceMappingURL=chunk-AM4JKIPP.js.map
|