{"version":3,"sources":["../src/filezen.constants.ts","../src/filezen.controller.ts","../src/filezen.module.ts","../src/filezen.decorator.ts"],"names":["options","Inject"],"mappings":";;;;;;;;;;;;;;;;AAAO,IAAM,sBAAA,GAAyB;AAC/B,IAAM,eAAA,GAAkB;ACexB,SAAS,uBAAA,CACd,OAAA,GAA8C,EAAC,EAC/C;AACA,EAAA,MAAM,EAAE,IAAA,GAAO,aAAA,EAAe,UAAA,EAAY,YAAW,GAAI,OAAA;AAGzD,EAAA,IAAM,oBAAN,MAAwB;AAAA,IACtB,YAC2C,UAAA,EACzC;AADyC,MAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA;AACxC,IAGH,MAAM,iBAAA,CACI,IAAA,EACG,OAAA,EACiB;AAC5B,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,aAAA,GAAgB,MAAM,UAAA,CAAW,OAAO,CAAA;AAC9C,QAAA,IAAI,kBAAkB,KAAA,EAAO;AAC3B,UAAA,MAAM,IAAI,oBAAoB,uBAAuB,CAAA;AAAA;AACvD;AAGF,MAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,WAAU,GAAI,IAAA;AAElD,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,iBAAA,CAAkB;AAAA,QAC5C,IAAA,EAAM,WAAA;AAAA,QACN,OAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,OAAO,EAAE,GAAA,EAAI;AAAA;AACf,GACF;AArBQ,EAAA,eAAA,CAAA;AAAA,IADL,IAAA,EAAK;AAAA,IAEH,eAAA,CAAA,CAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IACL,eAAA,CAAA,CAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EARP,iBAAA,CAME,SAAA,EAAA,mBAAA,EAAA,CAAA,CAAA;AANF,EAAA,iBAAA,GAAN,eAAA,CAAA;AAAA,IADC,WAAW,IAAI,CAAA;AAAA,IAGX,0BAAO,eAAe,CAAA;AAAA,GAAA,EAFrB,iBAAA,CAAA;AA8BN,EAAA,IAAI,cAAA,GAAsB,iBAAA;AAC1B,EAAA,IAAI,yCAAY,KAAA,EAAO;AACrB,IAAA,KAAA,MAAW,SAAA,IAAa,WAAW,KAAA,EAAO;AACxC,MAAA,cAAA,GAAiB,SAAA,CAAU,cAAc,CAAA,IAAK,cAAA;AAAA;AAChD;AAIF,EAAA,IAAI,yCAAY,MAAA,EAAQ;AACtB,IAAA,KAAA,MAAW,SAAA,IAAa,WAAW,MAAA,EAAQ;AACzC,MAAA,SAAA;AAAA,QACE,cAAA,CAAe,SAAA;AAAA,QACf,mBAAA;AAAA,QACA,MAAA,CAAO,wBAAA,CAAyB,cAAA,CAAe,SAAA,EAAW,mBAAmB;AAAA,OAC/E;AAAA;AACF;AAGF,EAAA,OAAO,cAAA;AACT;;;AChEO,IAAM,gBAAN,MAAoB;AAAA;AAAA;AAAA;AAAA,EAIzB,OAAO,OAAA,CAAQ,OAAA,GAAgC,EAAC,EAAkB;AAChE,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,GAAG,YAAW,GAAI,OAAA;AAG9C,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,WAAA,EAAa,KAAA;AAAA,MACb,GAAG;AAAA,KACL;AAEA,IAAA,MAAM,SAAA,GAAwB;AAAA,MAC5B;AAAA,QACE,OAAA,EAAS,sBAAA;AAAA,QACT,QAAA,EAAU;AAAA,OACZ;AAAA,MACA;AAAA,QACE,OAAA,EAAS,eAAA;AAAA,QACT,UAAA,EAAY,CAACA,QAAAA,KAAkC;AAC7C,UAAA,OAAO,IAAI,WAAWA,QAAO,CAAA;AAAA,SAC/B;AAAA,QACA,MAAA,EAAQ,CAAC,sBAAsB;AAAA;AACjC,KACF;AAEA,IAAA,MAAM,cAAc,EAAC;AAGrB,IAAA,IAAA,CAAI,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,aAAY,KAAA,EAAO;AACjC,MAAA,MAAM,iBAAA,GAAoB,wBAAwB,UAAU,CAAA;AAC5D,MAAA,WAAA,CAAY,KAAK,iBAAiB,CAAA;AAAA;AAGpC,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,aAAA;AAAA,MACR,SAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA,EAAS,CAAC,eAAe,CAAA;AAAA,MACzB;AAAA,KACF;AAAA;AACF;AAAA;AAAA;AAAA,EAKA,OAAO,aAAa,OAAA,EAAmD;AACrE,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,MAAA,GAAS,IAAG,GAAI,OAAA;AAE5C,IAAA,MAAM,SAAA,GAAwB;AAAA,MAC5B;AAAA,QACE,OAAA,EAAS,sBAAA;AAAA,QACT,UAAA,EAAY,UAAU,IAAA,KAAgB;AACpC,UAAA,MAAM,UAAA,GAAa,MAAM,UAAA,CAAW,GAAG,IAAI,CAAA;AAE3C,UAAA,OAAO;AAAA,YACL,WAAA,EAAa,KAAA;AAAA,YACb,GAAG;AAAA,WACL;AAAA,SACF;AAAA,QACA;AAAA,OACF;AAAA,MACA;AAAA,QACE,OAAA,EAAS,eAAA;AAAA,QACT,UAAA,EAAY,CAAC,UAAA,KAAqC;AAChD,UAAA,OAAO,IAAI,WAAW,UAAU,CAAA;AAAA,SAClC;AAAA,QACA,MAAA,EAAQ,CAAC,sBAAsB;AAAA;AACjC,KACF;AAEA,IAAA,MAAM,cAAc,EAAC;AAIrB,IAAA,MAAM,oBAAoB,uBAAA,EAAwB;AAClD,IAAA,WAAA,CAAY,KAAK,iBAAiB,CAAA;AAElC,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,aAAA;AAAA,MACR,SAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA,EAAS,CAAC,eAAe,CAAA;AAAA,MACzB;AAAA,KACF;AAAA;AAEJ;AAvFa,aAAA,GAAN,eAAA,CAAA;AAAA,EADN,MAAA,CAAO,EAAE;AAAA,CAAA,EACG,aAAA,CAAA;ACDN,IAAM,gBAAA,GAAmB,MAAMC,MAAAA,CAAO,eAAe","file":"index.mjs","sourcesContent":["export const FILEZEN_MODULE_OPTIONS = 'FILEZEN_MODULE_OPTIONS';\nexport const FILEZEN_STORAGE = 'FILEZEN_STORAGE'; ","import { ZenStorage } from '@filezen/js';\nimport {\n  BadRequestException,\n  Body,\n  Controller,\n  Inject,\n  Post,\n  Request,\n} from '@nestjs/common';\nimport { FILEZEN_STORAGE } from './filezen.constants';\nimport type {\n  FileZenControllerOptions,\n  SignedUrlRequest,\n  SignedUrlResponse,\n} from './filezen.types';\n\nexport function createFileZenController<TRequest = any>(\n  options: FileZenControllerOptions<TRequest> = {},\n) {\n  const { path = 'upload/sign', middleware, decorators } = options;\n\n  @Controller(path)\n  class FileZenController {\n    constructor(\n      @Inject(FILEZEN_STORAGE) public readonly zenStorage: ZenStorage,\n    ) {}\n\n    @Post()\n    async generateSignedUrl(\n      @Body() body: SignedUrlRequest,\n      @Request() request: TRequest,\n    ): Promise<SignedUrlResponse> {\n      if (middleware) {\n        const shouldProceed = await middleware(request);\n        if (shouldProceed === false) {\n          throw new BadRequestException('Middleware not passed');\n        }\n      }\n\n      const { path: requestPath, fileKey, expiresIn } = body;\n\n      const url = this.zenStorage.generateSignedUrl({\n        path: requestPath,\n        fileKey,\n        expiresIn,\n      });\n\n      return { url };\n    }\n  }\n\n  // Apply custom class decorators (after @Controller)\n  let DecoratedClass: any = FileZenController;\n  if (decorators?.class) {\n    for (const decorator of decorators.class) {\n      DecoratedClass = decorator(DecoratedClass) || DecoratedClass;\n    }\n  }\n\n  // Apply custom method decorators\n  if (decorators?.method) {\n    for (const decorator of decorators.method) {\n      decorator(\n        DecoratedClass.prototype,\n        'generateSignedUrl',\n        Object.getOwnPropertyDescriptor(DecoratedClass.prototype, 'generateSignedUrl')\n      );\n    }\n  }\n\n  return DecoratedClass;\n}\n","import { Module, DynamicModule, Provider } from '@nestjs/common';\nimport { FileZenModuleOptions, FileZenModuleAsyncOptions } from './filezen.types';\nimport { FILEZEN_MODULE_OPTIONS, FILEZEN_STORAGE } from './filezen.constants';\nimport { ZenStorage } from '@filezen/js';\nimport { createFileZenController } from './filezen.controller';\n\n@Module({})\nexport class FileZenModule {\n  /**\n   * Register the FileZen module with static options\n   */\n  static forRoot(options: FileZenModuleOptions = {}): DynamicModule {\n    const { global, controller, ...zenOptions } = options;\n    \n    // Set keepUploads to false by default for Nest.js (server-side usage)\n    const defaultOptions = {\n      keepUploads: false,\n      ...zenOptions,\n    };\n    \n    const providers: Provider[] = [\n      {\n        provide: FILEZEN_MODULE_OPTIONS,\n        useValue: defaultOptions,\n      },\n      {\n        provide: FILEZEN_STORAGE,\n        useFactory: (options: FileZenModuleOptions) => {\n          return new ZenStorage(options);\n        },\n        inject: [FILEZEN_MODULE_OPTIONS],\n      },\n    ];\n\n    const controllers = [];\n    \n    // Add controller if enabled\n    if (controller?.enabled !== false) {\n      const FileZenController = createFileZenController(controller);\n      controllers.push(FileZenController);\n    }\n\n    return {\n      module: FileZenModule,\n      providers,\n      controllers,\n      exports: [FILEZEN_STORAGE],\n      global,\n    };\n  }\n\n  /**\n   * Register the FileZen module with async options\n   */\n  static forRootAsync(options: FileZenModuleAsyncOptions): DynamicModule {\n    const { global, useFactory, inject = [] } = options;\n\n    const providers: Provider[] = [\n      {\n        provide: FILEZEN_MODULE_OPTIONS,\n        useFactory: async (...args: any[]) => {\n          const zenOptions = await useFactory(...args);\n          // Set keepUploads to false by default for Nest.js (server-side usage)\n          return {\n            keepUploads: false,\n            ...zenOptions,\n          };\n        },\n        inject,\n      },\n      {\n        provide: FILEZEN_STORAGE,\n        useFactory: (zenOptions: FileZenModuleOptions) => {\n          return new ZenStorage(zenOptions);\n        },\n        inject: [FILEZEN_MODULE_OPTIONS],\n      },\n    ];\n\n    const controllers = [];\n    \n    // For async options, we'll use the default controller\n    // Users can override this by providing controller options in their factory\n    const FileZenController = createFileZenController();\n    controllers.push(FileZenController);\n\n    return {\n      module: FileZenModule,\n      providers,\n      controllers,\n      exports: [FILEZEN_STORAGE],\n      global,\n    };\n  }\n} \n","import { Inject } from '@nestjs/common';\nimport { FILEZEN_STORAGE } from './filezen.constants';\n\n/**\n * Inject the ZenStorage instance\n */\nexport const InjectZenStorage = () => Inject(FILEZEN_STORAGE); "]}