@dalmore/api-contracts 1.0.7 → 1.0.8
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.
- package/README.md +18 -2
- package/index.mjs +1 -4
- package/package.json +4 -4
- package/src/common/types/account-contact.types.ts +98 -0
- package/src/common/types/account-detail.types.ts +27 -0
- package/src/common/types/account-integration.types.ts +143 -0
- package/src/common/types/account-manager.types.ts +124 -0
- package/src/common/types/account.types.ts +296 -0
- package/src/common/types/activity.types.ts +274 -0
- package/src/common/types/address.spec.ts +203 -0
- package/src/common/types/address.types.ts +41 -0
- package/src/common/types/aic.types.ts +246 -0
- package/src/common/types/aml.types.ts +18 -0
- package/src/common/types/api-key-logs.types.ts +66 -0
- package/src/common/types/api-keys.types.ts +69 -0
- package/src/common/types/asset.types.ts +338 -0
- package/src/common/types/auth.types.ts +370 -0
- package/src/common/types/batch-jobs.types.ts +151 -0
- package/src/common/types/bonus-tier.types.ts +147 -0
- package/src/common/types/cart.types.ts +18 -0
- package/src/common/types/checklist-items.types.ts +70 -0
- package/src/common/types/checklist.types.ts +97 -0
- package/src/common/types/common.types.spec.ts +336 -0
- package/src/common/types/common.types.ts +1520 -0
- package/src/common/types/comply-advantage-api.types.ts +316 -0
- package/src/common/types/comply-advantage.types.ts +25 -0
- package/src/common/types/contact-us.types.ts +107 -0
- package/src/common/types/contract-helpers.ts +205 -0
- package/src/common/types/countries.types.ts +375 -0
- package/src/common/types/covered-person.types.ts +274 -0
- package/src/common/types/dashboard.types.ts +799 -0
- package/src/common/types/data-record.types.ts +325 -0
- package/src/common/types/data-room.types.ts +242 -0
- package/src/common/types/default-theme-config.types.ts +87 -0
- package/src/common/types/disbursement-adjustment.types.ts +32 -0
- package/src/common/types/disbursement-approval-user.types.ts +100 -0
- package/src/common/types/disbursement-review.types.ts +110 -0
- package/src/common/types/disbursement-transaction.types.ts +72 -0
- package/src/common/types/disbursements.types.ts +310 -0
- package/src/common/types/domain-filter.types.ts +55 -0
- package/src/common/types/email-theme.types.ts +442 -0
- package/src/common/types/entity.types.ts +15 -0
- package/src/common/types/error-responses.types.ts +135 -0
- package/src/common/types/escrow-account.types.ts +104 -0
- package/src/common/types/exchange-api-key.types.ts +121 -0
- package/src/common/types/exchange-import.types.ts +36 -0
- package/src/common/types/exchange-provider.types.ts +329 -0
- package/src/common/types/file.types.ts +461 -0
- package/src/common/types/files.types.spec.ts +154 -0
- package/src/common/types/health.types.ts +29 -0
- package/src/common/types/index.ts +48 -0
- package/src/common/types/individuals.types.ts +554 -0
- package/src/common/types/investor-account.types.ts +1239 -0
- package/src/common/types/investorAccountIdSchema.type.ts +0 -0
- package/src/common/types/investors-offering.types.ts +65 -0
- package/src/common/types/invite.types.ts +133 -0
- package/src/common/types/issuer-bank-account.types.ts +107 -0
- package/src/common/types/issuer-offering.types.ts +306 -0
- package/src/common/types/issuer-payment-method.types.spec.ts +612 -0
- package/src/common/types/issuer-payment-method.types.ts +341 -0
- package/src/common/types/issuer.types.ts +312 -0
- package/src/common/types/job-item.types.ts +119 -0
- package/src/common/types/jobs.types.ts +171 -0
- package/src/common/types/kyb.types.ts +53 -0
- package/src/common/types/kyc.types.ts +188 -0
- package/src/common/types/legal-entity.types.ts +185 -0
- package/src/common/types/login-history.types.ts +46 -0
- package/src/common/types/mail-template.types.ts +436 -0
- package/src/common/types/north-cap-integration.types.ts +190 -0
- package/src/common/types/note.types.ts +109 -0
- package/src/common/types/notification.types.ts +58 -0
- package/src/common/types/notion-api.types.ts +374 -0
- package/src/common/types/notion-database.types.ts +125 -0
- package/src/common/types/notion-page.types.ts +267 -0
- package/src/common/types/offering-reports.types.ts +153 -0
- package/src/common/types/offering-submission.types.ts +314 -0
- package/src/common/types/offering.types.spec.ts +91 -0
- package/src/common/types/offering.types.ts +590 -0
- package/src/common/types/page-revision.types.ts +86 -0
- package/src/common/types/page.types.ts +436 -0
- package/src/common/types/password.type.ts +15 -0
- package/src/common/types/payment-methods.types.ts +298 -0
- package/src/common/types/phone.spec.ts +76 -0
- package/src/common/types/phone.type.ts +27 -0
- package/src/common/types/portfolio.types.ts +50 -0
- package/src/common/types/privacy-policy-and-tos.types.ts +231 -0
- package/src/common/types/queue.types.ts +112 -0
- package/src/common/types/registered-reps.types.ts +25 -0
- package/src/common/types/rejection-reasons.types.ts +56 -0
- package/src/common/types/reminder-config.types.ts +40 -0
- package/src/common/types/review.types.ts +133 -0
- package/src/common/types/role.types.ts +26 -0
- package/src/common/types/secondary-customer.types.ts +66 -0
- package/src/common/types/secondary-issuer.types.ts +50 -0
- package/src/common/types/secondary-order.types.ts +58 -0
- package/src/common/types/secondary-security.types.ts +60 -0
- package/src/common/types/secondary-trade.entity.ts +16 -0
- package/src/common/types/secondary-trade.types.ts +95 -0
- package/src/common/types/secure-request.types.ts +68 -0
- package/src/common/types/signer.types.ts +651 -0
- package/src/common/types/site-link.types.spec.ts +134 -0
- package/src/common/types/site-link.types.ts +166 -0
- package/src/common/types/site-settings.types.ts +726 -0
- package/src/common/types/site.types.ts +270 -0
- package/src/common/types/sms.types.ts +30 -0
- package/src/common/types/state-machine.types.ts +177 -0
- package/src/common/types/states.types.ts +163 -0
- package/src/common/types/subdoc-preview.types.ts +35 -0
- package/src/common/types/task.types.ts +258 -0
- package/src/common/types/trade-adjustment.type.ts +33 -0
- package/src/common/types/trade-line-item.type.ts +132 -0
- package/src/common/types/trade.types.ts +912 -0
- package/src/common/types/transaction.types.ts +198 -0
- package/src/common/types/trusted-contact.types.ts +122 -0
- package/src/common/types/typography.types.ts +75 -0
- package/src/common/types/user-manual.types.ts +290 -0
- package/src/common/types/user-setting.types.ts +133 -0
- package/src/common/types/user.types.ts +320 -0
- package/src/common/types/webhook.types.ts +588 -0
- package/src/common/types/zip.type.ts +36 -0
- package/src/contracts/clients/accounts/index.ts +61 -0
- package/src/contracts/clients/aic/index.ts +59 -0
- package/src/contracts/clients/api-key-logs/index.ts +53 -0
- package/src/contracts/clients/api-keys/index.ts +73 -0
- package/src/contracts/clients/assets/index.ts +102 -0
- package/src/contracts/clients/auth/index.ts +50 -0
- package/src/contracts/clients/files/index.ts +166 -0
- package/src/contracts/clients/files-public/index.ts +166 -0
- package/src/contracts/clients/index.ts +44 -0
- package/src/contracts/clients/individuals/index.ts +93 -0
- package/src/contracts/clients/investor-accounts/index.ts +93 -0
- package/src/contracts/clients/issuers/index.ts +94 -0
- package/src/contracts/clients/legal-entities/index.ts +93 -0
- package/src/contracts/clients/offerings/index.ts +117 -0
- package/src/contracts/clients/secure-requests/index.ts +34 -0
- package/src/contracts/clients/sites/index.ts +56 -0
- package/src/contracts/clients/trades/index.ts +122 -0
- package/dist/contracts/clients/index.d.ts +0 -19
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
const CountrySchema = z.object({
|
|
4
|
+
code: z.string().length(2),
|
|
5
|
+
name: z.string(),
|
|
6
|
+
});
|
|
7
|
+
type Country = z.infer<typeof CountrySchema>;
|
|
8
|
+
|
|
9
|
+
const CountriesSchema = z.array(CountrySchema);
|
|
10
|
+
|
|
11
|
+
const countries: Country[] = [
|
|
12
|
+
{ code: 'AD', name: 'Andorra' },
|
|
13
|
+
{ code: 'AE', name: 'United Arab Emirates' },
|
|
14
|
+
{ code: 'AF', name: 'Afghanistan' },
|
|
15
|
+
{ code: 'AG', name: 'Antigua and Barbuda' },
|
|
16
|
+
{ code: 'AI', name: 'Anguilla' },
|
|
17
|
+
{ code: 'AL', name: 'Albania' },
|
|
18
|
+
{ code: 'AM', name: 'Armenia' },
|
|
19
|
+
{ code: 'AO', name: 'Angola' },
|
|
20
|
+
{ code: 'AQ', name: 'Antarctica' },
|
|
21
|
+
{ code: 'AR', name: 'Argentina' },
|
|
22
|
+
{ code: 'AS', name: 'American Samoa' },
|
|
23
|
+
{ code: 'AT', name: 'Austria' },
|
|
24
|
+
{ code: 'AU', name: 'Australia' },
|
|
25
|
+
{ code: 'AW', name: 'Aruba' },
|
|
26
|
+
{ code: 'AX', name: 'Åland Islands' },
|
|
27
|
+
{ code: 'AZ', name: 'Azerbaijan' },
|
|
28
|
+
{ code: 'BA', name: 'Bosnia and Herzegovina' },
|
|
29
|
+
{ code: 'BB', name: 'Barbados' },
|
|
30
|
+
{ code: 'BD', name: 'Bangladesh' },
|
|
31
|
+
{ code: 'BE', name: 'Belgium' },
|
|
32
|
+
{ code: 'BF', name: 'Burkina Faso' },
|
|
33
|
+
{ code: 'BG', name: 'Bulgaria' },
|
|
34
|
+
{ code: 'BH', name: 'Bahrain' },
|
|
35
|
+
{ code: 'BI', name: 'Burundi' },
|
|
36
|
+
{ code: 'BJ', name: 'Benin' },
|
|
37
|
+
{ code: 'BL', name: 'Saint Barthélemy' },
|
|
38
|
+
{ code: 'BM', name: 'Bermuda' },
|
|
39
|
+
{ code: 'BN', name: 'Brunei Darussalam' },
|
|
40
|
+
{ code: 'BO', name: 'Bolivia, Plurinational State of' },
|
|
41
|
+
{ code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba' },
|
|
42
|
+
{ code: 'BR', name: 'Brazil' },
|
|
43
|
+
{ code: 'BS', name: 'Bahamas' },
|
|
44
|
+
{ code: 'BT', name: 'Bhutan' },
|
|
45
|
+
{ code: 'BV', name: 'Bouvet Island' },
|
|
46
|
+
{ code: 'BW', name: 'Botswana' },
|
|
47
|
+
{ code: 'BY', name: 'Belarus' },
|
|
48
|
+
{ code: 'BZ', name: 'Belize' },
|
|
49
|
+
{ code: 'CA', name: 'Canada' },
|
|
50
|
+
{ code: 'CC', name: 'Cocos (Keeling) Islands' },
|
|
51
|
+
{ code: 'CD', name: 'Congo, Democratic Republic of the' },
|
|
52
|
+
{ code: 'CF', name: 'Central African Republic' },
|
|
53
|
+
{ code: 'CG', name: 'Congo' },
|
|
54
|
+
{ code: 'CH', name: 'Switzerland' },
|
|
55
|
+
{ code: 'CI', name: "Côte d'Ivoire" },
|
|
56
|
+
{ code: 'CK', name: 'Cook Islands' },
|
|
57
|
+
{ code: 'CL', name: 'Chile' },
|
|
58
|
+
{ code: 'CM', name: 'Cameroon' },
|
|
59
|
+
{ code: 'CN', name: 'China' },
|
|
60
|
+
{ code: 'CO', name: 'Colombia' },
|
|
61
|
+
{ code: 'CR', name: 'Costa Rica' },
|
|
62
|
+
{ code: 'CU', name: 'Cuba' },
|
|
63
|
+
{ code: 'CV', name: 'Cabo Verde' },
|
|
64
|
+
{ code: 'CW', name: 'Curaçao' },
|
|
65
|
+
{ code: 'CX', name: 'Christmas Island' },
|
|
66
|
+
{ code: 'CY', name: 'Cyprus' },
|
|
67
|
+
{ code: 'CZ', name: 'Czechia' },
|
|
68
|
+
{ code: 'DE', name: 'Germany' },
|
|
69
|
+
{ code: 'DJ', name: 'Djibouti' },
|
|
70
|
+
{ code: 'DK', name: 'Denmark' },
|
|
71
|
+
{ code: 'DM', name: 'Dominica' },
|
|
72
|
+
{ code: 'DO', name: 'Dominican Republic' },
|
|
73
|
+
{ code: 'DZ', name: 'Algeria' },
|
|
74
|
+
{ code: 'EC', name: 'Ecuador' },
|
|
75
|
+
{ code: 'EE', name: 'Estonia' },
|
|
76
|
+
{ code: 'EG', name: 'Egypt' },
|
|
77
|
+
{ code: 'EH', name: 'Western Sahara' },
|
|
78
|
+
{ code: 'ER', name: 'Eritrea' },
|
|
79
|
+
{ code: 'ES', name: 'Spain' },
|
|
80
|
+
{ code: 'ET', name: 'Ethiopia' },
|
|
81
|
+
{ code: 'FI', name: 'Finland' },
|
|
82
|
+
{ code: 'FJ', name: 'Fiji' },
|
|
83
|
+
{ code: 'FK', name: 'Falkland Islands (Malvinas)' },
|
|
84
|
+
{ code: 'FM', name: 'Micronesia, Federated States of' },
|
|
85
|
+
{ code: 'FO', name: 'Faroe Islands' },
|
|
86
|
+
{ code: 'FR', name: 'France' },
|
|
87
|
+
{ code: 'GA', name: 'Gabon' },
|
|
88
|
+
{ code: 'GB', name: 'United Kingdom of Great Britain and Northern Ireland' },
|
|
89
|
+
{ code: 'GD', name: 'Grenada' },
|
|
90
|
+
{ code: 'GE', name: 'Georgia' },
|
|
91
|
+
{ code: 'GF', name: 'French Guiana' },
|
|
92
|
+
{ code: 'GG', name: 'Guernsey' },
|
|
93
|
+
{ code: 'GH', name: 'Ghana' },
|
|
94
|
+
{ code: 'GI', name: 'Gibraltar' },
|
|
95
|
+
{ code: 'GL', name: 'Greenland' },
|
|
96
|
+
{ code: 'GM', name: 'Gambia' },
|
|
97
|
+
{ code: 'GN', name: 'Guinea' },
|
|
98
|
+
{ code: 'GP', name: 'Guadeloupe' },
|
|
99
|
+
{ code: 'GQ', name: 'Equatorial Guinea' },
|
|
100
|
+
{ code: 'GR', name: 'Greece' },
|
|
101
|
+
{ code: 'GS', name: 'South Georgia and the South Sandwich Islands' },
|
|
102
|
+
{ code: 'GT', name: 'Guatemala' },
|
|
103
|
+
{ code: 'GU', name: 'Guam' },
|
|
104
|
+
{ code: 'GW', name: 'Guinea-Bissau' },
|
|
105
|
+
{ code: 'GY', name: 'Guyana' },
|
|
106
|
+
{ code: 'HK', name: 'Hong Kong' },
|
|
107
|
+
{ code: 'HM', name: 'Heard Island and McDonald Islands' },
|
|
108
|
+
{ code: 'HN', name: 'Honduras' },
|
|
109
|
+
{ code: 'HR', name: 'Croatia' },
|
|
110
|
+
{ code: 'HT', name: 'Haiti' },
|
|
111
|
+
{ code: 'HU', name: 'Hungary' },
|
|
112
|
+
{ code: 'ID', name: 'Indonesia' },
|
|
113
|
+
{ code: 'IE', name: 'Ireland' },
|
|
114
|
+
{ code: 'IL', name: 'Israel' },
|
|
115
|
+
{ code: 'IM', name: 'Isle of Man' },
|
|
116
|
+
{ code: 'IN', name: 'India' },
|
|
117
|
+
{ code: 'IO', name: 'British Indian Ocean Territory' },
|
|
118
|
+
{ code: 'IQ', name: 'Iraq' },
|
|
119
|
+
{ code: 'IR', name: 'Iran, Islamic Republic of' },
|
|
120
|
+
{ code: 'IS', name: 'Iceland' },
|
|
121
|
+
{ code: 'IT', name: 'Italy' },
|
|
122
|
+
{ code: 'JE', name: 'Jersey' },
|
|
123
|
+
{ code: 'JM', name: 'Jamaica' },
|
|
124
|
+
{ code: 'JO', name: 'Jordan' },
|
|
125
|
+
{ code: 'JP', name: 'Japan' },
|
|
126
|
+
{ code: 'KE', name: 'Kenya' },
|
|
127
|
+
{ code: 'KG', name: 'Kyrgyzstan' },
|
|
128
|
+
{ code: 'KH', name: 'Cambodia' },
|
|
129
|
+
{ code: 'KI', name: 'Kiribati' },
|
|
130
|
+
{ code: 'KM', name: 'Comoros' },
|
|
131
|
+
{ code: 'KN', name: 'Saint Kitts and Nevis' },
|
|
132
|
+
{ code: 'KP', name: "Korea, Democratic People's Republic of" },
|
|
133
|
+
{ code: 'KR', name: 'Korea, Republic of' },
|
|
134
|
+
{ code: 'KW', name: 'Kuwait' },
|
|
135
|
+
{ code: 'KY', name: 'Cayman Islands' },
|
|
136
|
+
{ code: 'KZ', name: 'Kazakhstan' },
|
|
137
|
+
{ code: 'LA', name: "Lao People's Democratic Republic" },
|
|
138
|
+
{ code: 'LB', name: 'Lebanon' },
|
|
139
|
+
{ code: 'LC', name: 'Saint Lucia' },
|
|
140
|
+
{ code: 'LI', name: 'Liechtenstein' },
|
|
141
|
+
{ code: 'LK', name: 'Sri Lanka' },
|
|
142
|
+
{ code: 'LR', name: 'Liberia' },
|
|
143
|
+
{ code: 'LS', name: 'Lesotho' },
|
|
144
|
+
{ code: 'LT', name: 'Lithuania' },
|
|
145
|
+
{ code: 'LU', name: 'Luxembourg' },
|
|
146
|
+
{ code: 'LV', name: 'Latvia' },
|
|
147
|
+
{ code: 'LY', name: 'Libya' },
|
|
148
|
+
{ code: 'MA', name: 'Morocco' },
|
|
149
|
+
{ code: 'MC', name: 'Monaco' },
|
|
150
|
+
{ code: 'MD', name: 'Moldova, Republic of' },
|
|
151
|
+
{ code: 'ME', name: 'Montenegro' },
|
|
152
|
+
{ code: 'MF', name: 'Saint Martin, (French part)' },
|
|
153
|
+
{ code: 'MG', name: 'Madagascar' },
|
|
154
|
+
{ code: 'MH', name: 'Marshall Islands' },
|
|
155
|
+
{ code: 'MK', name: 'North Macedonia' },
|
|
156
|
+
{ code: 'ML', name: 'Mali' },
|
|
157
|
+
{ code: 'MM', name: 'Myanmar' },
|
|
158
|
+
{ code: 'MN', name: 'Mongolia' },
|
|
159
|
+
{ code: 'MO', name: 'Macao' },
|
|
160
|
+
{ code: 'MP', name: 'Northern Mariana Islands' },
|
|
161
|
+
{ code: 'MQ', name: 'Martinique' },
|
|
162
|
+
{ code: 'MR', name: 'Mauritania' },
|
|
163
|
+
{ code: 'MS', name: 'Montserrat' },
|
|
164
|
+
{ code: 'MT', name: 'Malta' },
|
|
165
|
+
{ code: 'MU', name: 'Mauritius' },
|
|
166
|
+
{ code: 'MV', name: 'Maldives' },
|
|
167
|
+
{ code: 'MW', name: 'Malawi' },
|
|
168
|
+
{ code: 'MX', name: 'Mexico' },
|
|
169
|
+
{ code: 'MY', name: 'Malaysia' },
|
|
170
|
+
{ code: 'MZ', name: 'Mozambique' },
|
|
171
|
+
{ code: 'NA', name: 'Namibia' },
|
|
172
|
+
{ code: 'NC', name: 'New Caledonia' },
|
|
173
|
+
{ code: 'NE', name: 'Niger' },
|
|
174
|
+
{ code: 'NF', name: 'Norfolk Island' },
|
|
175
|
+
{ code: 'NG', name: 'Nigeria' },
|
|
176
|
+
{ code: 'NI', name: 'Nicaragua' },
|
|
177
|
+
{ code: 'NL', name: 'Netherlands' },
|
|
178
|
+
{ code: 'NO', name: 'Norway' },
|
|
179
|
+
{ code: 'NP', name: 'Nepal' },
|
|
180
|
+
{ code: 'NR', name: 'Nauru' },
|
|
181
|
+
{ code: 'NU', name: 'Niue' },
|
|
182
|
+
{ code: 'NZ', name: 'New Zealand' },
|
|
183
|
+
{ code: 'OM', name: 'Oman' },
|
|
184
|
+
{ code: 'PA', name: 'Panama' },
|
|
185
|
+
{ code: 'PE', name: 'Peru' },
|
|
186
|
+
{ code: 'PF', name: 'French Polynesia' },
|
|
187
|
+
{ code: 'PG', name: 'Papua New Guinea' },
|
|
188
|
+
{ code: 'PH', name: 'Philippines' },
|
|
189
|
+
{ code: 'PK', name: 'Pakistan' },
|
|
190
|
+
{ code: 'PL', name: 'Poland' },
|
|
191
|
+
{ code: 'PM', name: 'Saint Pierre and Miquelon' },
|
|
192
|
+
{ code: 'PN', name: 'Pitcairn' },
|
|
193
|
+
{ code: 'PR', name: 'Puerto Rico' },
|
|
194
|
+
{ code: 'PS', name: 'Palestine, State of' },
|
|
195
|
+
{ code: 'PT', name: 'Portugal' },
|
|
196
|
+
{ code: 'PW', name: 'Palau' },
|
|
197
|
+
{ code: 'PY', name: 'Paraguay' },
|
|
198
|
+
{ code: 'QA', name: 'Qatar' },
|
|
199
|
+
{ code: 'RE', name: 'Réunion' },
|
|
200
|
+
{ code: 'RO', name: 'Romania' },
|
|
201
|
+
{ code: 'RS', name: 'Serbia' },
|
|
202
|
+
{ code: 'RU', name: 'Russian Federation' },
|
|
203
|
+
{ code: 'RW', name: 'Rwanda' },
|
|
204
|
+
{ code: 'SA', name: 'Saudi Arabia' },
|
|
205
|
+
{ code: 'SB', name: 'Solomon Islands' },
|
|
206
|
+
{ code: 'SC', name: 'Seychelles' },
|
|
207
|
+
{ code: 'SD', name: 'Sudan' },
|
|
208
|
+
{ code: 'SE', name: 'Sweden' },
|
|
209
|
+
{ code: 'SG', name: 'Singapore' },
|
|
210
|
+
{ code: 'SH', name: 'Saint Helena, Ascension and Tristan da Cunha' },
|
|
211
|
+
{ code: 'SI', name: 'Slovenia' },
|
|
212
|
+
{ code: 'SJ', name: 'Svalbard and Jan Mayen' },
|
|
213
|
+
{ code: 'SK', name: 'Slovakia' },
|
|
214
|
+
{ code: 'SL', name: 'Sierra Leone' },
|
|
215
|
+
{ code: 'SM', name: 'San Marino' },
|
|
216
|
+
{ code: 'SN', name: 'Senegal' },
|
|
217
|
+
{ code: 'SO', name: 'Somalia' },
|
|
218
|
+
{ code: 'SR', name: 'Suriname' },
|
|
219
|
+
{ code: 'SS', name: 'South Sudan' },
|
|
220
|
+
{ code: 'ST', name: 'Sao Tome and Principe' },
|
|
221
|
+
{ code: 'SV', name: 'El Salvador' },
|
|
222
|
+
{ code: 'SX', name: 'Sint Maarten, (Dutch part)' },
|
|
223
|
+
{ code: 'SY', name: 'Syrian Arab Republic' },
|
|
224
|
+
{ code: 'SZ', name: 'Eswatini' },
|
|
225
|
+
{ code: 'TC', name: 'Turks and Caicos Islands' },
|
|
226
|
+
{ code: 'TD', name: 'Chad' },
|
|
227
|
+
{ code: 'TF', name: 'French Southern Territories' },
|
|
228
|
+
{ code: 'TG', name: 'Togo' },
|
|
229
|
+
{ code: 'TH', name: 'Thailand' },
|
|
230
|
+
{ code: 'TJ', name: 'Tajikistan' },
|
|
231
|
+
{ code: 'TK', name: 'Tokelau' },
|
|
232
|
+
{ code: 'TL', name: 'Timor-Leste' },
|
|
233
|
+
{ code: 'TM', name: 'Turkmenistan' },
|
|
234
|
+
{ code: 'TN', name: 'Tunisia' },
|
|
235
|
+
{ code: 'TO', name: 'Tonga' },
|
|
236
|
+
{ code: 'TR', name: 'Türkiye' },
|
|
237
|
+
{ code: 'TT', name: 'Trinidad and Tobago' },
|
|
238
|
+
{ code: 'TV', name: 'Tuvalu' },
|
|
239
|
+
{ code: 'TW', name: 'Taiwan, Province of China' },
|
|
240
|
+
{ code: 'TZ', name: 'Tanzania, United Republic of' },
|
|
241
|
+
{ code: 'UA', name: 'Ukraine' },
|
|
242
|
+
{ code: 'UG', name: 'Uganda' },
|
|
243
|
+
{ code: 'UM', name: 'United States Minor Outlying Islands' },
|
|
244
|
+
{ code: 'US', name: 'United States of America' },
|
|
245
|
+
{ code: 'UY', name: 'Uruguay' },
|
|
246
|
+
{ code: 'UZ', name: 'Uzbekistan' },
|
|
247
|
+
{ code: 'VA', name: 'Holy See' },
|
|
248
|
+
{ code: 'VC', name: 'Saint Vincent and the Grenadines' },
|
|
249
|
+
{ code: 'VE', name: 'Venezuela, Bolivarian Republic of' },
|
|
250
|
+
{ code: 'VG', name: 'Virgin Islands, British' },
|
|
251
|
+
{ code: 'VI', name: 'Virgin Islands, U.S.' },
|
|
252
|
+
{ code: 'VN', name: 'Viet Nam' },
|
|
253
|
+
{ code: 'VU', name: 'Vanuatu' },
|
|
254
|
+
{ code: 'WF', name: 'Wallis and Futuna' },
|
|
255
|
+
{ code: 'WS', name: 'Samoa' },
|
|
256
|
+
{ code: 'YE', name: 'Yemen' },
|
|
257
|
+
{ code: 'YT', name: 'Mayotte' },
|
|
258
|
+
{ code: 'ZA', name: 'South Africa' },
|
|
259
|
+
{ code: 'ZM', name: 'Zambia' },
|
|
260
|
+
{ code: 'ZW', name: 'Zimbabwe' },
|
|
261
|
+
] as const;
|
|
262
|
+
const validatedCountries = CountriesSchema.parse(countries);
|
|
263
|
+
|
|
264
|
+
export const CountryCodes = countries.map((c) => c.code);
|
|
265
|
+
|
|
266
|
+
const countryEnum = countries.reduce(
|
|
267
|
+
(acc, country) => {
|
|
268
|
+
acc[country.code] = country.code;
|
|
269
|
+
return acc;
|
|
270
|
+
},
|
|
271
|
+
{} as Record<string, string>,
|
|
272
|
+
);
|
|
273
|
+
|
|
274
|
+
export const CountryCode = Object.freeze(countryEnum);
|
|
275
|
+
|
|
276
|
+
export const CountryEnumSchema = z.nativeEnum(CountryCode);
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Grey list of countries
|
|
280
|
+
* This list contains country codes that are considered "grey listed"
|
|
281
|
+
*/
|
|
282
|
+
export const GREY_LIST_COUNTRIES: readonly Country[] = [
|
|
283
|
+
{ code: 'DZ', name: 'Algeria' },
|
|
284
|
+
{ code: 'AO', name: 'Angola' },
|
|
285
|
+
{ code: 'BG', name: 'Bulgaria' },
|
|
286
|
+
{ code: 'BF', name: 'Burkina Faso' },
|
|
287
|
+
{ code: 'CM', name: 'Cameroon' },
|
|
288
|
+
{ code: 'CI', name: "Côte d'Ivoire" },
|
|
289
|
+
{ code: 'HR', name: 'Croatia' },
|
|
290
|
+
{ code: 'CD', name: 'Congo, Democratic Republic of the' },
|
|
291
|
+
{ code: 'HT', name: 'Haiti' },
|
|
292
|
+
{ code: 'KE', name: 'Kenya' },
|
|
293
|
+
{ code: 'LA', name: "Lao People's Democratic Republic" },
|
|
294
|
+
{ code: 'LB', name: 'Lebanon' },
|
|
295
|
+
{ code: 'ML', name: 'Mali' },
|
|
296
|
+
{ code: 'MC', name: 'Monaco' },
|
|
297
|
+
{ code: 'MZ', name: 'Mozambique' },
|
|
298
|
+
{ code: 'NA', name: 'Namibia' },
|
|
299
|
+
{ code: 'NP', name: 'Nepal' },
|
|
300
|
+
{ code: 'NG', name: 'Nigeria' },
|
|
301
|
+
{ code: 'ZA', name: 'South Africa' },
|
|
302
|
+
{ code: 'SS', name: 'South Sudan' },
|
|
303
|
+
{ code: 'SY', name: 'Syrian Arab Republic' },
|
|
304
|
+
{ code: 'TZ', name: 'Tanzania, United Republic of' },
|
|
305
|
+
{ code: 'VE', name: 'Venezuela, Bolivarian Republic of' },
|
|
306
|
+
{ code: 'VN', name: 'Viet Nam' },
|
|
307
|
+
{ code: 'YE', name: 'Yemen' },
|
|
308
|
+
];
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Black list of countries
|
|
312
|
+
* This list contains country codes that are considered "black listed"
|
|
313
|
+
*/
|
|
314
|
+
export const BLACK_LIST_COUNTRIES: readonly Country[] = [
|
|
315
|
+
{ code: 'KP', name: "Korea, Democratic People's Republic of" },
|
|
316
|
+
{ code: 'IR', name: 'Iran, Islamic Republic of' },
|
|
317
|
+
{ code: 'MM', name: 'Myanmar' },
|
|
318
|
+
];
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* List of grey list country codes for easier lookups
|
|
322
|
+
*/
|
|
323
|
+
export const GREY_LIST_COUNTRY_CODES = GREY_LIST_COUNTRIES.map((c) => c.code);
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* List of black list country codes for easier lookups
|
|
327
|
+
*/
|
|
328
|
+
export const BLACK_LIST_COUNTRY_CODES = BLACK_LIST_COUNTRIES.map((c) => c.code);
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Checks if a country is in the grey list
|
|
332
|
+
* @param code The country code to check
|
|
333
|
+
* @returns {boolean} True if the country is in the grey list
|
|
334
|
+
*
|
|
335
|
+
* @example
|
|
336
|
+
* const isGreyListed = isGreyListedCountry('VN');
|
|
337
|
+
*/
|
|
338
|
+
export function isGreyListedCountry(code: string): boolean {
|
|
339
|
+
return GREY_LIST_COUNTRY_CODES.includes(code.toUpperCase());
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Checks if a country is in the black list
|
|
344
|
+
* @param code The country code to check
|
|
345
|
+
* @returns {boolean} True if the country is in the black list
|
|
346
|
+
*
|
|
347
|
+
* @example
|
|
348
|
+
* const isBlackListed = isBlackListedCountry('IR');
|
|
349
|
+
*/
|
|
350
|
+
export function isBlackListedCountry(code: string): boolean {
|
|
351
|
+
return BLACK_LIST_COUNTRY_CODES.includes(code.toUpperCase());
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
*
|
|
356
|
+
* @param code The country code
|
|
357
|
+
* @returns {Country | undefined} The country object
|
|
358
|
+
*
|
|
359
|
+
* @example
|
|
360
|
+
* const usa = findCountryByCode('US');
|
|
361
|
+
* console.log(usa); // { code: "US", name: "United States of America" }
|
|
362
|
+
*/
|
|
363
|
+
function findCountryByCode(code: string): Country | undefined {
|
|
364
|
+
return validatedCountries.find(
|
|
365
|
+
(country) => country.code === code.toUpperCase(),
|
|
366
|
+
);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
export {
|
|
370
|
+
CountrySchema,
|
|
371
|
+
CountriesSchema,
|
|
372
|
+
validatedCountries,
|
|
373
|
+
findCountryByCode,
|
|
374
|
+
};
|
|
375
|
+
export type { Country };
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { extendZodWithOpenApi } from '@anatine/zod-openapi';
|
|
2
|
+
import { TypeID } from 'typeid-js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import {
|
|
5
|
+
AccountZod,
|
|
6
|
+
ComplianceReview,
|
|
7
|
+
CoveredPersonsRoleType,
|
|
8
|
+
CoveredPersonsStatus,
|
|
9
|
+
IDType,
|
|
10
|
+
IPaginationMeta,
|
|
11
|
+
} from './common.types';
|
|
12
|
+
import { IBaseEntity } from './entity.types';
|
|
13
|
+
|
|
14
|
+
import { IIssuer, issuerIdSchema } from './issuer.types';
|
|
15
|
+
import { fileIdSchema } from './file.types';
|
|
16
|
+
import { accountIdSchema } from './account.types';
|
|
17
|
+
|
|
18
|
+
extendZodWithOpenApi(z);
|
|
19
|
+
export const coveredPersonIdSchema = z.string().refine(
|
|
20
|
+
(value) => {
|
|
21
|
+
try {
|
|
22
|
+
const tid = TypeID.fromString(value);
|
|
23
|
+
return tid.getType() === 'covered_person';
|
|
24
|
+
} catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
message:
|
|
30
|
+
'Invalid covered person ID format. Must be a valid TypeID with "covered_person" prefix.',
|
|
31
|
+
},
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
export const coveredPersonsInclude = z.enum(['issuer', 'parent', 'account']);
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @description Query parameters for including related entities
|
|
38
|
+
* @xample in contract us as -> query: z.object({}).merge(CoveredPersonsIncludeQuery),
|
|
39
|
+
*/
|
|
40
|
+
export const CoveredPersonsIncludeQuery = z.object({
|
|
41
|
+
include: z
|
|
42
|
+
.string()
|
|
43
|
+
.optional()
|
|
44
|
+
.transform((str) => (str ? str.split(',') : []))
|
|
45
|
+
.refine(
|
|
46
|
+
(includes) =>
|
|
47
|
+
includes.every((include) =>
|
|
48
|
+
coveredPersonsInclude.options.includes(include as any),
|
|
49
|
+
),
|
|
50
|
+
{
|
|
51
|
+
message: `Invalid include option provided. Valid options are: ${coveredPersonsInclude.options.join(', ')}`,
|
|
52
|
+
},
|
|
53
|
+
)
|
|
54
|
+
.openapi({
|
|
55
|
+
example: `${coveredPersonsInclude.options.join(', ')}`,
|
|
56
|
+
}),
|
|
57
|
+
});
|
|
58
|
+
export interface CoveredPersonsIncludeQuery
|
|
59
|
+
extends z.infer<typeof CoveredPersonsIncludeQuery> {}
|
|
60
|
+
|
|
61
|
+
export const PostCoveredPersonsZod = z
|
|
62
|
+
.object({
|
|
63
|
+
firstName: z.string().min(2).max(50).openapi({ example: 'John' }),
|
|
64
|
+
lastName: z
|
|
65
|
+
.string()
|
|
66
|
+
.min(2)
|
|
67
|
+
.max(50)
|
|
68
|
+
.nullable()
|
|
69
|
+
.optional()
|
|
70
|
+
.openapi({ example: 'Doe' }),
|
|
71
|
+
issuerId: z
|
|
72
|
+
.lazy(() => issuerIdSchema)
|
|
73
|
+
.openapi({
|
|
74
|
+
example: 'issuer_01jatr819xff9s6wek8d2tng3x',
|
|
75
|
+
}),
|
|
76
|
+
email: z.string().email().nullable().optional(),
|
|
77
|
+
role: z
|
|
78
|
+
.nativeEnum(CoveredPersonsRoleType)
|
|
79
|
+
.openapi({ example: CoveredPersonsRoleType.ACCOUNTING }),
|
|
80
|
+
ownership: z.number().min(0).max(100).default(0).openapi({ example: 15 }),
|
|
81
|
+
parentId: coveredPersonIdSchema
|
|
82
|
+
|
|
83
|
+
.nullable()
|
|
84
|
+
.openapi({ example: 'covered_person_01jatr819xff9s6wek8d2tng3x' }),
|
|
85
|
+
idType: z
|
|
86
|
+
.nativeEnum(IDType)
|
|
87
|
+
.nullable()
|
|
88
|
+
.optional()
|
|
89
|
+
.openapi({ example: IDType.DRIVERS_LICENSE }),
|
|
90
|
+
})
|
|
91
|
+
.superRefine((data, ctx) => {
|
|
92
|
+
if (data.role !== CoveredPersonsRoleType.ENTITY) {
|
|
93
|
+
if (!data.email) {
|
|
94
|
+
ctx.addIssue({
|
|
95
|
+
path: ['email'],
|
|
96
|
+
message: 'Email is required when role type is not ENTITY.',
|
|
97
|
+
code: 'custom',
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
if (!data.idType || data.idType == null) {
|
|
101
|
+
ctx.addIssue({
|
|
102
|
+
path: ['idType'],
|
|
103
|
+
message: 'IdType is required when role type is not ENTITY',
|
|
104
|
+
code: 'custom',
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
} else {
|
|
108
|
+
if (data.lastName) {
|
|
109
|
+
ctx.addIssue({
|
|
110
|
+
path: ['lastName'],
|
|
111
|
+
message: 'Last name is not allowed when the role type is ENTITY',
|
|
112
|
+
code: 'custom',
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
if (data.idType) {
|
|
116
|
+
ctx.addIssue({
|
|
117
|
+
path: ['idType'],
|
|
118
|
+
message: 'Id Type is not allowed when the role type is ENTITY',
|
|
119
|
+
code: 'custom',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
export type PostCoveredPersonsZod = z.infer<typeof PostCoveredPersonsZod>;
|
|
125
|
+
export const PatchCoveredPersonsZod = z
|
|
126
|
+
.object({
|
|
127
|
+
firstName: z
|
|
128
|
+
.string()
|
|
129
|
+
.min(2)
|
|
130
|
+
.max(50)
|
|
131
|
+
.optional()
|
|
132
|
+
.openapi({ example: 'John' }),
|
|
133
|
+
lastName: z.string().min(2).max(50).optional().openapi({ example: 'Doe' }),
|
|
134
|
+
role: z
|
|
135
|
+
.nativeEnum(CoveredPersonsRoleType)
|
|
136
|
+
.optional()
|
|
137
|
+
.openapi({ example: CoveredPersonsRoleType.ACCOUNTING }),
|
|
138
|
+
|
|
139
|
+
ownership: z.number().min(0).max(100).openapi({ example: 15 }).optional(),
|
|
140
|
+
email: z.string().nullable().optional(),
|
|
141
|
+
idType: z
|
|
142
|
+
.nativeEnum(IDType)
|
|
143
|
+
.optional()
|
|
144
|
+
.nullable()
|
|
145
|
+
.openapi({ example: IDType.DRIVERS_LICENSE }),
|
|
146
|
+
identityFileFrontId: z
|
|
147
|
+
.lazy(() => fileIdSchema)
|
|
148
|
+
.optional()
|
|
149
|
+
.nullable(),
|
|
150
|
+
identityFileBackId: z
|
|
151
|
+
.lazy(() => fileIdSchema)
|
|
152
|
+
.optional()
|
|
153
|
+
.nullable(),
|
|
154
|
+
badActorReportFileId: z
|
|
155
|
+
.lazy(() => fileIdSchema)
|
|
156
|
+
.optional()
|
|
157
|
+
.nullable(),
|
|
158
|
+
})
|
|
159
|
+
.superRefine((data, ctx) => {
|
|
160
|
+
if (data.role !== CoveredPersonsRoleType.ENTITY && data.role) {
|
|
161
|
+
if (!data.email) {
|
|
162
|
+
ctx.addIssue({
|
|
163
|
+
path: ['email'],
|
|
164
|
+
message: 'Email is required when role type is not ENTITY.',
|
|
165
|
+
code: 'custom',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
if (!data.idType || data.idType == null) {
|
|
169
|
+
ctx.addIssue({
|
|
170
|
+
path: ['idType'],
|
|
171
|
+
message: 'IdType is required when role type is not ENTITY',
|
|
172
|
+
code: 'custom',
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
} else if (data.role && data.role === CoveredPersonsRoleType.ENTITY) {
|
|
176
|
+
if (data.lastName) {
|
|
177
|
+
ctx.addIssue({
|
|
178
|
+
path: ['lastName'],
|
|
179
|
+
message: 'Last name is not allowed when the role type is ENTITY',
|
|
180
|
+
code: 'custom',
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
if (data.idType) {
|
|
184
|
+
ctx.addIssue({
|
|
185
|
+
path: ['idType'],
|
|
186
|
+
message: 'Id Type is not allowed when the role type is ENTITY',
|
|
187
|
+
code: 'custom',
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
export type PatchCoveredPersonsZod = z.infer<typeof PatchCoveredPersonsZod>;
|
|
193
|
+
|
|
194
|
+
export const ReviewCoveredPersons = z.object({
|
|
195
|
+
complianceReview: z.enum([
|
|
196
|
+
ComplianceReview.APPROVED,
|
|
197
|
+
ComplianceReview.REJECTED,
|
|
198
|
+
]),
|
|
199
|
+
coveredPersons: z
|
|
200
|
+
.array(coveredPersonIdSchema)
|
|
201
|
+
.min(1, 'At least one coveredPerson is required')
|
|
202
|
+
.max(50, 'Maximum of 50 coveredPersons allowed')
|
|
203
|
+
.openapi({
|
|
204
|
+
example: [
|
|
205
|
+
'covered_person_01jjsdrx1seqfse7z4z47sgdp5',
|
|
206
|
+
'covered_person_01jjsdrx27enkszq5cnc3hdhrf',
|
|
207
|
+
],
|
|
208
|
+
}),
|
|
209
|
+
});
|
|
210
|
+
export type ReviewCoveredPersons = z.infer<typeof ReviewCoveredPersons>;
|
|
211
|
+
|
|
212
|
+
export const ICoveredPerson = IBaseEntity.extend({
|
|
213
|
+
firstName: z.string().nullable().optional().openapi({ example: 'John' }),
|
|
214
|
+
lastName: z.string().nullable().optional().openapi({ example: 'Doe' }),
|
|
215
|
+
role: z
|
|
216
|
+
.nativeEnum(CoveredPersonsRoleType)
|
|
217
|
+
.openapi({ example: CoveredPersonsRoleType.ENTITY }),
|
|
218
|
+
ownership: z.number().openapi({ example: 15 }),
|
|
219
|
+
accountId: z.string(),
|
|
220
|
+
account: AccountZod.optional().nullable(),
|
|
221
|
+
issuer: z
|
|
222
|
+
.lazy(() => IIssuer)
|
|
223
|
+
.optional()
|
|
224
|
+
.nullable(),
|
|
225
|
+
issuerId: z.string(),
|
|
226
|
+
parent: z.lazy(() => ICoveredPerson.optional().nullable()),
|
|
227
|
+
parentId: z.string().nullable().optional().default(null),
|
|
228
|
+
idType: z.nativeEnum(IDType).nullable(),
|
|
229
|
+
email: z.string().nullable(),
|
|
230
|
+
identityFileFrontId: z.string().optional().nullable(),
|
|
231
|
+
identityFileBackId: z.string().optional().nullable(),
|
|
232
|
+
badActorReportFileId: z.string().optional().nullable(),
|
|
233
|
+
status: z.nativeEnum(CoveredPersonsStatus),
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
export type ICoveredPerson = z.infer<typeof ICoveredPerson>;
|
|
237
|
+
|
|
238
|
+
export const IPaginatedCoveredPerson = z.object({
|
|
239
|
+
items: z.array(ICoveredPerson),
|
|
240
|
+
meta: IPaginationMeta,
|
|
241
|
+
});
|
|
242
|
+
export type IPaginatedCoveredPerson = z.infer<typeof IPaginatedCoveredPerson>;
|
|
243
|
+
|
|
244
|
+
export const GetCoveredPersonsZod = z.object({
|
|
245
|
+
id: coveredPersonIdSchema.optional(),
|
|
246
|
+
issuerId: z.lazy(() => issuerIdSchema).optional(),
|
|
247
|
+
parentId: z
|
|
248
|
+
.union([coveredPersonIdSchema, z.literal('null'), z.undefined()])
|
|
249
|
+
.optional() // Allow valid parentId, "null", or undefined
|
|
250
|
+
.transform((value) => {
|
|
251
|
+
if (value === 'null') {
|
|
252
|
+
return null; // Transform "null" string to actual null
|
|
253
|
+
}
|
|
254
|
+
return value; // Return valid parentId or undefined as is
|
|
255
|
+
}),
|
|
256
|
+
|
|
257
|
+
firstName: z.string().min(2).max(50).optional().openapi({ example: 'John' }),
|
|
258
|
+
role: z
|
|
259
|
+
.nativeEnum(CoveredPersonsRoleType)
|
|
260
|
+
|
|
261
|
+
.optional()
|
|
262
|
+
.openapi({ example: CoveredPersonsRoleType.ACCOUNTING }),
|
|
263
|
+
status: z.nativeEnum(CoveredPersonsStatus).optional(),
|
|
264
|
+
accountId: accountIdSchema.optional(),
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
export type GetCoveredPersonsZod = z.infer<typeof GetCoveredPersonsZod>;
|
|
268
|
+
|
|
269
|
+
export const CoveredPersonDeleteResponse = z.object({
|
|
270
|
+
message: z.string(),
|
|
271
|
+
});
|
|
272
|
+
export type CoveredPersonDeleteResponse = z.infer<
|
|
273
|
+
typeof CoveredPersonDeleteResponse
|
|
274
|
+
>;
|