@kyro-cms/core 0.12.62 → 0.12.64

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 (61) hide show
  1. package/README.md +5 -4
  2. package/dist/{WebhookService-DgIx21X-.d.cts → WebhookService-B-jb55_P.d.cts} +1 -1
  3. package/dist/{WebhookService-CZf_na-J.d.ts → WebhookService-Bue85CZq.d.ts} +1 -1
  4. package/dist/api-handler-graphql.cjs +1 -1
  5. package/dist/api-handler-graphql.js +1 -1
  6. package/dist/api-handler-trpc.cjs +1 -1
  7. package/dist/api-handler-trpc.js +1 -1
  8. package/dist/api-handler.cjs +1 -1
  9. package/dist/api-handler.js +1 -1
  10. package/dist/{base-7vJMzr4V.d.ts → base-CTeNj4rw.d.ts} +1 -1
  11. package/dist/{base-DDEmdRqV.d.cts → base-CU2tjpsX.d.cts} +1 -1
  12. package/dist/chunk-4OMQURN7.js +3 -0
  13. package/dist/chunk-AXT3QPVM.js +133 -0
  14. package/dist/chunk-CBP2L6RO.js +121 -0
  15. package/dist/{chunk-4FHWIGHO.cjs → chunk-KTDAS6XO.cjs} +4 -4
  16. package/dist/{chunk-LOP464VR.cjs → chunk-O5754WOC.cjs} +1 -1
  17. package/dist/{chunk-26MOA3HJ.js → chunk-ONDPNSXC.js} +3 -3
  18. package/dist/chunk-QJ2V677Y.cjs +120 -0
  19. package/dist/{chunk-5DWQGEM2.cjs → chunk-QO5ZWQA3.cjs} +13 -13
  20. package/dist/chunk-WBFEX36H.js +2 -0
  21. package/dist/{chunk-75BFTYBS.js → chunk-X473JI7Z.js} +14 -14
  22. package/dist/chunk-YFUH3SST.cjs +132 -0
  23. package/dist/chunk-ZQETJ4T4.cjs +2 -0
  24. package/dist/client.d.cts +1 -1
  25. package/dist/client.d.ts +1 -1
  26. package/dist/drizzle/index.cjs +1 -1
  27. package/dist/drizzle/index.d.cts +2 -2
  28. package/dist/drizzle/index.d.ts +2 -2
  29. package/dist/drizzle/index.js +1 -1
  30. package/dist/graphql/index.cjs +1 -1
  31. package/dist/graphql/index.d.cts +2 -2
  32. package/dist/graphql/index.d.ts +2 -2
  33. package/dist/graphql/index.js +1 -1
  34. package/dist/index-DowyndWK.d.ts +105 -0
  35. package/dist/index-HNBjfQpn.d.cts +105 -0
  36. package/dist/index.cjs +3 -3
  37. package/dist/index.d.cts +8 -7
  38. package/dist/index.d.ts +8 -7
  39. package/dist/index.js +2 -2
  40. package/dist/mongodb/index.d.cts +2 -2
  41. package/dist/mongodb/index.d.ts +2 -2
  42. package/dist/rest/index.cjs +1 -1
  43. package/dist/rest/index.d.cts +3 -3
  44. package/dist/rest/index.d.ts +3 -3
  45. package/dist/rest/index.js +1 -1
  46. package/dist/templates/index.d.cts +1 -1
  47. package/dist/templates/index.d.ts +1 -1
  48. package/dist/trpc/index.d.cts +2 -2
  49. package/dist/trpc/index.d.ts +2 -2
  50. package/dist/{types-CYGXsNcJ.d.ts → types-COokblgr.d.ts} +181 -1
  51. package/dist/{types-DOKMyC3y.d.cts → types-ComJeXGL.d.cts} +181 -1
  52. package/package.json +2 -2
  53. package/dist/chunk-6QWX3DEB.cjs +0 -120
  54. package/dist/chunk-AMGJ5AFH.cjs +0 -1
  55. package/dist/chunk-JU3UAZRY.cjs +0 -132
  56. package/dist/chunk-QDBGBDCT.js +0 -2
  57. package/dist/chunk-RDFGJHEG.js +0 -2
  58. package/dist/chunk-RILJCH6H.js +0 -121
  59. package/dist/chunk-VJODUKKM.js +0 -133
  60. package/dist/index-BJ1rwHxk.d.cts +0 -284
  61. package/dist/index-BTjlptCL.d.ts +0 -284
@@ -1,7 +1,7 @@
1
1
  import { Hono } from 'hono';
2
- import { B as BaseAdapter, k as User } from '../types-CYGXsNcJ.js';
3
- import { R as Registry } from '../index-BTjlptCL.js';
4
- import { j as createWebhookService } from '../WebhookService-CZf_na-J.js';
2
+ import { B as BaseAdapter, l as User } from '../types-COokblgr.js';
3
+ import { R as Registry } from '../index-DowyndWK.js';
4
+ import { j as createWebhookService } from '../WebhookService-Bue85CZq.js';
5
5
  import '../types-euTszc-1.js';
6
6
  import 'zod';
7
7
 
@@ -1 +1 @@
1
- export{ib as createKyroApp,jb as createRESTAPI}from'../chunk-RILJCH6H.js';import'../chunk-KWGB3YNI.js';import'../chunk-OLRCZ6E3.js';import'../chunk-N6MNQIQU.js';import'../chunk-6TPICJ2L.js';import'../chunk-YENNL5HG.js';import'../chunk-W45TLOOT.js';import'../chunk-IKGVPXMK.js';import'../chunk-YUUXFD73.js';import'../chunk-LVBHOZZF.js';import'../chunk-OBYAIJVU.js';import'../chunk-JRUQ5ABB.js';import'../chunk-CIVA6SKW.js';import'../chunk-WPM6LFCY.js';import'../chunk-U6KFONKM.js';import'../chunk-TYQYKKWJ.js';import'../chunk-L2QXP26Q.js';import'../chunk-AWQGDMOE.js';import'../chunk-GQGFNTDZ.js';import'../chunk-VJODUKKM.js';import'../chunk-JV4HJBXW.js';import'../chunk-ZWDBPEXL.js';import'../chunk-47CXBWMA.js';import'../chunk-EML5FDUU.js';import'../chunk-637PTUHF.js';import'../chunk-N5POANYV.js';import'../chunk-HRAY65XH.js';import'../chunk-2HA6EKXX.js';import'../chunk-FLMUMPDE.js';import'../chunk-3NSZZCOJ.js';import'../chunk-5ZEYOFAK.js';import'../chunk-SLMIYECU.js';import'../chunk-P6JITOFF.js';import'../chunk-7NH7H3WA.js';import'../chunk-VVVCCB6R.js';import'../chunk-TBHNE4VV.js';import'../chunk-Y2YAKDEQ.js';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
1
+ export{ib as createKyroApp,jb as createRESTAPI}from'../chunk-CBP2L6RO.js';import'../chunk-KWGB3YNI.js';import'../chunk-OLRCZ6E3.js';import'../chunk-N6MNQIQU.js';import'../chunk-6TPICJ2L.js';import'../chunk-YENNL5HG.js';import'../chunk-W45TLOOT.js';import'../chunk-IKGVPXMK.js';import'../chunk-YUUXFD73.js';import'../chunk-LVBHOZZF.js';import'../chunk-OBYAIJVU.js';import'../chunk-JRUQ5ABB.js';import'../chunk-CIVA6SKW.js';import'../chunk-WPM6LFCY.js';import'../chunk-U6KFONKM.js';import'../chunk-TYQYKKWJ.js';import'../chunk-L2QXP26Q.js';import'../chunk-AWQGDMOE.js';import'../chunk-GQGFNTDZ.js';import'../chunk-4OMQURN7.js';import'../chunk-ZWDBPEXL.js';import'../chunk-47CXBWMA.js';import'../chunk-EML5FDUU.js';import'../chunk-637PTUHF.js';import'../chunk-N5POANYV.js';import'../chunk-HRAY65XH.js';import'../chunk-2HA6EKXX.js';import'../chunk-FLMUMPDE.js';import'../chunk-3NSZZCOJ.js';import'../chunk-5ZEYOFAK.js';import'../chunk-7NH7H3WA.js';import'../chunk-VVVCCB6R.js';import'../chunk-TBHNE4VV.js';import'../chunk-Y2YAKDEQ.js';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
@@ -1,4 +1,4 @@
1
- import { G as GlobalConfig, C as CollectionConfig } from '../types-DOKMyC3y.cjs';
1
+ import { G as GlobalConfig, C as CollectionConfig } from '../types-ComJeXGL.cjs';
2
2
  import '../types-euTszc-1.cjs';
3
3
 
4
4
  declare const minimalCollections: Record<string, any>;
@@ -1,4 +1,4 @@
1
- import { G as GlobalConfig, C as CollectionConfig } from '../types-CYGXsNcJ.js';
1
+ import { G as GlobalConfig, C as CollectionConfig } from '../types-COokblgr.js';
2
2
  import '../types-euTszc-1.js';
3
3
 
4
4
  declare const minimalCollections: Record<string, any>;
@@ -1,5 +1,5 @@
1
- import { B as BaseAdapter, k as User, R as Request, b as FindResult } from '../types-DOKMyC3y.cjs';
2
- import { j as createWebhookService } from '../WebhookService-DgIx21X-.cjs';
1
+ import { B as BaseAdapter, l as User, R as Request, b as FindResult } from '../types-ComJeXGL.cjs';
2
+ import { j as createWebhookService } from '../WebhookService-B-jb55_P.cjs';
3
3
  import '../types-euTszc-1.cjs';
4
4
 
5
5
  interface ApiKeyContext {
@@ -1,5 +1,5 @@
1
- import { B as BaseAdapter, k as User, R as Request, b as FindResult } from '../types-CYGXsNcJ.js';
2
- import { j as createWebhookService } from '../WebhookService-CZf_na-J.js';
1
+ import { B as BaseAdapter, l as User, R as Request, b as FindResult } from '../types-COokblgr.js';
2
+ import { j as createWebhookService } from '../WebhookService-Bue85CZq.js';
3
3
  import '../types-euTszc-1.js';
4
4
 
5
5
  interface ApiKeyContext {
@@ -217,6 +217,185 @@ interface TenantContext {
217
217
  isSuperAdmin?: boolean;
218
218
  }
219
219
 
220
+ interface S3CompatibleConfig {
221
+ bucket?: string;
222
+ region?: string;
223
+ accessKeyId?: string;
224
+ secretAccessKey?: string;
225
+ endpoint?: string;
226
+ cdnUrl?: string;
227
+ prefix?: string;
228
+ }
229
+ interface R2Config {
230
+ accountId?: string;
231
+ accessKeyId?: string;
232
+ secretAccessKey?: string;
233
+ bucket?: string;
234
+ cdnUrl?: string;
235
+ prefix?: string;
236
+ publicDevUrl?: string;
237
+ }
238
+ interface GCSConfig {
239
+ bucket?: string;
240
+ projectId?: string;
241
+ clientEmail?: string;
242
+ privateKey?: string;
243
+ cdnUrl?: string;
244
+ prefix?: string;
245
+ }
246
+ interface BackblazeConfig {
247
+ bucket?: string;
248
+ accountId?: string;
249
+ applicationKeyId?: string;
250
+ applicationKey?: string;
251
+ cdnUrl?: string;
252
+ prefix?: string;
253
+ }
254
+ interface BunnyConfig {
255
+ storageZone?: string;
256
+ apiKey?: string;
257
+ cdnUrl?: string;
258
+ prefix?: string;
259
+ }
260
+ interface FTPConfig {
261
+ host?: string;
262
+ port?: number;
263
+ user?: string;
264
+ password?: string;
265
+ secure?: boolean;
266
+ baseUrl?: string;
267
+ prefix?: string;
268
+ }
269
+ interface StorageConfig {
270
+ type: string;
271
+ s3: S3CompatibleConfig;
272
+ r2: R2Config;
273
+ gcs: GCSConfig;
274
+ digitalocean: S3CompatibleConfig;
275
+ backblaze: BackblazeConfig;
276
+ wasabi: S3CompatibleConfig;
277
+ bunny: BunnyConfig;
278
+ ftp: FTPConfig;
279
+ cloudinary: {
280
+ cloudName?: string;
281
+ apiKey?: string;
282
+ apiSecret?: string;
283
+ folder?: string;
284
+ };
285
+ imgix: {
286
+ domain?: string;
287
+ signKey?: string;
288
+ };
289
+ local: {
290
+ uploadDir?: string;
291
+ baseUrl?: string;
292
+ };
293
+ }
294
+ interface EmailConfig {
295
+ provider?: string;
296
+ host?: string;
297
+ port?: number;
298
+ secure?: boolean;
299
+ user?: string;
300
+ pass?: string;
301
+ from?: string;
302
+ fromName?: string;
303
+ replyTo?: string;
304
+ }
305
+ declare class ConfigService {
306
+ private db;
307
+ private cache;
308
+ private loaded;
309
+ private static readonly SENSITIVE_KEYS;
310
+ constructor(db: any);
311
+ /**
312
+ * Initialize the service by loading all settings from the database
313
+ */
314
+ load(): Promise<void>;
315
+ private ensureSettingsTable;
316
+ /**
317
+ * Load settings from the _globals_storage-settings table (SQLite fallback)
318
+ * Maps nested global structure to flat key-value cache
319
+ */
320
+ private loadFromGlobals;
321
+ /**
322
+ * Get a settings value with environment fallback
323
+ */
324
+ get(key: string, envKey?: string, defaultValue?: string): string | undefined;
325
+ /**
326
+ * Get storage configuration
327
+ */
328
+ getStorageConfig(): StorageConfig;
329
+ /**
330
+ * Get email configuration
331
+ */
332
+ getEmailConfig(): EmailConfig;
333
+ /**
334
+ * Mask sensitive values for display
335
+ */
336
+ maskSensitive(key: string, value: string | undefined): string | undefined;
337
+ /**
338
+ * Update a setting in the database
339
+ */
340
+ set(key: string, value: string, description?: string): Promise<void>;
341
+ }
342
+
343
+ interface UploadOptions {
344
+ folder?: string;
345
+ filename?: string;
346
+ mimeType?: string;
347
+ metadata?: Record<string, unknown>;
348
+ }
349
+ interface UploadedFile {
350
+ id: string;
351
+ filename: string;
352
+ originalName: string;
353
+ mimeType: string;
354
+ size: number;
355
+ url: string;
356
+ thumbnailUrl?: string;
357
+ width?: number;
358
+ height?: number;
359
+ folder?: string;
360
+ provider: string;
361
+ metadata?: Record<string, unknown>;
362
+ createdAt: string;
363
+ }
364
+ interface ImageTransforms {
365
+ width?: number;
366
+ height?: number;
367
+ fit?: "clip" | "crop" | "fill" | "fillmax" | "scale" | "max" | "min";
368
+ format?: "webp" | "avif" | "jpeg" | "jpg" | "png" | "gif";
369
+ quality?: number;
370
+ blur?: number;
371
+ sharpen?: number;
372
+ /** Crop region as percentages (0-100) of the original image */
373
+ cropX?: number;
374
+ cropY?: number;
375
+ cropWidth?: number;
376
+ cropHeight?: number;
377
+ }
378
+ interface StorageProvider {
379
+ name: string;
380
+ displayName: string;
381
+ supportsDynamicResize: boolean;
382
+ upload(file: File, options?: UploadOptions): Promise<UploadedFile>;
383
+ uploadFromUrl(url: string, options?: UploadOptions): Promise<UploadedFile>;
384
+ delete(url: string): Promise<void>;
385
+ rename(oldUrl: string, newKey: string): Promise<string>;
386
+ getImageUrl(url: string, transforms?: ImageTransforms): string;
387
+ generateThumbnail(file: UploadedFile, size: {
388
+ width: number;
389
+ height: number;
390
+ }): Promise<string>;
391
+ list(prefix?: string): Promise<UploadedFile[]>;
392
+ exists(url: string): Promise<boolean>;
393
+ createFolder?(folder: string): Promise<void>;
394
+ deleteFolder?(folder: string): Promise<void>;
395
+ }
396
+
397
+ declare function resolveProvider(configService: ConfigService): Promise<StorageProvider>;
398
+
220
399
  interface AdminConfig {
221
400
  useAsTitle?: string;
222
401
  defaultColumns?: string[];
@@ -515,6 +694,7 @@ interface KyroConfig {
515
694
  collections?: CollectionConfig[];
516
695
  globals?: GlobalConfig[];
517
696
  adapter: BaseAdapter;
697
+ storage?: StorageProvider;
518
698
  plugins?: KyroPlugin[];
519
699
  auth?: boolean | {
520
700
  secret?: string;
@@ -569,4 +749,4 @@ interface KyroConfig {
569
749
  debug?: boolean;
570
750
  }
571
751
 
572
- export { type AdminConfig as A, type BaseAdapter as B, type CollectionConfig as C, type DeleteArgs as D, ReviewsPlugin as E, type FindArgs as F, type GlobalConfig as G, type Hook as H, type ImageSize as I, WishlistPlugin as J, type KyroConfig as K, evaluateAccess as L, getWhereClause as M, mergeWhereClauses as N, presetPlugins as O, PluginManager as P, runFieldHooks as Q, type Request as R, SEOPlugin as S, type TenantContext as T, type UploadConfig as U, type VersionConfig as V, type WhereClause as W, runHooks as X, type AuthConfig as a, type FindResult as b, type FindByIDArgs as c, type CreateArgs as d, type UpdateArgs as e, type FindOneArgs as f, type FindVersionsArgs as g, type VersionRecord as h, type CreateVersionArgs as i, KyroPlugin as j, type User as k, type AccessArgs as l, type AccessControl as m, type AdapterConfig as n, AnalyticsPlugin as o, type CollectionAccess as p, type CollectionHooks as q, CommentsPlugin as r, type CreateResult as s, type FieldAccess as t, type FieldHooks as u, type GlobalAccess as v, type GlobalHooks as w, type HookArgs as x, type PluginAPI as y, type PluginHooks as z };
752
+ export { runFieldHooks as $, type AdminConfig as A, type BaseAdapter as B, type CollectionConfig as C, type DeleteArgs as D, type EmailConfig as E, type FindArgs as F, type GlobalConfig as G, type Hook as H, type ImageSize as I, type PluginAPI as J, type KyroConfig as K, type PluginHooks as L, ReviewsPlugin as M, SEOPlugin as N, WishlistPlugin as O, PluginManager as P, evaluateAccess as Q, type Request as R, type StorageConfig as S, type TenantContext as T, type UploadConfig as U, type VersionConfig as V, type WhereClause as W, getWhereClause as X, mergeWhereClauses as Y, presetPlugins as Z, resolveProvider as _, type AuthConfig as a, runHooks as a0, type FindResult as b, type FindByIDArgs as c, type CreateArgs as d, type UpdateArgs as e, type FindOneArgs as f, type FindVersionsArgs as g, type VersionRecord as h, type CreateVersionArgs as i, type StorageProvider as j, KyroPlugin as k, type User as l, type AccessArgs as m, type AccessControl as n, type AdapterConfig as o, AnalyticsPlugin as p, type CollectionAccess as q, type CollectionHooks as r, CommentsPlugin as s, ConfigService as t, type CreateResult as u, type FieldAccess as v, type FieldHooks as w, type GlobalAccess as x, type GlobalHooks as y, type HookArgs as z };
@@ -217,6 +217,185 @@ interface TenantContext {
217
217
  isSuperAdmin?: boolean;
218
218
  }
219
219
 
220
+ interface S3CompatibleConfig {
221
+ bucket?: string;
222
+ region?: string;
223
+ accessKeyId?: string;
224
+ secretAccessKey?: string;
225
+ endpoint?: string;
226
+ cdnUrl?: string;
227
+ prefix?: string;
228
+ }
229
+ interface R2Config {
230
+ accountId?: string;
231
+ accessKeyId?: string;
232
+ secretAccessKey?: string;
233
+ bucket?: string;
234
+ cdnUrl?: string;
235
+ prefix?: string;
236
+ publicDevUrl?: string;
237
+ }
238
+ interface GCSConfig {
239
+ bucket?: string;
240
+ projectId?: string;
241
+ clientEmail?: string;
242
+ privateKey?: string;
243
+ cdnUrl?: string;
244
+ prefix?: string;
245
+ }
246
+ interface BackblazeConfig {
247
+ bucket?: string;
248
+ accountId?: string;
249
+ applicationKeyId?: string;
250
+ applicationKey?: string;
251
+ cdnUrl?: string;
252
+ prefix?: string;
253
+ }
254
+ interface BunnyConfig {
255
+ storageZone?: string;
256
+ apiKey?: string;
257
+ cdnUrl?: string;
258
+ prefix?: string;
259
+ }
260
+ interface FTPConfig {
261
+ host?: string;
262
+ port?: number;
263
+ user?: string;
264
+ password?: string;
265
+ secure?: boolean;
266
+ baseUrl?: string;
267
+ prefix?: string;
268
+ }
269
+ interface StorageConfig {
270
+ type: string;
271
+ s3: S3CompatibleConfig;
272
+ r2: R2Config;
273
+ gcs: GCSConfig;
274
+ digitalocean: S3CompatibleConfig;
275
+ backblaze: BackblazeConfig;
276
+ wasabi: S3CompatibleConfig;
277
+ bunny: BunnyConfig;
278
+ ftp: FTPConfig;
279
+ cloudinary: {
280
+ cloudName?: string;
281
+ apiKey?: string;
282
+ apiSecret?: string;
283
+ folder?: string;
284
+ };
285
+ imgix: {
286
+ domain?: string;
287
+ signKey?: string;
288
+ };
289
+ local: {
290
+ uploadDir?: string;
291
+ baseUrl?: string;
292
+ };
293
+ }
294
+ interface EmailConfig {
295
+ provider?: string;
296
+ host?: string;
297
+ port?: number;
298
+ secure?: boolean;
299
+ user?: string;
300
+ pass?: string;
301
+ from?: string;
302
+ fromName?: string;
303
+ replyTo?: string;
304
+ }
305
+ declare class ConfigService {
306
+ private db;
307
+ private cache;
308
+ private loaded;
309
+ private static readonly SENSITIVE_KEYS;
310
+ constructor(db: any);
311
+ /**
312
+ * Initialize the service by loading all settings from the database
313
+ */
314
+ load(): Promise<void>;
315
+ private ensureSettingsTable;
316
+ /**
317
+ * Load settings from the _globals_storage-settings table (SQLite fallback)
318
+ * Maps nested global structure to flat key-value cache
319
+ */
320
+ private loadFromGlobals;
321
+ /**
322
+ * Get a settings value with environment fallback
323
+ */
324
+ get(key: string, envKey?: string, defaultValue?: string): string | undefined;
325
+ /**
326
+ * Get storage configuration
327
+ */
328
+ getStorageConfig(): StorageConfig;
329
+ /**
330
+ * Get email configuration
331
+ */
332
+ getEmailConfig(): EmailConfig;
333
+ /**
334
+ * Mask sensitive values for display
335
+ */
336
+ maskSensitive(key: string, value: string | undefined): string | undefined;
337
+ /**
338
+ * Update a setting in the database
339
+ */
340
+ set(key: string, value: string, description?: string): Promise<void>;
341
+ }
342
+
343
+ interface UploadOptions {
344
+ folder?: string;
345
+ filename?: string;
346
+ mimeType?: string;
347
+ metadata?: Record<string, unknown>;
348
+ }
349
+ interface UploadedFile {
350
+ id: string;
351
+ filename: string;
352
+ originalName: string;
353
+ mimeType: string;
354
+ size: number;
355
+ url: string;
356
+ thumbnailUrl?: string;
357
+ width?: number;
358
+ height?: number;
359
+ folder?: string;
360
+ provider: string;
361
+ metadata?: Record<string, unknown>;
362
+ createdAt: string;
363
+ }
364
+ interface ImageTransforms {
365
+ width?: number;
366
+ height?: number;
367
+ fit?: "clip" | "crop" | "fill" | "fillmax" | "scale" | "max" | "min";
368
+ format?: "webp" | "avif" | "jpeg" | "jpg" | "png" | "gif";
369
+ quality?: number;
370
+ blur?: number;
371
+ sharpen?: number;
372
+ /** Crop region as percentages (0-100) of the original image */
373
+ cropX?: number;
374
+ cropY?: number;
375
+ cropWidth?: number;
376
+ cropHeight?: number;
377
+ }
378
+ interface StorageProvider {
379
+ name: string;
380
+ displayName: string;
381
+ supportsDynamicResize: boolean;
382
+ upload(file: File, options?: UploadOptions): Promise<UploadedFile>;
383
+ uploadFromUrl(url: string, options?: UploadOptions): Promise<UploadedFile>;
384
+ delete(url: string): Promise<void>;
385
+ rename(oldUrl: string, newKey: string): Promise<string>;
386
+ getImageUrl(url: string, transforms?: ImageTransforms): string;
387
+ generateThumbnail(file: UploadedFile, size: {
388
+ width: number;
389
+ height: number;
390
+ }): Promise<string>;
391
+ list(prefix?: string): Promise<UploadedFile[]>;
392
+ exists(url: string): Promise<boolean>;
393
+ createFolder?(folder: string): Promise<void>;
394
+ deleteFolder?(folder: string): Promise<void>;
395
+ }
396
+
397
+ declare function resolveProvider(configService: ConfigService): Promise<StorageProvider>;
398
+
220
399
  interface AdminConfig {
221
400
  useAsTitle?: string;
222
401
  defaultColumns?: string[];
@@ -515,6 +694,7 @@ interface KyroConfig {
515
694
  collections?: CollectionConfig[];
516
695
  globals?: GlobalConfig[];
517
696
  adapter: BaseAdapter;
697
+ storage?: StorageProvider;
518
698
  plugins?: KyroPlugin[];
519
699
  auth?: boolean | {
520
700
  secret?: string;
@@ -569,4 +749,4 @@ interface KyroConfig {
569
749
  debug?: boolean;
570
750
  }
571
751
 
572
- export { type AdminConfig as A, type BaseAdapter as B, type CollectionConfig as C, type DeleteArgs as D, ReviewsPlugin as E, type FindArgs as F, type GlobalConfig as G, type Hook as H, type ImageSize as I, WishlistPlugin as J, type KyroConfig as K, evaluateAccess as L, getWhereClause as M, mergeWhereClauses as N, presetPlugins as O, PluginManager as P, runFieldHooks as Q, type Request as R, SEOPlugin as S, type TenantContext as T, type UploadConfig as U, type VersionConfig as V, type WhereClause as W, runHooks as X, type AuthConfig as a, type FindResult as b, type FindByIDArgs as c, type CreateArgs as d, type UpdateArgs as e, type FindOneArgs as f, type FindVersionsArgs as g, type VersionRecord as h, type CreateVersionArgs as i, KyroPlugin as j, type User as k, type AccessArgs as l, type AccessControl as m, type AdapterConfig as n, AnalyticsPlugin as o, type CollectionAccess as p, type CollectionHooks as q, CommentsPlugin as r, type CreateResult as s, type FieldAccess as t, type FieldHooks as u, type GlobalAccess as v, type GlobalHooks as w, type HookArgs as x, type PluginAPI as y, type PluginHooks as z };
752
+ export { runFieldHooks as $, type AdminConfig as A, type BaseAdapter as B, type CollectionConfig as C, type DeleteArgs as D, type EmailConfig as E, type FindArgs as F, type GlobalConfig as G, type Hook as H, type ImageSize as I, type PluginAPI as J, type KyroConfig as K, type PluginHooks as L, ReviewsPlugin as M, SEOPlugin as N, WishlistPlugin as O, PluginManager as P, evaluateAccess as Q, type Request as R, type StorageConfig as S, type TenantContext as T, type UploadConfig as U, type VersionConfig as V, type WhereClause as W, getWhereClause as X, mergeWhereClauses as Y, presetPlugins as Z, resolveProvider as _, type AuthConfig as a, runHooks as a0, type FindResult as b, type FindByIDArgs as c, type CreateArgs as d, type UpdateArgs as e, type FindOneArgs as f, type FindVersionsArgs as g, type VersionRecord as h, type CreateVersionArgs as i, type StorageProvider as j, KyroPlugin as k, type User as l, type AccessArgs as m, type AccessControl as n, type AdapterConfig as o, AnalyticsPlugin as p, type CollectionAccess as q, type CollectionHooks as r, CommentsPlugin as s, ConfigService as t, type CreateResult as u, type FieldAccess as v, type FieldHooks as w, type GlobalAccess as x, type GlobalHooks as y, type HookArgs as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kyro-cms/core",
3
- "version": "0.12.62",
3
+ "version": "0.12.64",
4
4
  "description": "Astro-native headless CMS with multi-database adapters, multi-protocol APIs, and multi-vendor support",
5
5
  "engines": {
6
6
  "node": ">=22"
@@ -191,7 +191,7 @@
191
191
  "ws": "^8.18.0",
192
192
  "zod": "^3.24.0",
193
193
  "zod-to-json-schema": "^3.25.2",
194
- "@kyro-cms/ai": "0.12.62"
194
+ "@kyro-cms/ai": "0.12.64"
195
195
  },
196
196
  "devDependencies": {
197
197
  "@tailwindcss/vite": "^4.0.0",