@dalmore/api-contracts 0.0.0-dev.582cb9c → 0.0.0-dev.5e42638

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 (201) hide show
  1. package/README.md +23 -19
  2. package/common/types/account-contact.types.ts +2 -1
  3. package/common/types/account-manager.types.ts +3 -7
  4. package/common/types/account-setting.types.ts +65 -0
  5. package/common/types/account.types.ts +1 -0
  6. package/common/types/auth.types.ts +7 -18
  7. package/common/types/bonus-tier.types.ts +33 -0
  8. package/common/types/cart.types.ts +4 -1
  9. package/common/types/common.types.ts +38 -6
  10. package/common/types/comply-advantage-api.types.ts +3 -3
  11. package/common/types/contact-us.types.ts +6 -2
  12. package/common/types/covered-person.types.ts +2 -1
  13. package/common/types/dashboard.types.ts +2 -9
  14. package/common/types/disbursements.types.ts +97 -3
  15. package/common/types/escrow-account.types.ts +3 -3
  16. package/common/types/individuals.types.ts +5 -17
  17. package/common/types/investor-account.types.ts +2 -1
  18. package/common/types/invite.types.ts +27 -1
  19. package/common/types/issuer-offering.types.ts +11 -17
  20. package/common/types/legal-entity.types.ts +3 -2
  21. package/common/types/mail-template.types.ts +34 -0
  22. package/common/types/note.types.ts +1 -1
  23. package/common/types/notification.types.ts +525 -29
  24. package/common/types/offering.types.ts +2 -9
  25. package/common/types/site-settings.types.ts +2 -1
  26. package/common/types/site.types.ts +2 -9
  27. package/common/types/{trade-line-item.type.ts → trade-line-item.types.ts} +2 -9
  28. package/common/types/trade.types.ts +48 -2
  29. package/common/types/transaction.types.ts +12 -1
  30. package/common/types/trusted-contact.types.ts +7 -7
  31. package/common/types/user.types.ts +17 -33
  32. package/common/types/webhook.types.ts +142 -0
  33. package/contracts/clients/cart/index.ts +21 -1
  34. package/contracts/clients/index.ts +2 -0
  35. package/contracts/clients/trade-line-items/index.ts +1 -1
  36. package/contracts/clients/trades/index.ts +1 -1
  37. package/contracts/{investors → clients}/transactions/index.ts +3 -3
  38. package/index.ts +10 -0
  39. package/package.json +23 -32
  40. package/contracts/compliance/account-contacts/index.ts +0 -82
  41. package/contracts/compliance/account-managers/index.ts +0 -142
  42. package/contracts/compliance/accounts/index.ts +0 -187
  43. package/contracts/compliance/activities/index.ts +0 -55
  44. package/contracts/compliance/aic/index.ts +0 -60
  45. package/contracts/compliance/api-keys/index.ts +0 -91
  46. package/contracts/compliance/assets/index.ts +0 -122
  47. package/contracts/compliance/auth/index.ts +0 -134
  48. package/contracts/compliance/batch-jobs/index.ts +0 -62
  49. package/contracts/compliance/bonus-tiers/index.ts +0 -55
  50. package/contracts/compliance/checklist/index.ts +0 -87
  51. package/contracts/compliance/checklist-items/index.ts +0 -86
  52. package/contracts/compliance/covered-persons/index.ts +0 -97
  53. package/contracts/compliance/dashboard/index.ts +0 -111
  54. package/contracts/compliance/data-records/index.ts +0 -116
  55. package/contracts/compliance/data-rooms/index.ts +0 -113
  56. package/contracts/compliance/default-theme-configs/index.ts +0 -95
  57. package/contracts/compliance/disbursement/index.ts +0 -165
  58. package/contracts/compliance/disbursement-approval-users/index.ts +0 -84
  59. package/contracts/compliance/disbursement-transactions/index.ts +0 -37
  60. package/contracts/compliance/domain-filters/index.ts +0 -117
  61. package/contracts/compliance/email-themes/index.ts +0 -284
  62. package/contracts/compliance/escrow-accounts/index.ts +0 -85
  63. package/contracts/compliance/exchange-api-keys/index.ts +0 -129
  64. package/contracts/compliance/exchange-imports/index.ts +0 -137
  65. package/contracts/compliance/files/index.ts +0 -267
  66. package/contracts/compliance/files-public/index.ts +0 -188
  67. package/contracts/compliance/health/index.ts +0 -26
  68. package/contracts/compliance/index.ts +0 -147
  69. package/contracts/compliance/individuals/index.ts +0 -57
  70. package/contracts/compliance/investor-accounts/index.ts +0 -141
  71. package/contracts/compliance/invites/index.ts +0 -137
  72. package/contracts/compliance/issuer-bank-accounts/index.ts +0 -81
  73. package/contracts/compliance/issuer-payment-methods/index.ts +0 -81
  74. package/contracts/compliance/issuers/index.ts +0 -97
  75. package/contracts/compliance/job-items/index.ts +0 -58
  76. package/contracts/compliance/jobs/index.ts +0 -59
  77. package/contracts/compliance/kyb/index.ts +0 -54
  78. package/contracts/compliance/kyc/index.ts +0 -77
  79. package/contracts/compliance/legal-entities/index.ts +0 -57
  80. package/contracts/compliance/login-histories/index.ts +0 -37
  81. package/contracts/compliance/notes/index.ts +0 -69
  82. package/contracts/compliance/notion-databases/index.ts +0 -107
  83. package/contracts/compliance/notion-pages/index.ts +0 -105
  84. package/contracts/compliance/offering-reports/index.ts +0 -149
  85. package/contracts/compliance/offerings/index.ts +0 -233
  86. package/contracts/compliance/pages/index.ts +0 -178
  87. package/contracts/compliance/payment-methods/index.ts +0 -57
  88. package/contracts/compliance/rejection-reasons/index.ts +0 -32
  89. package/contracts/compliance/review/index.ts +0 -169
  90. package/contracts/compliance/roles/index.ts +0 -34
  91. package/contracts/compliance/secondary-customers/index.ts +0 -77
  92. package/contracts/compliance/secondary-orders/index.ts +0 -60
  93. package/contracts/compliance/secondary-trades/index.ts +0 -100
  94. package/contracts/compliance/secure-requests/index.ts +0 -54
  95. package/contracts/compliance/signer/index.ts +0 -369
  96. package/contracts/compliance/site-links/index.ts +0 -128
  97. package/contracts/compliance/site-settings/index.ts +0 -669
  98. package/contracts/compliance/sites/index.ts +0 -56
  99. package/contracts/compliance/state-machine/index.ts +0 -94
  100. package/contracts/compliance/tasks/index.ts +0 -91
  101. package/contracts/compliance/third-parties/index.ts +0 -52
  102. package/contracts/compliance/trade-line-items/index.ts +0 -59
  103. package/contracts/compliance/trades/index.ts +0 -230
  104. package/contracts/compliance/transactions/index.ts +0 -161
  105. package/contracts/compliance/user-manuals/index.ts +0 -271
  106. package/contracts/compliance/user-settings/index.ts +0 -189
  107. package/contracts/compliance/users/index.ts +0 -200
  108. package/contracts/compliance/webhooks/index.ts +0 -41
  109. package/contracts/compliance-apikey/accounts/index.ts +0 -58
  110. package/contracts/compliance-apikey/index.ts +0 -14
  111. package/contracts/index.ts +0 -6
  112. package/contracts/investors/account-contacts/index.ts +0 -58
  113. package/contracts/investors/aic/index.ts +0 -59
  114. package/contracts/investors/assets/index.ts +0 -61
  115. package/contracts/investors/auth/index.ts +0 -116
  116. package/contracts/investors/bonus-tiers/index.ts +0 -37
  117. package/contracts/investors/cart/index.ts +0 -75
  118. package/contracts/investors/contact-us/index.ts +0 -48
  119. package/contracts/investors/data-records/index.ts +0 -113
  120. package/contracts/investors/data-rooms/index.ts +0 -96
  121. package/contracts/investors/files/index.ts +0 -167
  122. package/contracts/investors/files-public/index.ts +0 -185
  123. package/contracts/investors/index.ts +0 -72
  124. package/contracts/investors/individuals/index.ts +0 -121
  125. package/contracts/investors/investor-accounts/index.ts +0 -110
  126. package/contracts/investors/issuer-payment-methods/index.ts +0 -36
  127. package/contracts/investors/issuers/index.ts +0 -30
  128. package/contracts/investors/legal-entities/index.ts +0 -93
  129. package/contracts/investors/notes/index.ts +0 -69
  130. package/contracts/investors/offerings/index.ts +0 -93
  131. package/contracts/investors/pages/index.ts +0 -88
  132. package/contracts/investors/payment-methods/index.ts +0 -149
  133. package/contracts/investors/portfolios/index.ts +0 -53
  134. package/contracts/investors/sites/index.ts +0 -96
  135. package/contracts/investors/tasks/index.ts +0 -111
  136. package/contracts/investors/trade-line-items/index.ts +0 -75
  137. package/contracts/investors/trades/index.ts +0 -114
  138. package/contracts/investors/trusted-contacts/index.ts +0 -93
  139. package/contracts/investors/user-manuals/index.ts +0 -62
  140. package/contracts/investors/user-settings/index.ts +0 -170
  141. package/contracts/investors/users/index.ts +0 -45
  142. package/contracts/investors/webhooks/index.ts +0 -30
  143. package/contracts/issuers/account-contacts/index.ts +0 -76
  144. package/contracts/issuers/account-integrations/index.ts +0 -97
  145. package/contracts/issuers/accounts/index.ts +0 -97
  146. package/contracts/issuers/activities/index.ts +0 -54
  147. package/contracts/issuers/aic/index.ts +0 -39
  148. package/contracts/issuers/api-key-logs/index.ts +0 -53
  149. package/contracts/issuers/api-keys/index.ts +0 -93
  150. package/contracts/issuers/assets/index.ts +0 -122
  151. package/contracts/issuers/auth/index.ts +0 -152
  152. package/contracts/issuers/bonus-tiers/index.ts +0 -55
  153. package/contracts/issuers/contact-us/index.ts +0 -48
  154. package/contracts/issuers/covered-persons/index.ts +0 -136
  155. package/contracts/issuers/dashboard/index.ts +0 -72
  156. package/contracts/issuers/data-records/index.ts +0 -257
  157. package/contracts/issuers/data-rooms/index.ts +0 -134
  158. package/contracts/issuers/disbursement-approval-users/index.ts +0 -82
  159. package/contracts/issuers/disbursement-transactions/index.ts +0 -53
  160. package/contracts/issuers/disbursements/index.ts +0 -171
  161. package/contracts/issuers/email-themes/index.ts +0 -242
  162. package/contracts/issuers/escrow-accounts/index.ts +0 -81
  163. package/contracts/issuers/exchange-api-keys/index.ts +0 -144
  164. package/contracts/issuers/files/index.ts +0 -166
  165. package/contracts/issuers/files-public/index.ts +0 -166
  166. package/contracts/issuers/health/index.ts +0 -24
  167. package/contracts/issuers/index.ts +0 -112
  168. package/contracts/issuers/investor-accounts/index.ts +0 -148
  169. package/contracts/issuers/invites/index.ts +0 -129
  170. package/contracts/issuers/issuer/index.ts +0 -94
  171. package/contracts/issuers/issuer-bank-accounts/index.ts +0 -81
  172. package/contracts/issuers/issuer-payment-methods/index.ts +0 -136
  173. package/contracts/issuers/kyc/index.ts +0 -38
  174. package/contracts/issuers/login-histories/index.ts +0 -51
  175. package/contracts/issuers/notes/index.ts +0 -69
  176. package/contracts/issuers/offerings/index.ts +0 -206
  177. package/contracts/issuers/pages/index.ts +0 -138
  178. package/contracts/issuers/payment-methods/index.ts +0 -61
  179. package/contracts/issuers/portfolios/index.ts +0 -36
  180. package/contracts/issuers/rejection-reasons/index.ts +0 -32
  181. package/contracts/issuers/review/index.ts +0 -63
  182. package/contracts/issuers/secondary-customers/index.ts +0 -55
  183. package/contracts/issuers/secondary-orders/index.ts +0 -57
  184. package/contracts/issuers/secondary-trades/index.ts +0 -57
  185. package/contracts/issuers/secure-requests/index.ts +0 -34
  186. package/contracts/issuers/site-links/index.ts +0 -116
  187. package/contracts/issuers/site-settings/index.ts +0 -585
  188. package/contracts/issuers/sites/index.ts +0 -32
  189. package/contracts/issuers/tasks/index.ts +0 -111
  190. package/contracts/issuers/trades/index.ts +0 -132
  191. package/contracts/issuers/transactions/index.ts +0 -158
  192. package/contracts/issuers/user-manuals/index.ts +0 -62
  193. package/contracts/issuers/user-settings/index.ts +0 -170
  194. package/contracts/issuers/users/index.ts +0 -126
  195. package/contracts/secondaries/accounts/index.ts +0 -58
  196. package/contracts/secondaries/index.ts +0 -23
  197. package/contracts/secondaries/secondary-customers/index.ts +0 -55
  198. package/contracts/secondaries/secondary-issuers/index.ts +0 -94
  199. package/contracts/secondaries/secondary-orders/index.ts +0 -56
  200. package/contracts/secondaries/secondary-securities/index.ts +0 -95
  201. package/contracts/secondaries/secondary-trades/index.ts +0 -56
@@ -22,12 +22,13 @@ import {
22
22
  AccountStatus,
23
23
  SavedQuery,
24
24
  } from './common.types';
25
- import { offeringIdSchema } from './offering.types';
25
+ import { IOffering, offeringIdSchema } from './offering.types';
26
26
  import { IBaseEntity } from './entity.types';
27
27
  import { extendZodWithOpenApi } from '@anatine/zod-openapi';
28
28
  import { TypeID } from 'typeid-js';
29
29
  import {
30
30
  paymentMethodIdSchema,
31
+ PaymentMethodResponse,
31
32
  PaymentMethodType,
32
33
  } from './payment-methods.types';
33
34
  import {
@@ -35,11 +36,12 @@ import {
35
36
  InvestorAccountExportFilters,
36
37
  ComplianceInvestorAccountExportFilters,
37
38
  RegisteredInvestorUserRawZod,
39
+ IInvestorAccount,
38
40
  } from './investor-account.types';
39
41
  import {
40
42
  tradeLineItemIdSchema,
41
43
  TradeLineItemZod,
42
- } from './trade-line-item.type';
44
+ } from './trade-line-item.types';
43
45
  import { TradeAdjustmentZod } from './trade-adjustment.type';
44
46
  import { TransactionZod } from './transaction.types';
45
47
  import { accountIdSchema } from './account.types';
@@ -132,6 +134,7 @@ export const CheckResultsSchema = z.object({
132
134
  export type CheckResults = z.infer<typeof CheckResultsSchema>;
133
135
 
134
136
  export const TradeIdPrefix = 'trade';
137
+ export const TradeSnapshotIdPrefix = 'trade_snapshot';
135
138
 
136
139
  export const tradeIdSchema = z.string().refine(
137
140
  (value) => {
@@ -170,6 +173,21 @@ export const tradeIdOrTidSchema = z.union([
170
173
  .openapi({ example: 'tid_00041061050r3gg28a1c60t3gf' }),
171
174
  ]);
172
175
 
176
+ export const tradeSnapshotIdSchema = z.string().refine(
177
+ (value) => {
178
+ try {
179
+ const tid = TypeID.fromString(value);
180
+ return tid.getType() === TradeSnapshotIdPrefix;
181
+ } catch {
182
+ return false;
183
+ }
184
+ },
185
+ {
186
+ message:
187
+ 'Invalid trade snapshot ID format. Must be a valid TypeID with "trade_snapshot" prefix. ex: trade_snapshot_00041061050r3gg28a1c60t3gf',
188
+ },
189
+ );
190
+
173
191
  export enum SaStatus {
174
192
  PENDING = BaseStatus.PENDING,
175
193
  SIGNED = BaseStatus.SIGNED,
@@ -274,9 +292,21 @@ export type TradeBalanceResultZod = z.infer<typeof TradeBalanceResultZod>;
274
292
 
275
293
  export const TradeZod = IBaseEntity.extend({
276
294
  investorAccountId: z.lazy(() => investorAccountIdSchema.nullable()),
295
+ investorAccount: z
296
+ .lazy(() => IInvestorAccount)
297
+ .optional()
298
+ .nullable(),
299
+ offering: z
300
+ .lazy(() => IOffering)
301
+ .optional()
302
+ .nullable(),
277
303
  accountId: accountIdSchema.nullable(),
278
304
  offeringId: z.lazy(() => offeringIdSchema.nullable()),
279
305
  paymentMethodId: z.lazy(() => paymentMethodIdSchema).nullable(),
306
+ paymentMethod: z
307
+ .lazy(() => PaymentMethodResponse)
308
+ .optional()
309
+ .nullable(),
280
310
  userId: z.lazy(() => userIdSchema.nullable()),
281
311
  tradeNumber: z.string(),
282
312
  ip: z.string().nullable(),
@@ -342,6 +372,21 @@ export const TradeZod = IBaseEntity.extend({
342
372
  });
343
373
  export type TradeZod = z.infer<typeof TradeZod>;
344
374
 
375
+ export enum SnapshotEvent {
376
+ COMPLIANCE_APPROVED = 'COMPLIANCE_APPROVED',
377
+ COMPLIANCE_REJECTED = 'COMPLIANCE_REJECTED',
378
+ CANCELLED = 'CANCELLED',
379
+ PLACED = 'PLACED',
380
+ SETTLED = 'SETTLED',
381
+ }
382
+
383
+ export const GetTradeSnapshotEventsResponse = z.object({
384
+ events: z.array(z.nativeEnum(SnapshotEvent)),
385
+ });
386
+ export type GetTradeSnapshotEventsResponse = z.infer<
387
+ typeof GetTradeSnapshotEventsResponse
388
+ >;
389
+
345
390
  export const IPaginatedTrade = z.object({
346
391
  items: z.array(TradeZod),
347
392
  meta: IPaginationMeta,
@@ -424,6 +469,7 @@ export const TradeFiltersZod = z.object({
424
469
  .openapi({
425
470
  example: 'issuer_01jfw4q6qef30s6fpqtsxw94ya',
426
471
  }),
472
+ snapshotEvent: z.nativeEnum(SnapshotEvent).optional(),
427
473
  offeringType: z.nativeEnum(OfferingType).optional(),
428
474
  managedBy: z.nativeEnum(ManagedByType).optional(),
429
475
  platform: z.nativeEnum(Platforms).optional(),
@@ -1,10 +1,11 @@
1
+ import { z } from 'zod';
2
+ import { extendZodWithOpenApi } from '@anatine/zod-openapi';
1
3
  import { TypeID } from 'typeid-js';
2
4
  import {
3
5
  dateSchema,
4
6
  InvestorAccountType,
5
7
  numberPrecisionSchema,
6
8
  } from './common.types';
7
- import { z } from 'zod';
8
9
  import { IBaseEntity } from './entity.types';
9
10
  import { accountIdSchema } from './account.types';
10
11
  import {
@@ -18,7 +19,9 @@ import {
18
19
  investorAccountIdSchema,
19
20
  } from './investor-account.types';
20
21
  import { TransactionStatus, TransactionType } from './common.types';
22
+ import { userIdSchema } from './user.types';
21
23
  export { TransactionStatus, TransactionType };
24
+ extendZodWithOpenApi(z);
22
25
 
23
26
  export enum RefundPaymentMethod {
24
27
  CHECK = 'CHECK',
@@ -115,6 +118,14 @@ export type InvestorPostTransactionZod = z.infer<
115
118
  typeof InvestorPostTransactionZod
116
119
  >;
117
120
 
121
+ export const ClientPostTransactionZod = InvestorPostTransactionZod.extend({
122
+ userId: z
123
+ .lazy(() => userIdSchema)
124
+ .openapi({ example: 'user_01j5y5ghx5fg68d663j1fvy2x7' }),
125
+ });
126
+
127
+ export type ClientPostTransactionZod = z.infer<typeof ClientPostTransactionZod>;
128
+
118
129
  export const refundTransactionIdSchema = z.string().refine(
119
130
  (value) => {
120
131
  try {
@@ -2,7 +2,11 @@ import { extendZodWithOpenApi } from '@anatine/zod-openapi';
2
2
  import { TypeID } from 'typeid-js';
3
3
  import { z } from 'zod';
4
4
  import { IBaseEntity } from './entity.types';
5
- import { IPaginationMeta, TrustedContactRelationship } from './common.types';
5
+ import {
6
+ EmailSchema,
7
+ IPaginationMeta,
8
+ TrustedContactRelationship,
9
+ } from './common.types';
6
10
  import { PhoneZodSchema } from './phone.type';
7
11
  import { AddressSchema } from './address.types';
8
12
  import { investorAccountIdSchema } from './investor-account.types';
@@ -68,7 +72,7 @@ export const PostTrustedContactZod = z
68
72
  .object({
69
73
  firstName: z.string().min(1).max(255).openapi({ example: 'John' }),
70
74
  lastName: z.string().min(1).max(255).openapi({ example: 'Doe' }),
71
- email: z.string().email().openapi({ example: 'john.doe@example.com' }),
75
+ email: EmailSchema.openapi({ example: 'john.doe@example.com' }),
72
76
  phone: PhoneZodSchema.nullable().optional(),
73
77
  relationship: z
74
78
  .nativeEnum(TrustedContactRelationship)
@@ -92,11 +96,7 @@ export const PatchTrustedContactZod = z
92
96
  .optional()
93
97
  .openapi({ example: 'John' }),
94
98
  lastName: z.string().min(1).max(255).optional().openapi({ example: 'Doe' }),
95
- email: z
96
- .string()
97
- .email()
98
- .optional()
99
- .openapi({ example: 'john.doe@example.com' }),
99
+ email: EmailSchema.optional(),
100
100
  phone: PhoneZodSchema.nullable().optional(),
101
101
  relationship: z.nativeEnum(TrustedContactRelationship).optional().openapi({
102
102
  example: TrustedContactRelationship.CHILD,
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ import { extendZodWithOpenApi } from '@anatine/zod-openapi';
2
3
  import {
3
4
  AccountStatus,
4
5
  AccountWithoutUsersZod,
@@ -7,12 +8,12 @@ import {
7
8
  ManagedByType,
8
9
  OfferingType,
9
10
  PortalType,
11
+ StringToBooleanSchema,
10
12
  UserRole,
11
- UserStatus,
12
13
  UserType,
14
+ EmailSchema,
13
15
  } from './common.types';
14
16
  import { dateOrString, IBaseEntity } from './entity.types';
15
- import { extendZodWithOpenApi } from '@anatine/zod-openapi';
16
17
  import { PhoneZodSchema } from './phone.type';
17
18
  import { IInvestorAccount } from './investor-account.types';
18
19
  import { TradeZod } from './trade.types';
@@ -51,6 +52,11 @@ export const UserDeleteResponse = z.object({
51
52
  });
52
53
  export type UserDeleteResponse = z.infer<typeof UserDeleteResponse>;
53
54
 
55
+ export const UserRestoreResponse = z.object({
56
+ message: z.string(),
57
+ });
58
+ export type UserRestoreResponse = z.infer<typeof UserRestoreResponse>;
59
+
54
60
  export const GetMeResponse = IBaseEntity.extend({
55
61
  accountId: z.string().nullable(),
56
62
  accountName: z.string().nullable(),
@@ -59,7 +65,7 @@ export const GetMeResponse = IBaseEntity.extend({
59
65
  email: z.string().email(),
60
66
  provider: z.string(),
61
67
  active: z.boolean(),
62
- status: z.lazy(() => z.nativeEnum(UserStatus)),
68
+ locked: z.boolean(),
63
69
  lastLoginAt: dateOrString.nullable(),
64
70
  loginCount: z.number(),
65
71
  role: z.string(),
@@ -142,11 +148,7 @@ export const UserMeUpdateZod = z.object({
142
148
  firstName: z.string().optional(),
143
149
  lastName: z.string().optional(),
144
150
  password: z.string().min(6).optional(),
145
- email: z
146
- .string()
147
- .email()
148
- .transform((val) => val.toLowerCase())
149
- .optional(),
151
+ email: EmailSchema.optional(),
150
152
  });
151
153
 
152
154
  export const UserZod = IBaseEntity.extend({
@@ -157,7 +159,7 @@ export const UserZod = IBaseEntity.extend({
157
159
  onboarding: z.string().nullable(),
158
160
  account: AccountWithoutUsersZod.optional(),
159
161
  active: z.boolean(),
160
- status: z.nativeEnum(UserStatus),
162
+ locked: z.boolean(),
161
163
  userLogin: IBaseEntity.extend({
162
164
  firstName: z.string(),
163
165
  lastName: z.string(),
@@ -179,27 +181,9 @@ export const UserFiltersZod = z.object({
179
181
  search: z.string().max(50).optional(),
180
182
  role: z.nativeEnum(UserRole).optional(),
181
183
  portal: z.string().optional(),
182
- status: z.nativeEnum(UserStatus).optional(),
183
- active: z
184
- .string()
185
- .optional()
186
- .refine((v) => !v || v === 'true' || v === 'false', {
187
- message: 'active must be a boolean string',
188
- })
189
- .transform((v) => {
190
- if (!v) return undefined;
191
- return v === 'true';
192
- }),
193
- twoFactorEnabled: z
194
- .string()
195
- .optional()
196
- .refine((v) => !v || v === 'true' || v === 'false', {
197
- message: 'twoFactorEnabled must be a boolean string',
198
- })
199
- .transform((v) => {
200
- if (!v) return undefined;
201
- return v === 'true';
202
- }),
184
+ locked: StringToBooleanSchema.optional(),
185
+ active: StringToBooleanSchema.optional(),
186
+ twoFactorEnabled: StringToBooleanSchema.optional(),
203
187
  });
204
188
 
205
189
  const usersInclude = z.enum(['account', 'role']);
@@ -274,7 +258,7 @@ export type IssuerUsersStatusUpdateResponse = z.infer<
274
258
  >;
275
259
 
276
260
  export const UpdateLockedStatus = z.object({
277
- status: z.nativeEnum(UserStatus),
261
+ locked: z.boolean(),
278
262
  });
279
263
 
280
264
  export type UpdateLockedStatus = z.infer<typeof UpdateLockedStatus>;
@@ -285,7 +269,7 @@ export const UsersSummaryFilterZod = z.object({
285
269
  portalType: z.nativeEnum(PortalType).optional(),
286
270
  search: z.string().trim().max(50).optional(),
287
271
  selectRole: z.nativeEnum(UserRole).optional(),
288
- status: z.nativeEnum(UserStatus).optional(),
272
+ locked: StringToBooleanSchema.optional(),
289
273
  });
290
274
  export type UsersSummaryFilterZod = z.infer<typeof UsersSummaryFilterZod>;
291
275
 
@@ -299,7 +283,7 @@ export const UsersSummaryZod = z.object({
299
283
  portalType: z.string(),
300
284
  loginCount: z.number().int(),
301
285
  lastLogin: z.date(),
302
- status: z.nativeEnum(UserStatus),
286
+ locked: z.boolean(),
303
287
  });
304
288
  export type UsersSummaryZod = z.infer<typeof UsersSummaryZod>;
305
289
 
@@ -1,6 +1,148 @@
1
1
  import { z } from 'zod';
2
2
  import { PersonaStatus } from './common.types';
3
3
 
4
+ /**
5
+ * Hook0 Webhook Provider Types
6
+ *
7
+ * Types for interacting with Hook0's webhooks-as-a-service API.
8
+ * @see https://documentation.hook0.com/api - API Reference
9
+ */
10
+
11
+ /**
12
+ * Hook0 API error response format.
13
+ * @see https://documentation.hook0.com/api
14
+ */
15
+ export const Hook0ApiErrorSchema = z.object({
16
+ type: z.string(),
17
+ status: z.number(),
18
+ title: z.string(),
19
+ detail: z.string(),
20
+ validation: z.unknown().nullable(),
21
+ id: z.string(),
22
+ });
23
+ export type Hook0ApiError = z.infer<typeof Hook0ApiErrorSchema>;
24
+
25
+ /**
26
+ * Error returned from Hook0 provider operations.
27
+ * Wraps Hook0 API errors with additional context.
28
+ */
29
+ export const Hook0ProviderErrorSchema = z.object({
30
+ message: z.string(),
31
+ statusCode: z.number().optional(),
32
+ code: z.string().optional(),
33
+ apiError: Hook0ApiErrorSchema.optional(),
34
+ });
35
+ export type Hook0ProviderError = z.infer<typeof Hook0ProviderErrorSchema>;
36
+
37
+ /**
38
+ * Hook0 subscription target configuration.
39
+ * Defines where and how webhooks are delivered.
40
+ * @see https://documentation.hook0.com/reference/subscriptionscreate
41
+ */
42
+ export const Hook0SubscriptionTargetSchema = z.object({
43
+ type: z.literal('http'),
44
+ method: z.string(),
45
+ url: z.string().url(),
46
+ headers: z.record(z.string()).optional(),
47
+ });
48
+ export type Hook0SubscriptionTarget = z.infer<
49
+ typeof Hook0SubscriptionTargetSchema
50
+ >;
51
+
52
+ /**
53
+ * Hook0 subscription response from create/get operations.
54
+ * @see https://documentation.hook0.com/reference/subscriptionscreate
55
+ * @see https://documentation.hook0.com/reference/subscriptionsget
56
+ */
57
+ export const Hook0SubscriptionResponseSchema = z.object({
58
+ subscription_id: z.string().uuid(),
59
+ application_id: z.string().uuid(),
60
+ created_at: z.string().datetime().optional(),
61
+ dedicated_workers: z.array(z.string()).optional(),
62
+ description: z.string().optional(),
63
+ event_types: z.array(z.string()).optional(),
64
+ is_enabled: z.boolean().optional(),
65
+ label_key: z.string().optional(),
66
+ label_value: z.string().optional(),
67
+ labels: z.record(z.string()).optional(),
68
+ metadata: z.record(z.string()).optional(),
69
+ secret: z.string(),
70
+ target: Hook0SubscriptionTargetSchema.optional(),
71
+ });
72
+ export type Hook0SubscriptionResponse = z.infer<
73
+ typeof Hook0SubscriptionResponseSchema
74
+ >;
75
+
76
+ /**
77
+ * Simplified subscription result returned to callers.
78
+ */
79
+ export const WebhookSubscriptionSchema = z.object({
80
+ subscriptionId: z.string(),
81
+ secret: z.string(),
82
+ });
83
+ export type WebhookSubscription = z.infer<typeof WebhookSubscriptionSchema>;
84
+
85
+ /**
86
+ * Hook0 event type response from create operation.
87
+ * @see https://documentation.hook0.com/reference/eventtypescreate
88
+ */
89
+ export const Hook0EventTypeResponseSchema = z.object({
90
+ service_name: z.string(),
91
+ resource_type_name: z.string(),
92
+ verb_name: z.string(),
93
+ event_type_name: z.string(),
94
+ });
95
+ export type Hook0EventTypeResponse = z.infer<
96
+ typeof Hook0EventTypeResponseSchema
97
+ >;
98
+
99
+ /**
100
+ * Hook0 event type list item.
101
+ * @see https://documentation.hook0.com/reference/eventtypeslist
102
+ */
103
+ export const Hook0EventTypeSchema = z.object({
104
+ name: z.string(),
105
+ service: z.string().optional(),
106
+ resource_type: z.string().optional(),
107
+ verb: z.string().optional(),
108
+ });
109
+ export type Hook0EventType = z.infer<typeof Hook0EventTypeSchema>;
110
+
111
+ /**
112
+ * Hook0 event ingestion response.
113
+ * @see https://documentation.hook0.com/api/#tag/events-ingestion/POST/api/v1/event/
114
+ */
115
+ export const Hook0EventResponseSchema = z.object({
116
+ event_id: z.string().uuid().optional(),
117
+ received_at: z.string().datetime().optional(),
118
+ });
119
+ export type Hook0EventResponse = z.infer<typeof Hook0EventResponseSchema>;
120
+
121
+ /**
122
+ * Simplified event response returned to callers.
123
+ */
124
+ export const WebhookEventResponseSchema = z.object({
125
+ eventId: z.string(),
126
+ receivedAt: z.string(),
127
+ });
128
+ export type WebhookEventResponse = z.infer<typeof WebhookEventResponseSchema>;
129
+
130
+ /**
131
+ * Payload sent when ingesting events to Hook0.
132
+ * Contains activity data to be delivered to webhook subscribers.
133
+ */
134
+ export const WebhookEventPayloadSchema = z.object({
135
+ activityId: z.string(),
136
+ activityType: z.string(),
137
+ accountId: z.string(),
138
+ targetId: z.string().nullable(),
139
+ targetTable: z.string().nullable(),
140
+ message: z.string(),
141
+ metadata: z.record(z.unknown()),
142
+ occurredAt: z.string(),
143
+ });
144
+ export type WebhookEventPayload = z.infer<typeof WebhookEventPayloadSchema>;
145
+
4
146
  export const WebhookReceived = z.object({
5
147
  received: z.boolean(),
6
148
  });
@@ -10,7 +10,11 @@ import {
10
10
  userIdSchema,
11
11
  tradeIdSchema,
12
12
  } from '../../../common/types';
13
- import { PatchCartBody } from '../../../common/types/cart.types';
13
+ import {
14
+ PatchCartBody,
15
+ ClientPlacetradeBody,
16
+ PlaceTradeResponse,
17
+ } from '../../../common/types/cart.types';
14
18
 
15
19
  const c = initContract();
16
20
 
@@ -34,6 +38,22 @@ export const cartContract = c.router(
34
38
  500: InternalError,
35
39
  },
36
40
  },
41
+ postCheckout: {
42
+ summary: 'Place a trade (checkout button)',
43
+ method: 'POST',
44
+ path: '/checkout',
45
+ metadata: {
46
+ auth: true,
47
+ },
48
+ body: ClientPlacetradeBody,
49
+ responses: {
50
+ 200: PlaceTradeResponse,
51
+ 400: BadRequestError,
52
+ 401: UnauthorizedError,
53
+ 403: ForbiddenError,
54
+ 500: InternalError,
55
+ },
56
+ },
37
57
  patchCart: {
38
58
  summary: 'Patch a cart',
39
59
  method: 'PATCH',
@@ -19,6 +19,7 @@ import { sitesContract } from './sites';
19
19
  import { paymentMethodsContract } from './payment-methods';
20
20
  import { issuerPaymentMethodsContract } from './issuer-payment-methods';
21
21
  import { tradeLineItemsContract } from './trade-line-items';
22
+ import { clientsTransactionsContract } from './transactions';
22
23
 
23
24
  const c = initContract();
24
25
 
@@ -45,6 +46,7 @@ export const clientsContract = c.router(
45
46
  sites: sitesContract,
46
47
  tradeLineItems: tradeLineItemsContract,
47
48
  trades: tradesContract,
49
+ transactions: clientsTransactionsContract,
48
50
  },
49
51
  {
50
52
  pathPrefix: '/clients/api/v1/',
@@ -14,7 +14,7 @@ import {
14
14
  TradeLineItemQuery,
15
15
  TradeLineItemResponse,
16
16
  TradeLineItemUpdate,
17
- } from '../../../common/types/trade-line-item.type';
17
+ } from '../../../common/types/trade-line-item.types';
18
18
 
19
19
  const c = initContract();
20
20
 
@@ -26,7 +26,7 @@ import {
26
26
  PostTradeLineItem,
27
27
  TradeLineItemQuery,
28
28
  TradeLineItemResponse,
29
- } from '../../../common/types/trade-line-item.type';
29
+ } from '../../../common/types/trade-line-item.types';
30
30
 
31
31
  const c = initContract();
32
32
 
@@ -6,13 +6,13 @@ import {
6
6
  UnauthorizedError,
7
7
  } from '../../../common/types';
8
8
  import {
9
- InvestorPostTransactionZod,
9
+ ClientPostTransactionZod,
10
10
  TransactionZod,
11
11
  } from '../../../common/types/transaction.types';
12
12
 
13
13
  const c = initContract();
14
14
 
15
- export const investorsTransactionsContract = c.router(
15
+ export const clientsTransactionsContract = c.router(
16
16
  {
17
17
  postTransaction: {
18
18
  summary: 'Create a transaction',
@@ -21,7 +21,7 @@ export const investorsTransactionsContract = c.router(
21
21
  metadata: {
22
22
  auth: true,
23
23
  },
24
- body: InvestorPostTransactionZod,
24
+ body: ClientPostTransactionZod,
25
25
  responses: {
26
26
  201: TransactionZod,
27
27
  400: BadRequestError,
package/index.ts ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @dalmore/api-contracts
3
+ * Main entry point - re-exports clients contract and types
4
+ */
5
+
6
+ // Re-export clients contract
7
+ export * from './contracts/clients/index.js';
8
+
9
+ // Re-export all common types
10
+ export * from './common/types/index.js';
package/package.json CHANGED
@@ -1,48 +1,42 @@
1
1
  {
2
2
  "name": "@dalmore/api-contracts",
3
- "version": "0.0.0-dev.582cb9c",
3
+ "version": "0.0.0-dev.5e42638",
4
4
  "description": "Type-safe API contracts for Dalmore Client Portal",
5
- "main": "./contracts/index.ts",
6
- "types": "./contracts/index.ts",
5
+ "type": "module",
6
+ "main": "./index.ts",
7
+ "types": "./index.ts",
7
8
  "exports": {
8
9
  ".": {
9
- "types": "./contracts/index.ts",
10
- "default": "./contracts/index.ts"
11
- },
12
- "./compliance": {
13
- "types": "./contracts/compliance/index.ts",
14
- "default": "./contracts/compliance/index.ts"
15
- },
16
- "./investors": {
17
- "types": "./contracts/investors/index.ts",
18
- "default": "./contracts/investors/index.ts"
19
- },
20
- "./issuers": {
21
- "types": "./contracts/issuers/index.ts",
22
- "default": "./contracts/issuers/index.ts"
10
+ "types": "./index.ts",
11
+ "import": "./index.ts",
12
+ "default": "./index.ts"
23
13
  },
24
14
  "./clients": {
25
15
  "types": "./contracts/clients/index.ts",
16
+ "import": "./contracts/clients/index.ts",
26
17
  "default": "./contracts/clients/index.ts"
27
18
  },
28
- "./secondaries": {
29
- "types": "./contracts/secondaries/index.ts",
30
- "default": "./contracts/secondaries/index.ts"
31
- },
32
- "./compliance-apikey": {
33
- "types": "./contracts/compliance-apikey/index.ts",
34
- "default": "./contracts/compliance-apikey/index.ts"
35
- },
36
19
  "./types": {
37
20
  "types": "./common/types/index.ts",
21
+ "import": "./common/types/index.ts",
38
22
  "default": "./common/types/index.ts"
39
- },
40
- "./types/*": {
41
- "types": "./common/types/*.ts",
42
- "default": "./common/types/*.ts"
23
+ }
24
+ },
25
+ "typesVersions": {
26
+ "*": {
27
+ ".": [
28
+ "./index.ts"
29
+ ],
30
+ "clients": [
31
+ "./contracts/clients/index.ts"
32
+ ],
33
+ "types": [
34
+ "./common/types/index.ts"
35
+ ]
43
36
  }
44
37
  },
45
38
  "files": [
39
+ "index.ts",
46
40
  "contracts",
47
41
  "common"
48
42
  ],
@@ -68,9 +62,6 @@
68
62
  "typeid-js": "^1.2.0",
69
63
  "zod": "^3.24.4"
70
64
  },
71
- "devDependencies": {
72
- "typescript": "^5.8.3"
73
- },
74
65
  "engines": {
75
66
  "node": ">=24.0.0 <25.0.0"
76
67
  }