@misterhomer1992/miit-bot-payment 1.1.6 → 2.0.4

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 (248) hide show
  1. package/dist/config/ConfigurationManager.d.ts +64 -0
  2. package/dist/config/ConfigurationManager.d.ts.map +1 -0
  3. package/dist/config/ConfigurationManager.js +144 -0
  4. package/dist/config/ConfigurationManager.js.map +1 -0
  5. package/dist/config/defaults.d.ts +18 -0
  6. package/dist/config/defaults.d.ts.map +1 -0
  7. package/dist/config/defaults.js +26 -0
  8. package/dist/config/defaults.js.map +1 -0
  9. package/dist/config/environment.d.ts +38 -0
  10. package/dist/config/environment.d.ts.map +1 -0
  11. package/dist/config/environment.js +91 -0
  12. package/dist/config/environment.js.map +1 -0
  13. package/dist/config/index.d.ts +5 -0
  14. package/dist/config/index.d.ts.map +1 -0
  15. package/dist/config/index.js +18 -0
  16. package/dist/config/index.js.map +1 -0
  17. package/dist/config/types.d.ts +53 -0
  18. package/dist/config/types.d.ts.map +1 -0
  19. package/dist/config/types.js +3 -0
  20. package/dist/config/types.js.map +1 -0
  21. package/dist/index.d.ts +21 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +23 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/modules/cache/InMemoryCache.d.ts +17 -0
  26. package/dist/modules/cache/InMemoryCache.d.ts.map +1 -0
  27. package/dist/modules/cache/InMemoryCache.js +77 -0
  28. package/dist/modules/cache/InMemoryCache.js.map +1 -0
  29. package/dist/modules/cache/index.d.ts +3 -0
  30. package/dist/modules/cache/index.d.ts.map +1 -0
  31. package/dist/modules/cache/index.js +19 -0
  32. package/dist/modules/cache/index.js.map +1 -0
  33. package/dist/modules/cache/types.d.ts +52 -0
  34. package/dist/modules/cache/types.d.ts.map +1 -0
  35. package/dist/modules/cache/types.js +3 -0
  36. package/dist/modules/cache/types.js.map +1 -0
  37. package/dist/modules/errors/index.d.ts +2 -0
  38. package/dist/modules/errors/index.d.ts.map +1 -0
  39. package/dist/modules/errors/index.js +19 -0
  40. package/dist/modules/errors/index.js.map +1 -0
  41. package/dist/modules/errors/types.d.ts +112 -0
  42. package/dist/modules/errors/types.d.ts.map +1 -0
  43. package/dist/modules/errors/types.js +174 -0
  44. package/dist/modules/errors/types.js.map +1 -0
  45. package/dist/modules/payments/api.d.ts +63 -1
  46. package/dist/modules/payments/api.d.ts.map +1 -1
  47. package/dist/modules/payments/api.js +103 -1
  48. package/dist/modules/payments/api.js.map +1 -1
  49. package/dist/modules/payments/const.d.ts.map +1 -1
  50. package/dist/modules/payments/const.js +1 -0
  51. package/dist/modules/payments/const.js.map +1 -1
  52. package/dist/modules/payments/index.d.ts +8 -0
  53. package/dist/modules/payments/index.d.ts.map +1 -1
  54. package/dist/modules/payments/index.js +8 -0
  55. package/dist/modules/payments/index.js.map +1 -1
  56. package/dist/modules/payments/service.d.ts +42 -2
  57. package/dist/modules/payments/service.d.ts.map +1 -1
  58. package/dist/modules/payments/service.js +132 -3
  59. package/dist/modules/payments/service.js.map +1 -1
  60. package/dist/modules/payments/subscription-check-webhook.handler.d.ts +85 -0
  61. package/dist/modules/payments/subscription-check-webhook.handler.d.ts.map +1 -0
  62. package/dist/modules/payments/subscription-check-webhook.handler.js +155 -0
  63. package/dist/modules/payments/subscription-check-webhook.handler.js.map +1 -0
  64. package/dist/modules/payments/subscription-check-webhook.service.d.ts +59 -0
  65. package/dist/modules/payments/subscription-check-webhook.service.d.ts.map +1 -0
  66. package/dist/modules/payments/subscription-check-webhook.service.js +330 -0
  67. package/dist/modules/payments/subscription-check-webhook.service.js.map +1 -0
  68. package/dist/modules/payments/subscription-check-webhook.types.d.ts +25 -0
  69. package/dist/modules/payments/subscription-check-webhook.types.d.ts.map +1 -0
  70. package/dist/modules/payments/subscription-check-webhook.types.js +3 -0
  71. package/dist/modules/payments/subscription-check-webhook.types.js.map +1 -0
  72. package/dist/modules/payments/types.d.ts +69 -2
  73. package/dist/modules/payments/types.d.ts.map +1 -1
  74. package/dist/modules/payments/utils.d.ts +151 -5
  75. package/dist/modules/payments/utils.d.ts.map +1 -1
  76. package/dist/modules/payments/utils.js +253 -9
  77. package/dist/modules/payments/utils.js.map +1 -1
  78. package/dist/modules/payments/wayforpay.service.d.ts +39 -0
  79. package/dist/modules/payments/wayforpay.service.d.ts.map +1 -0
  80. package/dist/modules/payments/wayforpay.service.js +217 -0
  81. package/dist/modules/payments/wayforpay.service.js.map +1 -0
  82. package/dist/modules/payments/wayforpay.types.d.ts +115 -0
  83. package/dist/modules/payments/wayforpay.types.d.ts.map +1 -0
  84. package/dist/modules/payments/wayforpay.types.js +3 -0
  85. package/dist/modules/payments/wayforpay.types.js.map +1 -0
  86. package/dist/modules/payments/webhook.handler.d.ts +98 -0
  87. package/dist/modules/payments/webhook.handler.d.ts.map +1 -0
  88. package/dist/modules/payments/webhook.handler.js +153 -0
  89. package/dist/modules/payments/webhook.handler.js.map +1 -0
  90. package/dist/modules/payments/webhook.service.d.ts +99 -0
  91. package/dist/modules/payments/webhook.service.d.ts.map +1 -0
  92. package/dist/modules/payments/webhook.service.js +672 -0
  93. package/dist/modules/payments/webhook.service.js.map +1 -0
  94. package/dist/modules/payments/webhook.types.d.ts +35 -0
  95. package/dist/modules/payments/webhook.types.d.ts.map +1 -0
  96. package/dist/modules/payments/webhook.types.js +3 -0
  97. package/dist/modules/payments/webhook.types.js.map +1 -0
  98. package/dist/modules/subscription/change.service.d.ts +80 -0
  99. package/dist/modules/subscription/change.service.d.ts.map +1 -0
  100. package/dist/modules/subscription/change.service.js +226 -0
  101. package/dist/modules/subscription/change.service.js.map +1 -0
  102. package/dist/modules/subscription/index.d.ts +2 -0
  103. package/dist/modules/subscription/index.d.ts.map +1 -1
  104. package/dist/modules/subscription/index.js +2 -0
  105. package/dist/modules/subscription/index.js.map +1 -1
  106. package/dist/modules/subscription/service.d.ts +8 -1
  107. package/dist/modules/subscription/service.d.ts.map +1 -1
  108. package/dist/modules/subscription/service.js +59 -2
  109. package/dist/modules/subscription/service.js.map +1 -1
  110. package/dist/modules/subscription/status-check.handler.d.ts +117 -0
  111. package/dist/modules/subscription/status-check.handler.d.ts.map +1 -0
  112. package/dist/modules/subscription/status-check.handler.js +164 -0
  113. package/dist/modules/subscription/status-check.handler.js.map +1 -0
  114. package/dist/modules/subscription/types.d.ts +37 -1
  115. package/dist/modules/subscription/types.d.ts.map +1 -1
  116. package/dist/modules/subscriptionPlan/const.d.ts +5 -0
  117. package/dist/modules/subscriptionPlan/const.d.ts.map +1 -0
  118. package/dist/modules/subscriptionPlan/const.js +106 -0
  119. package/dist/modules/subscriptionPlan/const.js.map +1 -0
  120. package/dist/modules/subscriptionPlan/index.d.ts +5 -0
  121. package/dist/modules/subscriptionPlan/index.d.ts.map +1 -0
  122. package/dist/modules/subscriptionPlan/index.js +21 -0
  123. package/dist/modules/subscriptionPlan/index.js.map +1 -0
  124. package/dist/modules/subscriptionPlan/repository.d.ts +22 -0
  125. package/dist/modules/subscriptionPlan/repository.d.ts.map +1 -0
  126. package/dist/modules/subscriptionPlan/repository.js +95 -0
  127. package/dist/modules/subscriptionPlan/repository.js.map +1 -0
  128. package/dist/modules/subscriptionPlan/service.d.ts +21 -0
  129. package/dist/modules/subscriptionPlan/service.d.ts.map +1 -0
  130. package/dist/modules/subscriptionPlan/service.js +128 -0
  131. package/dist/modules/subscriptionPlan/service.js.map +1 -0
  132. package/dist/modules/subscriptionPlan/types.d.ts +40 -0
  133. package/dist/modules/subscriptionPlan/types.d.ts.map +1 -0
  134. package/dist/modules/subscriptionPlan/types.js +3 -0
  135. package/dist/modules/subscriptionPlan/types.js.map +1 -0
  136. package/dist/modules/token/const.d.ts +7 -0
  137. package/dist/modules/token/const.d.ts.map +1 -0
  138. package/dist/modules/token/const.js +66 -0
  139. package/dist/modules/token/const.js.map +1 -0
  140. package/dist/modules/token/index.d.ts +4 -0
  141. package/dist/modules/token/index.d.ts.map +1 -0
  142. package/dist/modules/token/index.js +20 -0
  143. package/dist/modules/token/index.js.map +1 -0
  144. package/dist/modules/token/service.d.ts +46 -0
  145. package/dist/modules/token/service.d.ts.map +1 -0
  146. package/dist/modules/token/service.js +249 -0
  147. package/dist/modules/token/service.js.map +1 -0
  148. package/dist/modules/token/types.d.ts +109 -0
  149. package/dist/modules/token/types.d.ts.map +1 -0
  150. package/dist/modules/token/types.js +3 -0
  151. package/dist/modules/token/types.js.map +1 -0
  152. package/dist/modules/tokenPack/const.d.ts +4 -0
  153. package/dist/modules/tokenPack/const.d.ts.map +1 -0
  154. package/dist/modules/tokenPack/const.js +10 -0
  155. package/dist/modules/tokenPack/const.js.map +1 -0
  156. package/dist/modules/tokenPack/index.d.ts +5 -0
  157. package/dist/modules/tokenPack/index.d.ts.map +1 -0
  158. package/dist/modules/tokenPack/index.js +21 -0
  159. package/dist/modules/tokenPack/index.js.map +1 -0
  160. package/dist/modules/tokenPack/repository.d.ts +32 -0
  161. package/dist/modules/tokenPack/repository.d.ts.map +1 -0
  162. package/dist/modules/tokenPack/repository.js +103 -0
  163. package/dist/modules/tokenPack/repository.js.map +1 -0
  164. package/dist/modules/tokenPack/service.d.ts +28 -0
  165. package/dist/modules/tokenPack/service.d.ts.map +1 -0
  166. package/dist/modules/tokenPack/service.js +106 -0
  167. package/dist/modules/tokenPack/service.js.map +1 -0
  168. package/dist/modules/tokenPack/types.d.ts +124 -0
  169. package/dist/modules/tokenPack/types.d.ts.map +1 -0
  170. package/dist/modules/tokenPack/types.js +3 -0
  171. package/dist/modules/tokenPack/types.js.map +1 -0
  172. package/package.json +9 -5
  173. package/src/config/ConfigurationManager.ts +159 -0
  174. package/src/config/defaults.ts +27 -0
  175. package/src/config/environment.ts +94 -0
  176. package/src/config/index.ts +22 -0
  177. package/src/config/types.ts +56 -0
  178. package/src/index.ts +29 -0
  179. package/src/modules/cache/InMemoryCache.ts +98 -0
  180. package/src/modules/cache/index.ts +2 -0
  181. package/src/modules/cache/types.ts +60 -0
  182. package/src/modules/cancellableAPI/utils.ts +60 -0
  183. package/src/modules/errors/index.ts +16 -0
  184. package/src/modules/errors/types.ts +201 -0
  185. package/src/modules/invoice/const.ts +7 -0
  186. package/src/modules/invoice/index.ts +4 -0
  187. package/src/modules/invoice/repository.ts +52 -0
  188. package/src/modules/invoice/service.ts +44 -0
  189. package/src/modules/invoice/types.ts +47 -0
  190. package/src/modules/logger/types.ts +8 -0
  191. package/src/modules/network/utils.ts +24 -0
  192. package/src/modules/payments/api.ts +289 -0
  193. package/src/modules/payments/const.ts +11 -0
  194. package/src/modules/payments/index.ts +14 -0
  195. package/src/modules/payments/repository.ts +125 -0
  196. package/src/modules/payments/service.test.ts +400 -0
  197. package/src/modules/payments/service.ts +365 -0
  198. package/src/modules/payments/subscription-check-webhook.handler.integration.test.ts +935 -0
  199. package/src/modules/payments/subscription-check-webhook.handler.ts +211 -0
  200. package/src/modules/payments/subscription-check-webhook.service.ts +398 -0
  201. package/src/modules/payments/subscription-check-webhook.types.ts +29 -0
  202. package/src/modules/payments/types.ts +193 -0
  203. package/src/modules/payments/utils.ts +428 -0
  204. package/src/modules/payments/wayforpay.service.test.ts +375 -0
  205. package/src/modules/payments/wayforpay.service.ts +284 -0
  206. package/src/modules/payments/wayforpay.types.ts +138 -0
  207. package/src/modules/payments/webhook.handler.integration.test.ts +975 -0
  208. package/src/modules/payments/webhook.handler.ts +219 -0
  209. package/src/modules/payments/webhook.service.ts +812 -0
  210. package/src/modules/payments/webhook.types.ts +38 -0
  211. package/src/modules/subscription/change.service.ts +317 -0
  212. package/src/modules/subscription/const.ts +9 -0
  213. package/src/modules/subscription/index.ts +5 -0
  214. package/src/modules/subscription/repository.ts +277 -0
  215. package/src/modules/subscription/service.test.ts +665 -0
  216. package/src/modules/subscription/service.ts +328 -0
  217. package/src/modules/subscription/status-check.handler.ts +254 -0
  218. package/src/modules/subscription/types.ts +267 -0
  219. package/src/modules/subscription/utils.ts +5 -0
  220. package/src/modules/subscriptionPlan/const.ts +106 -0
  221. package/src/modules/subscriptionPlan/index.ts +4 -0
  222. package/src/modules/subscriptionPlan/repository.ts +129 -0
  223. package/src/modules/subscriptionPlan/service.test.ts +401 -0
  224. package/src/modules/subscriptionPlan/service.ts +148 -0
  225. package/src/modules/subscriptionPlan/types.ts +67 -0
  226. package/src/modules/token/const.ts +64 -0
  227. package/src/modules/token/index.ts +3 -0
  228. package/src/modules/token/service.test.ts +499 -0
  229. package/src/modules/token/service.ts +297 -0
  230. package/src/modules/token/types.ts +124 -0
  231. package/src/modules/tokenPack/const.ts +9 -0
  232. package/src/modules/tokenPack/index.ts +4 -0
  233. package/src/modules/tokenPack/repository.ts +144 -0
  234. package/src/modules/tokenPack/service.ts +119 -0
  235. package/src/modules/tokenPack/types.ts +131 -0
  236. package/src/modules/user/index.ts +3 -0
  237. package/src/modules/user/types.ts +143 -0
  238. package/src/modules/user/userRepository.ts +64 -0
  239. package/src/modules/user/userService.ts +68 -0
  240. package/src/types/extend-express.d.ts +16 -0
  241. package/src/types/function.ts +5 -0
  242. package/src/types/utilities.ts +22 -0
  243. package/src/utils.ts +53 -0
  244. package/tsconfig.json +29 -0
  245. package/dist/modules/subscription/subscriptionPlan.d.ts +0 -4
  246. package/dist/modules/subscription/subscriptionPlan.d.ts.map +0 -1
  247. package/dist/modules/subscription/subscriptionPlan.js +0 -67
  248. package/dist/modules/subscription/subscriptionPlan.js.map +0 -1
@@ -0,0 +1,117 @@
1
+ import { Logger } from '../logger/types';
2
+ import { ISubscriptionService, SubscriptionEntity } from './types';
3
+ import { ITokenService, TokenBalance } from '../token/types';
4
+ /**
5
+ * Request object interface for status check handling.
6
+ * Compatible with Express.js and similar frameworks.
7
+ */
8
+ interface StatusCheckRequest {
9
+ body: unknown;
10
+ }
11
+ /**
12
+ * Response object interface for status check handling.
13
+ * Compatible with Express.js and similar frameworks.
14
+ */
15
+ interface StatusCheckResponse {
16
+ status(code: number): StatusCheckResponse;
17
+ json(data: unknown): void;
18
+ }
19
+ /**
20
+ * Configuration options for the status check handler.
21
+ */
22
+ interface StatusCheckHandlerConfig {
23
+ logger: Logger;
24
+ subscriptionService?: ISubscriptionService;
25
+ tokenService?: ITokenService;
26
+ }
27
+ /**
28
+ * Request body for subscription status check.
29
+ */
30
+ interface StatusCheckRequestBody {
31
+ userId: string;
32
+ platform: string;
33
+ }
34
+ /**
35
+ * Response payload for subscription status check.
36
+ */
37
+ interface SubscriptionStatusResponse {
38
+ /** Whether the user has an active subscription */
39
+ hasActiveSubscription: boolean;
40
+ /** Current subscription details, null if no subscription exists */
41
+ subscription: SubscriptionEntity | null;
42
+ /** User's token balance */
43
+ tokenBalance: TokenBalance;
44
+ }
45
+ /**
46
+ * SubscriptionStatusCheckHandler provides HTTP request handling for checking
47
+ * a user's subscription status. It returns subscription details, token balance,
48
+ * and active status.
49
+ *
50
+ * Usage with Express:
51
+ * ```typescript
52
+ * const handler = new SubscriptionStatusCheckHandler({ logger });
53
+ * app.post('/api/subscription/status', (req, res) => handler.handleRequest(req, res));
54
+ * ```
55
+ *
56
+ * Usage with Cloud Functions:
57
+ * ```typescript
58
+ * const handler = new SubscriptionStatusCheckHandler({ logger });
59
+ * export const statusCheck = (req, res) => handler.handleRequest(req, res);
60
+ * ```
61
+ */
62
+ export declare class SubscriptionStatusCheckHandler {
63
+ private readonly logger;
64
+ private readonly subscriptionService;
65
+ private readonly tokenService;
66
+ constructor(config: StatusCheckHandlerConfig);
67
+ /**
68
+ * Handles an incoming HTTP request to check subscription status.
69
+ * Validates the request body, retrieves subscription and token data,
70
+ * and returns the appropriate response.
71
+ *
72
+ * @param req - The HTTP request object
73
+ * @param res - The HTTP response object
74
+ */
75
+ handleRequest(req: StatusCheckRequest, res: StatusCheckResponse): Promise<void>;
76
+ /**
77
+ * Checks subscription status directly without HTTP request parsing.
78
+ * Useful for internal calls or testing.
79
+ *
80
+ * @param params - User identification parameters
81
+ * @returns Subscription status response
82
+ */
83
+ checkStatus(params: {
84
+ userId: string;
85
+ platform: string;
86
+ }): Promise<SubscriptionStatusResponse>;
87
+ /**
88
+ * Parses and validates the status check request body.
89
+ */
90
+ private parseRequestBody;
91
+ }
92
+ /**
93
+ * Creates a subscription status check handler function for use with serverless platforms.
94
+ * Returns a function that can be directly used as a Cloud Function or Lambda handler.
95
+ *
96
+ * @param config - Configuration options for the status check handler
97
+ * @returns An async function that handles status check requests
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * // Firebase Cloud Functions
102
+ * import * as functions from 'firebase-functions';
103
+ * import { createSubscriptionStatusCheckHandler } from 'miit-bot-payment';
104
+ *
105
+ * const logger = { info: console.log, warning: console.warn, error: console.error };
106
+ * export const subscriptionStatus = functions.https.onRequest(
107
+ * createSubscriptionStatusCheckHandler({ logger })
108
+ * );
109
+ * ```
110
+ */
111
+ export declare function createSubscriptionStatusCheckHandler(config: StatusCheckHandlerConfig): (req: StatusCheckRequest, res: StatusCheckResponse) => Promise<void>;
112
+ /**
113
+ * Type export for the status check handler function signature.
114
+ */
115
+ export type StatusCheckHandlerFunction = (req: StatusCheckRequest, res: StatusCheckResponse) => Promise<void>;
116
+ export type { StatusCheckRequest, StatusCheckResponse, StatusCheckHandlerConfig, StatusCheckRequestBody, SubscriptionStatusResponse, };
117
+ //# sourceMappingURL=status-check.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-check.handler.d.ts","sourceRoot":"","sources":["../../../src/modules/subscription/status-check.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7D;;;GAGG;AACH,UAAU,kBAAkB;IACxB,IAAI,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,UAAU,mBAAmB;IACzB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,UAAU,wBAAwB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;IAC3C,YAAY,CAAC,EAAE,aAAa,CAAC;CAChC;AAED;;GAEG;AACH,UAAU,sBAAsB;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,0BAA0B;IAChC,kDAAkD;IAClD,qBAAqB,EAAE,OAAO,CAAC;IAC/B,mEAAmE;IACnE,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,2BAA2B;IAC3B,YAAY,EAAE,YAAY,CAAC;CAC9B;AAWD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,8BAA8B;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuB;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;gBAEjC,MAAM,EAAE,wBAAwB;IAM5C;;;;;;;OAOG;IACU,aAAa,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuD5F;;;;;;OAMG;IACU,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAmB3G;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAiC3B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oCAAoC,CAChD,MAAM,EAAE,wBAAwB,GACjC,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAGtE;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9G,YAAY,EACR,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,GAC7B,CAAC"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SubscriptionStatusCheckHandler = void 0;
4
+ exports.createSubscriptionStatusCheckHandler = createSubscriptionStatusCheckHandler;
5
+ const service_1 = require("./service");
6
+ const service_2 = require("../token/service");
7
+ /**
8
+ * SubscriptionStatusCheckHandler provides HTTP request handling for checking
9
+ * a user's subscription status. It returns subscription details, token balance,
10
+ * and active status.
11
+ *
12
+ * Usage with Express:
13
+ * ```typescript
14
+ * const handler = new SubscriptionStatusCheckHandler({ logger });
15
+ * app.post('/api/subscription/status', (req, res) => handler.handleRequest(req, res));
16
+ * ```
17
+ *
18
+ * Usage with Cloud Functions:
19
+ * ```typescript
20
+ * const handler = new SubscriptionStatusCheckHandler({ logger });
21
+ * export const statusCheck = (req, res) => handler.handleRequest(req, res);
22
+ * ```
23
+ */
24
+ class SubscriptionStatusCheckHandler {
25
+ constructor(config) {
26
+ this.logger = config.logger;
27
+ this.subscriptionService = config.subscriptionService || new service_1.SubscriptionService({ logger: config.logger });
28
+ this.tokenService = config.tokenService || new service_2.TokenService({ logger: config.logger });
29
+ }
30
+ /**
31
+ * Handles an incoming HTTP request to check subscription status.
32
+ * Validates the request body, retrieves subscription and token data,
33
+ * and returns the appropriate response.
34
+ *
35
+ * @param req - The HTTP request object
36
+ * @param res - The HTTP response object
37
+ */
38
+ async handleRequest(req, res) {
39
+ this.logger.info({
40
+ message: 'Received subscription status check request',
41
+ payload: {},
42
+ });
43
+ // Parse and validate the request body
44
+ const parseResult = this.parseRequestBody(req.body);
45
+ if (!parseResult.success || !parseResult.data) {
46
+ this.logger.warning({
47
+ message: 'Invalid status check request body',
48
+ payload: { error: parseResult.error },
49
+ });
50
+ res.status(400).json({
51
+ error: parseResult.error || 'Invalid request body',
52
+ });
53
+ return;
54
+ }
55
+ const { userId, platform } = parseResult.data;
56
+ try {
57
+ // Get subscription status
58
+ const statusResult = await this.checkStatus({ userId, platform });
59
+ this.logger.info({
60
+ message: 'Subscription status check completed',
61
+ payload: {
62
+ userId,
63
+ platform,
64
+ hasActiveSubscription: statusResult.hasActiveSubscription,
65
+ subscriptionStatus: statusResult.subscription?.status || null,
66
+ tokenBalance: statusResult.tokenBalance.available,
67
+ },
68
+ });
69
+ res.status(200).json(statusResult);
70
+ }
71
+ catch (error) {
72
+ this.logger.error({
73
+ message: 'Error checking subscription status',
74
+ payload: {
75
+ userId,
76
+ platform,
77
+ error: JSON.stringify(error),
78
+ },
79
+ });
80
+ res.status(500).json({
81
+ error: 'Internal server error while checking subscription status',
82
+ });
83
+ }
84
+ }
85
+ /**
86
+ * Checks subscription status directly without HTTP request parsing.
87
+ * Useful for internal calls or testing.
88
+ *
89
+ * @param params - User identification parameters
90
+ * @returns Subscription status response
91
+ */
92
+ async checkStatus(params) {
93
+ const { userId, platform } = params;
94
+ // Fetch subscription and token balance in parallel
95
+ const [subscription, tokenBalance] = await Promise.all([
96
+ this.subscriptionService.getByUser({ userId, platform }),
97
+ this.tokenService.getBalance({ userId, platform }),
98
+ ]);
99
+ // Determine if subscription is active
100
+ const hasActiveSubscription = subscription?.status === 'active';
101
+ return {
102
+ hasActiveSubscription,
103
+ subscription,
104
+ tokenBalance,
105
+ };
106
+ }
107
+ /**
108
+ * Parses and validates the status check request body.
109
+ */
110
+ parseRequestBody(body) {
111
+ if (!body || typeof body !== 'object') {
112
+ return {
113
+ success: false,
114
+ error: 'Request body must be a JSON object',
115
+ };
116
+ }
117
+ const data = body;
118
+ // Validate required fields
119
+ if (!data.userId || typeof data.userId !== 'string') {
120
+ return {
121
+ success: false,
122
+ error: 'Missing or invalid required field: userId',
123
+ };
124
+ }
125
+ if (!data.platform || typeof data.platform !== 'string') {
126
+ return {
127
+ success: false,
128
+ error: 'Missing or invalid required field: platform',
129
+ };
130
+ }
131
+ return {
132
+ success: true,
133
+ data: {
134
+ userId: data.userId,
135
+ platform: data.platform,
136
+ },
137
+ };
138
+ }
139
+ }
140
+ exports.SubscriptionStatusCheckHandler = SubscriptionStatusCheckHandler;
141
+ /**
142
+ * Creates a subscription status check handler function for use with serverless platforms.
143
+ * Returns a function that can be directly used as a Cloud Function or Lambda handler.
144
+ *
145
+ * @param config - Configuration options for the status check handler
146
+ * @returns An async function that handles status check requests
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * // Firebase Cloud Functions
151
+ * import * as functions from 'firebase-functions';
152
+ * import { createSubscriptionStatusCheckHandler } from 'miit-bot-payment';
153
+ *
154
+ * const logger = { info: console.log, warning: console.warn, error: console.error };
155
+ * export const subscriptionStatus = functions.https.onRequest(
156
+ * createSubscriptionStatusCheckHandler({ logger })
157
+ * );
158
+ * ```
159
+ */
160
+ function createSubscriptionStatusCheckHandler(config) {
161
+ const handler = new SubscriptionStatusCheckHandler(config);
162
+ return (req, res) => handler.handleRequest(req, res);
163
+ }
164
+ //# sourceMappingURL=status-check.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-check.handler.js","sourceRoot":"","sources":["../../../src/modules/subscription/status-check.handler.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,18 @@
1
1
  import { NestedPathsAccess } from '../../types/utilities';
2
+ import { SubscriptionPlanEntity } from '../subscriptionPlan/types';
3
+ import { PaymentEntity } from '../payments/types';
4
+ type UpgradePreview = {
5
+ currentPlan: SubscriptionPlanEntity;
6
+ newPlan: SubscriptionPlanEntity;
7
+ remainingDays: number;
8
+ remainingValue: number;
9
+ upgradeCost: number;
10
+ currency: 'UAH' | 'USD';
11
+ };
12
+ type UpgradeResult = {
13
+ payment: PaymentEntity;
14
+ paymentUrl: string;
15
+ };
2
16
  type SubscriptionEntity = {
3
17
  /** Auto-generated unique ID (document ID) */
4
18
  id: string;
@@ -195,6 +209,28 @@ interface ISubscriptionService {
195
209
  * @param params - Cancellation parameters
196
210
  */
197
211
  cancelSubscription(params: Pick<SubscriptionEntity, 'id'>): Promise<void>;
212
+ /**
213
+ * Renews a subscription for a user by updating the expiration date.
214
+ * @param params - Renewal parameters
215
+ */
216
+ renewSubscription(params: Pick<SubscriptionEntity, 'userId' | 'platform' | 'expiresAt'>): Promise<void>;
217
+ /**
218
+ * Retrieves all subscriptions that have expired past the grace period.
219
+ * Only returns subscriptions that should be deactivated.
220
+ * @returns Promise resolving to array of expired SubscriptionEntity
221
+ */
222
+ getExpiredSubscriptions(): Promise<SubscriptionEntity[]>;
223
+ /**
224
+ * Retrieves all subscriptions that have had failed renewal attempts.
225
+ * These are cancelled subscriptions that expired and need deactivation.
226
+ * @returns Promise resolving to array of SubscriptionEntity with failed renewals
227
+ */
228
+ getFailedRenewals(): Promise<SubscriptionEntity[]>;
229
+ /**
230
+ * Deactivates a subscription by ID (alias for deactivateSubscription).
231
+ * @param params - Deactivation parameters
232
+ */
233
+ deactivate({ id }: Pick<SubscriptionEntity, 'id'>): Promise<void>;
198
234
  }
199
235
  interface ISubscriptionCapacity {
200
236
  geminiTextCompletionTokens: number;
@@ -204,5 +240,5 @@ interface ISubscriptionCapacity {
204
240
  openaiImageVisionTokens: number;
205
241
  openaiTextTranscriptionMinutes: number;
206
242
  }
207
- export type { SubscriptionEntity, SubscriptionPlan, SubscriptionFieldPath, ISubscriptionRepository, ISubscriptionService, ISubscriptionCapacity, };
243
+ export type { SubscriptionEntity, SubscriptionPlan, SubscriptionFieldPath, ISubscriptionRepository, ISubscriptionService, ISubscriptionCapacity, UpgradePreview, UpgradeResult, };
208
244
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/subscription/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/subscription/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,KAAK,cAAc,GAAG;IAClB,WAAW,EAAE,sBAAsB,CAAC;IACpC,OAAO,EAAE,sBAAsB,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;CAC3B,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACtB,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,QAAQ,EAAE,WAAW,GAAG,UAAU,CAAC;CACtC,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;IACxB,QAAQ,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,qBAAqB,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;AAEnE;;;GAGG;AACH,UAAU,uBAAuB;IAC7B;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;KAC1E,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAEvC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEhC;;;OAGG;IACH,oBAAoB,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/F;;;OAGG;IACH,6BAA6B,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE/D;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjF;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvF;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExG;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;KACzE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAElC;;;OAGG;IACH,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E;AAED;;;GAGG;AACH,UAAU,oBAAoB;IAC1B;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;KAC1E,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAEvC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEhC;;;OAGG;IACH,oBAAoB,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/F;;;OAGG;IACH,6BAA6B,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE/D;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjF;;;;OAIG;IACH,iCAAiC,CAAC,MAAM,EAAE;QACtC,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,KAAK,MAAM,CAAC;QAC9D,gBAAgB,EAAE,gBAAgB,CAAC;KACtC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpB;;;OAGG;IACH,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvF;;OAEG;IACH,oCAAoC,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEtE;;;OAGG;IACH,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExG;;;;OAIG;IACH,uBAAuB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEzD;;;;OAIG;IACH,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEnD;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,UAAU,qBAAqB;IAC3B,0BAA0B,EAAE,MAAM,CAAC;IACnC,0BAA0B,EAAE,MAAM,CAAC;IAEnC,0BAA0B,EAAE,MAAM,CAAC;IACnC,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,8BAA8B,EAAE,MAAM,CAAC;CAC1C;AAED,YAAY,EACR,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,aAAa,GAChB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { SubscriptionPlanEntity } from './types';
2
+ export declare const SUBSCRIPTION_PLAN_COLLECTION = "subscription_plans";
3
+ export declare const CACHE_TTL_MS: number;
4
+ export declare const DEFAULT_SUBSCRIPTION_PLANS: Omit<SubscriptionPlanEntity, 'createdAt' | 'updatedAt'>[];
5
+ //# sourceMappingURL=const.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEjD,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AAEjE,eAAO,MAAM,YAAY,QAAsB,CAAC;AAEhD,eAAO,MAAM,0BAA0B,EAAE,IAAI,CAAC,sBAAsB,EAAE,WAAW,GAAG,WAAW,CAAC,EAmG/F,CAAC"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_SUBSCRIPTION_PLANS = exports.CACHE_TTL_MS = exports.SUBSCRIPTION_PLAN_COLLECTION = void 0;
4
+ exports.SUBSCRIPTION_PLAN_COLLECTION = 'subscription_plans';
5
+ exports.CACHE_TTL_MS = 20 * 60 * 60 * 1000; // 20 hours in milliseconds
6
+ exports.DEFAULT_SUBSCRIPTION_PLANS = [
7
+ // UAH Plans
8
+ {
9
+ id: 'basic-monthly',
10
+ titleCode: 'subscription.plan.basic.title',
11
+ descriptionCode: 'subscription.plan.basic.description',
12
+ amount: 99,
13
+ currency: 'UAH',
14
+ features: {
15
+ messages: 1000,
16
+ images: 50,
17
+ voice: 100,
18
+ },
19
+ regularMode: 'monthly',
20
+ count: 1,
21
+ credits: 1000,
22
+ isActive: true,
23
+ },
24
+ {
25
+ id: 'pro-monthly',
26
+ titleCode: 'subscription.plan.pro.title',
27
+ descriptionCode: 'subscription.plan.pro.description',
28
+ amount: 199,
29
+ currency: 'UAH',
30
+ features: {
31
+ messages: 5000,
32
+ images: 200,
33
+ voice: 500,
34
+ },
35
+ regularMode: 'monthly',
36
+ count: 1,
37
+ credits: 5000,
38
+ isActive: true,
39
+ },
40
+ {
41
+ id: 'premium-monthly',
42
+ titleCode: 'subscription.plan.premium.title',
43
+ descriptionCode: 'subscription.plan.premium.description',
44
+ amount: 399,
45
+ currency: 'UAH',
46
+ features: {
47
+ messages: 15000,
48
+ images: 500,
49
+ voice: 1000,
50
+ },
51
+ regularMode: 'monthly',
52
+ count: 1,
53
+ credits: 15000,
54
+ isActive: true,
55
+ },
56
+ // USD Plans - $7, $10, $14 tiers
57
+ {
58
+ id: 'starter-monthly-usd',
59
+ titleCode: 'subscription.plan.starter.title',
60
+ descriptionCode: 'subscription.plan.starter.description',
61
+ amount: 7,
62
+ currency: 'USD',
63
+ features: {
64
+ messages: 2000,
65
+ images: 100,
66
+ voice: 200,
67
+ },
68
+ regularMode: 'monthly',
69
+ count: 1,
70
+ credits: 2000,
71
+ isActive: true,
72
+ },
73
+ {
74
+ id: 'standard-monthly-usd',
75
+ titleCode: 'subscription.plan.standard.title',
76
+ descriptionCode: 'subscription.plan.standard.description',
77
+ amount: 10,
78
+ currency: 'USD',
79
+ features: {
80
+ messages: 5000,
81
+ images: 250,
82
+ voice: 500,
83
+ },
84
+ regularMode: 'monthly',
85
+ count: 1,
86
+ credits: 5000,
87
+ isActive: true,
88
+ },
89
+ {
90
+ id: 'professional-monthly-usd',
91
+ titleCode: 'subscription.plan.professional.title',
92
+ descriptionCode: 'subscription.plan.professional.description',
93
+ amount: 14,
94
+ currency: 'USD',
95
+ features: {
96
+ messages: 10000,
97
+ images: 500,
98
+ voice: 1000,
99
+ },
100
+ regularMode: 'monthly',
101
+ count: 1,
102
+ credits: 10000,
103
+ isActive: true,
104
+ },
105
+ ];
106
+ //# sourceMappingURL=const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/const.ts"],"names":[],"mappings":";;;AAEa,QAAA,4BAA4B,GAAG,oBAAoB,CAAC;AAEpD,QAAA,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,2BAA2B;AAE/D,QAAA,0BAA0B,GAA8D;IACjG,YAAY;IACZ;QACI,EAAE,EAAE,eAAe;QACnB,SAAS,EAAE,+BAA+B;QAC1C,eAAe,EAAE,qCAAqC;QACtD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,GAAG;SACb;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACjB;IACD;QACI,EAAE,EAAE,aAAa;QACjB,SAAS,EAAE,6BAA6B;QACxC,eAAe,EAAE,mCAAmC;QACpD,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,GAAG;SACb;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACjB;IACD;QACI,EAAE,EAAE,iBAAiB;QACrB,SAAS,EAAE,iCAAiC;QAC5C,eAAe,EAAE,uCAAuC;QACxD,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,IAAI;SACd;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;KACjB;IACD,iCAAiC;IACjC;QACI,EAAE,EAAE,qBAAqB;QACzB,SAAS,EAAE,iCAAiC;QAC5C,eAAe,EAAE,uCAAuC;QACxD,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,GAAG;SACb;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACjB;IACD;QACI,EAAE,EAAE,sBAAsB;QAC1B,SAAS,EAAE,kCAAkC;QAC7C,eAAe,EAAE,wCAAwC;QACzD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,GAAG;SACb;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACjB;IACD;QACI,EAAE,EAAE,0BAA0B;QAC9B,SAAS,EAAE,sCAAsC;QACjD,eAAe,EAAE,4CAA4C;QAC7D,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,IAAI;SACd;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;KACjB;CACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './types';
2
+ export * from './const';
3
+ export * from './repository';
4
+ export * from './service';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./const"), exports);
19
+ __exportStar(require("./repository"), exports);
20
+ __exportStar(require("./service"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,0CAAwB;AACxB,+CAA6B;AAC7B,4CAA0B"}
@@ -0,0 +1,22 @@
1
+ import { FieldValue, Firestore } from 'firebase-admin/firestore';
2
+ import { SubscriptionPlanEntity, SubscriptionPlanFieldPath, ISubscriptionPlanRepository } from './types';
3
+ export type UpdateDBSubscriptionPlanFields = [
4
+ SubscriptionPlanFieldPath,
5
+ FieldValue | string | number | boolean | Date | [] | {}
6
+ ][];
7
+ export declare class SubscriptionPlanRepository implements ISubscriptionPlanRepository {
8
+ private readonly db;
9
+ private readonly collectionName;
10
+ constructor({ db }?: {
11
+ db?: Firestore;
12
+ });
13
+ getAll(): Promise<SubscriptionPlanEntity[]>;
14
+ getById(id: string): Promise<SubscriptionPlanEntity | null>;
15
+ create(params: Omit<SubscriptionPlanEntity, 'id' | 'createdAt' | 'updatedAt'>): Promise<SubscriptionPlanEntity>;
16
+ update(id: string, params: Partial<Omit<SubscriptionPlanEntity, 'id' | 'createdAt' | 'updatedAt'>>): Promise<SubscriptionPlanEntity>;
17
+ deactivate(id: string): Promise<void>;
18
+ seedDefaults(defaultPlans: Omit<SubscriptionPlanEntity, 'createdAt' | 'updatedAt'>[]): Promise<void>;
19
+ isEmpty(): Promise<boolean>;
20
+ private mapDocumentToEntity;
21
+ }
22
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAuC,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAGzG,MAAM,MAAM,8BAA8B,GAAG;IACzC,yBAAyB;IACzB,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE;CAC1D,EAAE,CAAC;AAEJ,qBAAa,0BAA2B,YAAW,2BAA2B;IAC1E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;gBAEnD,EAAE,EAAE,EAAE,GAAE;QAAE,EAAE,CAAC,EAAE,SAAS,CAAA;KAAO;IAI9B,MAAM,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAU3C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAa3D,MAAM,CACf,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GACvE,OAAO,CAAC,sBAAsB,CAAC;IAgBrB,MAAM,CACf,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GAChF,OAAO,CAAC,sBAAsB,CAAC;IAuBrB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrC,YAAY,CACrB,YAAY,EAAE,IAAI,CAAC,sBAAsB,EAAE,WAAW,GAAG,WAAW,CAAC,EAAE,GACxE,OAAO,CAAC,IAAI,CAAC;IAiBH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAKxC,OAAO,CAAC,mBAAmB;CAM9B"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SubscriptionPlanRepository = void 0;
4
+ const firestore_1 = require("firebase-admin/firestore");
5
+ const const_1 = require("./const");
6
+ class SubscriptionPlanRepository {
7
+ constructor({ db } = {}) {
8
+ this.collectionName = const_1.SUBSCRIPTION_PLAN_COLLECTION;
9
+ this.db = db || (0, firestore_1.getFirestore)();
10
+ }
11
+ async getAll() {
12
+ const querySnapshot = await this.db.collection(this.collectionName).get();
13
+ if (querySnapshot.empty) {
14
+ return [];
15
+ }
16
+ return querySnapshot.docs.map((doc) => this.mapDocumentToEntity(doc));
17
+ }
18
+ async getById(id) {
19
+ const docSnapshot = await this.db.collection(this.collectionName).doc(id).get();
20
+ if (!docSnapshot.exists) {
21
+ return null;
22
+ }
23
+ return {
24
+ id: docSnapshot.id,
25
+ ...docSnapshot.data(),
26
+ };
27
+ }
28
+ async create(params) {
29
+ const docRef = this.db.collection(this.collectionName).doc();
30
+ const now = new Date().toISOString();
31
+ const planEntity = {
32
+ ...params,
33
+ id: docRef.id,
34
+ createdAt: now,
35
+ updatedAt: now,
36
+ };
37
+ await docRef.set(planEntity);
38
+ return planEntity;
39
+ }
40
+ async update(id, params) {
41
+ const docRef = this.db.collection(this.collectionName).doc(id);
42
+ const docSnapshot = await docRef.get();
43
+ if (!docSnapshot.exists) {
44
+ throw new Error(`Subscription plan not found: ${id}`);
45
+ }
46
+ const now = new Date().toISOString();
47
+ const updateData = {
48
+ ...params,
49
+ updatedAt: now,
50
+ };
51
+ await docRef.update(updateData);
52
+ const updatedDoc = await docRef.get();
53
+ return {
54
+ id: updatedDoc.id,
55
+ ...updatedDoc.data(),
56
+ };
57
+ }
58
+ async deactivate(id) {
59
+ const docRef = this.db.collection(this.collectionName).doc(id);
60
+ const docSnapshot = await docRef.get();
61
+ if (!docSnapshot.exists) {
62
+ throw new Error(`Subscription plan not found: ${id}`);
63
+ }
64
+ await docRef.update({
65
+ isActive: false,
66
+ updatedAt: new Date().toISOString(),
67
+ });
68
+ }
69
+ async seedDefaults(defaultPlans) {
70
+ const batch = this.db.batch();
71
+ const now = new Date().toISOString();
72
+ for (const plan of defaultPlans) {
73
+ const docRef = this.db.collection(this.collectionName).doc(plan.id);
74
+ const planEntity = {
75
+ ...plan,
76
+ createdAt: now,
77
+ updatedAt: now,
78
+ };
79
+ batch.set(docRef, planEntity);
80
+ }
81
+ await batch.commit();
82
+ }
83
+ async isEmpty() {
84
+ const querySnapshot = await this.db.collection(this.collectionName).limit(1).get();
85
+ return querySnapshot.empty;
86
+ }
87
+ mapDocumentToEntity(doc) {
88
+ return {
89
+ id: doc.id,
90
+ ...doc.data(),
91
+ };
92
+ }
93
+ }
94
+ exports.SubscriptionPlanRepository = SubscriptionPlanRepository;
95
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/repository.ts"],"names":[],"mappings":"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"}