saas-backend-kit 1.0.0 → 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.
Files changed (58) hide show
  1. package/README.md +123 -344
  2. package/copy-dts.js +59 -0
  3. package/dist/auth/index.js +7 -2
  4. package/dist/auth/index.js.map +1 -1
  5. package/dist/auth/index.mjs +7 -2
  6. package/dist/auth/index.mjs.map +1 -1
  7. package/dist/config/index.js +6 -1
  8. package/dist/config/index.js.map +1 -1
  9. package/dist/config/index.mjs +6 -1
  10. package/dist/config/index.mjs.map +1 -1
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.js +232 -41
  13. package/dist/index.js.map +1 -1
  14. package/dist/index.mjs +231 -42
  15. package/dist/index.mjs.map +1 -1
  16. package/dist/logger/index.js +6 -1
  17. package/dist/logger/index.js.map +1 -1
  18. package/dist/logger/index.mjs +6 -1
  19. package/dist/logger/index.mjs.map +1 -1
  20. package/dist/notifications/index.js +6 -1
  21. package/dist/notifications/index.js.map +1 -1
  22. package/dist/notifications/index.mjs +6 -1
  23. package/dist/notifications/index.mjs.map +1 -1
  24. package/dist/queue/index.js +6 -1
  25. package/dist/queue/index.js.map +1 -1
  26. package/dist/queue/index.mjs +6 -1
  27. package/dist/queue/index.mjs.map +1 -1
  28. package/dist/rate-limit/index.js +7 -1
  29. package/dist/rate-limit/index.js.map +1 -1
  30. package/dist/rate-limit/index.mjs +7 -1
  31. package/dist/rate-limit/index.mjs.map +1 -1
  32. package/dist/response/index.js +51 -40
  33. package/dist/response/index.js.map +1 -1
  34. package/dist/response/index.mjs +51 -40
  35. package/dist/response/index.mjs.map +1 -1
  36. package/dist/upload/index.d.ts +57 -0
  37. package/dist/upload/index.js +344 -0
  38. package/dist/upload/index.js.map +1 -0
  39. package/dist/upload/index.mjs +334 -0
  40. package/dist/upload/index.mjs.map +1 -0
  41. package/jest-output.json +72 -0
  42. package/jest.config.js +19 -0
  43. package/package.json +20 -8
  44. package/saas-banner.svg +239 -0
  45. package/src/auth/jwt.ts +1 -1
  46. package/src/config/index.ts +5 -0
  47. package/src/index.ts +2 -0
  48. package/src/rate-limit/express.ts +1 -0
  49. package/src/response/index.ts +49 -40
  50. package/src/upload/index.ts +268 -0
  51. package/tests/auth.test.ts +134 -0
  52. package/tests/config.test.ts +36 -0
  53. package/tests/logger.test.ts +47 -0
  54. package/tests/notifications.test.ts +19 -0
  55. package/tests/rate-limit.test.ts +50 -0
  56. package/tests/upload.test.ts +33 -0
  57. package/tsconfig.test.json +14 -0
  58. package/tsup.config.ts +2 -1
@@ -2,7 +2,12 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var express = require('express');
5
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
6
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
7
+ }) : x)(function(x) {
8
+ if (typeof require !== "undefined") return require.apply(this, arguments);
9
+ throw Error('Dynamic require of "' + x + '" is not supported');
10
+ });
6
11
 
7
12
  // src/response/index.ts
8
13
  var ResponseHelper = class {
@@ -71,45 +76,51 @@ var ResponseHelper = class {
71
76
  return res.status(204).send();
72
77
  }
73
78
  };
74
- express.Response.prototype.success = function(data, message, statusCode = 200) {
75
- return ResponseHelper.success(this, data, message, statusCode);
76
- };
77
- express.Response.prototype.created = function(data, message) {
78
- return ResponseHelper.created(this, data, message);
79
- };
80
- express.Response.prototype.updated = function(data, message) {
81
- return ResponseHelper.updated(this, data, message);
82
- };
83
- express.Response.prototype.deleted = function(message) {
84
- return ResponseHelper.deleted(this, message);
85
- };
86
- express.Response.prototype.error = function(error, statusCode = 400, code, details) {
87
- return ResponseHelper.error(this, error, statusCode, code, details);
88
- };
89
- express.Response.prototype.badRequest = function(error, code) {
90
- return ResponseHelper.badRequest(this, error, code);
91
- };
92
- express.Response.prototype.unauthorized = function(error, code) {
93
- return ResponseHelper.unauthorized(this, error, code);
94
- };
95
- express.Response.prototype.forbidden = function(error, code) {
96
- return ResponseHelper.forbidden(this, error, code);
97
- };
98
- express.Response.prototype.notFound = function(error, code) {
99
- return ResponseHelper.notFound(this, error, code);
100
- };
101
- express.Response.prototype.conflict = function(error, code) {
102
- return ResponseHelper.conflict(this, error, code);
103
- };
104
- express.Response.prototype.validationError = function(error, details) {
105
- return ResponseHelper.validationError(this, error, details);
106
- };
107
- express.Response.prototype.internalError = function(error) {
108
- return ResponseHelper.internalError(this, error);
109
- };
110
- express.Response.prototype.paginated = function(data, page, limit, total) {
111
- return ResponseHelper.paginated(this, data, page, limit, total);
112
- };
79
+ try {
80
+ const proto = __require("express").response;
81
+ if (proto) {
82
+ proto.success = function(data, message, statusCode = 200) {
83
+ return ResponseHelper.success(this, data, message, statusCode);
84
+ };
85
+ proto.created = function(data, message) {
86
+ return ResponseHelper.created(this, data, message);
87
+ };
88
+ proto.updated = function(data, message) {
89
+ return ResponseHelper.updated(this, data, message);
90
+ };
91
+ proto.deleted = function(message) {
92
+ return ResponseHelper.deleted(this, message);
93
+ };
94
+ proto.error = function(error, statusCode = 400, code, details) {
95
+ return ResponseHelper.error(this, error, statusCode, code, details);
96
+ };
97
+ proto.badRequest = function(error, code) {
98
+ return ResponseHelper.badRequest(this, error, code);
99
+ };
100
+ proto.unauthorized = function(error, code) {
101
+ return ResponseHelper.unauthorized(this, error, code);
102
+ };
103
+ proto.forbidden = function(error, code) {
104
+ return ResponseHelper.forbidden(this, error, code);
105
+ };
106
+ proto.notFound = function(error, code) {
107
+ return ResponseHelper.notFound(this, error, code);
108
+ };
109
+ proto.conflict = function(error, code) {
110
+ return ResponseHelper.conflict(this, error, code);
111
+ };
112
+ proto.validationError = function(error, details) {
113
+ return ResponseHelper.validationError(this, error, details);
114
+ };
115
+ proto.internalError = function(error) {
116
+ return ResponseHelper.internalError(this, error);
117
+ };
118
+ proto.paginated = function(data, page, limit, total) {
119
+ return ResponseHelper.paginated(this, data, page, limit, total);
120
+ };
121
+ }
122
+ } catch {
123
+ }
113
124
  var response = ResponseHelper;
114
125
  var response_default = ResponseHelper;
115
126
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/response/index.ts"],"names":["response","Response"],"mappings":";;;;;;;AA+BO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,OAAO,OAAA,CAAW,GAAA,EAAe,IAAA,EAAU,OAAA,EAAkB,aAAqB,GAAA,EAAe;AAC/F,IAAA,MAAMA,SAAAA,GAA2B;AAAA,MAC/B,OAAA,EAAS,IAAA;AAAA,MACT,IAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA,CAAE,KAAKA,SAAQ,CAAA;AAAA,EAC7C;AAAA,EAEA,OAAO,OAAA,CAAW,GAAA,EAAe,IAAA,EAAU,UAAkB,kBAAA,EAA8B;AACzF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,IAAA,EAAM,SAAS,GAAG,CAAA;AAAA,EAC7C;AAAA,EAEA,OAAO,OAAA,CAAW,GAAA,EAAe,IAAA,EAAU,UAAkB,kBAAA,EAA8B;AACzF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,IAAA,EAAM,SAAS,GAAG,CAAA;AAAA,EAC7C;AAAA,EAEA,OAAO,OAAA,CAAQ,GAAA,EAAe,OAAA,GAAkB,kBAAA,EAA8B;AAC5E,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,IAAA,EAAM,SAAS,GAAG,CAAA;AAAA,EAC7C;AAAA,EAEA,OAAO,KAAA,CACL,GAAA,EACA,OACA,UAAA,GAAqB,GAAA,EACrB,MACA,OAAA,EACU;AACV,IAAA,MAAMA,SAAAA,GAA0B;AAAA,MAC9B,OAAA,EAAS,KAAA;AAAA,MACT,KAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAI,OAAA,IAAW,EAAE,OAAA;AAAQ,KAC3B;AACA,IAAA,OAAO,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA,CAAE,KAAKA,SAAQ,CAAA;AAAA,EAC7C;AAAA,EAEA,OAAO,UAAA,CAAW,GAAA,EAAe,KAAA,GAAgB,eAAe,IAAA,EAAyB;AACvF,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,KAAA,EAAO,KAAK,IAAI,CAAA;AAAA,EACzC;AAAA,EAEA,OAAO,YAAA,CAAa,GAAA,EAAe,KAAA,GAAgB,gBAAgB,IAAA,EAAyB;AAC1F,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,KAAA,EAAO,KAAK,IAAI,CAAA;AAAA,EACzC;AAAA,EAEA,OAAO,SAAA,CAAU,GAAA,EAAe,KAAA,GAAgB,aAAa,IAAA,EAAyB;AACpF,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,KAAA,EAAO,KAAK,IAAI,CAAA;AAAA,EACzC;AAAA,EAEA,OAAO,QAAA,CAAS,GAAA,EAAe,KAAA,GAAgB,sBAAsB,IAAA,EAAyB;AAC5F,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,KAAA,EAAO,KAAK,IAAI,CAAA;AAAA,EACzC;AAAA,EAEA,OAAO,QAAA,CAAS,GAAA,EAAe,KAAA,GAAgB,YAAY,IAAA,EAAyB;AAClF,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,KAAA,EAAO,KAAK,IAAI,CAAA;AAAA,EACzC;AAAA,EAEA,OAAO,eAAA,CAAgB,GAAA,EAAe,KAAA,EAAe,OAAA,EAA6C;AAChG,IAAA,OAAO,KAAK,KAAA,CAAM,GAAA,EAAK,KAAA,EAAO,GAAA,EAAK,oBAAoB,OAAO,CAAA;AAAA,EAChE;AAAA,EAEA,OAAO,aAAA,CAAc,GAAA,EAAe,KAAA,GAAgB,uBAAA,EAAmC;AACrF,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,KAAA,EAAO,KAAK,gBAAgB,CAAA;AAAA,EACrD;AAAA,EAEA,OAAO,SAAA,CACL,GAAA,EACA,IAAA,EACA,IAAA,EACA,OACA,KAAA,EACgC;AAChC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,KAAK,CAAA;AAC1C,IAAA,MAAMA,SAAAA,GAAiC;AAAA,MACrC,OAAA,EAAS,IAAA;AAAA,MACT,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,IAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA;AACF,KACF;AACA,IAAA,OAAO,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,CAAE,KAAKA,SAAQ,CAAA;AAAA,EACtC;AAAA,EAEA,OAAO,UAAU,GAAA,EAAyB;AACxC,IAAA,OAAO,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,EAC9B;AACF;AAsBAC,gBAAA,CAAS,UAAU,OAAA,GAAU,SAAa,IAAA,EAAU,OAAA,EAAkB,aAAqB,GAAA,EAAK;AAC9F,EAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAM,SAAS,UAAU,CAAA;AAC/D,CAAA;AAEAA,gBAAA,CAAS,SAAA,CAAU,OAAA,GAAU,SAAa,IAAA,EAAU,OAAA,EAAkB;AACpE,EAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AACnD,CAAA;AAEAA,gBAAA,CAAS,SAAA,CAAU,OAAA,GAAU,SAAa,IAAA,EAAU,OAAA,EAAkB;AACpE,EAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AACnD,CAAA;AAEAA,gBAAA,CAAS,SAAA,CAAU,OAAA,GAAU,SAAU,OAAA,EAAkB;AACvD,EAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AAC7C,CAAA;AAEAA,gBAAA,CAAS,UAAU,KAAA,GAAQ,SAAU,OAAe,UAAA,GAAqB,GAAA,EAAK,MAAe,OAAA,EAAmC;AAC9H,EAAA,OAAO,eAAe,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,UAAA,EAAY,MAAM,OAAO,CAAA;AACpE,CAAA;AAEAA,gBAAA,CAAS,SAAA,CAAU,UAAA,GAAa,SAAU,KAAA,EAAgB,IAAA,EAAe;AACvE,EAAA,OAAO,cAAA,CAAe,UAAA,CAAW,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA;AACpD,CAAA;AAEAA,gBAAA,CAAS,SAAA,CAAU,YAAA,GAAe,SAAU,KAAA,EAAgB,IAAA,EAAe;AACzE,EAAA,OAAO,cAAA,CAAe,YAAA,CAAa,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA;AACtD,CAAA;AAEAA,gBAAA,CAAS,SAAA,CAAU,SAAA,GAAY,SAAU,KAAA,EAAgB,IAAA,EAAe;AACtE,EAAA,OAAO,cAAA,CAAe,SAAA,CAAU,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA;AACnD,CAAA;AAEAA,gBAAA,CAAS,SAAA,CAAU,QAAA,GAAW,SAAU,KAAA,EAAgB,IAAA,EAAe;AACrE,EAAA,OAAO,cAAA,CAAe,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA;AAClD,CAAA;AAEAA,gBAAA,CAAS,SAAA,CAAU,QAAA,GAAW,SAAU,KAAA,EAAgB,IAAA,EAAe;AACrE,EAAA,OAAO,cAAA,CAAe,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA;AAClD,CAAA;AAEAA,gBAAA,CAAS,SAAA,CAAU,eAAA,GAAkB,SAAU,KAAA,EAAe,OAAA,EAAmC;AAC/F,EAAA,OAAO,cAAA,CAAe,eAAA,CAAgB,IAAA,EAAM,KAAA,EAAO,OAAO,CAAA;AAC5D,CAAA;AAEAA,gBAAA,CAAS,SAAA,CAAU,aAAA,GAAgB,SAAU,KAAA,EAAgB;AAC3D,EAAA,OAAO,cAAA,CAAe,aAAA,CAAc,IAAA,EAAM,KAAK,CAAA;AACjD,CAAA;AAEAA,gBAAA,CAAS,UAAU,SAAA,GAAY,SAAa,IAAA,EAAW,IAAA,EAAc,OAAe,KAAA,EAAe;AACjG,EAAA,OAAO,eAAe,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,OAAO,KAAK,CAAA;AAChE,CAAA;AAEO,IAAM,QAAA,GAAW;AACxB,IAAO,gBAAA,GAAQ","file":"index.js","sourcesContent":["import { Response } from 'express';\n\nexport interface ApiResponse<T = unknown> {\n success: boolean;\n data?: T;\n error?: string;\n message?: string;\n meta?: {\n page?: number;\n limit?: number;\n total?: number;\n totalPages?: number;\n };\n}\n\nexport interface PaginatedResponse<T> extends ApiResponse<T> {\n meta: {\n page: number;\n limit: number;\n total: number;\n totalPages: number;\n };\n}\n\nexport interface ErrorResponse {\n success: false;\n error: string;\n code?: string;\n details?: Record<string, unknown>;\n}\n\nexport class ResponseHelper {\n static success<T>(res: Response, data?: T, message?: string, statusCode: number = 200): Response {\n const response: ApiResponse<T> = {\n success: true,\n data,\n message,\n };\n return res.status(statusCode).json(response);\n }\n\n static created<T>(res: Response, data?: T, message: string = 'Resource created'): Response {\n return this.success(res, data, message, 201);\n }\n\n static updated<T>(res: Response, data?: T, message: string = 'Resource updated'): Response {\n return this.success(res, data, message, 200);\n }\n\n static deleted(res: Response, message: string = 'Resource deleted'): Response {\n return this.success(res, null, message, 200);\n }\n\n static error(\n res: Response,\n error: string,\n statusCode: number = 400,\n code?: string,\n details?: Record<string, unknown>\n ): Response {\n const response: ErrorResponse = {\n success: false,\n error,\n code,\n ...(details && { details }),\n };\n return res.status(statusCode).json(response);\n }\n\n static badRequest(res: Response, error: string = 'Bad request', code?: string): Response {\n return this.error(res, error, 400, code);\n }\n\n static unauthorized(res: Response, error: string = 'Unauthorized', code?: string): Response {\n return this.error(res, error, 401, code);\n }\n\n static forbidden(res: Response, error: string = 'Forbidden', code?: string): Response {\n return this.error(res, error, 403, code);\n }\n\n static notFound(res: Response, error: string = 'Resource not found', code?: string): Response {\n return this.error(res, error, 404, code);\n }\n\n static conflict(res: Response, error: string = 'Conflict', code?: string): Response {\n return this.error(res, error, 409, code);\n }\n\n static validationError(res: Response, error: string, details?: Record<string, unknown>): Response {\n return this.error(res, error, 422, 'VALIDATION_ERROR', details);\n }\n\n static internalError(res: Response, error: string = 'Internal server error'): Response {\n return this.error(res, error, 500, 'INTERNAL_ERROR');\n }\n\n static paginated<T>(\n res: Response,\n data: T[],\n page: number,\n limit: number,\n total: number\n ): Response<PaginatedResponse<T>> {\n const totalPages = Math.ceil(total / limit);\n const response: PaginatedResponse<T> = {\n success: true,\n data,\n meta: {\n page,\n limit,\n total,\n totalPages,\n },\n };\n return res.status(200).json(response);\n }\n\n static noContent(res: Response): Response {\n return res.status(204).send();\n }\n}\n\ndeclare global {\n namespace Express {\n interface Response {\n success<T>(data?: T, message?: string, statusCode?: number): Response;\n created<T>(data?: T, message?: string): Response;\n updated<T>(data?: T, message?: string): Response;\n deleted(message?: string): Response;\n error(error: string, statusCode?: number, code?: string, details?: Record<string, unknown>): Response;\n badRequest(error?: string, code?: string): Response;\n unauthorized(error?: string, code?: string): Response;\n forbidden(error?: string, code?: string): Response;\n notFound(error?: string, code?: string): Response;\n conflict(error?: string, code?: string): Response;\n validationError(error: string, details?: Record<string, unknown>): Response;\n internalError(error?: string): Response;\n paginated<T>(data: T[], page: number, limit: number, total: number): Response;\n }\n }\n}\n\nResponse.prototype.success = function <T>(data?: T, message?: string, statusCode: number = 200) {\n return ResponseHelper.success(this, data, message, statusCode);\n};\n\nResponse.prototype.created = function <T>(data?: T, message?: string) {\n return ResponseHelper.created(this, data, message);\n};\n\nResponse.prototype.updated = function <T>(data?: T, message?: string) {\n return ResponseHelper.updated(this, data, message);\n};\n\nResponse.prototype.deleted = function (message?: string) {\n return ResponseHelper.deleted(this, message);\n};\n\nResponse.prototype.error = function (error: string, statusCode: number = 400, code?: string, details?: Record<string, unknown>) {\n return ResponseHelper.error(this, error, statusCode, code, details);\n};\n\nResponse.prototype.badRequest = function (error?: string, code?: string) {\n return ResponseHelper.badRequest(this, error, code);\n};\n\nResponse.prototype.unauthorized = function (error?: string, code?: string) {\n return ResponseHelper.unauthorized(this, error, code);\n};\n\nResponse.prototype.forbidden = function (error?: string, code?: string) {\n return ResponseHelper.forbidden(this, error, code);\n};\n\nResponse.prototype.notFound = function (error?: string, code?: string) {\n return ResponseHelper.notFound(this, error, code);\n};\n\nResponse.prototype.conflict = function (error?: string, code?: string) {\n return ResponseHelper.conflict(this, error, code);\n};\n\nResponse.prototype.validationError = function (error: string, details?: Record<string, unknown>) {\n return ResponseHelper.validationError(this, error, details);\n};\n\nResponse.prototype.internalError = function (error?: string) {\n return ResponseHelper.internalError(this, error);\n};\n\nResponse.prototype.paginated = function <T>(data: T[], page: number, limit: number, total: number) {\n return ResponseHelper.paginated(this, data, page, limit, total);\n};\n\nexport const response = ResponseHelper;\nexport default ResponseHelper;\n"]}
1
+ {"version":3,"sources":["../../src/response/index.ts"],"names":["response"],"mappings":"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","file":"index.js","sourcesContent":["import { Response } from 'express';\n\nexport interface ApiResponse<T = unknown> {\n success: boolean;\n data?: T;\n error?: string;\n message?: string;\n meta?: {\n page?: number;\n limit?: number;\n total?: number;\n totalPages?: number;\n };\n}\n\nexport interface PaginatedResponse<T> extends Omit<ApiResponse<T[]>, 'data'> {\n data: T[];\n meta: {\n page: number;\n limit: number;\n total: number;\n totalPages: number;\n };\n}\n\nexport interface ErrorResponse {\n success: false;\n error: string;\n code?: string;\n details?: Record<string, unknown>;\n}\n\nexport class ResponseHelper {\n static success<T>(res: Response, data?: T, message?: string, statusCode: number = 200): Response {\n const response: ApiResponse<T> = {\n success: true,\n data,\n message,\n };\n return res.status(statusCode).json(response);\n }\n\n static created<T>(res: Response, data?: T, message: string = 'Resource created'): Response {\n return this.success(res, data, message, 201);\n }\n\n static updated<T>(res: Response, data?: T, message: string = 'Resource updated'): Response {\n return this.success(res, data, message, 200);\n }\n\n static deleted(res: Response, message: string = 'Resource deleted'): Response {\n return this.success(res, null, message, 200);\n }\n\n static error(\n res: Response,\n error: string,\n statusCode: number = 400,\n code?: string,\n details?: Record<string, unknown>\n ): Response {\n const response: ErrorResponse = {\n success: false,\n error,\n code,\n ...(details && { details }),\n };\n return res.status(statusCode).json(response);\n }\n\n static badRequest(res: Response, error: string = 'Bad request', code?: string): Response {\n return this.error(res, error, 400, code);\n }\n\n static unauthorized(res: Response, error: string = 'Unauthorized', code?: string): Response {\n return this.error(res, error, 401, code);\n }\n\n static forbidden(res: Response, error: string = 'Forbidden', code?: string): Response {\n return this.error(res, error, 403, code);\n }\n\n static notFound(res: Response, error: string = 'Resource not found', code?: string): Response {\n return this.error(res, error, 404, code);\n }\n\n static conflict(res: Response, error: string = 'Conflict', code?: string): Response {\n return this.error(res, error, 409, code);\n }\n\n static validationError(res: Response, error: string, details?: Record<string, unknown>): Response {\n return this.error(res, error, 422, 'VALIDATION_ERROR', details);\n }\n\n static internalError(res: Response, error: string = 'Internal server error'): Response {\n return this.error(res, error, 500, 'INTERNAL_ERROR');\n }\n\n static paginated<T>(\n res: Response,\n data: T[],\n page: number,\n limit: number,\n total: number\n ): Response<PaginatedResponse<T>> {\n const totalPages = Math.ceil(total / limit);\n const response: PaginatedResponse<T> = {\n success: true,\n data,\n meta: {\n page,\n limit,\n total,\n totalPages,\n },\n };\n return res.status(200).json(response);\n }\n\n static noContent(res: Response): Response {\n return res.status(204).send();\n }\n}\n\ndeclare global {\n namespace Express {\n interface Response {\n success<T>(data?: T, message?: string, statusCode?: number): Response;\n created<T>(data?: T, message?: string): Response;\n updated<T>(data?: T, message?: string): Response;\n deleted(message?: string): Response;\n error(error: string, statusCode?: number, code?: string, details?: Record<string, unknown>): Response;\n badRequest(error?: string, code?: string): Response;\n unauthorized(error?: string, code?: string): Response;\n forbidden(error?: string, code?: string): Response;\n notFound(error?: string, code?: string): Response;\n conflict(error?: string, code?: string): Response;\n validationError(error: string, details?: Record<string, unknown>): Response;\n internalError(error?: string): Response;\n paginated<T>(data: T[], page: number, limit: number, total: number): Response;\n }\n }\n}\n\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const proto = require('express').response;\n if (proto) {\n proto.success = function <T>(this: Response, data?: T, message?: string, statusCode: number = 200) {\n return ResponseHelper.success(this, data, message, statusCode);\n };\n\n proto.created = function <T>(this: Response, data?: T, message?: string) {\n return ResponseHelper.created(this, data, message);\n };\n\n proto.updated = function <T>(this: Response, data?: T, message?: string) {\n return ResponseHelper.updated(this, data, message);\n };\n\n proto.deleted = function (this: Response, message?: string) {\n return ResponseHelper.deleted(this, message);\n };\n\n proto.error = function (this: Response, error: string, statusCode: number = 400, code?: string, details?: Record<string, unknown>) {\n return ResponseHelper.error(this, error, statusCode, code, details);\n };\n\n proto.badRequest = function (this: Response, error?: string, code?: string) {\n return ResponseHelper.badRequest(this, error, code);\n };\n\n proto.unauthorized = function (this: Response, error?: string, code?: string) {\n return ResponseHelper.unauthorized(this, error, code);\n };\n\n proto.forbidden = function (this: Response, error?: string, code?: string) {\n return ResponseHelper.forbidden(this, error, code);\n };\n\n proto.notFound = function (this: Response, error?: string, code?: string) {\n return ResponseHelper.notFound(this, error, code);\n };\n\n proto.conflict = function (this: Response, error?: string, code?: string) {\n return ResponseHelper.conflict(this, error, code);\n };\n\n proto.validationError = function (this: Response, error: string, details?: Record<string, unknown>) {\n return ResponseHelper.validationError(this, error, details);\n };\n\n proto.internalError = function (this: Response, error?: string) {\n return ResponseHelper.internalError(this, error);\n };\n\n proto.paginated = function <T>(this: Response, data: T[], page: number, limit: number, total: number) {\n return ResponseHelper.paginated(this, data, page, limit, total);\n };\n }\n} catch {\n // express not available at runtime\n}\n\nexport const response = ResponseHelper;\nexport default ResponseHelper;\n"]}
@@ -1,4 +1,9 @@
1
- import { Response } from 'express';
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined") return require.apply(this, arguments);
5
+ throw Error('Dynamic require of "' + x + '" is not supported');
6
+ });
2
7
 
3
8
  // src/response/index.ts
4
9
  var ResponseHelper = class {
@@ -67,45 +72,51 @@ var ResponseHelper = class {
67
72
  return res.status(204).send();
68
73
  }
69
74
  };
70
- Response.prototype.success = function(data, message, statusCode = 200) {
71
- return ResponseHelper.success(this, data, message, statusCode);
72
- };
73
- Response.prototype.created = function(data, message) {
74
- return ResponseHelper.created(this, data, message);
75
- };
76
- Response.prototype.updated = function(data, message) {
77
- return ResponseHelper.updated(this, data, message);
78
- };
79
- Response.prototype.deleted = function(message) {
80
- return ResponseHelper.deleted(this, message);
81
- };
82
- Response.prototype.error = function(error, statusCode = 400, code, details) {
83
- return ResponseHelper.error(this, error, statusCode, code, details);
84
- };
85
- Response.prototype.badRequest = function(error, code) {
86
- return ResponseHelper.badRequest(this, error, code);
87
- };
88
- Response.prototype.unauthorized = function(error, code) {
89
- return ResponseHelper.unauthorized(this, error, code);
90
- };
91
- Response.prototype.forbidden = function(error, code) {
92
- return ResponseHelper.forbidden(this, error, code);
93
- };
94
- Response.prototype.notFound = function(error, code) {
95
- return ResponseHelper.notFound(this, error, code);
96
- };
97
- Response.prototype.conflict = function(error, code) {
98
- return ResponseHelper.conflict(this, error, code);
99
- };
100
- Response.prototype.validationError = function(error, details) {
101
- return ResponseHelper.validationError(this, error, details);
102
- };
103
- Response.prototype.internalError = function(error) {
104
- return ResponseHelper.internalError(this, error);
105
- };
106
- Response.prototype.paginated = function(data, page, limit, total) {
107
- return ResponseHelper.paginated(this, data, page, limit, total);
108
- };
75
+ try {
76
+ const proto = __require("express").response;
77
+ if (proto) {
78
+ proto.success = function(data, message, statusCode = 200) {
79
+ return ResponseHelper.success(this, data, message, statusCode);
80
+ };
81
+ proto.created = function(data, message) {
82
+ return ResponseHelper.created(this, data, message);
83
+ };
84
+ proto.updated = function(data, message) {
85
+ return ResponseHelper.updated(this, data, message);
86
+ };
87
+ proto.deleted = function(message) {
88
+ return ResponseHelper.deleted(this, message);
89
+ };
90
+ proto.error = function(error, statusCode = 400, code, details) {
91
+ return ResponseHelper.error(this, error, statusCode, code, details);
92
+ };
93
+ proto.badRequest = function(error, code) {
94
+ return ResponseHelper.badRequest(this, error, code);
95
+ };
96
+ proto.unauthorized = function(error, code) {
97
+ return ResponseHelper.unauthorized(this, error, code);
98
+ };
99
+ proto.forbidden = function(error, code) {
100
+ return ResponseHelper.forbidden(this, error, code);
101
+ };
102
+ proto.notFound = function(error, code) {
103
+ return ResponseHelper.notFound(this, error, code);
104
+ };
105
+ proto.conflict = function(error, code) {
106
+ return ResponseHelper.conflict(this, error, code);
107
+ };
108
+ proto.validationError = function(error, details) {
109
+ return ResponseHelper.validationError(this, error, details);
110
+ };
111
+ proto.internalError = function(error) {
112
+ return ResponseHelper.internalError(this, error);
113
+ };
114
+ proto.paginated = function(data, page, limit, total) {
115
+ return ResponseHelper.paginated(this, data, page, limit, total);
116
+ };
117
+ }
118
+ } catch {
119
+ }
109
120
  var response = ResponseHelper;
110
121
  var response_default = ResponseHelper;
111
122
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/response/index.ts"],"names":["response"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Response } from 'express';\n\nexport interface ApiResponse<T = unknown> {\n success: boolean;\n data?: T;\n error?: string;\n message?: string;\n meta?: {\n page?: number;\n limit?: number;\n total?: number;\n totalPages?: number;\n };\n}\n\nexport interface PaginatedResponse<T> extends ApiResponse<T> {\n meta: {\n page: number;\n limit: number;\n total: number;\n totalPages: number;\n };\n}\n\nexport interface ErrorResponse {\n success: false;\n error: string;\n code?: string;\n details?: Record<string, unknown>;\n}\n\nexport class ResponseHelper {\n static success<T>(res: Response, data?: T, message?: string, statusCode: number = 200): Response {\n const response: ApiResponse<T> = {\n success: true,\n data,\n message,\n };\n return res.status(statusCode).json(response);\n }\n\n static created<T>(res: Response, data?: T, message: string = 'Resource created'): Response {\n return this.success(res, data, message, 201);\n }\n\n static updated<T>(res: Response, data?: T, message: string = 'Resource updated'): Response {\n return this.success(res, data, message, 200);\n }\n\n static deleted(res: Response, message: string = 'Resource deleted'): Response {\n return this.success(res, null, message, 200);\n }\n\n static error(\n res: Response,\n error: string,\n statusCode: number = 400,\n code?: string,\n details?: Record<string, unknown>\n ): Response {\n const response: ErrorResponse = {\n success: false,\n error,\n code,\n ...(details && { details }),\n };\n return res.status(statusCode).json(response);\n }\n\n static badRequest(res: Response, error: string = 'Bad request', code?: string): Response {\n return this.error(res, error, 400, code);\n }\n\n static unauthorized(res: Response, error: string = 'Unauthorized', code?: string): Response {\n return this.error(res, error, 401, code);\n }\n\n static forbidden(res: Response, error: string = 'Forbidden', code?: string): Response {\n return this.error(res, error, 403, code);\n }\n\n static notFound(res: Response, error: string = 'Resource not found', code?: string): Response {\n return this.error(res, error, 404, code);\n }\n\n static conflict(res: Response, error: string = 'Conflict', code?: string): Response {\n return this.error(res, error, 409, code);\n }\n\n static validationError(res: Response, error: string, details?: Record<string, unknown>): Response {\n return this.error(res, error, 422, 'VALIDATION_ERROR', details);\n }\n\n static internalError(res: Response, error: string = 'Internal server error'): Response {\n return this.error(res, error, 500, 'INTERNAL_ERROR');\n }\n\n static paginated<T>(\n res: Response,\n data: T[],\n page: number,\n limit: number,\n total: number\n ): Response<PaginatedResponse<T>> {\n const totalPages = Math.ceil(total / limit);\n const response: PaginatedResponse<T> = {\n success: true,\n data,\n meta: {\n page,\n limit,\n total,\n totalPages,\n },\n };\n return res.status(200).json(response);\n }\n\n static noContent(res: Response): Response {\n return res.status(204).send();\n }\n}\n\ndeclare global {\n namespace Express {\n interface Response {\n success<T>(data?: T, message?: string, statusCode?: number): Response;\n created<T>(data?: T, message?: string): Response;\n updated<T>(data?: T, message?: string): Response;\n deleted(message?: string): Response;\n error(error: string, statusCode?: number, code?: string, details?: Record<string, unknown>): Response;\n badRequest(error?: string, code?: string): Response;\n unauthorized(error?: string, code?: string): Response;\n forbidden(error?: string, code?: string): Response;\n notFound(error?: string, code?: string): Response;\n conflict(error?: string, code?: string): Response;\n validationError(error: string, details?: Record<string, unknown>): Response;\n internalError(error?: string): Response;\n paginated<T>(data: T[], page: number, limit: number, total: number): Response;\n }\n }\n}\n\nResponse.prototype.success = function <T>(data?: T, message?: string, statusCode: number = 200) {\n return ResponseHelper.success(this, data, message, statusCode);\n};\n\nResponse.prototype.created = function <T>(data?: T, message?: string) {\n return ResponseHelper.created(this, data, message);\n};\n\nResponse.prototype.updated = function <T>(data?: T, message?: string) {\n return ResponseHelper.updated(this, data, message);\n};\n\nResponse.prototype.deleted = function (message?: string) {\n return ResponseHelper.deleted(this, message);\n};\n\nResponse.prototype.error = function (error: string, statusCode: number = 400, code?: string, details?: Record<string, unknown>) {\n return ResponseHelper.error(this, error, statusCode, code, details);\n};\n\nResponse.prototype.badRequest = function (error?: string, code?: string) {\n return ResponseHelper.badRequest(this, error, code);\n};\n\nResponse.prototype.unauthorized = function (error?: string, code?: string) {\n return ResponseHelper.unauthorized(this, error, code);\n};\n\nResponse.prototype.forbidden = function (error?: string, code?: string) {\n return ResponseHelper.forbidden(this, error, code);\n};\n\nResponse.prototype.notFound = function (error?: string, code?: string) {\n return ResponseHelper.notFound(this, error, code);\n};\n\nResponse.prototype.conflict = function (error?: string, code?: string) {\n return ResponseHelper.conflict(this, error, code);\n};\n\nResponse.prototype.validationError = function (error: string, details?: Record<string, unknown>) {\n return ResponseHelper.validationError(this, error, details);\n};\n\nResponse.prototype.internalError = function (error?: string) {\n return ResponseHelper.internalError(this, error);\n};\n\nResponse.prototype.paginated = function <T>(data: T[], page: number, limit: number, total: number) {\n return ResponseHelper.paginated(this, data, page, limit, total);\n};\n\nexport const response = ResponseHelper;\nexport default ResponseHelper;\n"]}
1
+ {"version":3,"sources":["../../src/response/index.ts"],"names":["response"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Response } from 'express';\n\nexport interface ApiResponse<T = unknown> {\n success: boolean;\n data?: T;\n error?: string;\n message?: string;\n meta?: {\n page?: number;\n limit?: number;\n total?: number;\n totalPages?: number;\n };\n}\n\nexport interface PaginatedResponse<T> extends Omit<ApiResponse<T[]>, 'data'> {\n data: T[];\n meta: {\n page: number;\n limit: number;\n total: number;\n totalPages: number;\n };\n}\n\nexport interface ErrorResponse {\n success: false;\n error: string;\n code?: string;\n details?: Record<string, unknown>;\n}\n\nexport class ResponseHelper {\n static success<T>(res: Response, data?: T, message?: string, statusCode: number = 200): Response {\n const response: ApiResponse<T> = {\n success: true,\n data,\n message,\n };\n return res.status(statusCode).json(response);\n }\n\n static created<T>(res: Response, data?: T, message: string = 'Resource created'): Response {\n return this.success(res, data, message, 201);\n }\n\n static updated<T>(res: Response, data?: T, message: string = 'Resource updated'): Response {\n return this.success(res, data, message, 200);\n }\n\n static deleted(res: Response, message: string = 'Resource deleted'): Response {\n return this.success(res, null, message, 200);\n }\n\n static error(\n res: Response,\n error: string,\n statusCode: number = 400,\n code?: string,\n details?: Record<string, unknown>\n ): Response {\n const response: ErrorResponse = {\n success: false,\n error,\n code,\n ...(details && { details }),\n };\n return res.status(statusCode).json(response);\n }\n\n static badRequest(res: Response, error: string = 'Bad request', code?: string): Response {\n return this.error(res, error, 400, code);\n }\n\n static unauthorized(res: Response, error: string = 'Unauthorized', code?: string): Response {\n return this.error(res, error, 401, code);\n }\n\n static forbidden(res: Response, error: string = 'Forbidden', code?: string): Response {\n return this.error(res, error, 403, code);\n }\n\n static notFound(res: Response, error: string = 'Resource not found', code?: string): Response {\n return this.error(res, error, 404, code);\n }\n\n static conflict(res: Response, error: string = 'Conflict', code?: string): Response {\n return this.error(res, error, 409, code);\n }\n\n static validationError(res: Response, error: string, details?: Record<string, unknown>): Response {\n return this.error(res, error, 422, 'VALIDATION_ERROR', details);\n }\n\n static internalError(res: Response, error: string = 'Internal server error'): Response {\n return this.error(res, error, 500, 'INTERNAL_ERROR');\n }\n\n static paginated<T>(\n res: Response,\n data: T[],\n page: number,\n limit: number,\n total: number\n ): Response<PaginatedResponse<T>> {\n const totalPages = Math.ceil(total / limit);\n const response: PaginatedResponse<T> = {\n success: true,\n data,\n meta: {\n page,\n limit,\n total,\n totalPages,\n },\n };\n return res.status(200).json(response);\n }\n\n static noContent(res: Response): Response {\n return res.status(204).send();\n }\n}\n\ndeclare global {\n namespace Express {\n interface Response {\n success<T>(data?: T, message?: string, statusCode?: number): Response;\n created<T>(data?: T, message?: string): Response;\n updated<T>(data?: T, message?: string): Response;\n deleted(message?: string): Response;\n error(error: string, statusCode?: number, code?: string, details?: Record<string, unknown>): Response;\n badRequest(error?: string, code?: string): Response;\n unauthorized(error?: string, code?: string): Response;\n forbidden(error?: string, code?: string): Response;\n notFound(error?: string, code?: string): Response;\n conflict(error?: string, code?: string): Response;\n validationError(error: string, details?: Record<string, unknown>): Response;\n internalError(error?: string): Response;\n paginated<T>(data: T[], page: number, limit: number, total: number): Response;\n }\n }\n}\n\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const proto = require('express').response;\n if (proto) {\n proto.success = function <T>(this: Response, data?: T, message?: string, statusCode: number = 200) {\n return ResponseHelper.success(this, data, message, statusCode);\n };\n\n proto.created = function <T>(this: Response, data?: T, message?: string) {\n return ResponseHelper.created(this, data, message);\n };\n\n proto.updated = function <T>(this: Response, data?: T, message?: string) {\n return ResponseHelper.updated(this, data, message);\n };\n\n proto.deleted = function (this: Response, message?: string) {\n return ResponseHelper.deleted(this, message);\n };\n\n proto.error = function (this: Response, error: string, statusCode: number = 400, code?: string, details?: Record<string, unknown>) {\n return ResponseHelper.error(this, error, statusCode, code, details);\n };\n\n proto.badRequest = function (this: Response, error?: string, code?: string) {\n return ResponseHelper.badRequest(this, error, code);\n };\n\n proto.unauthorized = function (this: Response, error?: string, code?: string) {\n return ResponseHelper.unauthorized(this, error, code);\n };\n\n proto.forbidden = function (this: Response, error?: string, code?: string) {\n return ResponseHelper.forbidden(this, error, code);\n };\n\n proto.notFound = function (this: Response, error?: string, code?: string) {\n return ResponseHelper.notFound(this, error, code);\n };\n\n proto.conflict = function (this: Response, error?: string, code?: string) {\n return ResponseHelper.conflict(this, error, code);\n };\n\n proto.validationError = function (this: Response, error: string, details?: Record<string, unknown>) {\n return ResponseHelper.validationError(this, error, details);\n };\n\n proto.internalError = function (this: Response, error?: string) {\n return ResponseHelper.internalError(this, error);\n };\n\n proto.paginated = function <T>(this: Response, data: T[], page: number, limit: number, total: number) {\n return ResponseHelper.paginated(this, data, page, limit, total);\n };\n }\n} catch {\n // express not available at runtime\n}\n\nexport const response = ResponseHelper;\nexport default ResponseHelper;\n"]}
@@ -0,0 +1,57 @@
1
+ export interface S3Config {
2
+ region?: string;
3
+ accessKeyId?: string;
4
+ secretAccessKey?: string;
5
+ bucket: string;
6
+ endpoint?: string;
7
+ forcePathStyle?: boolean;
8
+ }
9
+
10
+ export interface UploadOptions {
11
+ key?: string;
12
+ contentType?: string;
13
+ expiresIn?: number;
14
+ metadata?: Record<string, string>;
15
+ }
16
+
17
+ export interface UploadResult {
18
+ key: string;
19
+ url: string;
20
+ bucket: string;
21
+ contentType?: string;
22
+ size?: number;
23
+ }
24
+
25
+ export interface SignedUrlOptions {
26
+ expiresIn?: number;
27
+ }
28
+
29
+ export interface FileObject {
30
+ key: string;
31
+ lastModified?: Date;
32
+ size?: number;
33
+ contentType?: string;
34
+ }
35
+
36
+ export declare const upload: {
37
+ initialize: (config: S3Config) => void;
38
+ file: (file: Buffer | Uint8Array | string, options?: UploadOptions) => Promise<UploadResult>;
39
+ image: (file: Buffer | Uint8Array | string, filename: string, options?: UploadOptions) => Promise<UploadResult>;
40
+ video: (file: Buffer | Uint8Array | string, filename: string, options?: UploadOptions) => Promise<UploadResult>;
41
+ delete: (key: string) => Promise<void>;
42
+ getSignedUrl: (key: string, options?: SignedUrlOptions) => Promise<string>;
43
+ getPublicUrl: (key: string) => Promise<string>;
44
+ listFiles: (prefix?: string, maxKeys?: number) => Promise<FileObject[]>;
45
+ };
46
+
47
+ export declare class S3Service {
48
+ initialize(config: S3Config): void;
49
+ isInitialized(): boolean;
50
+ upload(file: Buffer | Uint8Array | string, options?: UploadOptions): Promise<UploadResult>;
51
+ uploadImage(file: Buffer | Uint8Array | string, filename: string, options?: UploadOptions): Promise<UploadResult>;
52
+ uploadVideo(file: Buffer | Uint8Array | string, filename: string, options?: UploadOptions): Promise<UploadResult>;
53
+ delete(key: string): Promise<void>;
54
+ getSignedUrl(key: string, options?: SignedUrlOptions): Promise<string>;
55
+ getPublicUrl(key: string): Promise<string>;
56
+ listFiles(prefix?: string, maxKeys?: number): Promise<FileObject[]>;
57
+ }