@rocketlink/crm-model 1.0.0

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 (254) hide show
  1. package/.releaserc.json +12 -0
  2. package/RELEASE.md +59 -0
  3. package/dist/dtos/adapter.request.dto.d.ts +10 -0
  4. package/dist/dtos/adapter.request.dto.d.ts.map +1 -0
  5. package/dist/dtos/adapter.request.dto.js +2 -0
  6. package/dist/dtos/base.request.dto.d.ts +5 -0
  7. package/dist/dtos/base.request.dto.d.ts.map +1 -0
  8. package/dist/dtos/base.request.dto.js +2 -0
  9. package/dist/dtos/campaign.request.dto.d.ts +5 -0
  10. package/dist/dtos/campaign.request.dto.d.ts.map +1 -0
  11. package/dist/dtos/campaign.request.dto.js +2 -0
  12. package/dist/dtos/category.request.dto.d.ts +8 -0
  13. package/dist/dtos/category.request.dto.d.ts.map +1 -0
  14. package/dist/dtos/category.request.dto.js +2 -0
  15. package/dist/dtos/common/base.request.dto.d.ts +5 -0
  16. package/dist/dtos/common/base.request.dto.d.ts.map +1 -0
  17. package/dist/dtos/common/base.request.dto.js +2 -0
  18. package/dist/dtos/common/paginated.request.dto.d.ts +7 -0
  19. package/dist/dtos/common/paginated.request.dto.d.ts.map +1 -0
  20. package/dist/dtos/common/paginated.request.dto.js +2 -0
  21. package/dist/dtos/common/paginated.response.dto.d.ts +10 -0
  22. package/dist/dtos/common/paginated.response.dto.d.ts.map +1 -0
  23. package/dist/dtos/common/paginated.response.dto.js +2 -0
  24. package/dist/dtos/csv.request.dto.d.ts +11 -0
  25. package/dist/dtos/csv.request.dto.d.ts.map +1 -0
  26. package/dist/dtos/csv.request.dto.js +2 -0
  27. package/dist/dtos/csv.response.dto.d.ts +9 -0
  28. package/dist/dtos/csv.response.dto.d.ts.map +1 -0
  29. package/dist/dtos/csv.response.dto.js +2 -0
  30. package/dist/dtos/csvRow.request.dto.d.ts +22 -0
  31. package/dist/dtos/csvRow.request.dto.d.ts.map +1 -0
  32. package/dist/dtos/csvRow.request.dto.js +2 -0
  33. package/dist/dtos/emailTemplate.request.dto.d.ts +1 -0
  34. package/dist/dtos/emailTemplate.request.dto.d.ts.map +1 -0
  35. package/dist/dtos/emailTemplate.request.dto.js +1 -0
  36. package/dist/dtos/empTransactions.request.dto.d.ts +4 -0
  37. package/dist/dtos/empTransactions.request.dto.d.ts.map +1 -0
  38. package/dist/dtos/empTransactions.request.dto.js +2 -0
  39. package/dist/dtos/event.request.dto.d.ts +8 -0
  40. package/dist/dtos/event.request.dto.d.ts.map +1 -0
  41. package/dist/dtos/event.request.dto.js +2 -0
  42. package/dist/dtos/field.request.dto.d.ts +4 -0
  43. package/dist/dtos/field.request.dto.d.ts.map +1 -0
  44. package/dist/dtos/field.request.dto.js +2 -0
  45. package/dist/dtos/hook.request.dto.d.ts +13 -0
  46. package/dist/dtos/hook.request.dto.d.ts.map +1 -0
  47. package/dist/dtos/hook.request.dto.js +2 -0
  48. package/dist/dtos/hookOutbox.request.dto.d.ts +11 -0
  49. package/dist/dtos/hookOutbox.request.dto.d.ts.map +1 -0
  50. package/dist/dtos/hookOutbox.request.dto.js +2 -0
  51. package/dist/dtos/hookProfile.request.dto.d.ts +7 -0
  52. package/dist/dtos/hookProfile.request.dto.d.ts.map +1 -0
  53. package/dist/dtos/hookProfile.request.dto.js +2 -0
  54. package/dist/dtos/lead.request.dto.d.ts +14 -0
  55. package/dist/dtos/lead.request.dto.d.ts.map +1 -0
  56. package/dist/dtos/lead.request.dto.js +2 -0
  57. package/dist/dtos/mid.request.dto.d.ts +14 -0
  58. package/dist/dtos/mid.request.dto.d.ts.map +1 -0
  59. package/dist/dtos/mid.request.dto.js +2 -0
  60. package/dist/dtos/offer.request.dto.d.ts +15 -0
  61. package/dist/dtos/offer.request.dto.d.ts.map +1 -0
  62. package/dist/dtos/offer.request.dto.js +2 -0
  63. package/dist/dtos/order.request.dto.d.ts +22 -0
  64. package/dist/dtos/order.request.dto.d.ts.map +1 -0
  65. package/dist/dtos/order.request.dto.js +2 -0
  66. package/dist/dtos/product.request.dto.d.ts +9 -0
  67. package/dist/dtos/product.request.dto.d.ts.map +1 -0
  68. package/dist/dtos/product.request.dto.js +2 -0
  69. package/dist/dtos/provider.request.dto.d.ts +12 -0
  70. package/dist/dtos/provider.request.dto.d.ts.map +1 -0
  71. package/dist/dtos/provider.request.dto.js +2 -0
  72. package/dist/dtos/subscription.request.dto.d.ts +22 -0
  73. package/dist/dtos/subscription.request.dto.d.ts.map +1 -0
  74. package/dist/dtos/subscription.request.dto.js +2 -0
  75. package/dist/dtos/transaction.request.dto.d.ts +14 -0
  76. package/dist/dtos/transaction.request.dto.d.ts.map +1 -0
  77. package/dist/dtos/transaction.request.dto.js +2 -0
  78. package/dist/dtos/transactionError.request.dto.d.ts +10 -0
  79. package/dist/dtos/transactionError.request.dto.d.ts.map +1 -0
  80. package/dist/dtos/transactionError.request.dto.js +2 -0
  81. package/dist/gateways/adapters/dtos/transaction-emp.request.dto.d.ts +21 -0
  82. package/dist/gateways/adapters/dtos/transaction-emp.request.dto.d.ts.map +1 -0
  83. package/dist/gateways/adapters/dtos/transaction-emp.request.dto.js +2 -0
  84. package/dist/gateways/adapters/dtos/transaction-finxp.request.dto.d.ts +22 -0
  85. package/dist/gateways/adapters/dtos/transaction-finxp.request.dto.d.ts.map +1 -0
  86. package/dist/gateways/adapters/dtos/transaction-finxp.request.dto.js +2 -0
  87. package/dist/gateways/adapters/dtos/transaction-novalnet.request.dto.d.ts +22 -0
  88. package/dist/gateways/adapters/dtos/transaction-novalnet.request.dto.d.ts.map +1 -0
  89. package/dist/gateways/adapters/dtos/transaction-novalnet.request.dto.js +2 -0
  90. package/dist/gateways/adapters/model/transactionEmp.model.d.ts +134 -0
  91. package/dist/gateways/adapters/model/transactionEmp.model.d.ts.map +1 -0
  92. package/dist/gateways/adapters/model/transactionEmp.model.js +103 -0
  93. package/dist/gateways/adapters/model/transactionFinXP.model.d.ts +106 -0
  94. package/dist/gateways/adapters/model/transactionFinXP.model.d.ts.map +1 -0
  95. package/dist/gateways/adapters/model/transactionFinXP.model.js +68 -0
  96. package/dist/gateways/adapters/model/transactionNovalNet.model.d.ts +121 -0
  97. package/dist/gateways/adapters/model/transactionNovalNet.model.d.ts.map +1 -0
  98. package/dist/gateways/adapters/model/transactionNovalNet.model.js +121 -0
  99. package/dist/gateways/providers/model/finXpManual.model.d.ts +16 -0
  100. package/dist/gateways/providers/model/finXpManual.model.d.ts.map +1 -0
  101. package/dist/gateways/providers/model/finXpManual.model.js +17 -0
  102. package/dist/gateways/providers/model/genesis.constants.d.ts +28 -0
  103. package/dist/gateways/providers/model/genesis.constants.d.ts.map +1 -0
  104. package/dist/gateways/providers/model/genesis.constants.js +27 -0
  105. package/dist/gateways/providers/model/genesis.model.d.ts +82 -0
  106. package/dist/gateways/providers/model/genesis.model.d.ts.map +1 -0
  107. package/dist/gateways/providers/model/genesis.model.js +2 -0
  108. package/dist/gateways/providers/model/novalNetManual.model.d.ts +62 -0
  109. package/dist/gateways/providers/model/novalNetManual.model.d.ts.map +1 -0
  110. package/dist/gateways/providers/model/novalNetManual.model.js +63 -0
  111. package/dist/index.d.ts +60 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +89 -0
  114. package/dist/model/campaign.model.d.ts +24 -0
  115. package/dist/model/campaign.model.d.ts.map +1 -0
  116. package/dist/model/campaign.model.js +2 -0
  117. package/dist/model/category.model.d.ts +8 -0
  118. package/dist/model/category.model.d.ts.map +1 -0
  119. package/dist/model/category.model.js +2 -0
  120. package/dist/model/csv.model.d.ts +57 -0
  121. package/dist/model/csv.model.d.ts.map +1 -0
  122. package/dist/model/csv.model.js +26 -0
  123. package/dist/model/emailTemplate.model.d.ts +1 -0
  124. package/dist/model/emailTemplate.model.d.ts.map +1 -0
  125. package/dist/model/emailTemplate.model.js +1 -0
  126. package/dist/model/empTransactions.model.d.ts +10 -0
  127. package/dist/model/empTransactions.model.d.ts.map +1 -0
  128. package/dist/model/empTransactions.model.js +2 -0
  129. package/dist/model/event.model.d.ts +7 -0
  130. package/dist/model/event.model.d.ts.map +1 -0
  131. package/dist/model/event.model.js +2 -0
  132. package/dist/model/field.model.d.ts +17 -0
  133. package/dist/model/field.model.d.ts.map +1 -0
  134. package/dist/model/field.model.js +2 -0
  135. package/dist/model/gateway.model.d.ts +49 -0
  136. package/dist/model/gateway.model.d.ts.map +1 -0
  137. package/dist/model/gateway.model.js +20 -0
  138. package/dist/model/hook.model.d.ts +14 -0
  139. package/dist/model/hook.model.d.ts.map +1 -0
  140. package/dist/model/hook.model.js +2 -0
  141. package/dist/model/hookOutbox.model.d.ts +20 -0
  142. package/dist/model/hookOutbox.model.d.ts.map +1 -0
  143. package/dist/model/hookOutbox.model.js +8 -0
  144. package/dist/model/hookProfile.model.d.ts +18 -0
  145. package/dist/model/hookProfile.model.d.ts.map +1 -0
  146. package/dist/model/hookProfile.model.js +2 -0
  147. package/dist/model/lead.model.d.ts +27 -0
  148. package/dist/model/lead.model.d.ts.map +1 -0
  149. package/dist/model/lead.model.js +2 -0
  150. package/dist/model/mid.model.d.ts +24 -0
  151. package/dist/model/mid.model.d.ts.map +1 -0
  152. package/dist/model/mid.model.js +7 -0
  153. package/dist/model/offer.model.d.ts +26 -0
  154. package/dist/model/offer.model.d.ts.map +1 -0
  155. package/dist/model/offer.model.js +2 -0
  156. package/dist/model/order.model.d.ts +38 -0
  157. package/dist/model/order.model.d.ts.map +1 -0
  158. package/dist/model/order.model.js +2 -0
  159. package/dist/model/paymentData.model.d.ts +45 -0
  160. package/dist/model/paymentData.model.d.ts.map +1 -0
  161. package/dist/model/paymentData.model.js +20 -0
  162. package/dist/model/product.model.d.ts +12 -0
  163. package/dist/model/product.model.d.ts.map +1 -0
  164. package/dist/model/product.model.js +2 -0
  165. package/dist/model/recurringSettingConfig.model.d.ts +18 -0
  166. package/dist/model/recurringSettingConfig.model.d.ts.map +1 -0
  167. package/dist/model/recurringSettingConfig.model.js +7 -0
  168. package/dist/model/subscription.model.d.ts +28 -0
  169. package/dist/model/subscription.model.d.ts.map +1 -0
  170. package/dist/model/subscription.model.js +2 -0
  171. package/dist/model/subscriptionStepdown.model.d.ts +11 -0
  172. package/dist/model/subscriptionStepdown.model.d.ts.map +1 -0
  173. package/dist/model/subscriptionStepdown.model.js +2 -0
  174. package/dist/model/transaction.model.d.ts +36 -0
  175. package/dist/model/transaction.model.d.ts.map +1 -0
  176. package/dist/model/transaction.model.js +20 -0
  177. package/dist/model/transactionError.model.d.ts +17 -0
  178. package/dist/model/transactionError.model.d.ts.map +1 -0
  179. package/dist/model/transactionError.model.js +2 -0
  180. package/dist/util/constants.d.ts +97 -0
  181. package/dist/util/constants.d.ts.map +1 -0
  182. package/dist/util/constants.js +87 -0
  183. package/dist/util/dateUtils.d.ts +25 -0
  184. package/dist/util/dateUtils.d.ts.map +1 -0
  185. package/dist/util/dateUtils.js +114 -0
  186. package/dist/util/numberUtils.d.ts +2 -0
  187. package/dist/util/numberUtils.d.ts.map +1 -0
  188. package/dist/util/numberUtils.js +10 -0
  189. package/package.json +34 -0
  190. package/src/dtos/adapter.request.dto.ts +10 -0
  191. package/src/dtos/base.request.dto.ts +4 -0
  192. package/src/dtos/campaign.request.dto.ts +5 -0
  193. package/src/dtos/category.request.dto.ts +8 -0
  194. package/src/dtos/common/base.request.dto.ts +4 -0
  195. package/src/dtos/common/paginated.request.dto.ts +7 -0
  196. package/src/dtos/common/paginated.response.dto.ts +11 -0
  197. package/src/dtos/csv.request.dto.ts +11 -0
  198. package/src/dtos/csv.response.dto.ts +10 -0
  199. package/src/dtos/csvRow.request.dto.ts +24 -0
  200. package/src/dtos/emailTemplate.request.dto.ts +0 -0
  201. package/src/dtos/empTransactions.request.dto.ts +5 -0
  202. package/src/dtos/event.request.dto.ts +9 -0
  203. package/src/dtos/fastify.d.ts +19 -0
  204. package/src/dtos/field.request.dto.ts +4 -0
  205. package/src/dtos/hook.request.dto.ts +14 -0
  206. package/src/dtos/hookOutbox.request.dto.ts +12 -0
  207. package/src/dtos/hookProfile.request.dto.ts +7 -0
  208. package/src/dtos/lead.request.dto.ts +14 -0
  209. package/src/dtos/mid.request.dto.ts +14 -0
  210. package/src/dtos/offer.request.dto.ts +15 -0
  211. package/src/dtos/order.request.dto.ts +23 -0
  212. package/src/dtos/product.request.dto.ts +9 -0
  213. package/src/dtos/provider.request.dto.ts +13 -0
  214. package/src/dtos/subscription.request.dto.ts +22 -0
  215. package/src/dtos/transaction.request.dto.ts +14 -0
  216. package/src/dtos/transactionError.request.dto.ts +10 -0
  217. package/src/gateways/adapters/dtos/transaction-emp.request.dto.ts +22 -0
  218. package/src/gateways/adapters/dtos/transaction-finxp.request.dto.ts +23 -0
  219. package/src/gateways/adapters/dtos/transaction-novalnet.request.dto.ts +23 -0
  220. package/src/gateways/adapters/model/transactionEmp.model.ts +223 -0
  221. package/src/gateways/adapters/model/transactionFinXP.model.ts +167 -0
  222. package/src/gateways/adapters/model/transactionNovalNet.model.ts +224 -0
  223. package/src/gateways/providers/model/finXpManual.model.ts +27 -0
  224. package/src/gateways/providers/model/genesis.constants.ts +30 -0
  225. package/src/gateways/providers/model/genesis.model.ts +89 -0
  226. package/src/gateways/providers/model/novalNetManual.model.ts +119 -0
  227. package/src/index.ts +72 -0
  228. package/src/model/campaign.model.ts +25 -0
  229. package/src/model/category.model.ts +7 -0
  230. package/src/model/csv.model.ts +80 -0
  231. package/src/model/emailTemplate.model.ts +0 -0
  232. package/src/model/empTransactions.model.ts +9 -0
  233. package/src/model/event.model.ts +6 -0
  234. package/src/model/fastify.d.ts +19 -0
  235. package/src/model/field.model.ts +17 -0
  236. package/src/model/gateway.model.ts +52 -0
  237. package/src/model/hook.model.ts +14 -0
  238. package/src/model/hookOutbox.model.ts +20 -0
  239. package/src/model/hookProfile.model.ts +19 -0
  240. package/src/model/lead.model.ts +28 -0
  241. package/src/model/mid.model.ts +26 -0
  242. package/src/model/offer.model.ts +26 -0
  243. package/src/model/order.model.ts +41 -0
  244. package/src/model/paymentData.model.ts +59 -0
  245. package/src/model/product.model.ts +11 -0
  246. package/src/model/recurringSettingConfig.model.ts +18 -0
  247. package/src/model/subscription.model.ts +30 -0
  248. package/src/model/subscriptionStepdown.model.ts +10 -0
  249. package/src/model/transaction.model.ts +40 -0
  250. package/src/model/transactionError.model.ts +17 -0
  251. package/src/util/constants.ts +113 -0
  252. package/src/util/dateUtils.ts +98 -0
  253. package/src/util/numberUtils.ts +5 -0
  254. package/tsconfig.json +27 -0
@@ -0,0 +1,19 @@
1
+ import { FastifyReply, FastifyRequest, RouteGenericInterface } from "fastify";
2
+ import "@fastify/jwt";
3
+ import "@fastify/mysql";
4
+
5
+ declare module '@fastify/jwt' {
6
+ interface FastifyJWT {
7
+ payload: { id: number; email: string };
8
+ user: { id: number; email: string };
9
+ }
10
+ }
11
+
12
+ declare module "fastify" {
13
+ interface FastifyInstance {
14
+ authenticate: <T extends RouteGenericInterface = RouteGenericInterface>(
15
+ request: FastifyRequest<T>,
16
+ reply: FastifyReply
17
+ ) => Promise<void>;
18
+ }
19
+ }
@@ -0,0 +1,17 @@
1
+ export interface Field {
2
+ id?: number;
3
+ name: string;
4
+ dbTable: string;
5
+ dbColumn: string;
6
+ description?: string;
7
+ createdAt: Date;
8
+ updatedAt?: Date;
9
+ }
10
+
11
+ export interface HookField {
12
+ id?: number;
13
+ hookId?: number;
14
+ fieldId?: number;
15
+ createdAt: Date;
16
+ updatedAt?: Date;
17
+ }
@@ -0,0 +1,52 @@
1
+ export const BANKS = {
2
+ EMP: "emp", // status pending
3
+ finXP: "finxp", // manual. status pending.
4
+ Paynt: "paynt",
5
+ Paystrax: "paystrax",
6
+ PayBank2Bank: "paybank2bank",
7
+ Novalnet: "novalnet", //manual. all in un place CB
8
+ UNKNOWN: "unknown",
9
+ ALL: "all",
10
+ };
11
+ export const BANK_NAME_VALUES = Object.values(BANKS);
12
+ export type BANKS = (typeof BANKS)[keyof typeof BANKS];
13
+
14
+ export interface Adapter {
15
+ id?: number;
16
+ name?: BANKS;
17
+ description?: string;
18
+ apiIntegrated?: boolean;
19
+ createdAt?: Date;
20
+ updatedAt?: Date;
21
+ }
22
+
23
+ export const PROVIDERS = {
24
+ ACI: "aci",
25
+ IXOPAY: "ixopay",
26
+ PayBank2Bank: "paybank2bank",
27
+ Genesis: "genesis",
28
+ };
29
+ export type PROVIDERS = (typeof BANKS)[keyof typeof BANKS];
30
+
31
+ export interface Provider {
32
+ id: number;
33
+ name: PROVIDERS;
34
+ description: string;
35
+ webhookUrl?: string;
36
+ webhookMethod?: string;
37
+ webhookToken?: string;
38
+ adapters?: Adapter[];
39
+ adapterIds?: number[];
40
+ createdAt?: Date;
41
+ updatedAt?: Date;
42
+ }
43
+
44
+ export interface ProviderAdapter {
45
+ id?: number;
46
+ adapterId?: number;
47
+ adapter?: Adapter;
48
+ providerId?: number;
49
+ provider?: Provider;
50
+ createdAt?: Date;
51
+ updatedAt?: Date;
52
+ }
@@ -0,0 +1,14 @@
1
+ import { Event } from "./event.model";
2
+ import { Field } from "./field.model";
3
+
4
+ export interface Hook {
5
+ id?: number;
6
+ name?: string;
7
+ eventId?: string;
8
+ url?: string;
9
+ event?: Event;
10
+ fields?: Field[];
11
+ fieldIds?: number[];
12
+ createdAt: Date;
13
+ updatedAt?: Date;
14
+ }
@@ -0,0 +1,20 @@
1
+ export const HOOK_OUTBOX_STATUS = {
2
+ PENDING: 'PENDING',
3
+ SENT: 'SENT',
4
+ FAILED: 'FAILED'
5
+ };
6
+ export type HOOK_OUTBOX_STATUS = (typeof HOOK_OUTBOX_STATUS)[keyof typeof HOOK_OUTBOX_STATUS];
7
+
8
+ export interface HookOutbox {
9
+ id?: number;
10
+ hookId?: number;
11
+ campaignId?: number;
12
+ triggerId?: string;
13
+ hookUrl?: string;
14
+ payloadJson?: string;
15
+ status?: HOOK_OUTBOX_STATUS;
16
+ statusDescription?: string;
17
+ attempts?: number;
18
+ createdAt?: Date;
19
+ updatedAt?: Date;
20
+ }
@@ -0,0 +1,19 @@
1
+ import type { Hook } from "./hook.model";
2
+
3
+ export interface HookProfile {
4
+ id: number;
5
+ name: string;
6
+ type?: string;
7
+ hooks: Hook[];
8
+ createdAt: Date;
9
+ updatedAt?: Date;
10
+ }
11
+
12
+ export interface HookProfilesHooks {
13
+ id?: number;
14
+ hookProfileId?: number;
15
+ hookId?: number;
16
+ hook?: Hook;
17
+ createdAt: Date;
18
+ updatedAt?: Date;
19
+ }
@@ -0,0 +1,28 @@
1
+ import { REGISTRATION_MODE } from "../util/constants";
2
+ import { PaymentDataType } from "./paymentData.model";
3
+ import { CSVRow } from "./csv.model";
4
+
5
+ export interface Lead {
6
+ id?: number;
7
+ isCustomer?: boolean;
8
+ visitId?: number;
9
+ csvRowId?: number;
10
+ csvId?: number;
11
+ firstName?: string;
12
+ lastName?: string;
13
+ email?: string;
14
+ phoneNumber?: string;
15
+ address1?: string;
16
+ address2?: string;
17
+ street?: string;
18
+ city?: string;
19
+ state?: string;
20
+ country?: string;
21
+ zipCode?: string;
22
+ registrationMode?: REGISTRATION_MODE;
23
+ // customerId?: number;
24
+ paymentData?: PaymentDataType;
25
+ csvRow?: CSVRow;
26
+ createdAt?: Date;
27
+ updatedAt?: Date;
28
+ }
@@ -0,0 +1,26 @@
1
+ import { ProviderAdapter } from "./gateway.model";
2
+
3
+ export const MID_STATE = {
4
+ ACTIVE: 'ACTIVE',
5
+ TERMINATED: 'TERMINATED'
6
+ };
7
+ export type MID_STATE = (typeof MID_STATE)[keyof typeof MID_STATE];
8
+
9
+ export interface Mid {
10
+ id?: number;
11
+ name?: string;
12
+ providerAdapterId?: number;
13
+ providerAdapter?: ProviderAdapter;
14
+ currency?: string;
15
+ state?: MID_STATE;
16
+ descriptor?: string;
17
+ midAuth?: MidAuth;
18
+ createdAt?: Date;
19
+ updatedAt?: Date;
20
+ }
21
+
22
+ export interface MidAuth {
23
+ username: string;
24
+ password: string;
25
+ token: string;
26
+ }
@@ -0,0 +1,26 @@
1
+ import { OFFER_TYPE } from '../util/constants';
2
+ import { Campaign } from './campaign.model';
3
+ import { Mid } from './mid.model';
4
+ import { Product } from './product.model';
5
+
6
+ export interface Offer {
7
+ id?: number;
8
+ name?: string;
9
+ type?: OFFER_TYPE;
10
+ productId?: number;
11
+ product?: Product;
12
+ oneTimePayment?: boolean;
13
+ price?: number;
14
+ currency?: string;
15
+ trialPrice?: number;
16
+ trialIntervalUnit?: string;
17
+ trialPeriod?: string;
18
+ midId?: number;
19
+ mid?: Mid;
20
+ midRouterId?: number;
21
+ campaignId?: number;
22
+ campaign?: Campaign;
23
+ recurringSettingId?: number;
24
+ createdAt?: Date;
25
+ updatedAt?: Date;
26
+ }
@@ -0,0 +1,41 @@
1
+ import { ORDER_STATUS } from '../util/constants';
2
+ import { Offer } from "./offer.model";
3
+ import { PaymentDataType } from "./paymentData.model";
4
+ import { Mid } from "./mid.model";
5
+ import { Campaign } from "./campaign.model";
6
+ import { Transaction } from "./transaction.model";
7
+
8
+ export interface Order {
9
+ id?: number;
10
+ // leadId?: number;
11
+ // lead?: Lead;
12
+ campaign?: Campaign;
13
+ paymentId?: number;
14
+ paymentData?: PaymentDataType;
15
+ amount?: number;
16
+ currency?: string;
17
+ status?: ORDER_STATUS;
18
+ notes?: string;
19
+ orderItems?: OrderItem[];
20
+ createdAt?: Date;
21
+ updatedAt?: Date;
22
+ }
23
+
24
+ export interface OrderItem {
25
+ id?: number;
26
+ quantity?: number;
27
+ trialPrice?: number;
28
+ price?: number;
29
+ currency?: string;
30
+ oneTimePayment?: boolean;
31
+ orderId?: number;
32
+ order?: Order;
33
+ offerId?: number;
34
+ offer?: Offer;
35
+ midId?: number;
36
+ mid?: Mid;
37
+ transactionId?: number; // we do not have a direct FK. Populate from Order.
38
+ transaction?: Transaction;
39
+ createdAt?: Date;
40
+ updatedAt?: Date;
41
+ }
@@ -0,0 +1,59 @@
1
+ import { Lead } from "./lead.model";
2
+
3
+ export const PAYMENT_METHOD = {
4
+ SEPA: "SEPA",
5
+ CREDIT_CARD: "CREDIT_CARD",
6
+ OPEN_BANKING: "OPEN_BANKING"
7
+ } as const;
8
+
9
+ export type PaymentMethodType = (typeof PAYMENT_METHOD)[keyof typeof PAYMENT_METHOD];
10
+
11
+ export interface PaymentData {
12
+ id?: number;
13
+ type: PaymentMethodType;
14
+ leadId?: number;
15
+ lead?: Lead;
16
+ createdAt?: Date;
17
+ updatedAt?: Date;
18
+ }
19
+ export type PaymentDataType = SEPAPaymentData | CreditCardPaymentData | OpenBankingPaymentData;
20
+
21
+ export interface SEPAPaymentData extends PaymentData {
22
+ type: typeof PAYMENT_METHOD.SEPA;
23
+ id?: number;
24
+ iban?: string;
25
+ bic?: string;
26
+ createdAt?: Date;
27
+ updatedAt?: Date;
28
+ }
29
+
30
+ export interface CreditCardPaymentData extends PaymentData {
31
+ type: typeof PAYMENT_METHOD.CREDIT_CARD;
32
+ id?: number;
33
+ cardNumber: string;
34
+ cardHolder: string;
35
+ expireMonth: string;
36
+ expireYear: string;
37
+ createdAt?: Date;
38
+ updatedAt?: Date;
39
+ }
40
+
41
+ export interface OpenBankingPaymentData extends PaymentData {
42
+ type: typeof PAYMENT_METHOD.OPEN_BANKING;
43
+ id?: number;
44
+ pb2b_av_id: string;
45
+ createdAt?: Date;
46
+ updatedAt?: Date;
47
+ }
48
+
49
+ export function isSepa(p: PaymentDataType | undefined): p is SEPAPaymentData {
50
+ return p?.type === PAYMENT_METHOD.SEPA;
51
+ }
52
+
53
+ export function isCreditCard(p: PaymentDataType): p is CreditCardPaymentData {
54
+ return p.type === PAYMENT_METHOD.CREDIT_CARD;
55
+ }
56
+
57
+ export function isOpenBanking(p: PaymentDataType): p is OpenBankingPaymentData {
58
+ return p.type === PAYMENT_METHOD.OPEN_BANKING;
59
+ }
@@ -0,0 +1,11 @@
1
+ export interface Product {
2
+ id?: number;
3
+ name?: string;
4
+ description?: string;
5
+ defaultPrice?: string;
6
+ image?: string;
7
+ isShippable?: boolean;
8
+ categoryId?: string;
9
+ createdAt?: Date;
10
+ updatedAt?: Date;
11
+ }
@@ -0,0 +1,18 @@
1
+ export const INTERVAL_UNIT = {
2
+ DAYS: "DAYS",
3
+ MONTHS: "MONTHS",
4
+ } as const;
5
+ export type INTERVAL_UNIT = (typeof INTERVAL_UNIT)[keyof typeof INTERVAL_UNIT];
6
+
7
+ export interface RecurringSettingConfig {
8
+ id?: number;
9
+ name?: string;
10
+ intervalUnit?: INTERVAL_UNIT;
11
+ intervalPeriod?: number;
12
+ maxTriesAfterFailure?: number;
13
+ maxDelayPeriod?: number;
14
+ dunningIntervalPeriod?: number;
15
+ dunningMaxRetires?: number;
16
+ createdAt?: Date;
17
+ updatedAt?: Date;
18
+ }
@@ -0,0 +1,30 @@
1
+ import { OrderItem } from "./order.model";
2
+
3
+ export interface Subscription {
4
+ id?: number;
5
+ username?: string;
6
+ password?: string;
7
+ startDate?: Date;
8
+ endDate?: Date;
9
+ nextBillingDate?: Date;
10
+ status?: string;
11
+ orderItemId?: number;
12
+ orderItem?: OrderItem;
13
+ registrationEmailSent?: boolean;
14
+ createdAt?: Date;
15
+ updatedAt?: Date;
16
+
17
+ // Normalized/flattened fields from relationships (added by API layer)
18
+ email?: string;
19
+ csvId?: number;
20
+ customerId?: number;
21
+ paymentId?: number;
22
+ orderId?: number;
23
+ offerId?: number;
24
+ midId?: number;
25
+ paymentType?: string;
26
+ leadId?: number;
27
+ leadName?: string;
28
+ leadEmail?: string;
29
+ bankName?: string;
30
+ }
@@ -0,0 +1,10 @@
1
+ export interface SubscriptionStepdown {
2
+ id?: number;
3
+ subscriptionId?: number;
4
+ nextPaymentDate?: Date;
5
+ executed?: number;
6
+ completed?: number;
7
+ timesTried?: number;
8
+ createdAt?: Date;
9
+ updatedAt?: Date;
10
+ }
@@ -0,0 +1,40 @@
1
+ import { BANKS } from "./gateway.model";
2
+
3
+ export const TRANSACTION_STATUS = {
4
+ PENDING_ASYNC: "PENDING_ASYNC",
5
+ SUCCESS: "SUCCESS",
6
+ FAILED: "FAILED",
7
+ UNKNOWN: "UNKNOWN",
8
+ };
9
+ export type TRANSACTION_STATUS = (typeof TRANSACTION_STATUS)[keyof typeof TRANSACTION_STATUS];
10
+
11
+ export const APP_TRANSACTION_TYPE = {
12
+ INITIAL: "INITIAL",
13
+ RECURRING: "RECURRING",
14
+ STEPDOWN: "STEPDOWN",
15
+ };
16
+ export type APP_TRANSACTION_TYPE = (typeof APP_TRANSACTION_TYPE)[keyof typeof APP_TRANSACTION_TYPE];
17
+
18
+ export const PAYMENT_TYPE = {
19
+ SDD_SALE: "SDD_SALE",
20
+ REFUND: "REFUND",
21
+ CHARGEBACK: "CHARGEBACK",
22
+ DEBIT: "DEBIT"
23
+ };
24
+ export type PAYMENT_TYPE = (typeof PAYMENT_TYPE)[keyof typeof PAYMENT_TYPE];
25
+
26
+ export interface Transaction {
27
+ id?: number;
28
+ bank?: BANKS;
29
+ amount?: string;
30
+ currency?: string;
31
+ midId?: number;
32
+ orderId?: number;
33
+ // internalSubscriptionId?: number;
34
+ internalPaymentType?: PAYMENT_TYPE;
35
+ internalTransactionType?: APP_TRANSACTION_TYPE;
36
+ internalTransactionStatus?: TRANSACTION_STATUS;
37
+ response?: string;
38
+ createdAt?: Date;
39
+ updatedAt?: Date;
40
+ }
@@ -0,0 +1,17 @@
1
+ import { BANKS } from "./gateway.model";
2
+
3
+ export interface TransactionError {
4
+ id?: number;
5
+ bank: BANKS;
6
+ midId?: number;
7
+ orderId?: number;
8
+ amount?: string;
9
+ currency?: string;
10
+ adapterStatus?: string;
11
+ adapterCode?: string;
12
+ message?: string;
13
+ request?: string;
14
+ response?: string;
15
+ createdAt?: Date;
16
+ updatedAt?: Date;
17
+ }
@@ -0,0 +1,113 @@
1
+ export const YES_NO = {
2
+ YES: "Y",
3
+ NO: "N",
4
+ };
5
+ export type YES_NO = (typeof YES_NO)[keyof typeof YES_NO];
6
+
7
+ export const MIME_TYPES = {
8
+ csv: "text/csv",
9
+ };
10
+ export type MIME_TYPES = (typeof MIME_TYPES)[keyof typeof MIME_TYPES];
11
+
12
+ export const CSV_TYPES = {
13
+ CREATE_ORDERS: "CREATE_ORDERS",
14
+ BILL_SUBSCRIPTIONS: "BILL_SUBSCRIPTIONS",
15
+ IMPORT_TRANSACTIONS_SDD: "IMPORT_TRANSACTIONS_SDD",
16
+ IMPORT_TRANSACTIONS_CHARGEBACK: "IMPORT_TRANSACTIONS_CHARGEBACK",
17
+ CANCEL_SUBSCRIPTIONS: "CANCEL_SUBSCRIPTIONS",
18
+ };
19
+ export const CSV_TYPE_VALUES = Object.values(CSV_TYPES);
20
+ export type CSV_TYPES = (typeof CSV_TYPES)[keyof typeof CSV_TYPES];
21
+
22
+ export const CSV_STATUS = {
23
+ UPLOADED: "UPLOADED",
24
+ QUEUED: "QUEUED",
25
+ PROCESSING: "PROCESSING",
26
+ COMPLETED: "COMPLETED",
27
+ COMPLETED_WITH_ERRORS: "COMPLETED_WITH_ERRORS",
28
+ FAILED: "FAILED",
29
+ CANCELLED: "CANCELLED"
30
+ };
31
+ export type CSVStatusTypes = (typeof CSV_STATUS)[keyof typeof CSV_STATUS];
32
+
33
+ export const CSV_ROW_STATUS = {
34
+ QUEUED: 'QUEUED',
35
+ SUCCESS: "SUCCESS",
36
+ FAILED: "FAILED",
37
+ };
38
+ export type CSVRowStatusTypes = (typeof CSV_ROW_STATUS)[keyof typeof CSV_ROW_STATUS];
39
+
40
+ export const REGISTRATION_MODE = {
41
+ LIVE_TRAFFIC: "LIVE_TRAFFIC",
42
+ CSV: "CSV"
43
+ };
44
+ export type REGISTRATION_MODE = (typeof REGISTRATION_MODE)[keyof typeof REGISTRATION_MODE];
45
+
46
+ export const OFFER_TYPE = {
47
+ OFFER: "OFFER",
48
+ UPSELL: "UPSELL",
49
+ DOWNSELL: "DOWNSELL"
50
+ };
51
+ export type OFFER_TYPE = (typeof OFFER_TYPE)[keyof typeof OFFER_TYPE];
52
+
53
+ export const TRANSACTION_TYPE = {
54
+ sdd_sale: 'sdd_sale',
55
+ chargeback: 'chargeback',
56
+ refund: 'refund'
57
+ };
58
+
59
+ export const ALL = 'all';
60
+
61
+ export type TRANSACTION_TYPE = (typeof TRANSACTION_TYPE)[keyof typeof TRANSACTION_TYPE];
62
+ export const TRANSACTION_TYPE_VALUES = Object.values(TRANSACTION_TYPE);
63
+
64
+ export const TRANSACTION_TYPE_CODE = {
65
+ DB: 'Debit',
66
+ RF: 'Refund',
67
+ PA: 'Payment Authorization',
68
+ CB: 'Chargeback',
69
+ CP: 'Capture',
70
+ RV: 'Reversal',
71
+ };
72
+
73
+
74
+
75
+ export const ORDER_STATUS = {
76
+ INITIATED: "INITIATED",
77
+ COMPLETED: "COMPLETED",
78
+ FAILED: "FAILED",
79
+ };
80
+ export type ORDER_STATUS = (typeof ORDER_STATUS)[keyof typeof ORDER_STATUS];
81
+ export const ORDER_STATUS_VALUES = Object.values(CSV_TYPES);
82
+
83
+ export const SUBSCRIPTION_STATUS = {
84
+ PAYMENT_PENDING: "PAYMENT_PENDING",
85
+ PAYMENT_PENDING_CONFIRMATION: "PAYMENT_PENDING_CONFIRMATION",
86
+ ACTIVE: "ACTIVE",
87
+ EXPIRED: "EXPIRED",
88
+ CANCELLED: "CANCELLED",
89
+ TRIAL: "TRIAL"
90
+ };
91
+ export type SUBSCRIPTION_STATUS = (typeof SUBSCRIPTION_STATUS)[keyof typeof SUBSCRIPTION_STATUS];
92
+
93
+ export const EVENTS = {
94
+ ORDER_CREATED: "order.created",
95
+ ORDER_UPDATED: "order.updated",
96
+ SUBSCRIPTION_CREATED: "subscription.created",
97
+ TRANSACTION_SDD_IMPORTED: "transaction.sdd_sale.imported",
98
+ TRANSACTION_REFUND_IMPORTED: "transaction.refund.imported",
99
+ TRANSACTION_CHARGEBACK_IMPORTED: "transaction.chargeback.imported",
100
+ TRANSACTION_REFUND_ISSUED: "transaction.refund.issued",
101
+ TRANSACTION_ERROR: "transaction.error",
102
+ SUBSCRIPTION_CANCELLATION_ISSUED: "subscription.cancellation.issued"
103
+ };
104
+ export type EVENTS = (typeof EVENTS)[keyof typeof EVENTS];
105
+
106
+ export const SAFE_WHILE_LIMIT = 1_000;
107
+
108
+ export const CURRENCIES = {
109
+ EUR: "EUR",
110
+ USD: "USD",
111
+ GBP: "GBP",
112
+ };
113
+ export type CURRENCIES = (typeof CURRENCIES)[keyof typeof CURRENCIES];
@@ -0,0 +1,98 @@
1
+ import { format, isValid, parseISO, addDays, subDays } from 'date-fns';
2
+
3
+ export const FORMATS = {
4
+ ISO_DATE: 'yyyy-MM-dd', // "2026-01-07"
5
+ ISO_DATE_TIME_TZ: "yyyy-MM-dd'T'HH:mm", // "2026-01-07T14:30"
6
+ ISO_DATE_TIME_MINUTES: 'yyyy-MM-dd HH:mm', // "2026-01-07 14:30
7
+ ISO_DATE_TIME_SECONDS: 'yyyy-MM-dd HH:mm:ss', // "2026-01-07 14:30:23,
8
+ COMPACT_DATETIME: 'yyyyMMddHHmmss', // "20260107143000"
9
+ COMPACT_DATE: 'yyyyMMdd', // "20260107"
10
+ } as const;
11
+ // ============================================
12
+ // Date → String formatted conversions
13
+ // ============================================
14
+ export function dateToString(date: Date, formatString: string = FORMATS.ISO_DATE): string {
15
+ if (!date || !isValid(date)) {
16
+ throw new Error('Invalid date: ' + date);
17
+ }
18
+ return format(date, formatString);
19
+ }
20
+ export function dateToYYYYMMDD(date: Date): string {
21
+ return dateToString(date, FORMATS.COMPACT_DATETIME);
22
+ }
23
+ export function dateToTZ(date: Date): string {
24
+ return dateToString(date, FORMATS.ISO_DATE_TIME_TZ);
25
+ }
26
+ export function dateToMinutes(date: Date): string {
27
+ return dateToString(date, FORMATS.ISO_DATE_TIME_MINUTES);
28
+ }
29
+ export function getCurrentDateCompacted(): string {
30
+ return dateToYYYYMMDD(new Date()); // "20260107143000"
31
+ }
32
+
33
+ // Checks if a string matches a date pattern
34
+ export function isDateString(value: string): boolean {
35
+ const datePattern = /^\d{4}-\d{2}-\d{2}(T|\s)\d{2}:\d{2}:\d{2}/;
36
+ return datePattern.test(value);
37
+ }
38
+ // ============================================
39
+ // String → Date conversions
40
+ // ============================================
41
+ export function stringToDate(value: string): Date {
42
+ if (!value) {
43
+ throw new Error('Date string cannot be empty');
44
+ }
45
+ const date = parseISO(value);
46
+ if (!isValid(date)) {
47
+ throw new Error('Invalid date string: ' + value);
48
+ }
49
+ return date;
50
+ }
51
+ // ============================================
52
+ // String → String formatted conversions
53
+ // ============================================
54
+ export function formatDateString(value: string, formatString: string = FORMATS.ISO_DATE): string {
55
+ if (!value) {
56
+ return '';
57
+ }
58
+ const date = stringToDate(value);
59
+ return format(date, formatString);
60
+ }
61
+ export function formatDateAs_yyyymmdd(value: string): string {
62
+ return formatDateString(value, FORMATS.ISO_DATE);
63
+ }
64
+ export function formatDateAs_tz(value: string): string {
65
+ return formatDateString(value, FORMATS.ISO_DATE_TIME_TZ);
66
+ }
67
+ export function formatDateAs_minutes(value: string): string {
68
+ return formatDateString(value, FORMATS.ISO_DATE_TIME_MINUTES);
69
+ }
70
+ export function formatDateAs_seconds(value: string): string {
71
+ return formatDateString(value, FORMATS.ISO_DATE_TIME_SECONDS);
72
+ }
73
+
74
+ // ============================================
75
+ // Date manipulation
76
+ // ============================================
77
+ export function addDaysToDate(date: Date, days: number): Date {
78
+ if (!date || !isValid(date)) {
79
+ throw new Error('Invalid date: ' + date);
80
+ }
81
+ return addDays(date, days);
82
+ }
83
+ export function subtractDaysFromDate(date: Date, days: number): Date {
84
+ if (!date || !isValid(date)) {
85
+ throw new Error('Invalid date: ' + date);
86
+ }
87
+ return subDays(date, days);
88
+ }
89
+ export function addDaysToDateString(value: string, days: number, formatString: string = FORMATS.ISO_DATE): string {
90
+ const date = stringToDate(value);
91
+ const newDate = addDays(date, days);
92
+ return format(newDate, formatString);
93
+ }
94
+ export function subtractDaysFromDateString(value: string, days: number, formatString: string = FORMATS.ISO_DATE): string {
95
+ const date = stringToDate(value);
96
+ const newDate = subDays(date, days);
97
+ return format(newDate, formatString);
98
+ }
@@ -0,0 +1,5 @@
1
+ export const toPositiveInt = (value: unknown, fallback: number): number => {
2
+ if (value === undefined || value === null || value === "") return fallback;
3
+ const parsed = Number(value);
4
+ return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : fallback;
5
+ };