@simo777/fastify-storage 1.0.1 → 1.0.2

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/README.md CHANGED
@@ -66,24 +66,32 @@ R2_PUBLIC_URL=https://pub-<your-id>.r2.dev
66
66
 
67
67
  ### Server-side (Fastify)
68
68
 
69
- Register the plugin with your desired configuration:
69
+ Register the plugin with your desired configuration. The plugin automatically handles `@fastify/multipart` and `@fastify/static` (for local storage).
70
70
 
71
71
  ```typescript
72
72
  import fastifyStorage from '@simo777/fastify-storage';
73
73
 
74
74
  await app.register(fastifyStorage, {
75
75
  provider: 'local', // or 'r2'
76
+ routePrefix: '/storage', // Optional: defaults to /storage
77
+ defaultPath: 'uploads', // Optional: global default folder
78
+
79
+ // Optional: customize multipart limits
80
+ multipart: {
81
+ limits: { fileSize: 20 * 1024 * 1024 } // 20MB
82
+ },
83
+
84
+ // Optional: customize static file serving (for local provider)
85
+ static: {
86
+ cacheControl: true,
87
+ maxAge: 3600000
88
+ },
89
+
76
90
  local: {
77
91
  storagePath: 'uploads',
78
92
  publicUrl: 'http://localhost:3000/uploads'
79
93
  },
80
- // r2: {
81
- // endpoint: process.env.R2_ENDPOINT,
82
- // accessKeyId: process.env.R2_ACCESS_KEY_ID,
83
- // secretAccessKey: process.env.R2_SECRET_ACCESS_KEY,
84
- // bucketName: process.env.R2_BUCKET_NAME,
85
- // publicUrl: process.env.R2_PUBLIC_URL
86
- // }
94
+ // r2: { ... }
87
95
  });
88
96
  ```
89
97
 
package/dist/src/app.js CHANGED
@@ -33,26 +33,16 @@ export async function buildApp() {
33
33
  origin: parseCorsOrigin(app.config.CORS_ORIGIN),
34
34
  credentials: true
35
35
  });
36
- await app.register(import('@fastify/multipart'), {
37
- limits: { fileSize: 10 * 1024 * 1024 } // 10MB
38
- });
39
- if (app.config.STORAGE_PROVIDER === 'local') {
40
- const { promises: fs } = await import('node:fs');
41
- const storagePath = join(process.cwd(), app.config.LOCAL_STORAGE_PATH);
42
- await fs.mkdir(storagePath, { recursive: true });
43
- await app.register(import('@fastify/static'), {
44
- root: storagePath,
45
- prefix: '/uploads/',
46
- decorateReply: false
47
- });
48
- }
49
36
  await app.register(prismaPlugin);
50
37
  await app.register(redisPlugin);
51
38
  await app.register(queuesPlugin);
52
39
  await app.register(storagePlugin, {
53
40
  provider: app.config.STORAGE_PROVIDER,
54
41
  defaultPath: app.config.STORAGE_DEFAULT_PATH,
55
- routePrefix: '/storage', // This will be prefixed by API_PREFIX if registered inside a scoped block
42
+ routePrefix: '/storage',
43
+ multipart: {
44
+ limits: { fileSize: 10 * 1024 * 1024 }
45
+ },
56
46
  local: {
57
47
  storagePath: app.config.LOCAL_STORAGE_PATH,
58
48
  publicUrl: app.config.LOCAL_STORAGE_PUBLIC_URL
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AAEjD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,SAAS,eAAe,CAAC,MAAc;IACrC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM;SACV,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC;QAClB,MAAM,EAAE;YACN,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;SACvC;KACF,CAAC,CAAC,gBAAgB,EAAuB,CAAC;IAI3C,MAAM,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE;QAC7B,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QACvB,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;QAC/C,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE;QAC/C,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,OAAO;KAC/C,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,MAAM,CAAC,gBAAgB,KAAK,OAAO,EAAE,CAAC;QAC5C,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACvE,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjD,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;YAC5C,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,WAAW;YACnB,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjC,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChC,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEjC,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE;QAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,gBAAgB;QACrC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,oBAAoB;QAC5C,WAAW,EAAE,UAAU,EAAE,0EAA0E;QACnG,KAAK,EAAE;YACL,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,kBAAkB;YAC1C,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,wBAAwB;SAC/C;QACD,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC;YACzC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,WAAY;YACjC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,gBAAiB;YACzC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,oBAAqB;YACjD,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,cAAe;YACtC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC,CAAC,SAAS;KACd,CAAC,CAAC;IAGH,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACxB,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,SAAS;KACxC,CAAC,CAAC,CAAC;IAEJ,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAC3B,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;QAC/B,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE;YACP,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU;SAC9B;KACF,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,eAAe,GAAG,KAAiC,CAAC;QAC1D,MAAM,UAAU,GAAG,OAAO,eAAe,CAAC,UAAU,KAAK,QAAQ,IAAI,eAAe,CAAC,UAAU,IAAI,GAAG;YACpG,CAAC,CAAC,eAAe,CAAC,UAAU;YAC5B,CAAC,CAAC,GAAG,CAAC;QACR,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC;QAE5E,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YACnC,KAAK,EAAE,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO;YAC7D,UAAU;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import { StorageProvider } from './provider.js';
2
+ import type { FastifyMultipartOptions } from '@fastify/multipart';
3
+ import type { FastifyStaticOptions } from '@fastify/static';
2
4
  export * from './provider.js';
3
5
  export * from './local.js';
4
6
  export * from './r2.js';
@@ -6,6 +8,8 @@ export interface StoragePluginOptions {
6
8
  provider: 'local' | 'r2';
7
9
  defaultPath?: string | undefined;
8
10
  routePrefix?: string | undefined;
11
+ multipart?: FastifyMultipartOptions | undefined;
12
+ static?: Partial<FastifyStaticOptions> | undefined;
9
13
  local?: {
10
14
  storagePath: string;
11
15
  publicUrl?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAG5C,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AAqBxB,MAAM,UAAU,qBAAqB,CAAC,OAA6B;IACjE,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACxG,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,iBAAiB,CAAC;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,MAAM,EAAE,MAAM,CAAC,UAAU;YACzB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,IAAI,oBAAoB,CAC7B,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC,WAAW;KAC3C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAK5C,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AAyBxB,MAAM,UAAU,qBAAqB,CAAC,OAA6B;IACjE,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACxG,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,iBAAiB,CAAC;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,MAAM,EAAE,MAAM,CAAC,UAAU;YACzB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,IAAI,oBAAoB,CAC7B,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC,WAAW;KAC3C,CAAC;AACJ,CAAC"}
@@ -1,6 +1,10 @@
1
1
  import fp from 'fastify-plugin';
2
+ import { join } from 'node:path';
3
+ import { promises as fs } from 'node:fs';
2
4
  import { createStorageProvider } from '../lib/storage/index.js';
3
5
  import storageRoutes from '../storage-internal/index.js';
6
+ import fastifyMultipart from '@fastify/multipart';
7
+ import fastifyStatic from '@fastify/static';
4
8
  const storagePlugin = async (fastify, options) => {
5
9
  const storage = createStorageProvider(options);
6
10
  const bucket = options.provider === 'r2' ? options.r2?.bucketName || 'r2' : 'local';
@@ -9,7 +13,23 @@ const storagePlugin = async (fastify, options) => {
9
13
  bucket: bucket,
10
14
  defaultPath: options.defaultPath
11
15
  }));
12
- // Register the storage routes automatically
16
+ // 1. Register Multipart
17
+ await fastify.register(fastifyMultipart, options.multipart || {
18
+ limits: { fileSize: 10 * 1024 * 1024 } // Default 10MB
19
+ });
20
+ // 2. Register Static if local
21
+ if (options.provider === 'local' && options.local) {
22
+ const storagePath = join(process.cwd(), options.local.storagePath);
23
+ await fs.mkdir(storagePath, { recursive: true });
24
+ const staticOptions = options.static || {};
25
+ await fastify.register(fastifyStatic, {
26
+ root: storagePath,
27
+ prefix: options.local.publicUrl || '/uploads/',
28
+ decorateReply: false,
29
+ ...staticOptions
30
+ });
31
+ }
32
+ // 3. Register the storage routes automatically
13
33
  await fastify.register(storageRoutes, {
14
34
  prefix: options.routePrefix || '/storage'
15
35
  });
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/plugins/storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAyC,MAAM,yBAAyB,CAAC;AACvG,OAAO,aAAa,MAAM,8BAA8B,CAAC;AAczD,MAAM,aAAa,GAA6C,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACzF,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAEpF,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;QACjD,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC,CAAC;IAEJ,4CAA4C;IAC5C,MAAM,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;QACpC,MAAM,EAAE,OAAO,CAAC,WAAW,IAAI,UAAU;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,EAAE,CAAC,aAAa,EAAE;IAC/B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;CACf,CAAC,CAAC"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/plugins/storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAyC,MAAM,yBAAyB,CAAC;AACvG,OAAO,aAAa,MAAM,8BAA8B,CAAC;AACzD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAc5C,MAAM,aAAa,GAA6C,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACzF,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAEpF,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;QACjD,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC,CAAC;IAEJ,wBAAwB;IACxB,MAAM,OAAO,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,SAAS,IAAI;QAC5D,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,eAAe;KACvD,CAAC,CAAC;IAEH,8BAA8B;IAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QAC3C,MAAM,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;YACpC,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,WAAW;YAC9C,aAAa,EAAE,KAAK;YACpB,GAAG,aAAa;SACjB,CAAC,CAAC;IACL,CAAC;IAED,+CAA+C;IAC/C,MAAM,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;QACpC,MAAM,EAAE,OAAO,CAAC,WAAW,IAAI,UAAU;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,EAAE,CAAC,aAAa,EAAE;IAC/B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;CACf,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simo777/fastify-storage",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Scalable Fastify storage plugin for Local and R2/S3 storage with Prisma metadata tracking and media processing.",
5
5
  "type": "module",
6
6
  "main": "./dist/src/plugins/storage.js",