@dalmore/api-contracts 0.0.0-dev.801385 → 0.0.0-dev.9d42e16

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 (176) hide show
  1. package/README.md +23 -19
  2. package/common/types/account.types.ts +1 -0
  3. package/common/types/comply-advantage-api.types.ts +3 -3
  4. package/common/types/mail-template.types.ts +34 -0
  5. package/common/types/notification.types.ts +10 -0
  6. package/common/types/trade.types.ts +2 -0
  7. package/common/types/webhook.types.ts +142 -0
  8. package/index.ts +10 -0
  9. package/package.json +23 -32
  10. package/contracts/compliance/account-contacts/index.ts +0 -82
  11. package/contracts/compliance/account-managers/index.ts +0 -142
  12. package/contracts/compliance/account-settings/index.ts +0 -59
  13. package/contracts/compliance/accounts/index.ts +0 -187
  14. package/contracts/compliance/activities/index.ts +0 -55
  15. package/contracts/compliance/aic/index.ts +0 -60
  16. package/contracts/compliance/api-keys/index.ts +0 -91
  17. package/contracts/compliance/assets/index.ts +0 -122
  18. package/contracts/compliance/auth/index.ts +0 -135
  19. package/contracts/compliance/batch-jobs/index.ts +0 -62
  20. package/contracts/compliance/bonus-tiers/index.ts +0 -74
  21. package/contracts/compliance/checklist/index.ts +0 -87
  22. package/contracts/compliance/checklist-items/index.ts +0 -86
  23. package/contracts/compliance/covered-persons/index.ts +0 -97
  24. package/contracts/compliance/dashboard/index.ts +0 -111
  25. package/contracts/compliance/data-records/index.ts +0 -116
  26. package/contracts/compliance/data-rooms/index.ts +0 -113
  27. package/contracts/compliance/default-theme-configs/index.ts +0 -95
  28. package/contracts/compliance/disbursement/index.ts +0 -165
  29. package/contracts/compliance/disbursement-approval-users/index.ts +0 -84
  30. package/contracts/compliance/disbursement-transactions/index.ts +0 -37
  31. package/contracts/compliance/domain-filters/index.ts +0 -117
  32. package/contracts/compliance/email-themes/index.ts +0 -284
  33. package/contracts/compliance/escrow-accounts/index.ts +0 -85
  34. package/contracts/compliance/exchange-api-keys/index.ts +0 -129
  35. package/contracts/compliance/exchange-imports/index.ts +0 -137
  36. package/contracts/compliance/files/index.ts +0 -267
  37. package/contracts/compliance/files-public/index.ts +0 -188
  38. package/contracts/compliance/health/index.ts +0 -26
  39. package/contracts/compliance/index.ts +0 -151
  40. package/contracts/compliance/individuals/index.ts +0 -57
  41. package/contracts/compliance/investor-accounts/index.ts +0 -141
  42. package/contracts/compliance/invites/index.ts +0 -129
  43. package/contracts/compliance/issuer-bank-accounts/index.ts +0 -81
  44. package/contracts/compliance/issuer-payment-methods/index.ts +0 -81
  45. package/contracts/compliance/issuers/index.ts +0 -97
  46. package/contracts/compliance/job-items/index.ts +0 -58
  47. package/contracts/compliance/jobs/index.ts +0 -59
  48. package/contracts/compliance/kyb/index.ts +0 -54
  49. package/contracts/compliance/kyc/index.ts +0 -77
  50. package/contracts/compliance/legal-entities/index.ts +0 -57
  51. package/contracts/compliance/login-histories/index.ts +0 -37
  52. package/contracts/compliance/notes/index.ts +0 -69
  53. package/contracts/compliance/notification-channels/index.ts +0 -251
  54. package/contracts/compliance/notion-databases/index.ts +0 -107
  55. package/contracts/compliance/notion-pages/index.ts +0 -105
  56. package/contracts/compliance/offering-reports/index.ts +0 -149
  57. package/contracts/compliance/offerings/index.ts +0 -233
  58. package/contracts/compliance/pages/index.ts +0 -178
  59. package/contracts/compliance/payment-methods/index.ts +0 -57
  60. package/contracts/compliance/rejection-reasons/index.ts +0 -32
  61. package/contracts/compliance/review/index.ts +0 -169
  62. package/contracts/compliance/roles/index.ts +0 -34
  63. package/contracts/compliance/secondary-customers/index.ts +0 -77
  64. package/contracts/compliance/secondary-orders/index.ts +0 -60
  65. package/contracts/compliance/secondary-trades/index.ts +0 -100
  66. package/contracts/compliance/secure-requests/index.ts +0 -54
  67. package/contracts/compliance/signer/index.ts +0 -369
  68. package/contracts/compliance/site-links/index.ts +0 -128
  69. package/contracts/compliance/site-settings/index.ts +0 -669
  70. package/contracts/compliance/sites/index.ts +0 -56
  71. package/contracts/compliance/state-machine/index.ts +0 -94
  72. package/contracts/compliance/tasks/index.ts +0 -91
  73. package/contracts/compliance/third-parties/index.ts +0 -52
  74. package/contracts/compliance/trade-line-items/index.ts +0 -59
  75. package/contracts/compliance/trades/index.ts +0 -249
  76. package/contracts/compliance/transactions/index.ts +0 -161
  77. package/contracts/compliance/user-manuals/index.ts +0 -271
  78. package/contracts/compliance/user-settings/index.ts +0 -189
  79. package/contracts/compliance/users/index.ts +0 -221
  80. package/contracts/compliance/webhooks/index.ts +0 -41
  81. package/contracts/compliance-apikey/accounts/index.ts +0 -58
  82. package/contracts/compliance-apikey/index.ts +0 -14
  83. package/contracts/index.ts +0 -6
  84. package/contracts/investors/account-contacts/index.ts +0 -58
  85. package/contracts/investors/aic/index.ts +0 -59
  86. package/contracts/investors/assets/index.ts +0 -61
  87. package/contracts/investors/auth/index.ts +0 -116
  88. package/contracts/investors/bonus-tiers/index.ts +0 -55
  89. package/contracts/investors/cart/index.ts +0 -75
  90. package/contracts/investors/contact-us/index.ts +0 -48
  91. package/contracts/investors/data-records/index.ts +0 -113
  92. package/contracts/investors/data-rooms/index.ts +0 -96
  93. package/contracts/investors/files/index.ts +0 -167
  94. package/contracts/investors/files-public/index.ts +0 -185
  95. package/contracts/investors/index.ts +0 -72
  96. package/contracts/investors/individuals/index.ts +0 -121
  97. package/contracts/investors/investor-accounts/index.ts +0 -110
  98. package/contracts/investors/issuer-payment-methods/index.ts +0 -36
  99. package/contracts/investors/issuers/index.ts +0 -30
  100. package/contracts/investors/legal-entities/index.ts +0 -93
  101. package/contracts/investors/notes/index.ts +0 -69
  102. package/contracts/investors/offerings/index.ts +0 -93
  103. package/contracts/investors/pages/index.ts +0 -88
  104. package/contracts/investors/payment-methods/index.ts +0 -149
  105. package/contracts/investors/portfolios/index.ts +0 -53
  106. package/contracts/investors/sites/index.ts +0 -96
  107. package/contracts/investors/tasks/index.ts +0 -111
  108. package/contracts/investors/trade-line-items/index.ts +0 -75
  109. package/contracts/investors/trades/index.ts +0 -114
  110. package/contracts/investors/transactions/index.ts +0 -37
  111. package/contracts/investors/trusted-contacts/index.ts +0 -93
  112. package/contracts/investors/user-manuals/index.ts +0 -62
  113. package/contracts/investors/user-settings/index.ts +0 -170
  114. package/contracts/investors/users/index.ts +0 -45
  115. package/contracts/investors/webhooks/index.ts +0 -30
  116. package/contracts/issuers/account-contacts/index.ts +0 -76
  117. package/contracts/issuers/account-integrations/index.ts +0 -97
  118. package/contracts/issuers/account-settings/index.ts +0 -36
  119. package/contracts/issuers/accounts/index.ts +0 -97
  120. package/contracts/issuers/activities/index.ts +0 -54
  121. package/contracts/issuers/aic/index.ts +0 -39
  122. package/contracts/issuers/api-key-logs/index.ts +0 -53
  123. package/contracts/issuers/api-keys/index.ts +0 -93
  124. package/contracts/issuers/assets/index.ts +0 -122
  125. package/contracts/issuers/auth/index.ts +0 -153
  126. package/contracts/issuers/bonus-tiers/index.ts +0 -73
  127. package/contracts/issuers/contact-us/index.ts +0 -48
  128. package/contracts/issuers/covered-persons/index.ts +0 -136
  129. package/contracts/issuers/dashboard/index.ts +0 -72
  130. package/contracts/issuers/data-records/index.ts +0 -257
  131. package/contracts/issuers/data-rooms/index.ts +0 -134
  132. package/contracts/issuers/disbursement-approval-users/index.ts +0 -82
  133. package/contracts/issuers/disbursement-transactions/index.ts +0 -53
  134. package/contracts/issuers/disbursements/index.ts +0 -189
  135. package/contracts/issuers/email-themes/index.ts +0 -242
  136. package/contracts/issuers/escrow-accounts/index.ts +0 -81
  137. package/contracts/issuers/exchange-api-keys/index.ts +0 -144
  138. package/contracts/issuers/files/index.ts +0 -166
  139. package/contracts/issuers/files-public/index.ts +0 -166
  140. package/contracts/issuers/health/index.ts +0 -24
  141. package/contracts/issuers/index.ts +0 -116
  142. package/contracts/issuers/investor-accounts/index.ts +0 -148
  143. package/contracts/issuers/invites/index.ts +0 -129
  144. package/contracts/issuers/issuer/index.ts +0 -94
  145. package/contracts/issuers/issuer-bank-accounts/index.ts +0 -81
  146. package/contracts/issuers/issuer-payment-methods/index.ts +0 -136
  147. package/contracts/issuers/kyc/index.ts +0 -38
  148. package/contracts/issuers/login-histories/index.ts +0 -51
  149. package/contracts/issuers/notes/index.ts +0 -69
  150. package/contracts/issuers/notification-channels/index.ts +0 -251
  151. package/contracts/issuers/offerings/index.ts +0 -206
  152. package/contracts/issuers/pages/index.ts +0 -138
  153. package/contracts/issuers/payment-methods/index.ts +0 -61
  154. package/contracts/issuers/portfolios/index.ts +0 -36
  155. package/contracts/issuers/rejection-reasons/index.ts +0 -32
  156. package/contracts/issuers/review/index.ts +0 -63
  157. package/contracts/issuers/secondary-customers/index.ts +0 -55
  158. package/contracts/issuers/secondary-orders/index.ts +0 -57
  159. package/contracts/issuers/secondary-trades/index.ts +0 -57
  160. package/contracts/issuers/secure-requests/index.ts +0 -34
  161. package/contracts/issuers/site-links/index.ts +0 -116
  162. package/contracts/issuers/site-settings/index.ts +0 -585
  163. package/contracts/issuers/sites/index.ts +0 -32
  164. package/contracts/issuers/tasks/index.ts +0 -111
  165. package/contracts/issuers/trades/index.ts +0 -132
  166. package/contracts/issuers/transactions/index.ts +0 -158
  167. package/contracts/issuers/user-manuals/index.ts +0 -62
  168. package/contracts/issuers/user-settings/index.ts +0 -170
  169. package/contracts/issuers/users/index.ts +0 -126
  170. package/contracts/secondaries/accounts/index.ts +0 -58
  171. package/contracts/secondaries/index.ts +0 -23
  172. package/contracts/secondaries/secondary-customers/index.ts +0 -55
  173. package/contracts/secondaries/secondary-issuers/index.ts +0 -94
  174. package/contracts/secondaries/secondary-orders/index.ts +0 -56
  175. package/contracts/secondaries/secondary-securities/index.ts +0 -95
  176. package/contracts/secondaries/secondary-trades/index.ts +0 -56
package/README.md CHANGED
@@ -14,32 +14,33 @@ npm install @dalmore/api-contracts@dev
14
14
 
15
15
  ## Usage
16
16
 
17
- ### Import specific contracts (recommended for tree-shaking)
17
+ ### Import from main entry
18
18
 
19
19
  ```typescript
20
- import { complianceContract } from '@dalmore/api-contracts/compliance';
21
- import { investorsContract } from '@dalmore/api-contracts/investors';
22
- import { issuersContract } from '@dalmore/api-contracts/issuers';
23
- import { clientsContract } from '@dalmore/api-contracts/clients';
20
+ import { clientsContract } from '@dalmore/api-contracts';
21
+ import type { IInvestorAccount } from '@dalmore/api-contracts';
24
22
  ```
25
23
 
26
- ### Import types
24
+ ### Import specific subpaths (recommended for tree-shaking)
27
25
 
28
26
  ```typescript
29
- import type { IInvestorAccount } from '@dalmore/api-contracts/types/investor-account.types';
30
- import type { ITrade } from '@dalmore/api-contracts/types/trade.types';
27
+ // Import clients contract
28
+ import { clientsContract } from '@dalmore/api-contracts/clients';
29
+
30
+ // Import types
31
+ import type { IInvestorAccount, ITrade } from '@dalmore/api-contracts/types';
31
32
  ```
32
33
 
33
34
  ### Create a typed client
34
35
 
35
36
  ```typescript
36
- import { complianceContract } from '@dalmore/api-contracts/compliance';
37
+ import { clientsContract } from '@dalmore/api-contracts/clients';
37
38
  import { initClient } from '@ts-rest/core';
38
39
 
39
- const client = initClient(complianceContract, {
40
+ const client = initClient(clientsContract, {
40
41
  baseUrl: 'https://platform.dalmoregroup.com',
41
42
  baseHeaders: {
42
- Authorization: `Bearer ${token}`,
43
+ 'X-API-Key': `${apiKey}`,
43
44
  },
44
45
  });
45
46
 
@@ -53,17 +54,20 @@ const { status, body } = await client.accounts.getAccounts({
53
54
 
54
55
  This package requires the following peer dependencies:
55
56
 
56
- - `@ts-rest/core` ^3.0.0
57
- - `zod` ^3.0.0
57
+ - `@anatine/zod-openapi` ^1.14.2
58
+ - `@ts-rest/core` ^3.52.1
59
+ - `typeid-js` ^1.2.0
60
+ - `zod` ^3.24.4
58
61
 
59
- ## Available Contracts
62
+ ## Available Exports
60
63
 
61
- - `complianceContract` - Compliance portal API
62
- - `investorsContract` - Investor portal API
63
- - `issuersContract` - Issuer portal API
64
64
  - `clientsContract` - Client API (API key auth)
65
- - `secondariesContract` - Secondaries API
66
- - `complianceApiKeyContract` - Compliance API (API key auth)
65
+
66
+ ## Available Subpath Exports
67
+
68
+ - `@dalmore/api-contracts` - Main entry (clients contract and types)
69
+ - `@dalmore/api-contracts/clients` - Clients contract
70
+ - `@dalmore/api-contracts/types` - All common types
67
71
 
68
72
  ## TypeScript Configuration
69
73
 
@@ -101,6 +101,7 @@ const accountsInclude = z.enum([
101
101
  'issuers',
102
102
  'legalEntities',
103
103
  'offerings',
104
+ 'pages',
104
105
  'sites',
105
106
  'trades',
106
107
  'users',
@@ -30,7 +30,7 @@ export const CreateSearchRequestSchema = z.object({
30
30
  .optional(),
31
31
  })
32
32
  .optional(),
33
- tags: z.record(z.string()).optional(),
33
+ tags: z.union([z.record(z.string()), z.array(z.any())]).optional(),
34
34
  share_url: z.union([z.literal(0), z.literal(1)]).optional(),
35
35
  exact_match: z.boolean().optional(),
36
36
  });
@@ -268,7 +268,7 @@ export const GetSearchDetailsResponseSchema = z.object({
268
268
  total_matches: z.number(),
269
269
  updated_at: z.string(),
270
270
  created_at: z.string(),
271
- tags: z.record(z.string()).optional(),
271
+ tags: z.union([z.record(z.string()), z.array(z.any())]).optional(),
272
272
  labels: z
273
273
  .array(
274
274
  z.object({
@@ -310,7 +310,7 @@ export const UpdateSearchRequestSchema = z.object({
310
310
  risk_level: z.enum(['low', 'medium', 'high', 'unknown']).optional(),
311
311
  assignee_id: z.number().optional(),
312
312
  limit: z.number().int().max(100).optional(),
313
- tags: z.record(z.string()).optional(),
313
+ tags: z.union([z.record(z.string()), z.array(z.any())]).optional(),
314
314
  });
315
315
 
316
316
  export type UpdateSearchRequest = z.infer<typeof UpdateSearchRequestSchema>;
@@ -434,3 +434,37 @@ export type EmailThemeSetting = z.infer<typeof EmailThemeSettingZod>;
434
434
 
435
435
  export const EmailThemeSettingsZod = z.array(EmailThemeSettingZod);
436
436
  export type EmailThemeSettingsZod = z.infer<typeof EmailThemeSettingsZod>;
437
+
438
+ /**
439
+ * Response from a successful email send operation.
440
+ * Based on SendGrid SDK's ClientResponse structure.
441
+ */
442
+ export const EmailSendResponseSchema = z.object({
443
+ /** HTTP status code from SendGrid (e.g., 202 for accepted) */
444
+ statusCode: z.number(),
445
+ /** SendGrid's x-message-id header for tracking emails in their dashboard */
446
+ messageId: z.string().optional(),
447
+ /** Full response headers, available for debugging if needed */
448
+ headers: z.record(z.string(), z.unknown()).optional(),
449
+ });
450
+ export type EmailSendResponse = z.infer<typeof EmailSendResponseSchema>;
451
+
452
+ /**
453
+ * Error from a failed email send operation.
454
+ * Fields are optional because error shapes vary depending on failure type
455
+ * (network errors vs SendGrid API errors).
456
+ */
457
+ export const EmailSendErrorSchema = z.object({
458
+ /** Human-readable error message */
459
+ message: z.string(),
460
+ /** Network-level error code (e.g., 'ECONNREFUSED', 'ETIMEDOUT') */
461
+ code: z.string().optional(),
462
+ /** HTTP status code if request reached SendGrid (e.g., 400, 401, 403, 413, 500) */
463
+ statusCode: z.number().optional(),
464
+ /**
465
+ * SendGrid's error response body. Structure: { errors: [{ message, field, help, id }] }
466
+ * @see https://www.twilio.com/docs/sendgrid/api-reference/mail-send/mail-send#responses
467
+ */
468
+ response: z.unknown().optional(),
469
+ });
470
+ export type EmailSendError = z.infer<typeof EmailSendErrorSchema>;
@@ -208,6 +208,16 @@ export type EmailNotificationPayload = z.infer<
208
208
  typeof EmailNotificationPayloadSchema
209
209
  >;
210
210
 
211
+ /**
212
+ * Payload for Slack notifications sent via Incoming Webhooks.
213
+ *
214
+ * @property webhookUrl - Slack Incoming Webhook URL
215
+ * @property channelEmail - Slack channel email integration (alternative delivery method)
216
+ * @property message - Plain text message (also serves as fallback for notifications)
217
+ * @property blocks - Optional Slack Block Kit elements for rich message formatting.
218
+ * Blocks allow structured layouts with headers, sections, images, buttons, etc.
219
+ * @see https://docs.slack.dev/messaging/creating-interactive-messages
220
+ */
211
221
  export const SlackNotificationPayloadSchema = z.object({
212
222
  webhookUrl: z.string().url().optional(),
213
223
  channelEmail: z.string().email().optional(),
@@ -21,6 +21,7 @@ import {
21
21
  createDateSchema,
22
22
  AccountStatus,
23
23
  SavedQuery,
24
+ AccountZod,
24
25
  } from './common.types';
25
26
  import { IOffering, offeringIdSchema } from './offering.types';
26
27
  import { IBaseEntity } from './entity.types';
@@ -301,6 +302,7 @@ export const TradeZod = IBaseEntity.extend({
301
302
  .optional()
302
303
  .nullable(),
303
304
  accountId: accountIdSchema.nullable(),
305
+ account: z.lazy(() => AccountZod).nullable(),
304
306
  offeringId: z.lazy(() => offeringIdSchema.nullable()),
305
307
  paymentMethodId: z.lazy(() => paymentMethodIdSchema).nullable(),
306
308
  paymentMethod: z
@@ -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
  });
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.801385",
3
+ "version": "0.0.0-dev.9d42e16",
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
  }
@@ -1,82 +0,0 @@
1
- import { initContract } from '@ts-rest/core';
2
- import {
3
- accountIdSchema,
4
- BadRequestError,
5
- ForbiddenError,
6
- InternalError,
7
- NotFoundError,
8
- UnauthorizedError,
9
- } from '../../../common/types';
10
- import {
11
- accountContactIdSchema,
12
- CompliancePatchAccountContactZod,
13
- IAccountContact,
14
- } from '../../../common/types/account-contact.types';
15
- import { z } from 'zod';
16
-
17
- const c = initContract();
18
-
19
- export const accountContactsContract = c.router(
20
- {
21
- getAccountContacts: {
22
- summary: '[ADMIN] Get Account Contacts',
23
- method: 'GET',
24
- path: '',
25
- metadata: {
26
- auth: true,
27
- },
28
- query: z.object({
29
- accountId: accountIdSchema,
30
- }),
31
- responses: {
32
- 200: z.array(IAccountContact),
33
- 401: UnauthorizedError,
34
- 403: ForbiddenError,
35
- 500: InternalError,
36
- },
37
- },
38
- getAccountContact: {
39
- summary: '[ADMIN] Get account contact by id',
40
- method: 'GET',
41
- path: '/:id',
42
- metadata: {
43
- auth: true,
44
- },
45
- pathParams: z.object({
46
- id: accountContactIdSchema,
47
- }),
48
- query: z.object({
49
- accountId: accountIdSchema,
50
- }),
51
- responses: {
52
- 200: IAccountContact,
53
- 401: UnauthorizedError,
54
- 403: ForbiddenError,
55
- 404: NotFoundError,
56
- },
57
- },
58
- patchAccountContact: {
59
- summary: '[ADMIN] Update account contact',
60
- method: 'PATCH',
61
- path: '/:id',
62
- metadata: {
63
- auth: true,
64
- },
65
- pathParams: z.object({
66
- id: accountContactIdSchema,
67
- }),
68
- body: CompliancePatchAccountContactZod,
69
- responses: {
70
- 200: IAccountContact,
71
- 400: BadRequestError,
72
- 401: UnauthorizedError,
73
- 403: ForbiddenError,
74
- 404: NotFoundError,
75
- 500: InternalError,
76
- },
77
- },
78
- },
79
- {
80
- pathPrefix: 'account-contacts',
81
- },
82
- );
@@ -1,142 +0,0 @@
1
- import { initContract } from '@ts-rest/core';
2
- import { z } from 'zod';
3
- import {
4
- BadRequestError,
5
- ForbiddenError,
6
- InternalError,
7
- NotFoundError,
8
- PaginationOptionsZod,
9
- PreconditionFailedError,
10
- UnauthorizedError,
11
- } from '../../../common/types';
12
- import {
13
- AccountManagerDeleteQuery,
14
- AccountManagerDeleteResponse,
15
- accountManagerIdSchema,
16
- AccountManagersIncludeQuery,
17
- IAccountManagerZod,
18
- IPaginatedAccountManager,
19
- PatchAccountManagerZod,
20
- PostAccountManagerZod,
21
- SetDefaultAccountManagerForAllAccountsResponse,
22
- } from '../../../common/types/account-manager.types';
23
-
24
- const c = initContract();
25
-
26
- export const accountManagersContract = c.router(
27
- {
28
- getAccountManagers: {
29
- summary: 'Get account managers',
30
- method: 'GET',
31
- path: '',
32
- metadata: {
33
- auth: true,
34
- },
35
- query: PaginationOptionsZod.merge(AccountManagersIncludeQuery),
36
- responses: {
37
- 200: IPaginatedAccountManager,
38
- 400: BadRequestError,
39
- 401: UnauthorizedError,
40
- 403: ForbiddenError,
41
- 500: InternalError,
42
- },
43
- },
44
- getAccountManager: {
45
- summary: 'Get account manager by id',
46
- method: 'GET',
47
- path: '/:id',
48
- metadata: {
49
- auth: true,
50
- },
51
- query: z.object({}).merge(AccountManagersIncludeQuery),
52
- pathParams: z.object({
53
- id: accountManagerIdSchema,
54
- }),
55
- responses: {
56
- 200: IAccountManagerZod,
57
- 400: BadRequestError,
58
- 401: UnauthorizedError,
59
- 403: ForbiddenError,
60
- 404: NotFoundError,
61
- 500: InternalError,
62
- },
63
- },
64
- setDefaultAccountManagerForAllAccounts: {
65
- summary: '[ADMIN] Set default account manager for all accounts',
66
- method: 'PATCH',
67
- path: '/set-default-for-all-accounts',
68
- metadata: {
69
- auth: true,
70
- },
71
- body: z.object({}),
72
- responses: {
73
- 200: SetDefaultAccountManagerForAllAccountsResponse,
74
- 400: BadRequestError,
75
- 401: UnauthorizedError,
76
- 403: ForbiddenError,
77
- 500: InternalError,
78
- },
79
- },
80
- patchAccountManager: {
81
- summary: 'Update account manager by id',
82
- method: 'PATCH',
83
- path: '/:id',
84
- metadata: {
85
- auth: true,
86
- },
87
- pathParams: z.object({
88
- id: accountManagerIdSchema,
89
- }),
90
- body: PatchAccountManagerZod,
91
- responses: {
92
- 201: IAccountManagerZod,
93
- 400: BadRequestError,
94
- 401: UnauthorizedError,
95
- 403: ForbiddenError,
96
- 404: NotFoundError,
97
- 500: InternalError,
98
- },
99
- },
100
- postAccountManager: {
101
- summary: 'Create account manager',
102
- method: 'POST',
103
- path: '',
104
- metadata: {
105
- auth: true,
106
- },
107
- body: PostAccountManagerZod,
108
- responses: {
109
- 201: IAccountManagerZod,
110
- 400: BadRequestError,
111
- 401: UnauthorizedError,
112
- 403: ForbiddenError,
113
- 500: InternalError,
114
- },
115
- },
116
- deleteAccountManager: {
117
- summary: 'Delete account manager by id',
118
- method: 'DELETE',
119
- path: '/:id',
120
- metadata: {
121
- auth: true,
122
- },
123
- pathParams: z.object({
124
- id: accountManagerIdSchema,
125
- }),
126
- query: AccountManagerDeleteQuery,
127
- responses: {
128
- 201: AccountManagerDeleteResponse,
129
- 400: BadRequestError,
130
- 401: UnauthorizedError,
131
- 403: ForbiddenError,
132
- 404: NotFoundError,
133
- 412: PreconditionFailedError,
134
- 500: InternalError,
135
- },
136
- },
137
- },
138
-
139
- {
140
- pathPrefix: 'account-managers',
141
- },
142
- );