@dalmore/api-contracts 1.0.3 → 1.0.6

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 (186) hide show
  1. package/README.md +34 -60
  2. package/index.mjs +1001 -18638
  3. package/package.json +5 -53
  4. package/src/common/types/address.spec.ts +203 -0
  5. package/src/common/types/batch-jobs.types.ts +1 -0
  6. package/src/common/types/common.types.spec.ts +336 -0
  7. package/src/common/types/files.types.spec.ts +154 -0
  8. package/src/common/types/issuer-payment-method.types.spec.ts +612 -0
  9. package/src/common/types/offering.types.spec.ts +91 -0
  10. package/src/common/types/phone.spec.ts +76 -0
  11. package/src/common/types/queue.types.ts +1 -0
  12. package/src/common/types/reminder-config.types.ts +40 -0
  13. package/src/common/types/site-link.types.spec.ts +134 -0
  14. package/src/common/types/trade.types.ts +2 -4
  15. package/clients/index.mjs +0 -10970
  16. package/compliance/index.mjs +0 -20016
  17. package/compliance-apikey/index.mjs +0 -9795
  18. package/helpers/index.mjs +0 -146
  19. package/investors/index.mjs +0 -12844
  20. package/issuers/index.mjs +0 -16168
  21. package/secondaries/index.mjs +0 -10282
  22. package/src/common/helpers/index.ts +0 -205
  23. package/src/contracts/compliance/account-contacts/index.ts +0 -82
  24. package/src/contracts/compliance/account-managers/index.ts +0 -142
  25. package/src/contracts/compliance/accounts/index.ts +0 -187
  26. package/src/contracts/compliance/activities/index.ts +0 -55
  27. package/src/contracts/compliance/aic/index.ts +0 -60
  28. package/src/contracts/compliance/api-keys/index.ts +0 -91
  29. package/src/contracts/compliance/assets/index.ts +0 -122
  30. package/src/contracts/compliance/auth/index.ts +0 -134
  31. package/src/contracts/compliance/batch-jobs/index.ts +0 -62
  32. package/src/contracts/compliance/bonus-tiers/index.ts +0 -55
  33. package/src/contracts/compliance/checklist/index.ts +0 -87
  34. package/src/contracts/compliance/checklist-items/index.ts +0 -86
  35. package/src/contracts/compliance/covered-persons/index.ts +0 -97
  36. package/src/contracts/compliance/dashboard/index.ts +0 -111
  37. package/src/contracts/compliance/data-records/index.ts +0 -116
  38. package/src/contracts/compliance/data-rooms/index.ts +0 -113
  39. package/src/contracts/compliance/default-theme-configs/index.ts +0 -95
  40. package/src/contracts/compliance/disbursement/index.ts +0 -165
  41. package/src/contracts/compliance/disbursement-approval-users/index.ts +0 -84
  42. package/src/contracts/compliance/disbursement-transactions/index.ts +0 -37
  43. package/src/contracts/compliance/domain-filters/index.ts +0 -117
  44. package/src/contracts/compliance/email-themes/index.ts +0 -284
  45. package/src/contracts/compliance/escrow-accounts/index.ts +0 -85
  46. package/src/contracts/compliance/exchange-api-keys/index.ts +0 -129
  47. package/src/contracts/compliance/exchange-imports/index.ts +0 -137
  48. package/src/contracts/compliance/files/index.ts +0 -267
  49. package/src/contracts/compliance/files-public/index.ts +0 -188
  50. package/src/contracts/compliance/health/index.ts +0 -26
  51. package/src/contracts/compliance/index.ts +0 -147
  52. package/src/contracts/compliance/individuals/index.ts +0 -57
  53. package/src/contracts/compliance/investor-accounts/index.ts +0 -141
  54. package/src/contracts/compliance/invites/index.ts +0 -137
  55. package/src/contracts/compliance/issuer-bank-accounts/index.ts +0 -81
  56. package/src/contracts/compliance/issuer-payment-methods/index.ts +0 -81
  57. package/src/contracts/compliance/issuers/index.ts +0 -97
  58. package/src/contracts/compliance/job-items/index.ts +0 -58
  59. package/src/contracts/compliance/jobs/index.ts +0 -59
  60. package/src/contracts/compliance/kyb/index.ts +0 -54
  61. package/src/contracts/compliance/kyc/index.ts +0 -77
  62. package/src/contracts/compliance/legal-entities/index.ts +0 -57
  63. package/src/contracts/compliance/login-histories/index.ts +0 -37
  64. package/src/contracts/compliance/notes/index.ts +0 -69
  65. package/src/contracts/compliance/notion-databases/index.ts +0 -107
  66. package/src/contracts/compliance/notion-pages/index.ts +0 -105
  67. package/src/contracts/compliance/offering-reports/index.ts +0 -149
  68. package/src/contracts/compliance/offerings/index.ts +0 -233
  69. package/src/contracts/compliance/pages/index.ts +0 -178
  70. package/src/contracts/compliance/payment-methods/index.ts +0 -57
  71. package/src/contracts/compliance/rejection-reasons/index.ts +0 -32
  72. package/src/contracts/compliance/review/index.ts +0 -169
  73. package/src/contracts/compliance/roles/index.ts +0 -34
  74. package/src/contracts/compliance/secondary-customers/index.ts +0 -77
  75. package/src/contracts/compliance/secondary-orders/index.ts +0 -60
  76. package/src/contracts/compliance/secondary-trades/index.ts +0 -100
  77. package/src/contracts/compliance/secure-requests/index.ts +0 -54
  78. package/src/contracts/compliance/signer/index.ts +0 -369
  79. package/src/contracts/compliance/site-links/index.ts +0 -128
  80. package/src/contracts/compliance/site-settings/index.ts +0 -669
  81. package/src/contracts/compliance/sites/index.ts +0 -56
  82. package/src/contracts/compliance/state-machine/index.ts +0 -94
  83. package/src/contracts/compliance/tasks/index.ts +0 -91
  84. package/src/contracts/compliance/third-parties/index.ts +0 -52
  85. package/src/contracts/compliance/trade-line-items/index.ts +0 -59
  86. package/src/contracts/compliance/trades/index.ts +0 -230
  87. package/src/contracts/compliance/transactions/index.ts +0 -161
  88. package/src/contracts/compliance/user-manuals/index.ts +0 -271
  89. package/src/contracts/compliance/user-settings/index.ts +0 -189
  90. package/src/contracts/compliance/users/index.ts +0 -200
  91. package/src/contracts/compliance/webhooks/index.ts +0 -41
  92. package/src/contracts/compliance-apikey/accounts/index.ts +0 -58
  93. package/src/contracts/compliance-apikey/index.ts +0 -14
  94. package/src/contracts/index.ts +0 -6
  95. package/src/contracts/investors/account-contacts/index.ts +0 -58
  96. package/src/contracts/investors/aic/index.ts +0 -59
  97. package/src/contracts/investors/assets/index.ts +0 -61
  98. package/src/contracts/investors/auth/index.ts +0 -116
  99. package/src/contracts/investors/bonus-tiers/index.ts +0 -37
  100. package/src/contracts/investors/cart/index.ts +0 -75
  101. package/src/contracts/investors/contact-us/index.ts +0 -48
  102. package/src/contracts/investors/data-records/index.ts +0 -113
  103. package/src/contracts/investors/data-rooms/index.ts +0 -96
  104. package/src/contracts/investors/files/index.ts +0 -167
  105. package/src/contracts/investors/files-public/index.ts +0 -185
  106. package/src/contracts/investors/index.ts +0 -72
  107. package/src/contracts/investors/individuals/index.ts +0 -99
  108. package/src/contracts/investors/investor-accounts/index.ts +0 -110
  109. package/src/contracts/investors/issuer-payment-methods/index.ts +0 -36
  110. package/src/contracts/investors/issuers/index.ts +0 -30
  111. package/src/contracts/investors/legal-entities/index.ts +0 -93
  112. package/src/contracts/investors/notes/index.ts +0 -69
  113. package/src/contracts/investors/offerings/index.ts +0 -93
  114. package/src/contracts/investors/pages/index.ts +0 -88
  115. package/src/contracts/investors/payment-methods/index.ts +0 -149
  116. package/src/contracts/investors/portfolios/index.ts +0 -53
  117. package/src/contracts/investors/sites/index.ts +0 -96
  118. package/src/contracts/investors/tasks/index.ts +0 -111
  119. package/src/contracts/investors/trade-line-items/index.ts +0 -75
  120. package/src/contracts/investors/trades/index.ts +0 -114
  121. package/src/contracts/investors/transactions/index.ts +0 -37
  122. package/src/contracts/investors/trusted-contacts/index.ts +0 -93
  123. package/src/contracts/investors/user-manuals/index.ts +0 -62
  124. package/src/contracts/investors/user-settings/index.ts +0 -170
  125. package/src/contracts/investors/users/index.ts +0 -45
  126. package/src/contracts/investors/webhooks/index.ts +0 -30
  127. package/src/contracts/issuers/account-contacts/index.ts +0 -76
  128. package/src/contracts/issuers/account-integrations/index.ts +0 -97
  129. package/src/contracts/issuers/accounts/index.ts +0 -97
  130. package/src/contracts/issuers/activities/index.ts +0 -54
  131. package/src/contracts/issuers/aic/index.ts +0 -39
  132. package/src/contracts/issuers/api-key-logs/index.ts +0 -53
  133. package/src/contracts/issuers/api-keys/index.ts +0 -93
  134. package/src/contracts/issuers/assets/index.ts +0 -122
  135. package/src/contracts/issuers/auth/index.ts +0 -152
  136. package/src/contracts/issuers/bonus-tiers/index.ts +0 -55
  137. package/src/contracts/issuers/contact-us/index.ts +0 -48
  138. package/src/contracts/issuers/covered-persons/index.ts +0 -136
  139. package/src/contracts/issuers/dashboard/index.ts +0 -72
  140. package/src/contracts/issuers/data-records/index.ts +0 -257
  141. package/src/contracts/issuers/data-rooms/index.ts +0 -134
  142. package/src/contracts/issuers/disbursement-approval-users/index.ts +0 -82
  143. package/src/contracts/issuers/disbursement-transactions/index.ts +0 -53
  144. package/src/contracts/issuers/disbursements/index.ts +0 -153
  145. package/src/contracts/issuers/email-themes/index.ts +0 -242
  146. package/src/contracts/issuers/escrow-accounts/index.ts +0 -81
  147. package/src/contracts/issuers/exchange-api-keys/index.ts +0 -144
  148. package/src/contracts/issuers/files/index.ts +0 -166
  149. package/src/contracts/issuers/files-public/index.ts +0 -166
  150. package/src/contracts/issuers/health/index.ts +0 -24
  151. package/src/contracts/issuers/index.ts +0 -112
  152. package/src/contracts/issuers/investor-accounts/index.ts +0 -148
  153. package/src/contracts/issuers/invites/index.ts +0 -129
  154. package/src/contracts/issuers/issuer/index.ts +0 -94
  155. package/src/contracts/issuers/issuer-bank-accounts/index.ts +0 -81
  156. package/src/contracts/issuers/issuer-payment-methods/index.ts +0 -136
  157. package/src/contracts/issuers/kyc/index.ts +0 -38
  158. package/src/contracts/issuers/login-histories/index.ts +0 -51
  159. package/src/contracts/issuers/notes/index.ts +0 -69
  160. package/src/contracts/issuers/offerings/index.ts +0 -206
  161. package/src/contracts/issuers/pages/index.ts +0 -138
  162. package/src/contracts/issuers/payment-methods/index.ts +0 -61
  163. package/src/contracts/issuers/portfolios/index.ts +0 -36
  164. package/src/contracts/issuers/rejection-reasons/index.ts +0 -32
  165. package/src/contracts/issuers/review/index.ts +0 -63
  166. package/src/contracts/issuers/secondary-customers/index.ts +0 -55
  167. package/src/contracts/issuers/secondary-orders/index.ts +0 -57
  168. package/src/contracts/issuers/secondary-trades/index.ts +0 -57
  169. package/src/contracts/issuers/secure-requests/index.ts +0 -34
  170. package/src/contracts/issuers/site-links/index.ts +0 -116
  171. package/src/contracts/issuers/site-settings/index.ts +0 -585
  172. package/src/contracts/issuers/sites/index.ts +0 -32
  173. package/src/contracts/issuers/tasks/index.ts +0 -111
  174. package/src/contracts/issuers/trades/index.ts +0 -132
  175. package/src/contracts/issuers/transactions/index.ts +0 -158
  176. package/src/contracts/issuers/user-manuals/index.ts +0 -62
  177. package/src/contracts/issuers/user-settings/index.ts +0 -170
  178. package/src/contracts/issuers/users/index.ts +0 -126
  179. package/src/contracts/secondaries/accounts/index.ts +0 -58
  180. package/src/contracts/secondaries/index.ts +0 -23
  181. package/src/contracts/secondaries/secondary-customers/index.ts +0 -55
  182. package/src/contracts/secondaries/secondary-issuers/index.ts +0 -94
  183. package/src/contracts/secondaries/secondary-orders/index.ts +0 -56
  184. package/src/contracts/secondaries/secondary-securities/index.ts +0 -95
  185. package/src/contracts/secondaries/secondary-trades/index.ts +0 -56
  186. package/types/index.mjs +0 -10320
@@ -0,0 +1,76 @@
1
+ import { PhoneZodSchema } from './phone.type';
2
+
3
+ describe('PhoneSchema Tests', () => {
4
+ it('should pass if US phone is valid', () => {
5
+ const phone = '+1-212-456-7890';
6
+ const parseRes = PhoneZodSchema.safeParse(phone);
7
+
8
+ const result = parseRes.success;
9
+ expect(result).toBeTruthy();
10
+ });
11
+
12
+ it('should pass if EG phone is valid', () => {
13
+ const phone = '+201088511706';
14
+ const parseRes = PhoneZodSchema.safeParse(phone);
15
+
16
+ const result = parseRes.success;
17
+ expect(result).toBeTruthy();
18
+ });
19
+
20
+ it('should fail if EG phone is not valid', () => {
21
+ const phone = '+2010885101706';
22
+ const parseRes = PhoneZodSchema.safeParse(phone);
23
+
24
+ const result = parseRes.success;
25
+ expect(result).toBeFalsy();
26
+ });
27
+
28
+ it('should fail if phone is not valid', () => {
29
+ const phone = '+201706';
30
+ const parseRes = PhoneZodSchema.safeParse(phone);
31
+
32
+ const result = parseRes.success;
33
+ expect(result).toBeFalsy();
34
+ });
35
+
36
+ it('should not fail if phone is empty string', () => {
37
+ const phone = '';
38
+ const parseRes = PhoneZodSchema.safeParse(phone);
39
+
40
+ const result = parseRes.success;
41
+ expect(result).toBeTruthy();
42
+ });
43
+
44
+ it('should fail if phone is too long string', () => {
45
+ const phone = '+125055501990001';
46
+ const parseRes = PhoneZodSchema.safeParse(phone);
47
+
48
+ const result = parseRes.success;
49
+ expect(result).toBeFalsy();
50
+ });
51
+
52
+ it('should fail if phone contains letters', () => {
53
+ const phone = '+12505d50199';
54
+ const parseRes = PhoneZodSchema.safeParse(phone);
55
+
56
+ const result = parseRes.success;
57
+ expect(result).toBeFalsy();
58
+ });
59
+
60
+ it('should pass if US phone is valid', () => {
61
+ const phone = '+12505550199';
62
+ const parseRes = PhoneZodSchema.safeParse(phone);
63
+
64
+ const result = parseRes.success;
65
+ expect(result).toBeTruthy();
66
+ });
67
+
68
+ it('should pass if US phone is valid', () => {
69
+ const phone = '+12124567890';
70
+
71
+ const parseRes = PhoneZodSchema.safeParse(phone);
72
+
73
+ const result = parseRes.success;
74
+ expect(result).toBeTruthy();
75
+ });
76
+ });
@@ -1,3 +1,4 @@
1
+ import { JobsOptions } from 'bullmq';
1
2
  import { typeid } from 'typeid-js';
2
3
 
3
4
  export enum QueueFrequency {
@@ -0,0 +1,40 @@
1
+ import { Job } from 'bullmq';
2
+ import { QueryRunner } from 'typeorm';
3
+ import { Site } from '../../sites/entities/site.entity';
4
+ import { ProcessTradeCancellationReminderDto } from '../../workers/dto.worker';
5
+
6
+ export enum ReminderType {
7
+ DAILY = 'daily',
8
+ CUMULATIVE = 'cumulative',
9
+ WARNING = 'warning',
10
+ CANCEL = 'cancel',
11
+ SKIP = 'skip', // for days with no action
12
+ }
13
+
14
+ export interface ReminderConfig {
15
+ day: number;
16
+ type: ReminderType;
17
+ daysLeft?: number; // for warning type
18
+ createTask?: boolean; // for daily type
19
+ priority?: 'low' | 'medium' | 'high' | 'urgent';
20
+ }
21
+
22
+ export interface ReminderTemplate {
23
+ subject: (params: ReminderTemplateParams) => string;
24
+ description: (params: ReminderTemplateParams) => string;
25
+ }
26
+
27
+ export interface ReminderTemplateParams {
28
+ day: number;
29
+ offeringName: string;
30
+ daysLeft?: number;
31
+ userName: string;
32
+ tradeStatus: string;
33
+ }
34
+
35
+ export interface ReminderContext {
36
+ queryRunner: QueryRunner;
37
+ job: Job<ProcessTradeCancellationReminderDto>;
38
+ site: Site;
39
+ logContext: any;
40
+ }
@@ -0,0 +1,134 @@
1
+ import {
2
+ SiteLinkType,
3
+ PostSiteLinkZod,
4
+ createSocialMediaUrlSchema,
5
+ } from './site-link.types';
6
+
7
+ describe('PostSiteLinkZod', () => {
8
+ it('should validate a valid Facebook link', () => {
9
+ const validData = {
10
+ type: SiteLinkType.FACEBOOK,
11
+ url: 'https://facebook.com/validpage',
12
+ };
13
+
14
+ const result = PostSiteLinkZod.safeParse(validData);
15
+ expect(result.success).toBe(true);
16
+ });
17
+
18
+ it('should validate a valid LinkedIn link', () => {
19
+ const validData = {
20
+ type: SiteLinkType.LINKEDIN,
21
+ url: 'https://linkedin.com/in/validprofile',
22
+ };
23
+
24
+ const result = PostSiteLinkZod.safeParse(validData);
25
+ expect(result.success).toBe(true);
26
+ });
27
+
28
+ it('should validate a valid Twitter link', () => {
29
+ const validData = {
30
+ type: SiteLinkType.TWITTER,
31
+ url: 'https://twitter.com/validhandle',
32
+ };
33
+
34
+ const result = PostSiteLinkZod.safeParse(validData);
35
+ expect(result.success).toBe(true);
36
+ });
37
+
38
+ it('should validate when url is null', () => {
39
+ const validData = {
40
+ type: SiteLinkType.FACEBOOK,
41
+ url: null,
42
+ };
43
+
44
+ const result = PostSiteLinkZod.safeParse(validData);
45
+ expect(result.success).toBe(true);
46
+ });
47
+
48
+ it('should validate when url is undefined', () => {
49
+ const validData = {
50
+ type: SiteLinkType.FACEBOOK,
51
+ };
52
+
53
+ const result = PostSiteLinkZod.safeParse(validData);
54
+ expect(result.success).toBe(true);
55
+ });
56
+
57
+ it('should validate a WEBSITE type with any valid URL', () => {
58
+ const validData = {
59
+ type: SiteLinkType.WEBSITE,
60
+ url: 'https://example.com',
61
+ };
62
+
63
+ const result = PostSiteLinkZod.safeParse(validData);
64
+ expect(result.success).toBe(true);
65
+ });
66
+
67
+ it('should validate an OTHER type with any valid URL', () => {
68
+ const validData = {
69
+ type: SiteLinkType.OTHER,
70
+ url: 'https://example.org',
71
+ };
72
+
73
+ const result = PostSiteLinkZod.safeParse(validData);
74
+ expect(result.success).toBe(true);
75
+ });
76
+
77
+ it('should reject an invalid Facebook URL', () => {
78
+ const invalidData = {
79
+ type: SiteLinkType.FACEBOOK,
80
+ url: 'https://not-facebook.com/profile',
81
+ };
82
+
83
+ const result = PostSiteLinkZod.safeParse(invalidData);
84
+ expect(result.success).toBe(false);
85
+ if (!result.success) {
86
+ expect(result.error.issues[0]!.path).toContain('url');
87
+ }
88
+ });
89
+
90
+ it('should reject an invalid URL format', () => {
91
+ const invalidData = {
92
+ type: SiteLinkType.WEBSITE,
93
+ url: 'not-a-valid-url',
94
+ };
95
+
96
+ const result = PostSiteLinkZod.safeParse(invalidData);
97
+ expect(result.success).toBe(false);
98
+ });
99
+
100
+ it('should require type field', () => {
101
+ const invalidData = {
102
+ url: 'https://example.com',
103
+ };
104
+
105
+ const result = PostSiteLinkZod.safeParse(invalidData as any);
106
+ expect(result.success).toBe(false);
107
+ });
108
+ });
109
+
110
+ describe('createSocialMediaUrlSchema', () => {
111
+ it('should validate a correct Facebook URL', () => {
112
+ const schema = createSocialMediaUrlSchema(SiteLinkType.FACEBOOK);
113
+ const result = schema.safeParse('https://facebook.com/validpage');
114
+ expect(result.success).toBe(true);
115
+ });
116
+
117
+ it('should validate a correct Facebook URL with www', () => {
118
+ const schema = createSocialMediaUrlSchema(SiteLinkType.FACEBOOK);
119
+ const result = schema.safeParse('https://www.facebook.com/validpage');
120
+ expect(result.success).toBe(true);
121
+ });
122
+
123
+ it('should reject an incorrect Facebook URL', () => {
124
+ const schema = createSocialMediaUrlSchema(SiteLinkType.FACEBOOK);
125
+ const result = schema.safeParse('https://not-facebook.com/profile');
126
+ expect(result.success).toBe(false);
127
+ });
128
+
129
+ it('should handle null values', () => {
130
+ const schema = createSocialMediaUrlSchema(SiteLinkType.FACEBOOK);
131
+ const result = schema.safeParse(null);
132
+ expect(result.success).toBe(true);
133
+ });
134
+ });
@@ -53,10 +53,8 @@ import {
53
53
  SecondaryTrade,
54
54
  SecondaryTradeFiltersZod,
55
55
  } from './secondary-trade.types';
56
-
57
- // Stub types for backend entities (not included in contracts package)
58
- type InvestorAccount = Record<string, unknown>;
59
- type Trade = Record<string, unknown>;
56
+ import { InvestorAccount } from '../../investor-accounts/entities/investor-account.entity';
57
+ import { Trade } from '../../trades/entities/trade.entity';
60
58
 
61
59
  extendZodWithOpenApi(z);
62
60
  export const CheckResultsSchema = z.object({