@devizovaburza/mdm-sdk 0.0.11 → 0.0.13

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/dist/v1/index.cjs CHANGED
@@ -9,6 +9,8 @@ const z = require('zod/v4/core');
9
9
  require('node:fs');
10
10
  require('node:crypto');
11
11
  require('node:path');
12
+ const factory = require('hono/factory');
13
+ const httpException = require('hono/http-exception');
12
14
 
13
15
  function _interopNamespaceCompat(e) {
14
16
  if (e && typeof e === 'object' && 'default' in e) return e;
@@ -33,7 +35,7 @@ const AddressTypeZod$1 = [
33
35
  "REGISTERED_OFFICE",
34
36
  "CONTACT_ADDRESS"
35
37
  ];
36
- const ContactTypeZod = [
38
+ const ContactTypeZod$1 = [
37
39
  "EMAIL",
38
40
  "PHONE_AUTH",
39
41
  "PHONE_CONTACT",
@@ -46,7 +48,7 @@ const IdDocStatusZod$1 = [
46
48
  "EXPIRE_SOON",
47
49
  "REVOKED"
48
50
  ];
49
- const PartyRelationshipTypeZod = [
51
+ const PartyRelationshipTypeZod$1 = [
50
52
  "AUTHORIZED_SIGNATORY",
51
53
  "POA_HOLDER",
52
54
  "BOARD_MEMBER",
@@ -74,7 +76,7 @@ const PartyTypeZod$1 = [
74
76
  "SELF_EMPLOYED",
75
77
  "ORGANIZATION"
76
78
  ];
77
- const AmlScoreTypeZod = [
79
+ const AmlScoreTypeZod$1 = [
78
80
  "LOW",
79
81
  "MEDIUM",
80
82
  "HIGH",
@@ -87,19 +89,25 @@ const IdentificationTypeZod = [
87
89
  "REMOTE_IDENTIFICATION"
88
90
  ];
89
91
  const GenderZod$1 = ["M", "F", "OTHER"];
90
- const KycStatusZod = [
92
+ const KycStatusZod$1 = [
91
93
  "NOT_APPROVED",
92
94
  "VERIFIED",
93
95
  "UNVERIFIED",
94
96
  "REJECTED"
95
97
  ];
96
- const TRADER_TYPE = ["PERSON", "COMPANY", "OSVC"];
98
+ const TRADER_TYPE$1 = ["PERSON", "COMPANY", "OSVC"];
97
99
 
98
100
  const AddressTypeZod = [
99
101
  "PERMANENT_ADDRESS",
100
102
  "REGISTERED_OFFICE",
101
103
  "CONTACT_ADDRESS"
102
104
  ];
105
+ const ContactTypeZod = [
106
+ "EMAIL",
107
+ "PHONE_AUTH",
108
+ "PHONE_CONTACT",
109
+ "PHONE_WORK"
110
+ ];
103
111
  const IdDocTypeZod = ["PASSPORT", "ID", "DRIVING_LICENSE"];
104
112
  const IdDocStatusZod = [
105
113
  "ACTIVE",
@@ -107,6 +115,12 @@ const IdDocStatusZod = [
107
115
  "EXPIRE_SOON",
108
116
  "REVOKED"
109
117
  ];
118
+ const PartyRelationshipTypeZod = [
119
+ "AUTHORIZED_SIGNATORY",
120
+ "POA_HOLDER",
121
+ "BOARD_MEMBER",
122
+ "UBO"
123
+ ];
110
124
  const CustomerStatusZod = [
111
125
  // 'LEAD',
112
126
  "NEW",
@@ -121,289 +135,47 @@ const PartyTypeZod = [
121
135
  "SELF_EMPLOYED",
122
136
  "ORGANIZATION"
123
137
  ];
138
+ const AmlScoreTypeZod = [
139
+ "LOW",
140
+ "MEDIUM",
141
+ "HIGH",
142
+ "UNACCEPTABLE",
143
+ "UNVERIFIED",
144
+ "UNCLASSIFIED"
145
+ ];
124
146
  const GenderZod = ["M", "F", "OTHER"];
147
+ const KycStatusZod = [
148
+ "NOT_APPROVED",
149
+ "VERIFIED",
150
+ "UNVERIFIED",
151
+ "REJECTED"
152
+ ];
153
+ const TRADER_TYPE = ["PERSON", "COMPANY", "OSVC"];
125
154
 
126
- const individualInsertSchema = zodOpenapi.z.object({
127
- partyId: zodOpenapi.z.uuid().optional(),
128
- internalId: zodOpenapi.z.string().optional(),
129
- name: zodOpenapi.z.string(),
130
- surname: zodOpenapi.z.string(),
131
- email: zodOpenapi.z.string().optional(),
132
- phone: zodOpenapi.z.string().optional(),
133
- birthDate: zodOpenapi.z.string().optional(),
134
- birthPlace: zodOpenapi.z.string(),
135
- countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
136
- personalId: zodOpenapi.z.uuid(),
137
- gender: zodOpenapi.z.enum(GenderZod),
138
- citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
139
- citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
140
- employer: zodOpenapi.z.string().optional(),
141
- employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
142
- registeredNumber: zodOpenapi.z.string(),
143
- isPep: zodOpenapi.z.boolean(),
144
- titleBefore: zodOpenapi.z.string().optional(),
145
- titleAfter: zodOpenapi.z.string().optional(),
146
- birthSurname: zodOpenapi.z.string().optional(),
147
- vocativeTitle: zodOpenapi.z.string().optional(),
148
- deathDate: zodOpenapi.z.date().optional(),
149
- deathNotification: zodOpenapi.z.date().optional(),
150
- pin: zodOpenapi.z.string().optional(),
151
- stayAbroad: zodOpenapi.z.boolean().optional(),
152
- stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
153
- });
154
- const individualUpdateSchema = zodOpenapi.z.object({
155
- id: zodOpenapi.z.uuid(),
156
- partyId: zodOpenapi.z.uuid(),
157
- internalId: zodOpenapi.z.string().optional(),
158
- name: zodOpenapi.z.string().optional(),
159
- surname: zodOpenapi.z.string().optional(),
160
- email: zodOpenapi.z.string().optional(),
161
- phone: zodOpenapi.z.string().optional(),
162
- birthDate: zodOpenapi.z.string().optional(),
163
- birthPlace: zodOpenapi.z.string().optional(),
164
- countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
165
- personalId: zodOpenapi.z.uuid().optional(),
166
- gender: zodOpenapi.z.enum(GenderZod).optional(),
167
- citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
168
- citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
169
- employer: zodOpenapi.z.string().optional(),
170
- employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
171
- registeredNumber: zodOpenapi.z.string().optional(),
172
- isPep: zodOpenapi.z.boolean().optional(),
173
- titleBefore: zodOpenapi.z.string().optional(),
174
- titleAfter: zodOpenapi.z.string().optional(),
175
- birthSurname: zodOpenapi.z.string().optional(),
176
- vocativeTitle: zodOpenapi.z.string().optional(),
177
- deathDate: zodOpenapi.z.date().optional(),
178
- deathNotification: zodOpenapi.z.date().optional(),
179
- pin: zodOpenapi.z.string().optional(),
180
- stayAbroad: zodOpenapi.z.boolean().optional(),
181
- stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
182
- });
183
- const individualOutputSchema = zodOpenapi.z.object({
184
- id: zodOpenapi.z.uuid(),
185
- partyId: zodOpenapi.z.uuid().nullable(),
186
- internalId: zodOpenapi.z.string().nullable(),
187
- name: zodOpenapi.z.string(),
188
- surname: zodOpenapi.z.string(),
189
- email: zodOpenapi.z.string().nullable(),
190
- phone: zodOpenapi.z.string().nullable(),
191
- birthDate: zodOpenapi.z.string().nullable(),
192
- birthPlace: zodOpenapi.z.string(),
193
- countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
194
- personalId: zodOpenapi.z.uuid(),
195
- gender: zodOpenapi.z.enum(GenderZod),
196
- citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
197
- citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
198
- employer: zodOpenapi.z.string().nullable(),
199
- employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
200
- registeredNumber: zodOpenapi.z.string(),
201
- isPep: zodOpenapi.z.boolean(),
202
- titleBefore: zodOpenapi.z.string().nullable(),
203
- titleAfter: zodOpenapi.z.string().nullable(),
204
- birthSurname: zodOpenapi.z.string().nullable(),
205
- vocativeTitle: zodOpenapi.z.string().nullable(),
206
- deathDate: zodOpenapi.z.coerce.date().nullable(),
207
- deathNotification: zodOpenapi.z.coerce.date().nullable(),
208
- pin: zodOpenapi.z.string().nullable(),
209
- stayAbroad: zodOpenapi.z.boolean().nullable(),
210
- stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
211
- createdAt: zodOpenapi.z.coerce.date().nullable(),
212
- updatedAt: zodOpenapi.z.coerce.date().nullable()
213
- });
214
-
215
- zodOpenapi.z.object({
216
- partyId: zodOpenapi.z.uuid().optional(),
217
- internalId: zodOpenapi.z.string().optional(),
218
- businessName: zodOpenapi.z.string(),
219
- email: zodOpenapi.z.email("Invalid email format").optional(),
220
- phone: zodOpenapi.z.string().optional(),
221
- registeredNumber: zodOpenapi.z.string(),
222
- registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
223
- operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
224
- presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
225
- monthlyVolumeIn: zodOpenapi.z.number(),
226
- monthlyVolumeOut: zodOpenapi.z.number(),
227
- ownedBy: zodOpenapi.z.string(),
228
- companyObjects: zodOpenapi.z.string(),
229
- annualTurnover: zodOpenapi.z.number(),
230
- numberOfEmployees: zodOpenapi.z.number().optional(),
231
- prosecuted: zodOpenapi.z.string().optional(),
232
- location: zodOpenapi.z.string().optional(),
233
- fileNumber: zodOpenapi.z.string().optional(),
234
- websiteUrl: zodOpenapi.z.url("Invalid website URL").optional(),
235
- vatPayer: zodOpenapi.z.boolean(),
236
- companyObjectsDescription: zodOpenapi.z.string(),
237
- turnover3years: zodOpenapi.z.number(),
238
- operationCountries: zodOpenapi.z.string(),
239
- riskyBusinessTypes: zodOpenapi.z.string().optional()
240
- });
241
- const organizationUpdateSchema = zodOpenapi.z.object({
242
- id: zodOpenapi.z.uuid(),
243
- partyId: zodOpenapi.z.uuid().optional(),
244
- internalId: zodOpenapi.z.string().optional(),
245
- businessName: zodOpenapi.z.string().optional(),
246
- email: zodOpenapi.z.email("Invalid email format").optional(),
247
- phone: zodOpenapi.z.string().optional(),
248
- registeredNumber: zodOpenapi.z.string().optional(),
249
- registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
250
- operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
251
- presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
252
- monthlyVolumeIn: zodOpenapi.z.number().optional(),
253
- monthlyVolumeOut: zodOpenapi.z.number().optional(),
254
- ownedBy: zodOpenapi.z.string().optional(),
255
- companyObjects: zodOpenapi.z.string().optional(),
256
- annualTurnover: zodOpenapi.z.number().optional(),
257
- numberOfEmployees: zodOpenapi.z.number().optional(),
258
- prosecuted: zodOpenapi.z.string().optional(),
259
- location: zodOpenapi.z.string().optional(),
260
- fileNumber: zodOpenapi.z.string().optional(),
261
- websiteUrl: zodOpenapi.z.url("Invalid website URL").optional(),
262
- vatPayer: zodOpenapi.z.boolean().optional(),
263
- companyObjectsDescription: zodOpenapi.z.string(),
264
- turnover3years: zodOpenapi.z.number(),
265
- operationCountries: zodOpenapi.z.string(),
266
- riskyBusinessTypes: zodOpenapi.z.string().optional()
267
- });
268
- zodOpenapi.z.object({
269
- id: zodOpenapi.z.uuid(),
270
- partyId: zodOpenapi.z.uuid(),
271
- internalId: zodOpenapi.z.string().nullable(),
272
- businessName: zodOpenapi.z.string(),
273
- email: zodOpenapi.z.string().nullable(),
274
- phone: zodOpenapi.z.string().nullable(),
275
- registeredNumber: zodOpenapi.z.string(),
276
- registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
277
- operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
278
- presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
279
- monthlyVolumeIn: zodOpenapi.z.number(),
280
- monthlyVolumeOut: zodOpenapi.z.number(),
281
- ownedBy: zodOpenapi.z.string(),
282
- companyObjects: zodOpenapi.z.string(),
283
- annualTurnover: zodOpenapi.z.number(),
284
- numberOfEmployees: zodOpenapi.z.number().nullable(),
285
- prosecuted: zodOpenapi.z.string().nullable(),
286
- location: zodOpenapi.z.string().nullable(),
287
- fileNumber: zodOpenapi.z.string().nullable(),
288
- websiteUrl: zodOpenapi.z.string().nullable(),
289
- vatPayer: zodOpenapi.z.boolean(),
290
- companyObjectsDescription: zodOpenapi.z.string(),
291
- turnover3years: zodOpenapi.z.number(),
292
- operationCountries: zodOpenapi.z.string(),
293
- riskyBusinessTypes: zodOpenapi.z.string().nullable(),
294
- createdAt: zodOpenapi.z.coerce.date().nullable(),
295
- updatedAt: zodOpenapi.z.coerce.date().nullable()
296
- });
297
- const createOrganizationInputSchema = zodOpenapi.z.object({
298
- partyId: zodOpenapi.z.uuid().optional(),
299
- internalId: zodOpenapi.z.string().optional(),
300
- businessName: zodOpenapi.z.string(),
301
- email: zodOpenapi.z.string().optional(),
302
- phone: zodOpenapi.z.string().optional(),
303
- registeredNumber: zodOpenapi.z.string(),
304
- registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
305
- operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
306
- presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
307
- monthlyVolumeIn: zodOpenapi.z.number(),
308
- monthlyVolumeOut: zodOpenapi.z.number(),
309
- ownedBy: zodOpenapi.z.string(),
310
- companyObjects: zodOpenapi.z.string(),
311
- annualTurnover: zodOpenapi.z.number(),
312
- numberOfEmployees: zodOpenapi.z.number(),
313
- prosecuted: zodOpenapi.z.string().optional(),
314
- location: zodOpenapi.z.string().optional(),
315
- fileNumber: zodOpenapi.z.string().optional(),
316
- websiteUrl: zodOpenapi.z.string().optional(),
317
- vatPayer: zodOpenapi.z.boolean(),
318
- message: zodOpenapi.z.string(),
319
- companyObjectsDescription: zodOpenapi.z.string(),
320
- turnover3years: zodOpenapi.z.number(),
321
- operationCountries: zodOpenapi.z.string(),
322
- riskyBusinessTypes: zodOpenapi.z.string().optional()
323
- });
324
- const createOrganizationOutputSchema = zodOpenapi.z.object({
325
- partyId: zodOpenapi.z.uuid(),
326
- internalId: zodOpenapi.z.string().nullable(),
327
- businessName: zodOpenapi.z.string(),
328
- email: zodOpenapi.z.string().nullable(),
329
- phone: zodOpenapi.z.string().nullable(),
330
- registeredNumber: zodOpenapi.z.string(),
331
- registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
332
- operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
333
- presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
334
- monthlyVolumeIn: zodOpenapi.z.number(),
335
- monthlyVolumeOut: zodOpenapi.z.number(),
336
- ownedBy: zodOpenapi.z.string(),
337
- companyObjects: zodOpenapi.z.string(),
338
- annualTurnover: zodOpenapi.z.number(),
339
- numberOfEmployees: zodOpenapi.z.number().nullable(),
340
- prosecuted: zodOpenapi.z.string().nullable(),
341
- location: zodOpenapi.z.string().nullable(),
342
- fileNumber: zodOpenapi.z.string().nullable(),
343
- websiteUrl: zodOpenapi.z.string().nullable(),
344
- vatPayer: zodOpenapi.z.boolean(),
345
- message: zodOpenapi.z.string().nullable(),
346
- companyObjectsDescription: zodOpenapi.z.string(),
347
- turnover3years: zodOpenapi.z.number(),
348
- operationCountries: zodOpenapi.z.string(),
349
- riskyBusinessTypes: zodOpenapi.z.string().nullable()
350
- });
351
-
352
- const disponentSchema = zodOpenapi.z.discriminatedUnion("partyType", [
353
- zodOpenapi.z.object({
354
- partyType: zodOpenapi.z.literal("INDIVIDUAL"),
355
- data: individualInsertSchema
356
- }),
357
- zodOpenapi.z.object({
358
- partyType: zodOpenapi.z.literal("ORGANIZATION"),
359
- data: createOrganizationInputSchema
360
- })
361
- ]);
362
- const disponentUpdateSchema = zodOpenapi.z.discriminatedUnion("partyType", [
363
- zodOpenapi.z.object({
364
- partyType: zodOpenapi.z.literal("INDIVIDUAL"),
365
- data: individualUpdateSchema
366
- }),
367
- zodOpenapi.z.object({
368
- partyType: zodOpenapi.z.literal("ORGANIZATION"),
369
- data: organizationUpdateSchema
370
- })
371
- ]);
372
- const disponentOutputSchema = zodOpenapi.z.discriminatedUnion("partyType", [
373
- zodOpenapi.z.object({
374
- partyType: zodOpenapi.z.literal("INDIVIDUAL"),
375
- data: individualOutputSchema.nullable()
376
- }),
377
- zodOpenapi.z.object({
378
- partyType: zodOpenapi.z.literal("ORGANIZATION"),
379
- data: createOrganizationOutputSchema.nullable()
380
- })
381
- ]);
382
-
383
- const entityKind = Symbol.for("drizzle:entityKind");
384
- function is(value, type) {
385
- if (!value || typeof value !== "object") {
386
- return false;
387
- }
388
- if (value instanceof type) {
389
- return true;
390
- }
391
- if (!Object.prototype.hasOwnProperty.call(type, entityKind)) {
392
- throw new Error(
393
- `Class "${type.name ?? "<unknown>"}" doesn't look like a Drizzle entity. If this is incorrect and the class is provided by Drizzle, please report this as a bug.`
394
- );
395
- }
396
- let cls = Object.getPrototypeOf(value).constructor;
397
- if (cls) {
398
- while (cls) {
399
- if (entityKind in cls && cls[entityKind] === type[entityKind]) {
400
- return true;
401
- }
402
- cls = Object.getPrototypeOf(cls);
403
- }
404
- }
405
- return false;
406
- }
155
+ const entityKind = Symbol.for("drizzle:entityKind");
156
+ function is(value, type) {
157
+ if (!value || typeof value !== "object") {
158
+ return false;
159
+ }
160
+ if (value instanceof type) {
161
+ return true;
162
+ }
163
+ if (!Object.prototype.hasOwnProperty.call(type, entityKind)) {
164
+ throw new Error(
165
+ `Class "${type.name ?? "<unknown>"}" doesn't look like a Drizzle entity. If this is incorrect and the class is provided by Drizzle, please report this as a bug.`
166
+ );
167
+ }
168
+ let cls = Object.getPrototypeOf(value).constructor;
169
+ if (cls) {
170
+ while (cls) {
171
+ if (entityKind in cls && cls[entityKind] === type[entityKind]) {
172
+ return true;
173
+ }
174
+ cls = Object.getPrototypeOf(cls);
175
+ }
176
+ }
177
+ return false;
178
+ }
407
179
 
408
180
  class Column {
409
181
  constructor(table, config) {
@@ -560,7 +332,7 @@ class ColumnBuilder {
560
332
  const TableName = Symbol.for("drizzle:Name");
561
333
 
562
334
  const isPgEnumSym = Symbol.for("drizzle:isPgEnum");
563
- function isPgEnum(obj) {
335
+ function isPgEnum$1(obj) {
564
336
  return !!obj && typeof obj === "function" && isPgEnumSym in obj && obj[isPgEnumSym] === true;
565
337
  }
566
338
 
@@ -645,6 +417,9 @@ class Table {
645
417
  this[BaseName] = baseName;
646
418
  }
647
419
  }
420
+ function isTable(table) {
421
+ return typeof table === "object" && table !== null && IsDrizzleTable in table;
422
+ }
648
423
 
649
424
  function isSQLWrapper(value) {
650
425
  return value !== null && value !== void 0 && typeof value.getSQL === "function";
@@ -806,7 +581,7 @@ class SQL {
806
581
  new Name(chunk._.alias)
807
582
  ], config);
808
583
  }
809
- if (isPgEnum(chunk)) {
584
+ if (isPgEnum$1(chunk)) {
810
585
  if (chunk.schema) {
811
586
  return { sql: escapeName(chunk.schema) + "." + escapeName(chunk.enumName), params: [] };
812
587
  }
@@ -1006,6 +781,9 @@ class View {
1006
781
  return new SQL([this]);
1007
782
  }
1008
783
  }
784
+ function isView(view) {
785
+ return typeof view === "object" && view !== null && IsDrizzleView in view;
786
+ }
1009
787
  Column.prototype.getSQL = function() {
1010
788
  return new SQL([this]);
1011
789
  };
@@ -1016,13 +794,19 @@ Subquery.prototype.getSQL = function() {
1016
794
  return new SQL([this]);
1017
795
  };
1018
796
 
797
+ function getTableColumns(table) {
798
+ return table[Table.Symbol.Columns];
799
+ }
800
+ function getViewSelectedFields(view) {
801
+ return view[ViewBaseConfig].selectedFields;
802
+ }
1019
803
  function getColumnNameAndConfig(a, b) {
1020
804
  return {
1021
805
  name: typeof a === "string" && a.length > 0 ? a : "",
1022
806
  config: typeof a === "object" ? a : b
1023
807
  };
1024
808
  }
1025
- typeof TextDecoder === "undefined" ? null : new TextDecoder();
809
+ const textDecoder = typeof TextDecoder === "undefined" ? null : new TextDecoder();
1026
810
 
1027
811
  class ForeignKeyBuilder {
1028
812
  static [entityKind] = "SQLiteForeignKeyBuilder";
@@ -1134,6 +918,141 @@ class SQLiteColumn extends Column {
1134
918
  static [entityKind] = "SQLiteColumn";
1135
919
  }
1136
920
 
921
+ class SQLiteBigIntBuilder extends SQLiteColumnBuilder {
922
+ static [entityKind] = "SQLiteBigIntBuilder";
923
+ constructor(name) {
924
+ super(name, "bigint", "SQLiteBigInt");
925
+ }
926
+ /** @internal */
927
+ build(table) {
928
+ return new SQLiteBigInt(table, this.config);
929
+ }
930
+ }
931
+ class SQLiteBigInt extends SQLiteColumn {
932
+ static [entityKind] = "SQLiteBigInt";
933
+ getSQLType() {
934
+ return "blob";
935
+ }
936
+ mapFromDriverValue(value) {
937
+ if (typeof Buffer !== "undefined" && Buffer.from) {
938
+ const buf = Buffer.isBuffer(value) ? value : value instanceof ArrayBuffer ? Buffer.from(value) : value.buffer ? Buffer.from(value.buffer, value.byteOffset, value.byteLength) : Buffer.from(value);
939
+ return BigInt(buf.toString("utf8"));
940
+ }
941
+ return BigInt(textDecoder.decode(value));
942
+ }
943
+ mapToDriverValue(value) {
944
+ return Buffer.from(value.toString());
945
+ }
946
+ }
947
+ class SQLiteBlobJsonBuilder extends SQLiteColumnBuilder {
948
+ static [entityKind] = "SQLiteBlobJsonBuilder";
949
+ constructor(name) {
950
+ super(name, "json", "SQLiteBlobJson");
951
+ }
952
+ /** @internal */
953
+ build(table) {
954
+ return new SQLiteBlobJson(
955
+ table,
956
+ this.config
957
+ );
958
+ }
959
+ }
960
+ class SQLiteBlobJson extends SQLiteColumn {
961
+ static [entityKind] = "SQLiteBlobJson";
962
+ getSQLType() {
963
+ return "blob";
964
+ }
965
+ mapFromDriverValue(value) {
966
+ if (typeof Buffer !== "undefined" && Buffer.from) {
967
+ const buf = Buffer.isBuffer(value) ? value : value instanceof ArrayBuffer ? Buffer.from(value) : value.buffer ? Buffer.from(value.buffer, value.byteOffset, value.byteLength) : Buffer.from(value);
968
+ return JSON.parse(buf.toString("utf8"));
969
+ }
970
+ return JSON.parse(textDecoder.decode(value));
971
+ }
972
+ mapToDriverValue(value) {
973
+ return Buffer.from(JSON.stringify(value));
974
+ }
975
+ }
976
+ class SQLiteBlobBufferBuilder extends SQLiteColumnBuilder {
977
+ static [entityKind] = "SQLiteBlobBufferBuilder";
978
+ constructor(name) {
979
+ super(name, "buffer", "SQLiteBlobBuffer");
980
+ }
981
+ /** @internal */
982
+ build(table) {
983
+ return new SQLiteBlobBuffer(table, this.config);
984
+ }
985
+ }
986
+ class SQLiteBlobBuffer extends SQLiteColumn {
987
+ static [entityKind] = "SQLiteBlobBuffer";
988
+ mapFromDriverValue(value) {
989
+ if (Buffer.isBuffer(value)) {
990
+ return value;
991
+ }
992
+ return Buffer.from(value);
993
+ }
994
+ getSQLType() {
995
+ return "blob";
996
+ }
997
+ }
998
+ function blob(a, b) {
999
+ const { name, config } = getColumnNameAndConfig(a, b);
1000
+ if (config?.mode === "json") {
1001
+ return new SQLiteBlobJsonBuilder(name);
1002
+ }
1003
+ if (config?.mode === "bigint") {
1004
+ return new SQLiteBigIntBuilder(name);
1005
+ }
1006
+ return new SQLiteBlobBufferBuilder(name);
1007
+ }
1008
+
1009
+ class SQLiteCustomColumnBuilder extends SQLiteColumnBuilder {
1010
+ static [entityKind] = "SQLiteCustomColumnBuilder";
1011
+ constructor(name, fieldConfig, customTypeParams) {
1012
+ super(name, "custom", "SQLiteCustomColumn");
1013
+ this.config.fieldConfig = fieldConfig;
1014
+ this.config.customTypeParams = customTypeParams;
1015
+ }
1016
+ /** @internal */
1017
+ build(table) {
1018
+ return new SQLiteCustomColumn(
1019
+ table,
1020
+ this.config
1021
+ );
1022
+ }
1023
+ }
1024
+ class SQLiteCustomColumn extends SQLiteColumn {
1025
+ static [entityKind] = "SQLiteCustomColumn";
1026
+ sqlName;
1027
+ mapTo;
1028
+ mapFrom;
1029
+ constructor(table, config) {
1030
+ super(table, config);
1031
+ this.sqlName = config.customTypeParams.dataType(config.fieldConfig);
1032
+ this.mapTo = config.customTypeParams.toDriver;
1033
+ this.mapFrom = config.customTypeParams.fromDriver;
1034
+ }
1035
+ getSQLType() {
1036
+ return this.sqlName;
1037
+ }
1038
+ mapFromDriverValue(value) {
1039
+ return typeof this.mapFrom === "function" ? this.mapFrom(value) : value;
1040
+ }
1041
+ mapToDriverValue(value) {
1042
+ return typeof this.mapTo === "function" ? this.mapTo(value) : value;
1043
+ }
1044
+ }
1045
+ function customType(customTypeParams) {
1046
+ return (a, b) => {
1047
+ const { name, config } = getColumnNameAndConfig(a, b);
1048
+ return new SQLiteCustomColumnBuilder(
1049
+ name,
1050
+ config,
1051
+ customTypeParams
1052
+ );
1053
+ };
1054
+ }
1055
+
1137
1056
  class SQLiteBaseIntegerBuilder extends SQLiteColumnBuilder {
1138
1057
  static [entityKind] = "SQLiteBaseIntegerBuilder";
1139
1058
  constructor(name, dataType, columnType) {
@@ -1242,6 +1161,100 @@ function integer(a, b) {
1242
1161
  return new SQLiteIntegerBuilder(name);
1243
1162
  }
1244
1163
 
1164
+ class SQLiteNumericBuilder extends SQLiteColumnBuilder {
1165
+ static [entityKind] = "SQLiteNumericBuilder";
1166
+ constructor(name) {
1167
+ super(name, "string", "SQLiteNumeric");
1168
+ }
1169
+ /** @internal */
1170
+ build(table) {
1171
+ return new SQLiteNumeric(
1172
+ table,
1173
+ this.config
1174
+ );
1175
+ }
1176
+ }
1177
+ class SQLiteNumeric extends SQLiteColumn {
1178
+ static [entityKind] = "SQLiteNumeric";
1179
+ mapFromDriverValue(value) {
1180
+ if (typeof value === "string") return value;
1181
+ return String(value);
1182
+ }
1183
+ getSQLType() {
1184
+ return "numeric";
1185
+ }
1186
+ }
1187
+ class SQLiteNumericNumberBuilder extends SQLiteColumnBuilder {
1188
+ static [entityKind] = "SQLiteNumericNumberBuilder";
1189
+ constructor(name) {
1190
+ super(name, "number", "SQLiteNumericNumber");
1191
+ }
1192
+ /** @internal */
1193
+ build(table) {
1194
+ return new SQLiteNumericNumber(
1195
+ table,
1196
+ this.config
1197
+ );
1198
+ }
1199
+ }
1200
+ class SQLiteNumericNumber extends SQLiteColumn {
1201
+ static [entityKind] = "SQLiteNumericNumber";
1202
+ mapFromDriverValue(value) {
1203
+ if (typeof value === "number") return value;
1204
+ return Number(value);
1205
+ }
1206
+ mapToDriverValue = String;
1207
+ getSQLType() {
1208
+ return "numeric";
1209
+ }
1210
+ }
1211
+ class SQLiteNumericBigIntBuilder extends SQLiteColumnBuilder {
1212
+ static [entityKind] = "SQLiteNumericBigIntBuilder";
1213
+ constructor(name) {
1214
+ super(name, "bigint", "SQLiteNumericBigInt");
1215
+ }
1216
+ /** @internal */
1217
+ build(table) {
1218
+ return new SQLiteNumericBigInt(
1219
+ table,
1220
+ this.config
1221
+ );
1222
+ }
1223
+ }
1224
+ class SQLiteNumericBigInt extends SQLiteColumn {
1225
+ static [entityKind] = "SQLiteNumericBigInt";
1226
+ mapFromDriverValue = BigInt;
1227
+ mapToDriverValue = String;
1228
+ getSQLType() {
1229
+ return "numeric";
1230
+ }
1231
+ }
1232
+ function numeric(a, b) {
1233
+ const { name, config } = getColumnNameAndConfig(a, b);
1234
+ const mode = config?.mode;
1235
+ return mode === "number" ? new SQLiteNumericNumberBuilder(name) : mode === "bigint" ? new SQLiteNumericBigIntBuilder(name) : new SQLiteNumericBuilder(name);
1236
+ }
1237
+
1238
+ class SQLiteRealBuilder extends SQLiteColumnBuilder {
1239
+ static [entityKind] = "SQLiteRealBuilder";
1240
+ constructor(name) {
1241
+ super(name, "number", "SQLiteReal");
1242
+ }
1243
+ /** @internal */
1244
+ build(table) {
1245
+ return new SQLiteReal(table, this.config);
1246
+ }
1247
+ }
1248
+ class SQLiteReal extends SQLiteColumn {
1249
+ static [entityKind] = "SQLiteReal";
1250
+ getSQLType() {
1251
+ return "real";
1252
+ }
1253
+ }
1254
+ function real(name) {
1255
+ return new SQLiteRealBuilder(name ?? "");
1256
+ }
1257
+
1245
1258
  class SQLiteTextBuilder extends SQLiteColumnBuilder {
1246
1259
  static [entityKind] = "SQLiteTextBuilder";
1247
1260
  constructor(name, config) {
@@ -1301,51 +1314,396 @@ function text(a, b = {}) {
1301
1314
  return new SQLiteTextBuilder(name, config);
1302
1315
  }
1303
1316
 
1317
+ function getSQLiteColumnBuilders() {
1318
+ return {
1319
+ blob,
1320
+ customType,
1321
+ integer,
1322
+ numeric,
1323
+ real,
1324
+ text
1325
+ };
1326
+ }
1327
+
1328
+ const InlineForeignKeys = Symbol.for("drizzle:SQLiteInlineForeignKeys");
1329
+ class SQLiteTable extends Table {
1330
+ static [entityKind] = "SQLiteTable";
1331
+ /** @internal */
1332
+ static Symbol = Object.assign({}, Table.Symbol, {
1333
+ InlineForeignKeys
1334
+ });
1335
+ /** @internal */
1336
+ [Table.Symbol.Columns];
1337
+ /** @internal */
1338
+ [InlineForeignKeys] = [];
1339
+ /** @internal */
1340
+ [Table.Symbol.ExtraConfigBuilder] = void 0;
1341
+ }
1342
+ function sqliteTableBase(name, columns, extraConfig, schema, baseName = name) {
1343
+ const rawTable = new SQLiteTable(name, schema, baseName);
1344
+ const parsedColumns = typeof columns === "function" ? columns(getSQLiteColumnBuilders()) : columns;
1345
+ const builtColumns = Object.fromEntries(
1346
+ Object.entries(parsedColumns).map(([name2, colBuilderBase]) => {
1347
+ const colBuilder = colBuilderBase;
1348
+ colBuilder.setName(name2);
1349
+ const column = colBuilder.build(rawTable);
1350
+ rawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));
1351
+ return [name2, column];
1352
+ })
1353
+ );
1354
+ const table = Object.assign(rawTable, builtColumns);
1355
+ table[Table.Symbol.Columns] = builtColumns;
1356
+ table[Table.Symbol.ExtraConfigColumns] = builtColumns;
1357
+ return table;
1358
+ }
1359
+ const sqliteTable = (name, columns, extraConfig) => {
1360
+ return sqliteTableBase(name, columns);
1361
+ };
1362
+
1363
+ const CONSTANTS = {
1364
+ INT8_MIN: -128,
1365
+ INT8_MAX: 127,
1366
+ INT8_UNSIGNED_MAX: 255,
1367
+ INT16_MIN: -32768,
1368
+ INT16_MAX: 32767,
1369
+ INT16_UNSIGNED_MAX: 65535,
1370
+ INT24_MIN: -8388608,
1371
+ INT24_MAX: 8388607,
1372
+ INT24_UNSIGNED_MAX: 16777215,
1373
+ INT32_MIN: -2147483648,
1374
+ INT32_MAX: 2147483647,
1375
+ INT32_UNSIGNED_MAX: 4294967295,
1376
+ INT48_MIN: -140737488355328,
1377
+ INT48_MAX: 140737488355327,
1378
+ INT48_UNSIGNED_MAX: 281474976710655,
1379
+ INT64_MIN: -9223372036854775808n,
1380
+ INT64_MAX: 9223372036854775807n,
1381
+ INT64_UNSIGNED_MAX: 18446744073709551615n,
1382
+ };
1383
+
1384
+ function isColumnType(column, columnTypes) {
1385
+ return columnTypes.includes(column.columnType);
1386
+ }
1387
+ function isWithEnum(column) {
1388
+ return 'enumValues' in column && Array.isArray(column.enumValues) && column.enumValues.length > 0;
1389
+ }
1390
+ const isPgEnum = isWithEnum;
1391
+
1304
1392
  const literalSchema = v4.z.union([v4.z.string(), v4.z.number(), v4.z.boolean(), v4.z.null()]);
1305
- v4.z.union([
1393
+ const jsonSchema = v4.z.union([
1306
1394
  literalSchema,
1307
1395
  v4.z.record(v4.z.string(), v4.z.any()),
1308
1396
  v4.z.array(v4.z.any()),
1309
1397
  ]);
1310
- v4.z.custom((v) => v instanceof Buffer); // eslint-disable-line no-instanceof/no-instanceof
1311
-
1312
- var esprima$1 = {exports: {}};
1313
-
1314
- var esprima = esprima$1.exports;
1315
-
1316
- var hasRequiredEsprima;
1317
-
1318
- function requireEsprima () {
1319
- if (hasRequiredEsprima) return esprima$1.exports;
1320
- hasRequiredEsprima = 1;
1321
- (function (module, exports$1) {
1322
- (function webpackUniversalModuleDefinition(root, factory) {
1323
- /* istanbul ignore next */
1324
- module.exports = factory();
1325
- })(esprima, function() {
1326
- return /******/ (function(modules) { // webpackBootstrap
1327
- /******/ // The module cache
1328
- /******/ var installedModules = {};
1329
-
1330
- /******/ // The require function
1331
- /******/ function __webpack_require__(moduleId) {
1332
-
1333
- /******/ // Check if module is in cache
1334
- /* istanbul ignore if */
1335
- /******/ if(installedModules[moduleId])
1336
- /******/ return installedModules[moduleId].exports;
1337
-
1338
- /******/ // Create a new module (and put it into the cache)
1339
- /******/ var module = installedModules[moduleId] = {
1340
- /******/ exports: {},
1341
- /******/ id: moduleId,
1342
- /******/ loaded: false
1343
- /******/ };
1344
-
1345
- /******/ // Execute the module function
1346
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
1347
-
1348
- /******/ // Flag the module as loaded
1398
+ const bufferSchema = v4.z.custom((v) => v instanceof Buffer); // eslint-disable-line no-instanceof/no-instanceof
1399
+ function columnToSchema(column, factory) {
1400
+ const z$1 = v4.z;
1401
+ const coerce = {};
1402
+ let schema;
1403
+ if (isWithEnum(column)) {
1404
+ schema = column.enumValues.length ? z$1.enum(column.enumValues) : z$1.string();
1405
+ }
1406
+ if (!schema) {
1407
+ // Handle specific types
1408
+ if (isColumnType(column, ['PgGeometry', 'PgPointTuple'])) {
1409
+ schema = z$1.tuple([z$1.number(), z$1.number()]);
1410
+ }
1411
+ else if (isColumnType(column, ['PgGeometryObject', 'PgPointObject'])) {
1412
+ schema = z$1.object({ x: z$1.number(), y: z$1.number() });
1413
+ }
1414
+ else if (isColumnType(column, ['PgHalfVector', 'PgVector'])) {
1415
+ schema = z$1.array(z$1.number());
1416
+ schema = column.dimensions ? schema.length(column.dimensions) : schema;
1417
+ }
1418
+ else if (isColumnType(column, ['PgLine'])) {
1419
+ schema = z$1.tuple([z$1.number(), z$1.number(), z$1.number()]);
1420
+ }
1421
+ else if (isColumnType(column, ['PgLineABC'])) {
1422
+ schema = z$1.object({
1423
+ a: z$1.number(),
1424
+ b: z$1.number(),
1425
+ c: z$1.number(),
1426
+ });
1427
+ } // Handle other types
1428
+ else if (isColumnType(column, ['PgArray'])) {
1429
+ schema = z$1.array(columnToSchema(column.baseColumn));
1430
+ schema = column.size ? schema.length(column.size) : schema;
1431
+ }
1432
+ else if (column.dataType === 'array') {
1433
+ schema = z$1.array(z$1.any());
1434
+ }
1435
+ else if (column.dataType === 'number') {
1436
+ schema = numberColumnToSchema(column, z$1, coerce);
1437
+ }
1438
+ else if (column.dataType === 'bigint') {
1439
+ schema = bigintColumnToSchema(column, z$1, coerce);
1440
+ }
1441
+ else if (column.dataType === 'boolean') {
1442
+ schema = coerce === true || coerce.boolean ? z$1.coerce.boolean() : z$1.boolean();
1443
+ }
1444
+ else if (column.dataType === 'date') {
1445
+ schema = coerce === true || coerce.date ? z$1.coerce.date() : z$1.date();
1446
+ }
1447
+ else if (column.dataType === 'string') {
1448
+ schema = stringColumnToSchema(column, z$1, coerce);
1449
+ }
1450
+ else if (column.dataType === 'json') {
1451
+ schema = jsonSchema;
1452
+ }
1453
+ else if (column.dataType === 'custom') {
1454
+ schema = z$1.any();
1455
+ }
1456
+ else if (column.dataType === 'buffer') {
1457
+ schema = bufferSchema;
1458
+ }
1459
+ }
1460
+ if (!schema) {
1461
+ schema = z$1.any();
1462
+ }
1463
+ return schema;
1464
+ }
1465
+ function numberColumnToSchema(column, z, coerce) {
1466
+ let unsigned = column.getSQLType().includes('unsigned');
1467
+ let min;
1468
+ let max;
1469
+ let integer = false;
1470
+ if (isColumnType(column, ['MySqlTinyInt', 'SingleStoreTinyInt'])) {
1471
+ min = unsigned ? 0 : CONSTANTS.INT8_MIN;
1472
+ max = unsigned ? CONSTANTS.INT8_UNSIGNED_MAX : CONSTANTS.INT8_MAX;
1473
+ integer = true;
1474
+ }
1475
+ else if (isColumnType(column, [
1476
+ 'PgSmallInt',
1477
+ 'PgSmallSerial',
1478
+ 'MySqlSmallInt',
1479
+ 'SingleStoreSmallInt',
1480
+ ])) {
1481
+ min = unsigned ? 0 : CONSTANTS.INT16_MIN;
1482
+ max = unsigned ? CONSTANTS.INT16_UNSIGNED_MAX : CONSTANTS.INT16_MAX;
1483
+ integer = true;
1484
+ }
1485
+ else if (isColumnType(column, [
1486
+ 'PgReal',
1487
+ 'MySqlFloat',
1488
+ 'MySqlMediumInt',
1489
+ 'SingleStoreMediumInt',
1490
+ 'SingleStoreFloat',
1491
+ ])) {
1492
+ min = unsigned ? 0 : CONSTANTS.INT24_MIN;
1493
+ max = unsigned ? CONSTANTS.INT24_UNSIGNED_MAX : CONSTANTS.INT24_MAX;
1494
+ integer = isColumnType(column, ['MySqlMediumInt', 'SingleStoreMediumInt']);
1495
+ }
1496
+ else if (isColumnType(column, [
1497
+ 'PgInteger',
1498
+ 'PgSerial',
1499
+ 'MySqlInt',
1500
+ 'SingleStoreInt',
1501
+ ])) {
1502
+ min = unsigned ? 0 : CONSTANTS.INT32_MIN;
1503
+ max = unsigned ? CONSTANTS.INT32_UNSIGNED_MAX : CONSTANTS.INT32_MAX;
1504
+ integer = true;
1505
+ }
1506
+ else if (isColumnType(column, [
1507
+ 'PgDoublePrecision',
1508
+ 'MySqlReal',
1509
+ 'MySqlDouble',
1510
+ 'SingleStoreReal',
1511
+ 'SingleStoreDouble',
1512
+ 'SQLiteReal',
1513
+ ])) {
1514
+ min = unsigned ? 0 : CONSTANTS.INT48_MIN;
1515
+ max = unsigned ? CONSTANTS.INT48_UNSIGNED_MAX : CONSTANTS.INT48_MAX;
1516
+ }
1517
+ else if (isColumnType(column, [
1518
+ 'PgBigInt53',
1519
+ 'PgBigSerial53',
1520
+ 'MySqlBigInt53',
1521
+ 'MySqlSerial',
1522
+ 'SingleStoreBigInt53',
1523
+ 'SingleStoreSerial',
1524
+ 'SQLiteInteger',
1525
+ ])) {
1526
+ unsigned = unsigned || isColumnType(column, ['MySqlSerial', 'SingleStoreSerial']);
1527
+ min = unsigned ? 0 : Number.MIN_SAFE_INTEGER;
1528
+ max = Number.MAX_SAFE_INTEGER;
1529
+ integer = true;
1530
+ }
1531
+ else if (isColumnType(column, ['MySqlYear', 'SingleStoreYear'])) {
1532
+ min = 1901;
1533
+ max = 2155;
1534
+ integer = true;
1535
+ }
1536
+ else {
1537
+ min = Number.MIN_SAFE_INTEGER;
1538
+ max = Number.MAX_SAFE_INTEGER;
1539
+ }
1540
+ let schema = coerce === true || coerce?.number
1541
+ ? integer ? z.coerce.number() : z.coerce.number().int()
1542
+ : integer
1543
+ ? z.int()
1544
+ : z.number();
1545
+ schema = schema.gte(min).lte(max);
1546
+ return schema;
1547
+ }
1548
+ function bigintColumnToSchema(column, z, coerce) {
1549
+ const unsigned = column.getSQLType().includes('unsigned');
1550
+ const min = unsigned ? 0n : CONSTANTS.INT64_MIN;
1551
+ const max = unsigned ? CONSTANTS.INT64_UNSIGNED_MAX : CONSTANTS.INT64_MAX;
1552
+ const schema = coerce === true || coerce?.bigint ? z.coerce.bigint() : z.bigint();
1553
+ return schema.gte(min).lte(max);
1554
+ }
1555
+ function stringColumnToSchema(column, z, coerce) {
1556
+ if (isColumnType(column, ['PgUUID'])) {
1557
+ return z.uuid();
1558
+ }
1559
+ let max;
1560
+ let regex;
1561
+ let fixed = false;
1562
+ if (isColumnType(column, ['PgVarchar', 'SQLiteText'])) {
1563
+ max = column.length;
1564
+ }
1565
+ else if (isColumnType(column, ['MySqlVarChar', 'SingleStoreVarChar'])) {
1566
+ max = column.length ?? CONSTANTS.INT16_UNSIGNED_MAX;
1567
+ }
1568
+ else if (isColumnType(column, ['MySqlText', 'SingleStoreText'])) {
1569
+ if (column.textType === 'longtext') {
1570
+ max = CONSTANTS.INT32_UNSIGNED_MAX;
1571
+ }
1572
+ else if (column.textType === 'mediumtext') {
1573
+ max = CONSTANTS.INT24_UNSIGNED_MAX;
1574
+ }
1575
+ else if (column.textType === 'text') {
1576
+ max = CONSTANTS.INT16_UNSIGNED_MAX;
1577
+ }
1578
+ else {
1579
+ max = CONSTANTS.INT8_UNSIGNED_MAX;
1580
+ }
1581
+ }
1582
+ if (isColumnType(column, [
1583
+ 'PgChar',
1584
+ 'MySqlChar',
1585
+ 'SingleStoreChar',
1586
+ ])) {
1587
+ max = column.length;
1588
+ fixed = true;
1589
+ }
1590
+ if (isColumnType(column, ['PgBinaryVector'])) {
1591
+ regex = /^[01]+$/;
1592
+ max = column.dimensions;
1593
+ }
1594
+ let schema = coerce === true || coerce?.string ? z.coerce.string() : z.string();
1595
+ schema = regex ? schema.regex(regex) : schema;
1596
+ return max && fixed ? schema.length(max) : max ? schema.max(max) : schema;
1597
+ }
1598
+
1599
+ function getColumns(tableLike) {
1600
+ return isTable(tableLike) ? getTableColumns(tableLike) : getViewSelectedFields(tableLike);
1601
+ }
1602
+ function handleColumns(columns, refinements, conditions, factory) {
1603
+ const columnSchemas = {};
1604
+ for (const [key, selected] of Object.entries(columns)) {
1605
+ if (!is(selected, Column) && !is(selected, SQL) && !is(selected, SQL.Aliased) && typeof selected === 'object') {
1606
+ const columns = isTable(selected) || isView(selected) ? getColumns(selected) : selected;
1607
+ columnSchemas[key] = handleColumns(columns, refinements[key] ?? {}, conditions);
1608
+ continue;
1609
+ }
1610
+ const refinement = refinements[key];
1611
+ if (refinement !== undefined && typeof refinement !== 'function') {
1612
+ columnSchemas[key] = refinement;
1613
+ continue;
1614
+ }
1615
+ const column = is(selected, Column) ? selected : undefined;
1616
+ const schema = column ? columnToSchema(column) : v4.z.any();
1617
+ const refined = typeof refinement === 'function' ? refinement(schema) : schema;
1618
+ if (conditions.never(column)) {
1619
+ continue;
1620
+ }
1621
+ else {
1622
+ columnSchemas[key] = refined;
1623
+ }
1624
+ if (column) {
1625
+ if (conditions.nullable(column)) {
1626
+ columnSchemas[key] = columnSchemas[key].nullable();
1627
+ }
1628
+ if (conditions.optional(column)) {
1629
+ columnSchemas[key] = columnSchemas[key].optional();
1630
+ }
1631
+ }
1632
+ }
1633
+ return v4.z.object(columnSchemas);
1634
+ }
1635
+ function handleEnum(enum_, factory) {
1636
+ const zod = v4.z;
1637
+ return zod.enum(enum_.enumValues);
1638
+ }
1639
+ const selectConditions = {
1640
+ never: () => false,
1641
+ optional: () => false,
1642
+ nullable: (column) => !column.notNull,
1643
+ };
1644
+ const insertConditions = {
1645
+ never: (column) => column?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always',
1646
+ optional: (column) => !column.notNull || (column.notNull && column.hasDefault),
1647
+ nullable: (column) => !column.notNull,
1648
+ };
1649
+ const updateConditions = {
1650
+ never: (column) => column?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always',
1651
+ optional: () => true,
1652
+ nullable: (column) => !column.notNull,
1653
+ };
1654
+ const createSelectSchema = (entity, refine) => {
1655
+ if (isPgEnum(entity)) {
1656
+ return handleEnum(entity);
1657
+ }
1658
+ const columns = getColumns(entity);
1659
+ return handleColumns(columns, {}, selectConditions);
1660
+ };
1661
+ const createInsertSchema = (entity, refine) => {
1662
+ const columns = getColumns(entity);
1663
+ return handleColumns(columns, {}, insertConditions);
1664
+ };
1665
+ const createUpdateSchema = (entity, refine) => {
1666
+ const columns = getColumns(entity);
1667
+ return handleColumns(columns, {}, updateConditions);
1668
+ };
1669
+
1670
+ var esprima$1 = {exports: {}};
1671
+
1672
+ var esprima = esprima$1.exports;
1673
+
1674
+ var hasRequiredEsprima;
1675
+
1676
+ function requireEsprima () {
1677
+ if (hasRequiredEsprima) return esprima$1.exports;
1678
+ hasRequiredEsprima = 1;
1679
+ (function (module, exports$1) {
1680
+ (function webpackUniversalModuleDefinition(root, factory) {
1681
+ /* istanbul ignore next */
1682
+ module.exports = factory();
1683
+ })(esprima, function() {
1684
+ return /******/ (function(modules) { // webpackBootstrap
1685
+ /******/ // The module cache
1686
+ /******/ var installedModules = {};
1687
+
1688
+ /******/ // The require function
1689
+ /******/ function __webpack_require__(moduleId) {
1690
+
1691
+ /******/ // Check if module is in cache
1692
+ /* istanbul ignore if */
1693
+ /******/ if(installedModules[moduleId])
1694
+ /******/ return installedModules[moduleId].exports;
1695
+
1696
+ /******/ // Create a new module (and put it into the cache)
1697
+ /******/ var module = installedModules[moduleId] = {
1698
+ /******/ exports: {},
1699
+ /******/ id: moduleId,
1700
+ /******/ loaded: false
1701
+ /******/ };
1702
+
1703
+ /******/ // Execute the module function
1704
+ /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
1705
+
1706
+ /******/ // Flag the module as loaded
1349
1707
  /******/ module.loaded = true;
1350
1708
 
1351
1709
  /******/ // Return the exports of the module
@@ -11745,7 +12103,7 @@ SuperJSON.registerSymbol = SuperJSON.defaultInstance.registerSymbol.bind(SuperJS
11745
12103
  SuperJSON.registerCustom = SuperJSON.defaultInstance.registerCustom.bind(SuperJSON.defaultInstance);
11746
12104
  SuperJSON.allowErrorProps = SuperJSON.defaultInstance.allowErrorProps.bind(SuperJSON.defaultInstance);
11747
12105
 
11748
- ({
12106
+ const base = {
11749
12107
  id: text("id").primaryKey(),
11750
12108
  createdAt: integer("created_at", { mode: "timestamp_ms" }).default(
11751
12109
  sql`(unixepoch('subsec') * 1000)`
@@ -11755,9 +12113,9 @@ SuperJSON.allowErrorProps = SuperJSON.defaultInstance.allowErrorProps.bind(Super
11755
12113
  updatedBy: text("updated_by").default(sql`null`),
11756
12114
  deletedAt: integer("deleted_at", { mode: "timestamp_ms" }).default(sql`null`),
11757
12115
  deletedBy: text("deleted_by").default(sql`null`)
11758
- });
12116
+ };
11759
12117
 
11760
- ({
12118
+ const bankAccount$1 = {
11761
12119
  holderName: text("holder_name").notNull(),
11762
12120
  number: text("number"),
11763
12121
  bankCode: text("bank_code", { enum: generalCodes.BANK_CODES }),
@@ -11777,7 +12135,7 @@ SuperJSON.allowErrorProps = SuperJSON.defaultInstance.allowErrorProps.bind(Super
11777
12135
  // Australia
11778
12136
  brBankNumber: text("br_bank_number")
11779
12137
  // Brazil
11780
- });
12138
+ };
11781
12139
 
11782
12140
  const ibanSchema = zod.z.string().min(1).regex(/^[A-Z]{2}[0-9]{2}[A-Z0-9]{11,30}$/, {
11783
12141
  message: "Invalid IBAN format"
@@ -11916,143 +12274,1315 @@ new z__namespace.$ZodObject({
11916
12274
  }
11917
12275
  });
11918
12276
 
11919
- const updateBankAccountSchema = zodOpenapi.z.object({
11920
- ...bankAccountMetadataSchema.shape,
12277
+ const baseMdmSqlite = {
12278
+ ...base
12279
+ };
12280
+
12281
+ const party = sqliteTable("party", {
12282
+ ...base,
12283
+ internalId: text("internal_id"),
12284
+ note: text("note"),
12285
+ customerStatus: text("customer_status", {
12286
+ enum: CustomerStatusZod
12287
+ }).notNull(),
12288
+ partyType: text("party_type", { enum: PartyTypeZod }).notNull(),
12289
+ language: text("language", { enum: generalCodes.LANGUAGE_CODES }).notNull(),
12290
+ countryCode: text("country_code", { enum: generalCodes.COUNTRY_CODES_2 }),
12291
+ isClient: integer("is_client", { mode: "boolean" }).notNull().default(false),
12292
+ legacyId: text("legacy_id")
12293
+ });
12294
+
12295
+ const address = sqliteTable("address", {
12296
+ ...base,
12297
+ internalId: text("internal_id"),
12298
+ partyId: text("party_id").notNull().references(() => party.id),
12299
+ ruianCode: text("ruian_code"),
12300
+ addressType: text("address_type", { enum: AddressTypeZod }).notNull(),
12301
+ street: text("street"),
12302
+ orientationNumber: text("orientation_number"),
12303
+ descriptiveNumber: text("descriptive_number"),
12304
+ municipality: text("municipality").notNull(),
12305
+ municipalityPart: text("municipality_part"),
12306
+ zipCode: text("zip_code").notNull(),
12307
+ district: text("district"),
12308
+ region: text("region"),
12309
+ countryCode: text("state", { enum: generalCodes.COUNTRY_CODES_2 }).notNull()
12310
+ });
12311
+
12312
+ const contact = sqliteTable("contact", {
12313
+ ...base,
12314
+ internalId: text("internal_id"),
12315
+ partyId: text("party_id").notNull().references(() => party.id),
12316
+ contactType: text("contact_type", { enum: ContactTypeZod }),
12317
+ email: text("email").notNull(),
12318
+ phoneNumber: text("phone_number").notNull()
12319
+ });
12320
+
12321
+ const idDocument = sqliteTable("id_document", {
12322
+ ...base,
12323
+ internalId: text("internal_id"),
12324
+ partyId: text("party_id").notNull().references(() => party.id),
12325
+ idDocType: text("id_doc_type", { enum: IdDocTypeZod }).notNull(),
12326
+ idDocNumber: text("id_doc_number").notNull(),
12327
+ idDocHolderName: text("id_doc_holder_name").notNull(),
12328
+ issueDate: integer("issue_date", { mode: "timestamp_ms" }),
12329
+ expirationDate: integer("expiration_date", { mode: "timestamp_ms" }),
12330
+ issuer: text("issuer"),
12331
+ countryOfIssue: text("country_of_issue", { enum: generalCodes.COUNTRY_CODES_2 }),
12332
+ frontImageUri: text("front_image_uri"),
12333
+ backImageUri: text("back_image_uri"),
12334
+ idDocStatus: text("id_doc_status", { enum: IdDocStatusZod })
12335
+ });
12336
+
12337
+ const individual = sqliteTable("individual", {
12338
+ ...base,
12339
+ internalId: text("internal_id"),
12340
+ partyId: text("party_id").notNull().unique().references(() => party.id),
12341
+ name: text("name").notNull(),
12342
+ email: text("email"),
12343
+ phone: text("phone"),
12344
+ surname: text("surname").notNull(),
12345
+ birthDate: text("birth_date"),
12346
+ birthPlace: text("birth_place").notNull(),
12347
+ countryOfBirth: text("country_of_birth", { enum: generalCodes.COUNTRY_CODES_2 }),
12348
+ personalId: text("personal_id").notNull(),
12349
+ gender: text("gender", { enum: GenderZod }).notNull(),
12350
+ citizenship: text("citizenship", { enum: generalCodes.COUNTRY_CODES_2 }).notNull(),
12351
+ citizenshipOther: text("citizenship_other", { enum: generalCodes.COUNTRY_CODES_2 }),
12352
+ employer: text("employer"),
12353
+ employerCountry: text("employer_country", { enum: generalCodes.COUNTRY_CODES_2 }),
12354
+ registeredNumber: text("registered_number").notNull(),
12355
+ isPep: integer("is_pep", { mode: "boolean" }).notNull(),
12356
+ titleBefore: text("title_before"),
12357
+ titleAfter: text("title_after"),
12358
+ birthSurname: text("birth_surname"),
12359
+ vocativeTitle: text("vocative_title"),
12360
+ deathDate: integer("death_date", { mode: "timestamp_ms" }),
12361
+ deathNotification: integer("death_notification", { mode: "timestamp_ms" }),
12362
+ pin: text("pin"),
12363
+ stayAbroad: integer("stay_abroad", { mode: "boolean" }),
12364
+ stayAbroadCountries: text("stay_abroad_countries", {
12365
+ enum: generalCodes.COUNTRY_CODES_2
12366
+ })
12367
+ });
12368
+
12369
+ const organization = sqliteTable("organization", {
12370
+ ...base,
12371
+ internalId: text("internal_id"),
12372
+ partyId: text("party_id").notNull().unique().references(() => party.id),
12373
+ businessName: text("business_name").notNull(),
12374
+ email: text("email"),
12375
+ phone: text("phone"),
12376
+ registeredNumber: text("registered_number").notNull(),
12377
+ registeredIn: text("registered_in", { enum: generalCodes.COUNTRY_CODES_2 }).notNull(),
12378
+ operatesIn: text("operates_in", { enum: generalCodes.COUNTRY_CODES_2 }).notNull(),
12379
+ presentIn: text("present_in", { enum: generalCodes.COUNTRY_CODES_2 }).notNull(),
12380
+ monthlyVolumeIn: integer("monthly_volume_in").notNull(),
12381
+ monthlyVolumeOut: integer("monthly_volume_out").notNull(),
12382
+ ownedBy: text("owned_by").notNull(),
12383
+ // UBO, skutecny majitel, podle Marianovy tabulky by toto mela byt mozna relace na party
12384
+ companyObjects: text("company_objects").notNull(),
12385
+ // predmet cinnosti
12386
+ companyObjectsDescription: text("company_objects_description").notNull(),
12387
+ turnover3years: integer("turnover_3_years").notNull(),
12388
+ operationCountries: text("operation_countries").notNull(),
12389
+ annualTurnover: integer("annual_turnover").notNull(),
12390
+ riskyBusinessType: text("risky_business_type"),
12391
+ numberOfEmployees: integer("number_of_employees"),
12392
+ prosecuted: text("prosecuted"),
12393
+ // vedeno u soudu
12394
+ location: text("location"),
12395
+ // v lokalite
12396
+ fileNumber: text("file_number"),
12397
+ // spisova znacka
12398
+ websiteUrl: text("website_url"),
12399
+ vatPayer: integer("vat_payer", { mode: "boolean" }).notNull(),
12400
+ stayAbroad: integer("stay_abroad", { mode: "boolean" }),
12401
+ stayAbroadCountries: text("stay_abroad_countries", {
12402
+ enum: generalCodes.COUNTRY_CODES_2
12403
+ })
12404
+ });
12405
+
12406
+ const partyRelationship = sqliteTable("party_relationship", {
12407
+ ...base,
12408
+ internalId: text("internal_id"),
12409
+ relationshipType: text("relationship_type", {
12410
+ enum: PartyRelationshipTypeZod
12411
+ }),
12412
+ fromPartyId: text("from_party_id").references(() => party.id),
12413
+ toPartyId: text("to_party_id").references(() => party.id),
12414
+ fromDate: integer("from_date", { mode: "timestamp_ms" }),
12415
+ // FIXME: Treba se doptat https://develitio.slack.com/archives/C09VAF0G70E/p1769766644943189
12416
+ // viz
12417
+ // - Celé pole `owner[]`
12418
+ // - `titleBefore`, `firstName`, `lastName`, `titleAfter`
12419
+ // - `dateOfBirth`, `idNumber`, `address`
12420
+ // - `sharePercentage`
12421
+ // - `dateOfEstablishmentOfShare`
12422
+ // - `pep`
12423
+ sharePercentage: integer("share_percentage")
12424
+ });
12425
+
12426
+ const taxResidence = sqliteTable("tax_residence", {
12427
+ ...base,
12428
+ internalId: text("internal_id"),
12429
+ partyId: text("party_id").notNull().unique().references(() => party.id),
12430
+ country: text("country", { enum: generalCodes.COUNTRY_CODES_2 }).notNull(),
12431
+ taxIdentificationNumber: text("tax_identification_number").notNull()
12432
+ });
12433
+
12434
+ const partyChange = sqliteTable("party_change", {
12435
+ ...base,
12436
+ internalId: text("internal_id"),
12437
+ partyId: text("party_id").notNull().references(() => party.id),
12438
+ operation: text("operation").notNull(),
12439
+ diff: text("diff", { mode: "json" }).notNull(),
12440
+ snapshotBefore: text("snapshot_before", { mode: "json" }).notNull(),
12441
+ snapshotAfter: text("snapshot_after", { mode: "json" }).notNull()
12442
+ });
12443
+
12444
+ const bankAccount = sqliteTable("bank_account", {
12445
+ ...base,
12446
+ internalId: text("internal_id"),
12447
+ ...bankAccount$1,
12448
+ partyId: text("party_id").notNull().references(() => party.id)
12449
+ });
12450
+
12451
+ const aml = sqliteTable("aml", {
12452
+ ...base,
12453
+ internalId: text("internal_id"),
12454
+ partyId: text("party_id").notNull().unique().references(() => party.id),
12455
+ sourceOfWealth: text("source_of_wealth").notNull(),
12456
+ yearlyIncome: text("yearly_income").notNull(),
12457
+ tradesPurpose: text("trades_purpose"),
12458
+ sourceOfIncome: text("source_of_income").notNull(),
12459
+ transactionType: text("transaction_type"),
12460
+ transactionTypeExpiry: integer("transaction_type_expiry", {
12461
+ mode: "timestamp_ms"
12462
+ }),
12463
+ estTxsVolumeMonth: text("est_txs_volume_month").notNull(),
12464
+ estTxsVolumeYear: text("est_txs_volume_year").notNull(),
12465
+ tradingCountries: text("trading_countries").notNull(),
12466
+ tradingSide: text("trading_side").notNull(),
12467
+ acceptedAMLTermsAndConditions: integer("accepted_aml_terms_and_conditions", {
12468
+ mode: "boolean"
12469
+ }).notNull(),
12470
+ signatureMethod: text("signature_method"),
12471
+ existencePeriod: text("existence_period"),
12472
+ reputation: text("reputation"),
12473
+ isDistraint: integer("is_distraint", { mode: "boolean" }).notNull().default(false),
12474
+ riskLevel: text("risk_level", { enum: AmlScoreTypeZod }).notNull(),
12475
+ kycStatus: text("kyc_status", { enum: KycStatusZod })
12476
+ });
12477
+
12478
+ const recipient = sqliteTable("recipient", {
12479
+ ...base,
12480
+ internalId: text("internal_id"),
12481
+ ...bankAccount$1,
12482
+ partyId: text("party_id").notNull().references(() => party.id)
12483
+ });
12484
+
12485
+ const trader = sqliteTable("trader", {
12486
+ ...base,
12487
+ internalId: text("internal_id"),
12488
+ type: text("trader", { length: 50, enum: TRADER_TYPE }).$type().notNull(),
12489
+ firstName: text("first_name", { length: 255 }),
12490
+ lastName: text("last_name", { length: 255 }),
12491
+ companyName: text("company_name", { length: 255 }),
12492
+ ico: text("ico", { length: 255 }),
12493
+ dic: text("dic", { length: 255 }),
12494
+ commission: real("commission").notNull(),
12495
+ legacyId: text("legacy_id")
12496
+ });
12497
+
12498
+ sqliteTable("trader_client", {
12499
+ ...base,
12500
+ clientId: text("client_id").references(() => party.id),
12501
+ traderId: text("trader_id").references(() => trader.id),
12502
+ internalId: text("internal_id"),
12503
+ legacyId: text("legacy_id")
12504
+ });
12505
+
12506
+ sqliteTable("base", baseMdmSqlite);
12507
+
12508
+ createInsertSchema(address);
12509
+ createUpdateSchema(address);
12510
+ createSelectSchema(address);
12511
+ const addressInsertSchema = zodOpenapi.z.object({
12512
+ id: zodOpenapi.z.uuid().optional(),
11921
12513
  partyId: zodOpenapi.z.uuid(),
11922
- internalId: zodOpenapi.z.string().optional(),
11923
- holderName: zodOpenapi.z.string(),
11924
- number: zodOpenapi.z.string().optional(),
11925
- currency: bankAccountMetadataSchema.shape.currency.nonoptional(),
11926
- countryCode: bankAccountMetadataSchema.shape.countryCode.nonoptional(),
11927
- id: bankAccountMetadataSchema.shape.id.nonoptional()
12514
+ internalId: zodOpenapi.z.string().optional().nullable(),
12515
+ ruianCode: zodOpenapi.z.string().optional().nullable(),
12516
+ addressType: zodOpenapi.z.enum(AddressTypeZod),
12517
+ street: zodOpenapi.z.string().optional().nullable(),
12518
+ orientationNumber: zodOpenapi.z.string().optional().nullable(),
12519
+ descriptiveNumber: zodOpenapi.z.string().optional().nullable(),
12520
+ municipality: zodOpenapi.z.string(),
12521
+ municipalityPart: zodOpenapi.z.string().optional().nullable(),
12522
+ zipCode: zodOpenapi.z.string(),
12523
+ district: zodOpenapi.z.string().optional().nullable(),
12524
+ region: zodOpenapi.z.string().optional().nullable(),
12525
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2)
11928
12526
  });
11929
- const bankAccountInputSchema = updateBankAccountSchema.required({
11930
- holderName: true,
11931
- currency: true,
11932
- countryCode: true
11933
- }).omit({ id: true, partyId: true });
11934
- const bankAccountOutputSchema = zodOpenapi.z.object({
11935
- id: zodOpenapi.z.string(),
11936
- partyId: zodOpenapi.z.uuid().nullable(),
12527
+ const addressUpdateSchema = zodOpenapi.z.object({
12528
+ id: zodOpenapi.z.uuid(),
12529
+ partyId: zodOpenapi.z.uuid().optional(),
12530
+ internalId: zodOpenapi.z.string().optional().nullable(),
12531
+ ruianCode: zodOpenapi.z.string().optional().nullable(),
12532
+ addressType: zodOpenapi.z.enum(AddressTypeZod).optional(),
12533
+ street: zodOpenapi.z.string().optional().nullable(),
12534
+ orientationNumber: zodOpenapi.z.string().optional().nullable(),
12535
+ descriptiveNumber: zodOpenapi.z.string().optional().nullable(),
12536
+ municipality: zodOpenapi.z.string().optional(),
12537
+ municipalityPart: zodOpenapi.z.string().optional().nullable(),
12538
+ zipCode: zodOpenapi.z.string().optional(),
12539
+ district: zodOpenapi.z.string().optional().nullable(),
12540
+ region: zodOpenapi.z.string().optional().nullable(),
12541
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
12542
+ createdAt: zodOpenapi.z.coerce.date().nullable().optional()
12543
+ });
12544
+ const addressSelectSchema = zodOpenapi.z.object({
12545
+ id: zodOpenapi.z.uuid(),
12546
+ partyId: zodOpenapi.z.uuid(),
11937
12547
  internalId: zodOpenapi.z.string().nullable(),
11938
- holderName: zodOpenapi.z.string(),
11939
- number: zodOpenapi.z.string().nullable(),
11940
- bankCode: zodOpenapi.z.string().nullable(),
11941
- currency: zodOpenapi.z.string(),
11942
- countryCode: zodOpenapi.z.string(),
11943
- iban: zodOpenapi.z.string().nullable(),
11944
- address: zodOpenapi.z.string().nullable(),
11945
- swiftBic: zodOpenapi.z.string().nullable(),
11946
- bicCor: zodOpenapi.z.string().nullable(),
11947
- routingNumber: zodOpenapi.z.string().nullable(),
11948
- sortCode: zodOpenapi.z.string().nullable(),
11949
- clabe: zodOpenapi.z.string().nullable(),
11950
- bsb: zodOpenapi.z.string().nullable(),
11951
- brBankNumber: zodOpenapi.z.string().nullable(),
12548
+ ruianCode: zodOpenapi.z.string().nullable(),
12549
+ addressType: zodOpenapi.z.enum(AddressTypeZod),
12550
+ street: zodOpenapi.z.string().nullable(),
12551
+ orientationNumber: zodOpenapi.z.string().nullable(),
12552
+ descriptiveNumber: zodOpenapi.z.string().nullable(),
12553
+ municipality: zodOpenapi.z.string(),
12554
+ municipalityPart: zodOpenapi.z.string().nullable(),
12555
+ zipCode: zodOpenapi.z.string(),
12556
+ district: zodOpenapi.z.string().nullable(),
12557
+ region: zodOpenapi.z.string().nullable(),
12558
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12559
+ createdAt: zodOpenapi.z.coerce.date().nullable(),
11952
12560
  updatedAt: zodOpenapi.z.coerce.date().nullable()
11953
12561
  });
11954
12562
 
11955
- const createAmlInputSchema = zodOpenapi.z.object({
11956
- partyId: zodOpenapi.z.uuid().optional(),
11957
- internalId: zodOpenapi.z.string().optional(),
12563
+ createInsertSchema(aml);
12564
+ createUpdateSchema(aml);
12565
+ const amlBaseSelectSchema = createSelectSchema(aml);
12566
+ const amlInsertSchema = zodOpenapi.z.object({
12567
+ partyId: zodOpenapi.z.uuid(),
12568
+ internalId: zodOpenapi.z.string().optional().nullable(),
11958
12569
  sourceOfWealth: zodOpenapi.z.string(),
11959
12570
  yearlyIncome: zodOpenapi.z.string(),
11960
- tradesPurpose: zodOpenapi.z.string().optional(),
12571
+ tradesPurpose: zodOpenapi.z.string().optional().nullable(),
11961
12572
  sourceOfIncome: zodOpenapi.z.string(),
11962
- transactionType: zodOpenapi.z.string().optional(),
11963
- transactionTypeExpiry: zodOpenapi.z.date().optional(),
12573
+ transactionType: zodOpenapi.z.string().optional().nullable(),
12574
+ transactionTypeExpiry: zodOpenapi.z.date().optional().nullable(),
11964
12575
  isDistraint: zodOpenapi.z.boolean().default(false),
11965
12576
  estTxsVolumeMonth: zodOpenapi.z.string(),
11966
12577
  estTxsVolumeYear: zodOpenapi.z.string(),
11967
12578
  tradingCountries: zodOpenapi.z.string(),
11968
12579
  tradingSide: zodOpenapi.z.string(),
11969
12580
  acceptedAMLTermsAndConditions: zodOpenapi.z.boolean(),
11970
- signatureMethod: zodOpenapi.z.string().optional(),
11971
- existencePeriod: zodOpenapi.z.string().optional(),
11972
- reputation: zodOpenapi.z.string().optional(),
11973
- riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod).optional(),
11974
- kycStatus: zodOpenapi.z.enum(KycStatusZod).optional()
12581
+ signatureMethod: zodOpenapi.z.string().nullable().optional(),
12582
+ existencePeriod: zodOpenapi.z.string().nullable().optional(),
12583
+ reputation: zodOpenapi.z.string().nullable().optional(),
12584
+ riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod).nullable().optional(),
12585
+ kycStatus: zodOpenapi.z.enum(KycStatusZod).nullable().optional()
11975
12586
  });
11976
- const updateAmlInputSchema = zodOpenapi.z.object({
12587
+ const amlUpdateSchema = zodOpenapi.z.object({
11977
12588
  id: zodOpenapi.z.uuid(),
11978
12589
  partyId: zodOpenapi.z.uuid().optional(),
11979
- internalId: zodOpenapi.z.string().optional(),
12590
+ internalId: zodOpenapi.z.string().optional().nullable(),
11980
12591
  sourceOfWealth: zodOpenapi.z.string().optional(),
11981
12592
  yearlyIncome: zodOpenapi.z.string().optional(),
11982
- tradesPurpose: zodOpenapi.z.string().optional(),
12593
+ tradesPurpose: zodOpenapi.z.string().optional().nullable(),
11983
12594
  sourceOfIncome: zodOpenapi.z.string().optional(),
11984
- transactionType: zodOpenapi.z.string().optional(),
11985
- transactionTypeExpiry: zodOpenapi.z.date().optional(),
12595
+ transactionType: zodOpenapi.z.string().optional().nullable(),
12596
+ transactionTypeExpiry: zodOpenapi.z.date().optional().nullable(),
11986
12597
  isDistraint: zodOpenapi.z.boolean().optional(),
11987
12598
  estTxsVolumeMonth: zodOpenapi.z.string(),
11988
12599
  estTxsVolumeYear: zodOpenapi.z.string(),
11989
12600
  tradingCountries: zodOpenapi.z.string(),
11990
12601
  tradingSide: zodOpenapi.z.string(),
11991
12602
  acceptedAMLTermsAndConditions: zodOpenapi.z.boolean(),
11992
- signatureMethod: zodOpenapi.z.string().optional(),
11993
- existencePeriod: zodOpenapi.z.string().optional(),
11994
- reputation: zodOpenapi.z.string().optional(),
11995
- riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod).optional(),
11996
- kycStatus: zodOpenapi.z.enum(KycStatusZod).optional()
12603
+ signatureMethod: zodOpenapi.z.string().nullable().optional(),
12604
+ existencePeriod: zodOpenapi.z.string().nullable().optional(),
12605
+ reputation: zodOpenapi.z.string().nullable().optional(),
12606
+ riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod).nullable().optional(),
12607
+ kycStatus: zodOpenapi.z.enum(KycStatusZod).nullable().optional()
11997
12608
  });
11998
- const createAmlOutputSchema = zodOpenapi.z.object({
11999
- id: zodOpenapi.z.uuid(),
12000
- partyId: zodOpenapi.z.uuid().nullable(),
12001
- internalId: zodOpenapi.z.string().nullable(),
12002
- sourceOfWealth: zodOpenapi.z.string(),
12003
- yearlyIncome: zodOpenapi.z.string(),
12004
- tradesPurpose: zodOpenapi.z.string().nullable(),
12005
- sourceOfIncome: zodOpenapi.z.string(),
12006
- transactionType: zodOpenapi.z.string().nullable(),
12007
- transactionTypeExpiry: zodOpenapi.z.date().nullable(),
12008
- isDistraint: zodOpenapi.z.boolean(),
12009
- estTxsVolumeMonth: zodOpenapi.z.string(),
12010
- estTxsVolumeYear: zodOpenapi.z.string(),
12011
- tradingCountries: zodOpenapi.z.string(),
12012
- tradingSide: zodOpenapi.z.string(),
12013
- acceptedAMLTermsAndConditions: zodOpenapi.z.boolean(),
12014
- signatureMethod: zodOpenapi.z.string().nullable(),
12015
- existencePeriod: zodOpenapi.z.string().nullable(),
12016
- reputation: zodOpenapi.z.string().nullable(),
12017
- riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod),
12018
- kycStatus: zodOpenapi.z.enum(KycStatusZod).nullable(),
12019
- createdAt: zodOpenapi.z.date().nullable(),
12020
- updatedAt: zodOpenapi.z.date().nullable()
12609
+ const amlSelectSchema = amlBaseSelectSchema;
12610
+
12611
+ const bankAccountBaseInsertSchema = createInsertSchema(bankAccount);
12612
+ createUpdateSchema(bankAccount);
12613
+ createSelectSchema(bankAccount);
12614
+ const bankAccountUpdateSchema = bankAccountBaseInsertSchema.extend({ partyId: zodOpenapi.z.uuid() }).omit({});
12615
+ const bankAccountInsertSchema = bankAccountUpdateSchema.omit({
12616
+ id: true
12021
12617
  });
12618
+ const bankAccountUpsertSchema = bankAccountBaseInsertSchema.required({
12619
+ id: true
12620
+ });
12621
+ const bankAccountSelectSchema = bankAccountUpdateSchema.required();
12622
+ zodOpenapi.z.array(bankAccountSelectSchema);
12022
12623
 
12023
- const createAddressInputSchema = zodOpenapi.z.object({
12024
- addressType: zodOpenapi.z.enum(AddressTypeZod),
12025
- internalId: zodOpenapi.z.string().optional(),
12026
- street: zodOpenapi.z.string(),
12027
- orientationNumber: zodOpenapi.z.string().optional(),
12028
- descriptiveNumber: zodOpenapi.z.string().optional(),
12029
- municipality: zodOpenapi.z.string().max(255),
12030
- municipalityPart: zodOpenapi.z.string().optional(),
12031
- zipCode: zodOpenapi.z.string().max(20),
12032
- district: zodOpenapi.z.string().max(255),
12033
- region: zodOpenapi.z.string().max(255),
12034
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12035
- ruianCode: zodOpenapi.z.string().optional()
12624
+ createInsertSchema(contact);
12625
+ createUpdateSchema(contact);
12626
+ createSelectSchema(contact);
12627
+ const contactInsertSchema = zodOpenapi.z.object({
12628
+ partyId: zodOpenapi.z.uuid(),
12629
+ internalId: zodOpenapi.z.string().optional().nullable(),
12630
+ contactType: zodOpenapi.z.enum(ContactTypeZod).optional(),
12631
+ email: zodOpenapi.z.email("Invalid email format"),
12632
+ phoneNumber: zodOpenapi.z.string()
12036
12633
  });
12037
- const createAddressOutputSchema = zodOpenapi.z.object({
12634
+ const contactUpdateSchema = zodOpenapi.z.object({
12038
12635
  id: zodOpenapi.z.uuid(),
12039
- partyId: zodOpenapi.z.uuid().nullable(),
12040
- internalId: zodOpenapi.z.string().nullable(),
12041
- addressType: zodOpenapi.z.enum(AddressTypeZod),
12042
- street: zodOpenapi.z.string().nullable(),
12043
- orientationNumber: zodOpenapi.z.string().nullable(),
12044
- descriptiveNumber: zodOpenapi.z.string().nullable(),
12045
- municipality: zodOpenapi.z.string(),
12046
- municipalityPart: zodOpenapi.z.string().nullable(),
12047
- zipCode: zodOpenapi.z.string(),
12048
- district: zodOpenapi.z.string().nullable(),
12049
- region: zodOpenapi.z.string().nullable(),
12636
+ partyId: zodOpenapi.z.uuid().optional(),
12637
+ internalId: zodOpenapi.z.string().optional().nullable(),
12638
+ contactType: zodOpenapi.z.enum(ContactTypeZod).optional(),
12639
+ email: zodOpenapi.z.email("Invalid email format").optional(),
12640
+ phoneNumber: zodOpenapi.z.string().optional()
12641
+ });
12642
+
12643
+ createInsertSchema(individual);
12644
+ createUpdateSchema(individual);
12645
+ createSelectSchema(individual);
12646
+ const individualInsertSchema$1 = zodOpenapi.z.object({
12647
+ partyId: zodOpenapi.z.uuid(),
12648
+ name: zodOpenapi.z.string(),
12649
+ surname: zodOpenapi.z.string(),
12650
+ email: zodOpenapi.z.email("Invalid email format").optional().nullable(),
12651
+ phone: zodOpenapi.z.string().optional().nullable(),
12652
+ birthDate: zodOpenapi.z.string().optional().nullable(),
12653
+ birthPlace: zodOpenapi.z.string(),
12654
+ countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12655
+ personalId: zodOpenapi.z.string(),
12656
+ gender: zodOpenapi.z.enum(GenderZod),
12657
+ citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12658
+ citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12659
+ employer: zodOpenapi.z.string().optional().nullable(),
12660
+ employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12661
+ registeredNumber: zodOpenapi.z.string(),
12662
+ isPep: zodOpenapi.z.boolean(),
12663
+ titleBefore: zodOpenapi.z.string().optional().nullable(),
12664
+ titleAfter: zodOpenapi.z.string().optional().nullable(),
12665
+ birthSurname: zodOpenapi.z.string().optional().nullable(),
12666
+ vocativeTitle: zodOpenapi.z.string().optional().nullable(),
12667
+ deathDate: zodOpenapi.z.date().optional().nullable(),
12668
+ deathNotification: zodOpenapi.z.date().optional().nullable(),
12669
+ pin: zodOpenapi.z.string().optional().nullable(),
12670
+ stayAbroad: zodOpenapi.z.boolean().optional().nullable(),
12671
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable()
12672
+ });
12673
+ const individualUpdateSchema$1 = zodOpenapi.z.object({
12674
+ partyId: zodOpenapi.z.uuid(),
12675
+ id: zodOpenapi.z.uuid(),
12676
+ name: zodOpenapi.z.string().optional(),
12677
+ surname: zodOpenapi.z.string().optional(),
12678
+ email: zodOpenapi.z.email("Invalid email format").optional().nullable(),
12679
+ phone: zodOpenapi.z.string().optional().nullable(),
12680
+ birthDate: zodOpenapi.z.string().optional().nullable(),
12681
+ birthPlace: zodOpenapi.z.string().optional(),
12682
+ countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12683
+ personalId: zodOpenapi.z.string().optional(),
12684
+ gender: zodOpenapi.z.enum(GenderZod).optional(),
12685
+ citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
12686
+ citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12687
+ employer: zodOpenapi.z.string().optional().nullable(),
12688
+ employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12689
+ registeredNumber: zodOpenapi.z.string().optional(),
12690
+ isPep: zodOpenapi.z.boolean().optional(),
12691
+ titleBefore: zodOpenapi.z.string().optional().nullable(),
12692
+ titleAfter: zodOpenapi.z.string().optional().nullable(),
12693
+ birthSurname: zodOpenapi.z.string().optional().nullable(),
12694
+ vocativeTitle: zodOpenapi.z.string().optional().nullable(),
12695
+ deathDate: zodOpenapi.z.date().optional().nullable(),
12696
+ deathNotification: zodOpenapi.z.date().optional().nullable(),
12697
+ pin: zodOpenapi.z.string().optional().nullable(),
12698
+ stayAbroad: zodOpenapi.z.boolean().optional().nullable(),
12699
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable()
12700
+ });
12701
+ const individualSelectSchema = zodOpenapi.z.object({
12702
+ id: zodOpenapi.z.uuid(),
12703
+ partyId: zodOpenapi.z.uuid(),
12704
+ internalId: zodOpenapi.z.string().nullable(),
12705
+ name: zodOpenapi.z.string(),
12706
+ surname: zodOpenapi.z.string(),
12707
+ email: zodOpenapi.z.string().nullable(),
12708
+ phone: zodOpenapi.z.string().nullable(),
12709
+ birthDate: zodOpenapi.z.string().nullable(),
12710
+ birthPlace: zodOpenapi.z.string(),
12711
+ countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
12712
+ personalId: zodOpenapi.z.string(),
12713
+ gender: zodOpenapi.z.enum(GenderZod),
12714
+ citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12715
+ citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
12716
+ employer: zodOpenapi.z.string().nullable(),
12717
+ employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
12718
+ registeredNumber: zodOpenapi.z.string(),
12719
+ isPep: zodOpenapi.z.boolean(),
12720
+ titleBefore: zodOpenapi.z.string().nullable(),
12721
+ titleAfter: zodOpenapi.z.string().nullable(),
12722
+ birthSurname: zodOpenapi.z.string().nullable(),
12723
+ vocativeTitle: zodOpenapi.z.string().nullable(),
12724
+ deathDate: zodOpenapi.z.coerce.date().nullable(),
12725
+ deathNotification: zodOpenapi.z.coerce.date().nullable(),
12726
+ pin: zodOpenapi.z.string().nullable(),
12727
+ stayAbroad: zodOpenapi.z.boolean().nullable(),
12728
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
12729
+ createdAt: zodOpenapi.z.coerce.date().nullable(),
12730
+ updatedAt: zodOpenapi.z.coerce.date().nullable()
12731
+ });
12732
+
12733
+ createInsertSchema(organization);
12734
+ createUpdateSchema(organization);
12735
+ createSelectSchema(organization);
12736
+ const organizationInsertSchema = zodOpenapi.z.object({
12737
+ partyId: zodOpenapi.z.uuid(),
12738
+ businessName: zodOpenapi.z.string(),
12739
+ email: zodOpenapi.z.email("Invalid email format").optional().nullable(),
12740
+ phone: zodOpenapi.z.string().optional().nullable(),
12741
+ registeredNumber: zodOpenapi.z.string(),
12742
+ registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12743
+ operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12744
+ presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12745
+ monthlyVolumeIn: zodOpenapi.z.number(),
12746
+ monthlyVolumeOut: zodOpenapi.z.number(),
12747
+ ownedBy: zodOpenapi.z.string(),
12748
+ companyObjects: zodOpenapi.z.string(),
12749
+ annualTurnover: zodOpenapi.z.number(),
12750
+ numberOfEmployees: zodOpenapi.z.number().optional().nullable(),
12751
+ prosecuted: zodOpenapi.z.string().optional().nullable(),
12752
+ location: zodOpenapi.z.string().optional().nullable(),
12753
+ fileNumber: zodOpenapi.z.string().optional().nullable(),
12754
+ websiteUrl: zodOpenapi.z.url("Invalid website URL").optional().nullable(),
12755
+ vatPayer: zodOpenapi.z.boolean(),
12756
+ companyObjectsDescription: zodOpenapi.z.string(),
12757
+ turnover3years: zodOpenapi.z.number(),
12758
+ operationCountries: zodOpenapi.z.string(),
12759
+ riskyBusinessType: zodOpenapi.z.string().optional().nullable()
12760
+ });
12761
+ const organizationUpdateSchema$1 = zodOpenapi.z.object({
12762
+ partyId: zodOpenapi.z.uuid().optional(),
12763
+ id: zodOpenapi.z.uuid(),
12764
+ businessName: zodOpenapi.z.string().optional(),
12765
+ email: zodOpenapi.z.email("Invalid email format").optional().nullable(),
12766
+ phone: zodOpenapi.z.string().optional().nullable(),
12767
+ registeredNumber: zodOpenapi.z.string().optional(),
12768
+ registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
12769
+ operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
12770
+ presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
12771
+ monthlyVolumeIn: zodOpenapi.z.number().optional(),
12772
+ monthlyVolumeOut: zodOpenapi.z.number().optional(),
12773
+ ownedBy: zodOpenapi.z.string().optional(),
12774
+ companyObjects: zodOpenapi.z.string().optional(),
12775
+ annualTurnover: zodOpenapi.z.number().optional(),
12776
+ numberOfEmployees: zodOpenapi.z.number().optional().nullable(),
12777
+ prosecuted: zodOpenapi.z.string().optional().nullable(),
12778
+ location: zodOpenapi.z.string().optional().nullable(),
12779
+ fileNumber: zodOpenapi.z.string().optional().nullable(),
12780
+ websiteUrl: zodOpenapi.z.url("Invalid website URL").optional().nullable(),
12781
+ vatPayer: zodOpenapi.z.boolean().optional(),
12782
+ companyObjectsDescription: zodOpenapi.z.string(),
12783
+ turnover3years: zodOpenapi.z.number(),
12784
+ operationCountries: zodOpenapi.z.string(),
12785
+ riskyBusinessType: zodOpenapi.z.string().optional().nullable()
12786
+ });
12787
+ const organizationOutputSchema = zodOpenapi.z.object({
12788
+ id: zodOpenapi.z.uuid(),
12789
+ partyId: zodOpenapi.z.uuid(),
12790
+ internalId: zodOpenapi.z.string().nullable(),
12791
+ businessName: zodOpenapi.z.string(),
12792
+ email: zodOpenapi.z.string().nullable(),
12793
+ phone: zodOpenapi.z.string().nullable(),
12794
+ registeredNumber: zodOpenapi.z.string(),
12795
+ registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12796
+ operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12797
+ presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12798
+ monthlyVolumeIn: zodOpenapi.z.number(),
12799
+ monthlyVolumeOut: zodOpenapi.z.number(),
12800
+ ownedBy: zodOpenapi.z.string(),
12801
+ companyObjects: zodOpenapi.z.string(),
12802
+ annualTurnover: zodOpenapi.z.number(),
12803
+ numberOfEmployees: zodOpenapi.z.number().nullable(),
12804
+ prosecuted: zodOpenapi.z.string().nullable(),
12805
+ location: zodOpenapi.z.string().nullable(),
12806
+ fileNumber: zodOpenapi.z.string().nullable(),
12807
+ websiteUrl: zodOpenapi.z.string().nullable(),
12808
+ vatPayer: zodOpenapi.z.boolean(),
12809
+ companyObjectsDescription: zodOpenapi.z.string(),
12810
+ turnover3years: zodOpenapi.z.number(),
12811
+ operationCountries: zodOpenapi.z.string(),
12812
+ riskyBusinessType: zodOpenapi.z.string().nullable(),
12813
+ stayAbroad: zodOpenapi.z.boolean().nullable(),
12814
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
12815
+ createdAt: zodOpenapi.z.coerce.date().nullable(),
12816
+ updatedAt: zodOpenapi.z.coerce.date().nullable()
12817
+ });
12818
+ const organizationSelectSchema = organizationOutputSchema;
12819
+ zodOpenapi.z.array(organizationOutputSchema);
12820
+
12821
+ zodOpenapi.z.discriminatedUnion("partyType", [
12822
+ zodOpenapi.z.object({
12823
+ partyType: zodOpenapi.z.literal("INDIVIDUAL"),
12824
+ data: individualInsertSchema$1
12825
+ }),
12826
+ zodOpenapi.z.object({
12827
+ partyType: zodOpenapi.z.literal("ORGANIZATION"),
12828
+ data: organizationInsertSchema
12829
+ })
12830
+ ]);
12831
+ const disponentCreateSchema = zodOpenapi.z.discriminatedUnion("partyType", [
12832
+ zodOpenapi.z.object({
12833
+ partyType: zodOpenapi.z.literal("INDIVIDUAL"),
12834
+ data: individualInsertSchema$1.omit({ partyId: true })
12835
+ }),
12836
+ zodOpenapi.z.object({
12837
+ partyType: zodOpenapi.z.literal("ORGANIZATION"),
12838
+ data: organizationInsertSchema.omit({ partyId: true })
12839
+ })
12840
+ ]);
12841
+ const disponentUpdateSchema$1 = zodOpenapi.z.discriminatedUnion("partyType", [
12842
+ zodOpenapi.z.object({
12843
+ partyType: zodOpenapi.z.literal("INDIVIDUAL"),
12844
+ data: individualUpdateSchema$1
12845
+ }),
12846
+ zodOpenapi.z.object({
12847
+ partyType: zodOpenapi.z.literal("ORGANIZATION"),
12848
+ data: organizationUpdateSchema$1
12849
+ })
12850
+ ]);
12851
+ const disponentSelectSchema = zodOpenapi.z.discriminatedUnion("partyType", [
12852
+ zodOpenapi.z.object({
12853
+ partyType: zodOpenapi.z.literal("INDIVIDUAL"),
12854
+ data: individualSelectSchema
12855
+ }),
12856
+ zodOpenapi.z.object({
12857
+ partyType: zodOpenapi.z.literal("ORGANIZATION"),
12858
+ data: organizationSelectSchema
12859
+ })
12860
+ ]);
12861
+ zodOpenapi.z.array(disponentSelectSchema).optional();
12862
+ zodOpenapi.z.array(disponentUpdateSchema$1).optional();
12863
+
12864
+ createInsertSchema(idDocument);
12865
+ createUpdateSchema(idDocument);
12866
+ createSelectSchema(idDocument);
12867
+ const idDocumentInsertSchema = zodOpenapi.z.object({
12868
+ partyId: zodOpenapi.z.uuid(),
12869
+ internalId: zodOpenapi.z.string().optional().nullable(),
12870
+ idDocType: zodOpenapi.z.enum(IdDocTypeZod),
12871
+ idDocNumber: zodOpenapi.z.string(),
12872
+ idDocHolderName: zodOpenapi.z.string(),
12873
+ issueDate: zodOpenapi.z.date().optional().nullable(),
12874
+ expirationDate: zodOpenapi.z.date().optional().nullable(),
12875
+ issuer: zodOpenapi.z.string().optional().nullable(),
12876
+ countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12877
+ frontImageUri: zodOpenapi.z.url().optional().nullable(),
12878
+ backImageUri: zodOpenapi.z.url().optional().nullable(),
12879
+ idDocStatus: zodOpenapi.z.enum(IdDocStatusZod).optional().nullable()
12880
+ });
12881
+ const idDocumentUpdateSchema = zodOpenapi.z.object({
12882
+ id: zodOpenapi.z.uuid(),
12883
+ partyId: zodOpenapi.z.uuid().optional(),
12884
+ internalId: zodOpenapi.z.string().optional().nullable(),
12885
+ idDocType: zodOpenapi.z.enum(IdDocTypeZod).optional(),
12886
+ idDocNumber: zodOpenapi.z.string().optional(),
12887
+ idDocHolderName: zodOpenapi.z.string().optional(),
12888
+ issueDate: zodOpenapi.z.date().optional().nullable(),
12889
+ expirationDate: zodOpenapi.z.date().optional().nullable(),
12890
+ issuer: zodOpenapi.z.string().optional().nullable(),
12891
+ countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12892
+ frontImageUri: zodOpenapi.z.url("Invalid URL format").optional().nullable(),
12893
+ backImageUri: zodOpenapi.z.url("Invalid URL format").optional().nullable(),
12894
+ idDocStatus: zodOpenapi.z.enum(IdDocStatusZod).optional().nullable()
12895
+ });
12896
+
12897
+ const recipientBaseInsertSchema = createInsertSchema(recipient);
12898
+ createUpdateSchema(recipient);
12899
+ createSelectSchema(recipient);
12900
+ const recipientUpsertSchema = recipientBaseInsertSchema.required({
12901
+ id: true
12902
+ });
12903
+ const recipientInsertSchema = bankAccountInsertSchema;
12904
+ const recipientUpdateSchema = bankAccountUpdateSchema;
12905
+ const recipientSelectSchema = bankAccountSelectSchema;
12906
+
12907
+ createInsertSchema(party);
12908
+ createUpdateSchema(party);
12909
+ const partySchema$2 = zodOpenapi.z.object({
12910
+ partyType: zodOpenapi.z.enum(PartyTypeZod),
12911
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
12912
+ id: zodOpenapi.z.uuid().nullable(),
12913
+ note: zodOpenapi.z.string().optional(),
12914
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
12915
+ customerStatus: zodOpenapi.z.enum(CustomerStatusZod).optional(),
12916
+ legacyId: zodOpenapi.z.string().optional()
12917
+ });
12918
+ const partyOutputSchema$1 = zodOpenapi.z.object({
12919
+ internalId: zodOpenapi.z.string().nullable(),
12920
+ customerStatus: zodOpenapi.z.enum(CustomerStatusZod),
12921
+ partyType: zodOpenapi.z.enum(PartyTypeZod),
12922
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
12923
+ id: zodOpenapi.z.uuid(),
12924
+ note: zodOpenapi.z.string().nullable(),
12925
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
12926
+ isClient: zodOpenapi.z.boolean(),
12927
+ createdAt: zodOpenapi.z.date().nullable(),
12928
+ updatedAt: zodOpenapi.z.date().nullable()
12929
+ });
12930
+ const createPartySchema = partySchema$2.omit({ id: true });
12931
+ zodOpenapi.z.object({
12932
+ party: createPartySchema,
12933
+ personalData: individualInsertSchema$1.omit({ partyId: true }).nullable(),
12934
+ organizationData: organizationInsertSchema.omit({ partyId: true }).nullable(),
12935
+ bankAccounts: zodOpenapi.z.array(bankAccountInsertSchema.omit({ partyId: true })).nullable(),
12936
+ recipients: zodOpenapi.z.array(recipientInsertSchema.omit({ partyId: true })).nullable(),
12937
+ disponents: zodOpenapi.z.array(disponentCreateSchema).nullable(),
12938
+ addresses: zodOpenapi.z.array(addressInsertSchema.omit({ partyId: true })),
12939
+ aml: amlInsertSchema.omit({ partyId: true })
12940
+ });
12941
+ zodOpenapi.z.object({
12942
+ partyId: zodOpenapi.z.uuid(),
12943
+ party: partySchema$2,
12944
+ personalData: individualUpdateSchema$1.optional(),
12945
+ organizationData: organizationUpdateSchema$1.optional(),
12946
+ bankAccounts: zodOpenapi.z.array(bankAccountUpsertSchema).optional(),
12947
+ recipients: zodOpenapi.z.array(recipientUpsertSchema).optional(),
12948
+ disponents: zodOpenapi.z.array(disponentUpdateSchema$1).optional(),
12949
+ addresses: zodOpenapi.z.array(addressUpdateSchema).optional(),
12950
+ aml: amlUpdateSchema.optional()
12951
+ });
12952
+ const partySelectOutputSchema = zodOpenapi.z.object({
12953
+ party: partyOutputSchema$1.nullable(),
12954
+ personalData: individualSelectSchema.nullable(),
12955
+ organizationData: organizationSelectSchema.nullable(),
12956
+ aml: amlSelectSchema.nullable(),
12957
+ bankAccounts: zodOpenapi.z.array(bankAccountSelectSchema).nullable(),
12958
+ disponents: zodOpenapi.z.array(disponentSelectSchema).nullable(),
12959
+ addresses: zodOpenapi.z.array(addressSelectSchema).nullable(),
12960
+ recipients: zodOpenapi.z.array(recipientSelectSchema).nullable()
12961
+ });
12962
+ zodOpenapi.z.array(partySelectOutputSchema);
12963
+ const partySelectDataSchema = zodOpenapi.z.object({
12964
+ party: partyOutputSchema$1.nullable(),
12965
+ personalData: individualSelectSchema.nullable(),
12966
+ organizationData: organizationSelectSchema.nullable(),
12967
+ aml: amlSelectSchema.nullable()
12968
+ });
12969
+ const partySelectArrayDataSchema = zodOpenapi.z.object({
12970
+ bankAccounts: zodOpenapi.z.array(bankAccountSelectSchema).nullable(),
12971
+ addresses: zodOpenapi.z.array(addressSelectSchema).nullable(),
12972
+ disponents: zodOpenapi.z.array(disponentSelectSchema).nullable(),
12973
+ recipients: zodOpenapi.z.array(recipientSelectSchema).nullable()
12974
+ });
12975
+ zodOpenapi.z.object({
12976
+ ...partySelectDataSchema.shape,
12977
+ ...partySelectArrayDataSchema.shape
12978
+ });
12979
+
12980
+ createInsertSchema(partyChange);
12981
+ createUpdateSchema(partyChange);
12982
+ createSelectSchema(partyChange);
12983
+ zodOpenapi.z.object({
12984
+ partyId: zodOpenapi.z.uuid().optional().nullable(),
12985
+ internalId: zodOpenapi.z.string().optional().nullable(),
12986
+ operation: zodOpenapi.z.string(),
12987
+ diff: zodOpenapi.z.json(),
12988
+ snapshotBefore: zodOpenapi.z.json(),
12989
+ snapshotAfter: zodOpenapi.z.json()
12990
+ });
12991
+ zodOpenapi.z.object({
12992
+ id: zodOpenapi.z.uuid(),
12993
+ partyId: zodOpenapi.z.uuid().optional().nullable(),
12994
+ internalId: zodOpenapi.z.string().optional().nullable(),
12995
+ operation: zodOpenapi.z.string().optional(),
12996
+ diff: zodOpenapi.z.json().optional(),
12997
+ snapshotBefore: zodOpenapi.z.json().optional(),
12998
+ snapshotAfter: zodOpenapi.z.json().optional()
12999
+ });
13000
+
13001
+ createInsertSchema(partyRelationship);
13002
+ createUpdateSchema(partyRelationship);
13003
+ createSelectSchema(partyRelationship);
13004
+ zodOpenapi.z.object({
13005
+ relationshipType: zodOpenapi.z.enum(PartyRelationshipTypeZod).optional(),
13006
+ frompartyId: zodOpenapi.z.uuid().optional().nullable(),
13007
+ internalId: zodOpenapi.z.string().optional().nullable(),
13008
+ topartyId: zodOpenapi.z.uuid().optional().nullable(),
13009
+ fromDate: zodOpenapi.z.date().optional().nullable(),
13010
+ sharePercentage: zodOpenapi.z.number().max(100).optional().nullable()
13011
+ });
13012
+ zodOpenapi.z.object({
13013
+ id: zodOpenapi.z.uuid(),
13014
+ relationshipType: zodOpenapi.z.enum(PartyRelationshipTypeZod).optional(),
13015
+ frompartyId: zodOpenapi.z.uuid().optional().nullable(),
13016
+ internalId: zodOpenapi.z.string().optional().nullable(),
13017
+ topartyId: zodOpenapi.z.uuid().optional().nullable(),
13018
+ fromDate: zodOpenapi.z.date().optional().nullable(),
13019
+ sharePercentage: zodOpenapi.z.number().max(100).optional().nullable()
13020
+ });
13021
+
13022
+ createInsertSchema(taxResidence);
13023
+ createUpdateSchema(taxResidence);
13024
+ createSelectSchema(taxResidence);
13025
+ zodOpenapi.z.object({
13026
+ partyId: zodOpenapi.z.uuid(),
13027
+ country: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13028
+ taxIdentificationNumber: zodOpenapi.z.string()
13029
+ });
13030
+ zodOpenapi.z.object({
13031
+ id: zodOpenapi.z.uuid(),
13032
+ partyId: zodOpenapi.z.uuid().optional(),
13033
+ country: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13034
+ taxIdentificationNumber: zodOpenapi.z.string().optional()
13035
+ });
13036
+
13037
+ createInsertSchema(trader);
13038
+ createUpdateSchema(trader);
13039
+ createSelectSchema(trader);
13040
+ const traderInsertSchema = zodOpenapi.z.object({
13041
+ type: zodOpenapi.z.enum(TRADER_TYPE),
13042
+ commission: zodOpenapi.z.number(),
13043
+ firstName: zodOpenapi.z.string().optional(),
13044
+ lastName: zodOpenapi.z.string().optional(),
13045
+ companyName: zodOpenapi.z.string().optional(),
13046
+ ico: zodOpenapi.z.string().optional(),
13047
+ dic: zodOpenapi.z.string().optional(),
13048
+ legacyId: zodOpenapi.z.string().optional()
13049
+ });
13050
+ const traderUpdateSchema = zodOpenapi.z.object({
13051
+ id: zodOpenapi.z.uuid(),
13052
+ type: zodOpenapi.z.enum(TRADER_TYPE).optional(),
13053
+ commission: zodOpenapi.z.number().optional(),
13054
+ internalId: zodOpenapi.z.string().optional(),
13055
+ firstName: zodOpenapi.z.string().optional(),
13056
+ lastName: zodOpenapi.z.string().optional(),
13057
+ companyName: zodOpenapi.z.string().optional(),
13058
+ ico: zodOpenapi.z.string().optional(),
13059
+ dic: zodOpenapi.z.string().optional(),
13060
+ legacyId: zodOpenapi.z.string().optional()
13061
+ });
13062
+ zodOpenapi.z.object({
13063
+ id: zodOpenapi.z.uuid(),
13064
+ createdAt: zodOpenapi.z.coerce.date().nullable(),
13065
+ updatedAt: zodOpenapi.z.coerce.date().nullable(),
13066
+ deletedAt: zodOpenapi.z.coerce.date().nullable(),
13067
+ type: zodOpenapi.z.enum(TRADER_TYPE),
13068
+ commission: zodOpenapi.z.number(),
13069
+ internalId: zodOpenapi.z.string().nullable(),
13070
+ firstName: zodOpenapi.z.string().nullable(),
13071
+ lastName: zodOpenapi.z.string().nullable(),
13072
+ companyName: zodOpenapi.z.string().nullable(),
13073
+ ico: zodOpenapi.z.string().nullable(),
13074
+ dic: zodOpenapi.z.string().nullable(),
13075
+ legacyId: zodOpenapi.z.string().nullable()
13076
+ });
13077
+
13078
+ zod.z.object({
13079
+ recipient: recipientInsertSchema,
13080
+ partyId: zod.z.string().uuid()
13081
+ });
13082
+
13083
+ zod.z.object({
13084
+ recipient: recipientUpdateSchema
13085
+ });
13086
+
13087
+ zod.z.object({
13088
+ id: zod.z.uuid()
13089
+ });
13090
+
13091
+ const ALLOWED_RECIPIENTS_FILTERS = {
13092
+ NAME: "filterRecipientName",
13093
+ BANK_CODE: "filterRecipientBankCode",
13094
+ CURRENCY: "filterRecipientCurrency"
13095
+ };
13096
+ zod.z.object({
13097
+ page: zod.z.number().positive(),
13098
+ limit: zod.z.number().positive(),
13099
+ sort: zod.z.object({
13100
+ column: zod.z.string(),
13101
+ direction: zod.z.enum(["asc", "desc"])
13102
+ }),
13103
+ [ALLOWED_RECIPIENTS_FILTERS.NAME]: zod.z.union([zod.z.string(), zod.z.string().array()]).optional(),
13104
+ [ALLOWED_RECIPIENTS_FILTERS.BANK_CODE]: zod.z.union([zod.z.enum(generalCodes.BANK_CODES), zod.z.enum(generalCodes.BANK_CODES).array()]).optional(),
13105
+ [ALLOWED_RECIPIENTS_FILTERS.CURRENCY]: zod.z.union([zod.z.enum(generalCodes.CURRENCY_CODES), zod.z.enum(generalCodes.CURRENCY_CODES).array()]).optional(),
13106
+ search: zod.z.string().optional()
13107
+ });
13108
+
13109
+ zod.z.object({
13110
+ id: zod.z.uuid()
13111
+ });
13112
+
13113
+ zod.z.object({
13114
+ trader: traderInsertSchema
13115
+ });
13116
+
13117
+ zod.z.object({
13118
+ trader: traderUpdateSchema
13119
+ });
13120
+
13121
+ zod.z.object({
13122
+ id: zod.z.uuid()
13123
+ });
13124
+
13125
+ zod.z.object({
13126
+ page: zod.z.number().positive(),
13127
+ limit: zod.z.number().positive(),
13128
+ sort: zod.z.object({
13129
+ column: zod.z.string(),
13130
+ direction: zod.z.enum(["asc", "desc"])
13131
+ }),
13132
+ search: zod.z.string().optional(),
13133
+ ids: zod.z.array(zod.z.uuid()).optional()
13134
+ });
13135
+
13136
+ zod.z.object({
13137
+ id: zod.z.uuid()
13138
+ });
13139
+
13140
+ zod.z.object({
13141
+ traderId: zod.z.uuid(),
13142
+ clientId: zod.z.uuid()
13143
+ });
13144
+ zod.z.object({
13145
+ id: zod.z.uuid()
13146
+ });
13147
+
13148
+ zod.z.object({
13149
+ id: zod.z.uuid()
13150
+ });
13151
+
13152
+ zod.z.object({
13153
+ bankAccount: bankAccountInsertSchema,
13154
+ partyId: zod.z.string().uuid()
13155
+ });
13156
+
13157
+ zod.z.object({
13158
+ bankAccount: bankAccountUpsertSchema
13159
+ });
13160
+
13161
+ zod.z.object({
13162
+ id: zod.z.uuid()
13163
+ });
13164
+
13165
+ zod.z.object({
13166
+ id: zod.z.uuid()
13167
+ });
13168
+
13169
+ zod.z.object({
13170
+ address: addressInsertSchema,
13171
+ partyId: zod.z.uuid()
13172
+ });
13173
+
13174
+ zod.z.object({
13175
+ address: addressUpdateSchema
13176
+ });
13177
+
13178
+ zod.z.object({
13179
+ id: zod.z.uuid()
13180
+ });
13181
+
13182
+ zod.z.object({
13183
+ contact: contactInsertSchema,
13184
+ partyId: zod.z.string().uuid()
13185
+ });
13186
+
13187
+ zod.z.object({
13188
+ contact: contactUpdateSchema
13189
+ });
13190
+
13191
+ zod.z.object({
13192
+ idDocument: idDocumentInsertSchema,
13193
+ partyId: zod.z.string()
13194
+ });
13195
+
13196
+ zod.z.object({
13197
+ idDocument: idDocumentUpdateSchema
13198
+ });
13199
+
13200
+ zod.z.object({
13201
+ id: zod.z.uuid()
13202
+ });
13203
+
13204
+ const ALLOWED_ID_DOCUMENTS_FILTERS$1 = {
13205
+ PARTY_ID: "filterIdDocumentPartyId",
13206
+ ISSUER: "filterIdDocumentIssuer"
13207
+ };
13208
+ zod.z.object({
13209
+ pagination: zod.z.object({
13210
+ page: zod.z.number().positive(),
13211
+ limit: zod.z.number().positive(),
13212
+ sort: zod.z.object({
13213
+ column: zod.z.string(),
13214
+ direction: zod.z.enum(["asc", "desc"])
13215
+ }),
13216
+ [ALLOWED_ID_DOCUMENTS_FILTERS$1.PARTY_ID]: zod.z.union([zod.z.uuid(), zod.z.uuid().array()]).optional(),
13217
+ [ALLOWED_ID_DOCUMENTS_FILTERS$1.ISSUER]: zod.z.union([zod.z.string(), zod.z.string().array()]).optional(),
13218
+ search: zod.z.string().optional()
13219
+ })
13220
+ });
13221
+
13222
+ zod.z.object({
13223
+ id: zod.z.uuid()
13224
+ });
13225
+
13226
+ zod.z.object({
13227
+ id: zod.z.uuid()
13228
+ });
13229
+
13230
+ zod.z.object({
13231
+ organization: organizationInsertSchema
13232
+ });
13233
+
13234
+ zod.z.object({
13235
+ organization: organizationInsertSchema
13236
+ });
13237
+
13238
+ zod.z.object({
13239
+ id: zod.z.uuid()
13240
+ });
13241
+
13242
+ zod.z.object({
13243
+ id: zod.z.uuid()
13244
+ });
13245
+
13246
+ zod.z.object({
13247
+ individual: individualInsertSchema$1
13248
+ });
13249
+
13250
+ zod.z.object({
13251
+ individual: individualInsertSchema$1
13252
+ });
13253
+
13254
+ zod.z.object({
13255
+ id: zod.z.uuid()
13256
+ });
13257
+
13258
+ zod.z.object({
13259
+ id: zod.z.uuid()
13260
+ });
13261
+
13262
+ zod.z.object({
13263
+ aml: amlInsertSchema
13264
+ });
13265
+
13266
+ zod.z.object({
13267
+ aml: amlInsertSchema
13268
+ });
13269
+
13270
+ zod.z.object({
13271
+ id: zod.z.uuid()
13272
+ });
13273
+
13274
+ const routeError = zodOpenapi.z.object({
13275
+ message: zodOpenapi.z.string(),
13276
+ data: zodOpenapi.z.null(),
13277
+ errorDetail: zodOpenapi.z.object({
13278
+ message: zodOpenapi.z.string(),
13279
+ code: zodOpenapi.z.number()
13280
+ }).optional(),
13281
+ error: zodOpenapi.z.boolean()
13282
+ });
13283
+ const errorResponse = (entityName, action = "creation") => ({
13284
+ 404: {
13285
+ content: {
13286
+ "application/json": {
13287
+ schema: zodOpenapi.z.object({
13288
+ message: zodOpenapi.z.string(),
13289
+ stackTrace: zodOpenapi.z.string().optional()
13290
+ })
13291
+ }
13292
+ },
13293
+ description: `Not Found. This can occur when the ${entityName} is not found.`
13294
+ },
13295
+ 500: {
13296
+ content: {
13297
+ "application/json": {
13298
+ schema: zodOpenapi.z.object({
13299
+ message: zodOpenapi.z.string(),
13300
+ stackTrace: zodOpenapi.z.string().optional()
13301
+ })
13302
+ }
13303
+ },
13304
+ description: `Internal Server Error. This can occur when the ${entityName} ${action} fails.`
13305
+ }
13306
+ });
13307
+
13308
+ const partySchema$1 = zodOpenapi.z.object({
13309
+ partyType: zodOpenapi.z.enum(PartyTypeZod),
13310
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13311
+ id: zodOpenapi.z.uuid(),
13312
+ internalId: zodOpenapi.z.string().optional(),
13313
+ note: zodOpenapi.z.string().optional(),
13314
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13315
+ });
13316
+ const individualInsertSchema = zodOpenapi.z.object({
13317
+ internalId: zodOpenapi.z.string().optional(),
13318
+ name: zodOpenapi.z.string(),
13319
+ surname: zodOpenapi.z.string(),
13320
+ email: zodOpenapi.z.string().optional(),
13321
+ phone: zodOpenapi.z.string().optional(),
13322
+ birthDate: zodOpenapi.z.string().optional(),
13323
+ birthPlace: zodOpenapi.z.string(),
13324
+ countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13325
+ personalId: zodOpenapi.z.string(),
13326
+ gender: zodOpenapi.z.enum(GenderZod),
13327
+ citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13328
+ citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13329
+ employer: zodOpenapi.z.string().optional(),
13330
+ employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13331
+ registeredNumber: zodOpenapi.z.string(),
13332
+ isPep: zodOpenapi.z.boolean(),
13333
+ titleBefore: zodOpenapi.z.string().optional(),
13334
+ titleAfter: zodOpenapi.z.string().optional(),
13335
+ birthSurname: zodOpenapi.z.string().optional(),
13336
+ vocativeTitle: zodOpenapi.z.string().optional(),
13337
+ deathDate: zodOpenapi.z.date().optional(),
13338
+ deathNotification: zodOpenapi.z.date().optional(),
13339
+ pin: zodOpenapi.z.string().optional(),
13340
+ stayAbroad: zodOpenapi.z.boolean().optional(),
13341
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13342
+ });
13343
+ const createOrganizationInputSchema = zodOpenapi.z.object({
13344
+ internalId: zodOpenapi.z.string().optional(),
13345
+ businessName: zodOpenapi.z.string(),
13346
+ email: zodOpenapi.z.string().optional(),
13347
+ phone: zodOpenapi.z.string().optional(),
13348
+ registeredNumber: zodOpenapi.z.string(),
13349
+ registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13350
+ operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13351
+ presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13352
+ monthlyVolumeIn: zodOpenapi.z.number(),
13353
+ monthlyVolumeOut: zodOpenapi.z.number(),
13354
+ ownedBy: zodOpenapi.z.string(),
13355
+ companyObjects: zodOpenapi.z.string(),
13356
+ annualTurnover: zodOpenapi.z.number(),
13357
+ numberOfEmployees: zodOpenapi.z.number(),
13358
+ prosecuted: zodOpenapi.z.string().optional(),
13359
+ location: zodOpenapi.z.string().optional(),
13360
+ fileNumber: zodOpenapi.z.string().optional(),
13361
+ websiteUrl: zodOpenapi.z.string().optional(),
13362
+ vatPayer: zodOpenapi.z.boolean(),
13363
+ companyObjectsDescription: zodOpenapi.z.string(),
13364
+ turnover3years: zodOpenapi.z.number(),
13365
+ operationCountries: zodOpenapi.z.string(),
13366
+ riskyBusinessType: zodOpenapi.z.string().optional()
13367
+ });
13368
+ const updateBankAccountSchema$1 = zodOpenapi.z.object({
13369
+ ...bankAccountMetadataSchema.shape,
13370
+ partyId: zodOpenapi.z.uuid(),
13371
+ internalId: zodOpenapi.z.string().optional(),
13372
+ holderName: zodOpenapi.z.string(),
13373
+ number: zodOpenapi.z.string().optional(),
13374
+ currency: bankAccountMetadataSchema.shape.currency.nonoptional(),
13375
+ countryCode: bankAccountMetadataSchema.shape.countryCode.nonoptional(),
13376
+ id: bankAccountMetadataSchema.shape.id.nonoptional()
13377
+ });
13378
+ const bankAccountInputSchema = updateBankAccountSchema$1.required({
13379
+ holderName: true,
13380
+ currency: true,
13381
+ countryCode: true
13382
+ }).omit({ id: true, partyId: true });
13383
+ const disponentSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13384
+ zodOpenapi.z.object({
13385
+ partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13386
+ data: individualInsertSchema
13387
+ }),
13388
+ zodOpenapi.z.object({
13389
+ partyType: zodOpenapi.z.literal("ORGANIZATION"),
13390
+ data: createOrganizationInputSchema
13391
+ })
13392
+ ]);
13393
+ const createAddressInputSchema = zodOpenapi.z.object({
13394
+ addressType: zodOpenapi.z.enum(AddressTypeZod),
13395
+ internalId: zodOpenapi.z.string().optional(),
13396
+ street: zodOpenapi.z.string(),
13397
+ orientationNumber: zodOpenapi.z.string().optional(),
13398
+ descriptiveNumber: zodOpenapi.z.string().optional(),
13399
+ municipality: zodOpenapi.z.string().max(255),
13400
+ municipalityPart: zodOpenapi.z.string().optional(),
13401
+ zipCode: zodOpenapi.z.string().max(20),
13402
+ district: zodOpenapi.z.string().max(255),
13403
+ region: zodOpenapi.z.string().max(255),
12050
13404
  countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12051
- externalId: zodOpenapi.z.uuid().nullable(),
12052
- ruianCode: zodOpenapi.z.string().nullable(),
13405
+ ruianCode: zodOpenapi.z.string().optional()
13406
+ });
13407
+ const createAmlInputSchema = zodOpenapi.z.object({
13408
+ internalId: zodOpenapi.z.string().optional(),
13409
+ sourceOfWealth: zodOpenapi.z.string(),
13410
+ yearlyIncome: zodOpenapi.z.string(),
13411
+ tradesPurpose: zodOpenapi.z.string().optional(),
13412
+ sourceOfIncome: zodOpenapi.z.string(),
13413
+ transactionType: zodOpenapi.z.string().optional(),
13414
+ transactionTypeExpiry: zodOpenapi.z.date().optional(),
13415
+ isDistraint: zodOpenapi.z.boolean().default(false),
13416
+ estTxsVolumeMonth: zodOpenapi.z.string(),
13417
+ estTxsVolumeYear: zodOpenapi.z.string(),
13418
+ tradingCountries: zodOpenapi.z.string(),
13419
+ tradingSide: zodOpenapi.z.string(),
13420
+ acceptedAMLTermsAndConditions: zodOpenapi.z.boolean(),
13421
+ signatureMethod: zodOpenapi.z.string().optional(),
13422
+ existencePeriod: zodOpenapi.z.string().optional(),
13423
+ reputation: zodOpenapi.z.string().optional(),
13424
+ riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod).optional(),
13425
+ kycStatus: zodOpenapi.z.enum(KycStatusZod).optional()
13426
+ });
13427
+ const createPartyInputSchema = zodOpenapi.z.object({
13428
+ party: partySchema$1.omit({ id: true }),
13429
+ personalData: individualInsertSchema.nullable(),
13430
+ organizationData: createOrganizationInputSchema.nullable(),
13431
+ bankAccounts: zodOpenapi.z.array(bankAccountInputSchema),
13432
+ disponents: zodOpenapi.z.array(disponentSchema),
13433
+ addresses: zodOpenapi.z.array(createAddressInputSchema),
13434
+ aml: createAmlInputSchema,
13435
+ recipients: zodOpenapi.z.array(bankAccountInputSchema)
13436
+ });
13437
+ const partyCreateOutputSchema = zodOpenapi.z.object({
13438
+ customerStatus: zodOpenapi.z.enum(CustomerStatusZod),
13439
+ partyType: zodOpenapi.z.enum(PartyTypeZod),
13440
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13441
+ id: zodOpenapi.z.uuid(),
13442
+ internalId: zodOpenapi.z.string().nullable(),
13443
+ note: zodOpenapi.z.string().nullable(),
13444
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
12053
13445
  createdAt: zodOpenapi.z.date().nullable(),
12054
13446
  updatedAt: zodOpenapi.z.date().nullable()
12055
13447
  });
13448
+ const responseBodySchema$5 = zodOpenapi.z.object({
13449
+ message: zodOpenapi.z.string(),
13450
+ party: partyCreateOutputSchema
13451
+ });
13452
+ const createPartyRoute = zodOpenapi.createRoute({
13453
+ method: "post",
13454
+ path: "/",
13455
+ summary: "Create party",
13456
+ tags: ["Parties"],
13457
+ request: {
13458
+ body: {
13459
+ content: {
13460
+ "application/json": {
13461
+ schema: createPartyInputSchema
13462
+ }
13463
+ },
13464
+ required: true
13465
+ }
13466
+ },
13467
+ responses: {
13468
+ 200: {
13469
+ content: {
13470
+ "application/json": {
13471
+ schema: responseBodySchema$5
13472
+ }
13473
+ },
13474
+ description: "Creates a Party."
13475
+ },
13476
+ ...errorResponse("Party", "Creation")
13477
+ }
13478
+ });
13479
+ new zodOpenapi.OpenAPIHono().openapi(
13480
+ createPartyRoute,
13481
+ async (context) => {
13482
+ const party = context.req.valid("json");
13483
+ const { data: partyData, error } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.createParty(party);
13484
+ if (!partyData || error) {
13485
+ return context.json(
13486
+ {
13487
+ message: "Could not create a party"
13488
+ },
13489
+ 500
13490
+ );
13491
+ }
13492
+ return context.json(
13493
+ {
13494
+ message: "party created",
13495
+ party: partyData
13496
+ },
13497
+ 200
13498
+ );
13499
+ }
13500
+ );
13501
+
13502
+ const partySchema = zodOpenapi.z.object({
13503
+ partyType: zodOpenapi.z.enum(PartyTypeZod),
13504
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13505
+ id: zodOpenapi.z.uuid(),
13506
+ internalId: zodOpenapi.z.string().optional(),
13507
+ note: zodOpenapi.z.string().optional(),
13508
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13509
+ });
13510
+ const individualUpdateSchema = zodOpenapi.z.object({
13511
+ id: zodOpenapi.z.uuid(),
13512
+ partyId: zodOpenapi.z.uuid(),
13513
+ internalId: zodOpenapi.z.string().optional(),
13514
+ name: zodOpenapi.z.string().optional(),
13515
+ surname: zodOpenapi.z.string().optional(),
13516
+ email: zodOpenapi.z.string().optional(),
13517
+ phone: zodOpenapi.z.string().optional(),
13518
+ birthDate: zodOpenapi.z.string().optional(),
13519
+ birthPlace: zodOpenapi.z.string().optional(),
13520
+ countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13521
+ personalId: zodOpenapi.z.string().optional(),
13522
+ gender: zodOpenapi.z.enum(GenderZod).optional(),
13523
+ citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13524
+ citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13525
+ employer: zodOpenapi.z.string().optional(),
13526
+ employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13527
+ registeredNumber: zodOpenapi.z.string().optional(),
13528
+ isPep: zodOpenapi.z.boolean().optional(),
13529
+ titleBefore: zodOpenapi.z.string().optional(),
13530
+ titleAfter: zodOpenapi.z.string().optional(),
13531
+ birthSurname: zodOpenapi.z.string().optional(),
13532
+ vocativeTitle: zodOpenapi.z.string().optional(),
13533
+ deathDate: zodOpenapi.z.date().optional(),
13534
+ deathNotification: zodOpenapi.z.date().optional(),
13535
+ pin: zodOpenapi.z.string().optional(),
13536
+ stayAbroad: zodOpenapi.z.boolean().optional(),
13537
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13538
+ });
13539
+ const organizationUpdateSchema = zodOpenapi.z.object({
13540
+ id: zodOpenapi.z.uuid(),
13541
+ partyId: zodOpenapi.z.uuid().optional(),
13542
+ internalId: zodOpenapi.z.string().optional(),
13543
+ businessName: zodOpenapi.z.string().optional(),
13544
+ email: zodOpenapi.z.email("Invalid email format").optional(),
13545
+ phone: zodOpenapi.z.string().optional(),
13546
+ registeredNumber: zodOpenapi.z.string().optional(),
13547
+ registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13548
+ operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13549
+ presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13550
+ monthlyVolumeIn: zodOpenapi.z.number().optional(),
13551
+ monthlyVolumeOut: zodOpenapi.z.number().optional(),
13552
+ ownedBy: zodOpenapi.z.string().optional(),
13553
+ companyObjects: zodOpenapi.z.string().optional(),
13554
+ annualTurnover: zodOpenapi.z.number().optional(),
13555
+ numberOfEmployees: zodOpenapi.z.number().optional(),
13556
+ prosecuted: zodOpenapi.z.string().optional(),
13557
+ location: zodOpenapi.z.string().optional(),
13558
+ fileNumber: zodOpenapi.z.string().optional(),
13559
+ websiteUrl: zodOpenapi.z.url("Invalid website URL").optional(),
13560
+ vatPayer: zodOpenapi.z.boolean().optional(),
13561
+ companyObjectsDescription: zodOpenapi.z.string(),
13562
+ turnover3years: zodOpenapi.z.number(),
13563
+ operationCountries: zodOpenapi.z.string(),
13564
+ riskyBusinessType: zodOpenapi.z.string().optional()
13565
+ });
13566
+ const updateBankAccountSchema = zodOpenapi.z.object({
13567
+ ...bankAccountMetadataSchema.shape,
13568
+ partyId: zodOpenapi.z.uuid(),
13569
+ internalId: zodOpenapi.z.string().optional(),
13570
+ holderName: zodOpenapi.z.string(),
13571
+ number: zodOpenapi.z.string().optional(),
13572
+ currency: bankAccountMetadataSchema.shape.currency.nonoptional(),
13573
+ countryCode: bankAccountMetadataSchema.shape.countryCode.nonoptional(),
13574
+ id: bankAccountMetadataSchema.shape.id.nonoptional()
13575
+ });
13576
+ const disponentUpdateSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13577
+ zodOpenapi.z.object({
13578
+ partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13579
+ data: individualUpdateSchema
13580
+ }),
13581
+ zodOpenapi.z.object({
13582
+ partyType: zodOpenapi.z.literal("ORGANIZATION"),
13583
+ data: organizationUpdateSchema
13584
+ })
13585
+ ]);
12056
13586
  const updateAddressInputSchema = zodOpenapi.z.object({
12057
13587
  id: zodOpenapi.z.uuid(),
12058
13588
  partyId: zodOpenapi.z.uuid(),
@@ -12069,52 +13599,255 @@ const updateAddressInputSchema = zodOpenapi.z.object({
12069
13599
  countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12070
13600
  ruianCode: zodOpenapi.z.string().optional()
12071
13601
  });
12072
-
12073
- const partySchema = zodOpenapi.z.object({
12074
- partyType: zodOpenapi.z.enum(PartyTypeZod),
12075
- language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13602
+ const updateAmlInputSchema = zodOpenapi.z.object({
12076
13603
  id: zodOpenapi.z.uuid(),
13604
+ partyId: zodOpenapi.z.uuid().optional(),
12077
13605
  internalId: zodOpenapi.z.string().optional(),
12078
- note: zodOpenapi.z.string().optional(),
12079
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13606
+ sourceOfWealth: zodOpenapi.z.string().optional(),
13607
+ yearlyIncome: zodOpenapi.z.string().optional(),
13608
+ tradesPurpose: zodOpenapi.z.string().optional(),
13609
+ sourceOfIncome: zodOpenapi.z.string().optional(),
13610
+ transactionType: zodOpenapi.z.string().optional(),
13611
+ transactionTypeExpiry: zodOpenapi.z.date().optional(),
13612
+ isDistraint: zodOpenapi.z.boolean().optional(),
13613
+ estTxsVolumeMonth: zodOpenapi.z.string(),
13614
+ estTxsVolumeYear: zodOpenapi.z.string(),
13615
+ tradingCountries: zodOpenapi.z.string(),
13616
+ tradingSide: zodOpenapi.z.string(),
13617
+ acceptedAMLTermsAndConditions: zodOpenapi.z.boolean(),
13618
+ signatureMethod: zodOpenapi.z.string().optional(),
13619
+ existencePeriod: zodOpenapi.z.string().optional(),
13620
+ reputation: zodOpenapi.z.string().optional(),
13621
+ riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod).optional(),
13622
+ kycStatus: zodOpenapi.z.enum(KycStatusZod).optional()
12080
13623
  });
12081
- const partyCreateOutputSchema = zodOpenapi.z.object({
13624
+ const partyUpdateInputSchema = zodOpenapi.z.object({
13625
+ party: partySchema,
13626
+ personalData: individualUpdateSchema.nullable(),
13627
+ organizationData: organizationUpdateSchema.nullable(),
13628
+ bankAccounts: zodOpenapi.z.array(updateBankAccountSchema),
13629
+ disponents: zodOpenapi.z.array(disponentUpdateSchema).optional(),
13630
+ addresses: zodOpenapi.z.array(updateAddressInputSchema),
13631
+ recipients: zodOpenapi.z.array(updateBankAccountSchema).nullable(),
13632
+ aml: updateAmlInputSchema.optional()
13633
+ });
13634
+ const updatePartyOuputSchema = zodOpenapi.z.object({
13635
+ id: zodOpenapi.z.uuid(),
13636
+ customerStatus: zodOpenapi.z.enum(CustomerStatusZod),
13637
+ partyType: zodOpenapi.z.enum(PartyTypeZod),
13638
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13639
+ note: zodOpenapi.z.string().nullable(),
13640
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable()
13641
+ });
13642
+ const responseBodySchema$4 = zodOpenapi.z.object({
13643
+ message: zodOpenapi.z.string(),
13644
+ party: updatePartyOuputSchema
13645
+ });
13646
+ const updatePartyRoute = zodOpenapi.createRoute({
13647
+ method: "put",
13648
+ path: "/{partyId}",
13649
+ summary: "Update party",
13650
+ tags: ["Parties"],
13651
+ security: [
13652
+ {
13653
+ JwtAuth: []
13654
+ }
13655
+ ],
13656
+ request: {
13657
+ params: zodOpenapi.z.object({ partyId: zodOpenapi.z.uuid() }),
13658
+ body: {
13659
+ content: {
13660
+ "application/json": {
13661
+ schema: partyUpdateInputSchema
13662
+ }
13663
+ },
13664
+ required: true
13665
+ }
13666
+ },
13667
+ responses: {
13668
+ 200: {
13669
+ content: {
13670
+ "application/json": {
13671
+ schema: responseBodySchema$4
13672
+ }
13673
+ },
13674
+ description: "Updates a Party."
13675
+ },
13676
+ ...errorResponse("Party", "Update")
13677
+ }
13678
+ });
13679
+ new zodOpenapi.OpenAPIHono().openapi(
13680
+ updatePartyRoute,
13681
+ async (context) => {
13682
+ const party = context.req.valid("json");
13683
+ const { partyId } = context.req.valid("param");
13684
+ const { data: updatedParty, error: partyError } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.updateParty({
13685
+ partyId,
13686
+ party: party.party,
13687
+ personalData: party.personalData ?? void 0,
13688
+ organizationData: party.organizationData ?? void 0,
13689
+ bankAccounts: party.bankAccounts ?? void 0,
13690
+ disponents: party.disponents ?? void 0,
13691
+ addresses: party.addresses ?? void 0,
13692
+ recipients: party.recipients ?? void 0,
13693
+ aml: party.aml ?? void 0
13694
+ });
13695
+ if (!updatedParty || partyError) {
13696
+ return context.json({ message: "Could not update a Party" }, 404);
13697
+ }
13698
+ return context.json(
13699
+ {
13700
+ message: "Party updated successfully",
13701
+ party: updatedParty
13702
+ },
13703
+ 200
13704
+ );
13705
+ }
13706
+ );
13707
+
13708
+ const partyBaseOutputSchema = zodOpenapi.z.object({
12082
13709
  customerStatus: zodOpenapi.z.enum(CustomerStatusZod),
12083
13710
  partyType: zodOpenapi.z.enum(PartyTypeZod),
12084
13711
  language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
12085
13712
  id: zodOpenapi.z.uuid(),
12086
13713
  internalId: zodOpenapi.z.string().nullable(),
12087
- note: zodOpenapi.z.string().nullable(),
12088
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13714
+ note: zodOpenapi.z.string().nullable(),
13715
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13716
+ createdAt: zodOpenapi.z.date().nullable(),
13717
+ updatedAt: zodOpenapi.z.date().nullable(),
13718
+ isClient: zodOpenapi.z.boolean()
13719
+ });
13720
+ const individualOutputSchema = zodOpenapi.z.object({
13721
+ id: zodOpenapi.z.uuid(),
13722
+ partyId: zodOpenapi.z.uuid(),
13723
+ internalId: zodOpenapi.z.string().nullable(),
13724
+ name: zodOpenapi.z.string(),
13725
+ surname: zodOpenapi.z.string(),
13726
+ email: zodOpenapi.z.string().nullable(),
13727
+ phone: zodOpenapi.z.string().nullable(),
13728
+ birthDate: zodOpenapi.z.string().nullable(),
13729
+ birthPlace: zodOpenapi.z.string(),
13730
+ countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13731
+ personalId: zodOpenapi.z.string(),
13732
+ gender: zodOpenapi.z.enum(GenderZod),
13733
+ citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13734
+ citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13735
+ employer: zodOpenapi.z.string().nullable(),
13736
+ employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13737
+ registeredNumber: zodOpenapi.z.string(),
13738
+ isPep: zodOpenapi.z.boolean(),
13739
+ titleBefore: zodOpenapi.z.string().nullable(),
13740
+ titleAfter: zodOpenapi.z.string().nullable(),
13741
+ birthSurname: zodOpenapi.z.string().nullable(),
13742
+ vocativeTitle: zodOpenapi.z.string().nullable(),
13743
+ deathDate: zodOpenapi.z.coerce.date().nullable(),
13744
+ deathNotification: zodOpenapi.z.coerce.date().nullable(),
13745
+ pin: zodOpenapi.z.string().nullable(),
13746
+ stayAbroad: zodOpenapi.z.boolean().nullable(),
13747
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13748
+ createdAt: zodOpenapi.z.coerce.date().nullable(),
13749
+ updatedAt: zodOpenapi.z.coerce.date().nullable()
13750
+ });
13751
+ const createOrganizationOutputSchema = zodOpenapi.z.object({
13752
+ partyId: zodOpenapi.z.uuid(),
13753
+ internalId: zodOpenapi.z.string().nullable(),
13754
+ businessName: zodOpenapi.z.string(),
13755
+ email: zodOpenapi.z.string().nullable(),
13756
+ phone: zodOpenapi.z.string().nullable(),
13757
+ registeredNumber: zodOpenapi.z.string(),
13758
+ registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13759
+ operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13760
+ presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13761
+ monthlyVolumeIn: zodOpenapi.z.number(),
13762
+ monthlyVolumeOut: zodOpenapi.z.number(),
13763
+ ownedBy: zodOpenapi.z.string(),
13764
+ companyObjects: zodOpenapi.z.string(),
13765
+ annualTurnover: zodOpenapi.z.number(),
13766
+ numberOfEmployees: zodOpenapi.z.number().nullable(),
13767
+ prosecuted: zodOpenapi.z.string().nullable(),
13768
+ location: zodOpenapi.z.string().nullable(),
13769
+ fileNumber: zodOpenapi.z.string().nullable(),
13770
+ websiteUrl: zodOpenapi.z.string().nullable(),
13771
+ vatPayer: zodOpenapi.z.boolean(),
13772
+ companyObjectsDescription: zodOpenapi.z.string(),
13773
+ turnover3years: zodOpenapi.z.number(),
13774
+ operationCountries: zodOpenapi.z.string(),
13775
+ riskyBusinessType: zodOpenapi.z.string().nullable()
13776
+ });
13777
+ const bankAccountOutputSchema = zodOpenapi.z.object({
13778
+ id: zodOpenapi.z.string(),
13779
+ partyId: zodOpenapi.z.uuid(),
13780
+ internalId: zodOpenapi.z.string().nullable(),
13781
+ holderName: zodOpenapi.z.string(),
13782
+ number: zodOpenapi.z.string().nullable(),
13783
+ bankCode: zodOpenapi.z.string().nullable(),
13784
+ currency: zodOpenapi.z.string(),
13785
+ countryCode: zodOpenapi.z.string(),
13786
+ iban: zodOpenapi.z.string().nullable(),
13787
+ address: zodOpenapi.z.string().nullable(),
13788
+ swiftBic: zodOpenapi.z.string().nullable(),
13789
+ bicCor: zodOpenapi.z.string().nullable(),
13790
+ routingNumber: zodOpenapi.z.string().nullable(),
13791
+ sortCode: zodOpenapi.z.string().nullable(),
13792
+ clabe: zodOpenapi.z.string().nullable(),
13793
+ bsb: zodOpenapi.z.string().nullable(),
13794
+ brBankNumber: zodOpenapi.z.string().nullable(),
13795
+ updatedAt: zodOpenapi.z.coerce.date().nullable()
13796
+ });
13797
+ const disponentOutputSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13798
+ zodOpenapi.z.object({
13799
+ partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13800
+ data: individualOutputSchema.nullable()
13801
+ }),
13802
+ zodOpenapi.z.object({
13803
+ partyType: zodOpenapi.z.literal("ORGANIZATION"),
13804
+ data: createOrganizationOutputSchema.nullable()
13805
+ })
13806
+ ]);
13807
+ const createAddressOutputSchema = zodOpenapi.z.object({
13808
+ id: zodOpenapi.z.uuid(),
13809
+ partyId: zodOpenapi.z.uuid(),
13810
+ internalId: zodOpenapi.z.string().nullable(),
13811
+ addressType: zodOpenapi.z.enum(AddressTypeZod),
13812
+ street: zodOpenapi.z.string().nullable(),
13813
+ orientationNumber: zodOpenapi.z.string().nullable(),
13814
+ descriptiveNumber: zodOpenapi.z.string().nullable(),
13815
+ municipality: zodOpenapi.z.string(),
13816
+ municipalityPart: zodOpenapi.z.string().nullable(),
13817
+ zipCode: zodOpenapi.z.string(),
13818
+ district: zodOpenapi.z.string().nullable(),
13819
+ region: zodOpenapi.z.string().nullable(),
13820
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13821
+ ruianCode: zodOpenapi.z.string().nullable(),
12089
13822
  createdAt: zodOpenapi.z.date().nullable(),
12090
13823
  updatedAt: zodOpenapi.z.date().nullable()
12091
13824
  });
12092
- zodOpenapi.z.object({
12093
- customerStatus: zodOpenapi.z.enum(CustomerStatusZod),
12094
- partyType: zodOpenapi.z.enum(PartyTypeZod),
12095
- language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13825
+ const createAmlOutputSchema = zodOpenapi.z.object({
12096
13826
  id: zodOpenapi.z.uuid(),
13827
+ partyId: zodOpenapi.z.uuid(),
12097
13828
  internalId: zodOpenapi.z.string().nullable(),
12098
- note: zodOpenapi.z.string().nullable(),
12099
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13829
+ sourceOfWealth: zodOpenapi.z.string(),
13830
+ yearlyIncome: zodOpenapi.z.string(),
13831
+ tradesPurpose: zodOpenapi.z.string().nullable(),
13832
+ sourceOfIncome: zodOpenapi.z.string(),
13833
+ transactionType: zodOpenapi.z.string().nullable(),
13834
+ transactionTypeExpiry: zodOpenapi.z.date().nullable(),
13835
+ isDistraint: zodOpenapi.z.boolean(),
13836
+ estTxsVolumeMonth: zodOpenapi.z.string(),
13837
+ estTxsVolumeYear: zodOpenapi.z.string(),
13838
+ tradingCountries: zodOpenapi.z.string(),
13839
+ tradingSide: zodOpenapi.z.string(),
13840
+ acceptedAMLTermsAndConditions: zodOpenapi.z.boolean(),
13841
+ signatureMethod: zodOpenapi.z.string().nullable(),
13842
+ existencePeriod: zodOpenapi.z.string().nullable(),
13843
+ reputation: zodOpenapi.z.string().nullable(),
13844
+ riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod),
13845
+ kycStatus: zodOpenapi.z.enum(KycStatusZod).nullable(),
12100
13846
  createdAt: zodOpenapi.z.date().nullable(),
12101
13847
  updatedAt: zodOpenapi.z.date().nullable()
12102
13848
  });
12103
- const createPartyInputSchema = zodOpenapi.z.object({
12104
- party: partySchema.omit({ id: true }),
12105
- personalData: individualInsertSchema.nullable(),
12106
- organizationData: createOrganizationInputSchema.nullable(),
12107
- bankAccounts: zodOpenapi.z.array(bankAccountInputSchema),
12108
- disponents: zodOpenapi.z.array(disponentSchema),
12109
- addresses: zodOpenapi.z.array(createAddressInputSchema),
12110
- aml: createAmlInputSchema,
12111
- recipients: zodOpenapi.z.array(bankAccountInputSchema)
12112
- });
12113
13849
  const partyOutputSchema = zodOpenapi.z.object({
12114
- party: partyCreateOutputSchema.extend({
12115
- id: zodOpenapi.z.uuid(),
12116
- isClient: zodOpenapi.z.boolean()
12117
- }).nullable(),
13850
+ party: partyBaseOutputSchema.nullable(),
12118
13851
  personalData: individualOutputSchema.nullable(),
12119
13852
  organizationData: createOrganizationOutputSchema.nullable(),
12120
13853
  bankAccounts: zodOpenapi.z.array(bankAccountOutputSchema).nullable(),
@@ -12123,32 +13856,174 @@ const partyOutputSchema = zodOpenapi.z.object({
12123
13856
  aml: createAmlOutputSchema.nullable(),
12124
13857
  recipients: zodOpenapi.z.array(bankAccountOutputSchema).nullable()
12125
13858
  });
12126
- const partiesOutputDataSchema = zodOpenapi.z.array(partyOutputSchema);
12127
- const partyUpdateInputSchema = zodOpenapi.z.object({
12128
- party: partySchema,
12129
- personalData: individualUpdateSchema.nullable(),
12130
- organizationData: organizationUpdateSchema.nullable(),
12131
- bankAccounts: zodOpenapi.z.array(updateBankAccountSchema),
12132
- disponents: zodOpenapi.z.array(disponentUpdateSchema).optional(),
12133
- addresses: zodOpenapi.z.array(updateAddressInputSchema),
12134
- recipients: zodOpenapi.z.array(updateBankAccountSchema).nullable(),
12135
- aml: updateAmlInputSchema.optional()
13859
+ const responseBodySchema$3 = zodOpenapi.z.object({
13860
+ message: zodOpenapi.z.string(),
13861
+ party: partyOutputSchema
12136
13862
  });
12137
- const updatePartyOuputSchema = zodOpenapi.z.object({
12138
- id: zodOpenapi.z.uuid(),
12139
- customerStatus: zodOpenapi.z.enum(CustomerStatusZod),
12140
- partyType: zodOpenapi.z.enum(PartyTypeZod),
12141
- language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
12142
- note: zodOpenapi.z.string().nullable(),
12143
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable()
13863
+ const getPartyByPartyIdRoute = zodOpenapi.createRoute({
13864
+ method: "get",
13865
+ path: "/{partyId}",
13866
+ summary: "Get party",
13867
+ tags: ["Parties"],
13868
+ request: {
13869
+ params: zodOpenapi.z.object({ partyId: zodOpenapi.z.uuid() })
13870
+ },
13871
+ responses: {
13872
+ 200: {
13873
+ content: {
13874
+ "application/json": {
13875
+ schema: responseBodySchema$3
13876
+ }
13877
+ },
13878
+ description: "Get party by party Id"
13879
+ },
13880
+ ...errorResponse("party", "Get")
13881
+ }
13882
+ });
13883
+ new zodOpenapi.OpenAPIHono().openapi(
13884
+ getPartyByPartyIdRoute,
13885
+ async (context) => {
13886
+ const { partyId } = context.req.valid("param");
13887
+ const { data: partyData, error: partyError } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.getParty({ partyId });
13888
+ if (partyData == null || partyError) {
13889
+ return context.json({ message: "Party not found" }, 404);
13890
+ }
13891
+ return context.json(
13892
+ {
13893
+ message: "Party Found",
13894
+ party: partyData
13895
+ },
13896
+ 200
13897
+ );
13898
+ }
13899
+ );
13900
+
13901
+ const paginationSchema = zodOpenapi.z.object({
13902
+ offset: zodOpenapi.z.number().default(1),
13903
+ limit: zodOpenapi.z.number().default(10)
13904
+ });
13905
+ const paginationAndSearchSchema = zodOpenapi.z.object({
13906
+ page: zodOpenapi.z.coerce.number().positive().default(1),
13907
+ limit: zodOpenapi.z.coerce.number().positive().default(20),
13908
+ column: zodOpenapi.z.string(),
13909
+ direction: zodOpenapi.z.enum(["asc", "desc"]),
13910
+ search: zodOpenapi.z.string().optional(),
13911
+ ids: zodOpenapi.z.string().array().optional()
13912
+ });
13913
+ paginationSchema.extend({
13914
+ partyId: zodOpenapi.z.uuid()
13915
+ });
13916
+ paginationSchema.extend({
13917
+ id: zodOpenapi.z.uuid()
13918
+ });
13919
+ zodOpenapi.z.object({ partyId: zodOpenapi.z.uuid() });
13920
+
13921
+ const partiesOutputDataSchema = zodOpenapi.z.array(partyOutputSchema);
13922
+ const getPartiesRoute = zodOpenapi.createRoute({
13923
+ method: "get",
13924
+ path: "/",
13925
+ summary: "List parties",
13926
+ tags: ["Parties"],
13927
+ request: { query: paginationAndSearchSchema },
13928
+ responses: {
13929
+ 500: {
13930
+ description: "Internal Server Error",
13931
+ content: {
13932
+ "application/json": {
13933
+ schema: routeError
13934
+ }
13935
+ }
13936
+ },
13937
+ 200: {
13938
+ content: {
13939
+ "application/json": {
13940
+ schema: zodOpenapi.z.object({
13941
+ message: zodOpenapi.z.string(),
13942
+ data: zodOpenapi.z.object({
13943
+ parties: partiesOutputDataSchema,
13944
+ totalCount: zodOpenapi.z.number()
13945
+ })
13946
+ })
13947
+ }
13948
+ },
13949
+ description: "Get Parties."
13950
+ }
13951
+ }
12144
13952
  });
13953
+ new zodOpenapi.OpenAPIHono().openapi(
13954
+ getPartiesRoute,
13955
+ async (context) => {
13956
+ const query = context.req.query();
13957
+ const validatedQuery = {
13958
+ page: query.page ? Number(query.page) : 1,
13959
+ limit: query.limit ? Number(query.limit) : 10,
13960
+ column: query.column || "createdAt",
13961
+ direction: query.direction || "desc",
13962
+ search: query.search,
13963
+ ids: query.ids ? Array.isArray(query.ids) ? query.ids : [query.ids] : void 0
13964
+ };
13965
+ const {
13966
+ data: parties,
13967
+ error,
13968
+ message,
13969
+ status
13970
+ } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.getParties(
13971
+ validatedQuery
13972
+ );
13973
+ if (error || !parties) {
13974
+ return context.json(
13975
+ {
13976
+ message: "Failed to get parties",
13977
+ data: null,
13978
+ errorDetail: {
13979
+ message,
13980
+ code: status
13981
+ },
13982
+ error: true
13983
+ },
13984
+ 500
13985
+ );
13986
+ }
13987
+ return context.json({ message, data: parties }, 200);
13988
+ }
13989
+ );
12145
13990
 
13991
+ const DOCUMENT_SIDE = ["front", "back"];
13992
+ const paramsSchema$2 = zodOpenapi.z.object({
13993
+ partyId: zodOpenapi.z.uuid()
13994
+ });
13995
+ const idDocumentCreateInputSchema = zodOpenapi.z.object({
13996
+ partyId: zodOpenapi.z.uuid(),
13997
+ idDocType: zodOpenapi.z.enum(IdDocTypeZod),
13998
+ idDocNumber: zodOpenapi.z.string(),
13999
+ idDocHolderName: zodOpenapi.z.string(),
14000
+ issueDate: zodOpenapi.z.coerce.date().optional(),
14001
+ expirationDate: zodOpenapi.z.coerce.date().optional(),
14002
+ issuer: zodOpenapi.z.string().optional(),
14003
+ countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
14004
+ idDocStatus: zodOpenapi.z.enum(IdDocStatusZod).optional()
14005
+ });
14006
+ const idDocumentMultipartSchema = zodOpenapi.z.object({
14007
+ idDocument: zodOpenapi.z.string(),
14008
+ documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
14009
+ file: zodOpenapi.z.any()
14010
+ });
14011
+ const multipartOpenApiSchema = zodOpenapi.z.object({
14012
+ idDocument: zodOpenapi.z.string().openapi({
14013
+ description: "JSON stringified IdDocument payload"
14014
+ }),
14015
+ documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
14016
+ file: zodOpenapi.z.any().openapi({
14017
+ type: "string",
14018
+ format: "binary"
14019
+ })
14020
+ });
12146
14021
  const idDocumentOutputSchema = zodOpenapi.z.object({
12147
14022
  id: zodOpenapi.z.uuid(),
12148
14023
  createdAt: zodOpenapi.z.iso.datetime().nullable(),
12149
14024
  updatedAt: zodOpenapi.z.iso.datetime().nullable(),
12150
14025
  deletedAt: zodOpenapi.z.iso.datetime().nullable(),
12151
- partyId: zodOpenapi.z.uuid().nullable(),
14026
+ partyId: zodOpenapi.z.uuid(),
12152
14027
  idDocType: zodOpenapi.z.enum(IdDocTypeZod),
12153
14028
  idDocNumber: zodOpenapi.z.string(),
12154
14029
  idDocHolderName: zodOpenapi.z.string(),
@@ -12160,21 +14035,422 @@ const idDocumentOutputSchema = zodOpenapi.z.object({
12160
14035
  backImageUri: zodOpenapi.z.string().nullable(),
12161
14036
  idDocStatus: zodOpenapi.z.enum(IdDocStatusZod).nullable()
12162
14037
  });
14038
+ const responseBodySchema$2 = zodOpenapi.z.object({
14039
+ message: zodOpenapi.z.string(),
14040
+ idDocument: idDocumentOutputSchema
14041
+ });
14042
+ const createDocumentRoute = zodOpenapi.createRoute({
14043
+ method: "post",
14044
+ path: "/{partyId}/id-documents",
14045
+ summary: "Create ID document and upload file",
14046
+ tags: ["Documents"],
14047
+ // middleware: [jwt, signature(), idempotency()],
14048
+ // security: [{ JwtAuth: [] }],
14049
+ request: {
14050
+ // headers: z.object({
14051
+ // 'X-Idempotency-Key': XIdempotencyKeyHeaderSchema,
14052
+ // 'X-Signature': XSignatureHeaderSchema,
14053
+ // 'X-Signature-Key': XSignatureKeyHeaderSchema,
14054
+ // }),
14055
+ body: {
14056
+ content: {
14057
+ "multipart/form-data": {
14058
+ schema: multipartOpenApiSchema
14059
+ }
14060
+ },
14061
+ required: true
14062
+ },
14063
+ params: paramsSchema$2
14064
+ },
14065
+ responses: {
14066
+ 200: {
14067
+ description: "Document created and file uploaded",
14068
+ content: {
14069
+ "application/json": {
14070
+ schema: responseBodySchema$2
14071
+ }
14072
+ }
14073
+ },
14074
+ 400: {
14075
+ description: "Invalid request",
14076
+ content: {
14077
+ "application/json": {
14078
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14079
+ }
14080
+ }
14081
+ },
14082
+ 500: {
14083
+ description: "Internal server error",
14084
+ content: {
14085
+ "application/json": {
14086
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14087
+ }
14088
+ }
14089
+ }
14090
+ }
14091
+ });
14092
+ new zodOpenapi.OpenAPIHono().openapi(
14093
+ createDocumentRoute,
14094
+ async (context) => {
14095
+ const rawBody = await context.req.parseBody();
14096
+ const { partyId } = await context.req.param();
14097
+ const idDocumentRaw = rawBody.idDocument;
14098
+ const documentSide = rawBody.documentSide;
14099
+ const file = rawBody.file;
14100
+ if (typeof idDocumentRaw !== "string" || !DOCUMENT_SIDE.includes(documentSide) || !(file instanceof File)) {
14101
+ return context.json({ message: "Invalid multipart payload" }, 400);
14102
+ }
14103
+ const idDocumentJson = JSON.parse(JSON.parse(idDocumentRaw));
14104
+ const idDocumentResult = idDocumentCreateInputSchema.safeParse(idDocumentJson);
14105
+ if (!idDocumentResult.success) {
14106
+ console.error(idDocumentResult.error);
14107
+ return context.json({ message: "Could not parse IdDocument" }, 400);
14108
+ }
14109
+ const {
14110
+ data: createdIdDocument,
14111
+ error: createError,
14112
+ message
14113
+ } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.createIdDocument({
14114
+ idDocument: idDocumentResult.data,
14115
+ partyId
14116
+ });
14117
+ if (!createdIdDocument || createError) {
14118
+ console.error(message);
14119
+ return context.json({ message: "Could not create IdDocument" }, 500);
14120
+ }
14121
+ const bytes = new Uint8Array(await file.arrayBuffer());
14122
+ const { data: uploadResult, error: uploadError } = await context.env.DOCUMENT_SERVICE.uploadDocument({
14123
+ entityType: "client",
14124
+ entityId: createdIdDocument.id,
14125
+ type: "kyc",
14126
+ metadata: {},
14127
+ file: {
14128
+ bytes,
14129
+ type: file.type,
14130
+ name: file.name,
14131
+ size: file.size
14132
+ }
14133
+ });
14134
+ if (!uploadResult || uploadError) {
14135
+ return context.json({ message: "File upload failed" }, 500);
14136
+ }
14137
+ return context.json(
14138
+ {
14139
+ message: "IdDocument created successfully",
14140
+ idDocument: {
14141
+ ...createdIdDocument,
14142
+ frontImageUri: documentSide === "front" ? uploadResult.storageUrl : createdIdDocument.frontImageUri,
14143
+ backImageUri: documentSide === "back" ? uploadResult.storageUrl : createdIdDocument.backImageUri
14144
+ }
14145
+ },
14146
+ 200
14147
+ );
14148
+ }
14149
+ );
14150
+
14151
+ const XIdempotencyKeyHeaderSchema = zodOpenapi.z.string().openapi({
14152
+ description: "Unique identifier header to ensure the request is processed only once.",
14153
+ example: "4ac15c22-2bd3-426f-b915-bfd5febdb7df"
14154
+ });
14155
+ const XSignatureHeaderSchema = zodOpenapi.z.string().openapi({
14156
+ description: "Payload signature header to verify request body integrity.",
14157
+ example: "FIXAxHO6QqH3M7t4MatM8U6l/nIqWj7jIEW2U6/771MGUorSywy+GmKIG3B1mxT1jR7qPtBHQ5YSO8O53iCvOh6kIhbGXtVe/3C61dsEykLbmntV3nF4DY8/HyfF8a6c2Asc5bvgHrhosGi3s/ouoNowMpsckyq66We8H5gRbXlqJm4Bl1zWWQah4aQLX548L8DLx5+EIgArNMVVG8ryCES99aovJBKrQQMpQLwss1sSFuUZ1kdBCodtvxgTOXOugnZ1UNCmUNFXryQ6bn7wY7Punml/rwR/zTQ9j4SX07iFeQC5rgm9/zi29DBluegu+b8/G8oXrf6L4hugbMEKJfLRfKjNHCrjCooKtInoYxwNEfJyJ9mhqdBoeIBca9zgPpewdbwFLXVV82TYR+xZiywDcHKQ62IzQp07NOMCl4xArSJ3vIWUftSYpLIwomyjQEbY27oGiubUF4krEKgHnMYalCn0ruYOwFik2Pa6FEfIZo0TSXDC24UHQb5mJNPYpv2hny7U5CZPmBvjaRGMVnE+WgRUT19cwqlSL3pWAfeSn1Wro7lYBp/PmlRPgYIxl9GJwNlQ0G+NzP9cMSJbmI5fwErDNgJAaPaMwZbJ3y8ikmbBkkXNPKvQrWVGCJ4nP+/f8yYzMZq272EFx984pSoo2yAeBJnrxbW+AlZxyIo="
14158
+ });
14159
+ const XSignatureKeyHeaderSchema = zodOpenapi.z.string().openapi({
14160
+ description: "Signature key identifier header to specify which key was used for payload signing.",
14161
+ example: "ixtal"
14162
+ });
14163
+ const ALLOWED_ID_DOCUMENTS_FILTERS = {
14164
+ PARTY_ID: "filterIdDocumentPartyId",
14165
+ ISSUER: "filterIdDocumentIssuer"
14166
+ };
14167
+
12163
14168
  const idDocumentsListOutputSchema = zodOpenapi.z.object({
12164
14169
  totalCount: zodOpenapi.z.number(),
12165
14170
  idDocuments: zodOpenapi.z.array(idDocumentOutputSchema)
12166
14171
  });
12167
- const DOCUMENT_SIDE = ["front", "back"];
12168
- const idDocumentCreateInputSchema = zodOpenapi.z.object({
12169
- partyId: zodOpenapi.z.uuid(),
12170
- idDocType: zodOpenapi.z.enum(IdDocTypeZod),
12171
- idDocNumber: zodOpenapi.z.string(),
12172
- idDocHolderName: zodOpenapi.z.string(),
12173
- issueDate: zodOpenapi.z.coerce.date().optional(),
12174
- expirationDate: zodOpenapi.z.coerce.date().optional(),
12175
- issuer: zodOpenapi.z.string().optional(),
12176
- countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
12177
- idDocStatus: zodOpenapi.z.enum(IdDocStatusZod).optional()
14172
+ const paramsSchema$1 = zodOpenapi.z.object({
14173
+ partyId: zodOpenapi.z.uuid()
14174
+ });
14175
+ const arrayQuery = (schema) => zodOpenapi.z.preprocess((val) => {
14176
+ if (typeof val === "string") {
14177
+ return val.includes(",") ? val.split(",") : [val];
14178
+ }
14179
+ return val;
14180
+ }, schema.array()).optional();
14181
+ const querySchema = zodOpenapi.z.object({
14182
+ page: zodOpenapi.z.coerce.number().positive().default(1),
14183
+ limit: zodOpenapi.z.coerce.number().positive().default(20),
14184
+ sortColumn: zodOpenapi.z.string().default("updatedAt"),
14185
+ sortDirection: zodOpenapi.z.enum(["asc", "desc"]).default("desc"),
14186
+ [ALLOWED_ID_DOCUMENTS_FILTERS.PARTY_ID]: arrayQuery(zodOpenapi.z.uuid()),
14187
+ [ALLOWED_ID_DOCUMENTS_FILTERS.ISSUER]: arrayQuery(zodOpenapi.z.string()),
14188
+ search: zodOpenapi.z.string().optional()
14189
+ });
14190
+ const responseBodySchema$1 = zodOpenapi.z.object({
14191
+ message: zodOpenapi.z.string(),
14192
+ idDocumentsList: idDocumentsListOutputSchema
14193
+ });
14194
+ const getIdDocumentsListRoute = zodOpenapi.createRoute({
14195
+ method: "get",
14196
+ path: "/{partyId}/id-documents",
14197
+ summary: "List party ID documents",
14198
+ tags: ["Documents"],
14199
+ request: {
14200
+ params: paramsSchema$1,
14201
+ query: querySchema
14202
+ },
14203
+ responses: {
14204
+ 200: {
14205
+ description: "ID documents list fetched",
14206
+ content: {
14207
+ "application/json": {
14208
+ schema: responseBodySchema$1
14209
+ }
14210
+ }
14211
+ },
14212
+ 404: {
14213
+ description: "ID documents not found",
14214
+ content: {
14215
+ "application/json": {
14216
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14217
+ }
14218
+ }
14219
+ },
14220
+ 500: {
14221
+ description: "Internal server error",
14222
+ content: {
14223
+ "application/json": {
14224
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14225
+ }
14226
+ }
14227
+ }
14228
+ }
14229
+ });
14230
+ new zodOpenapi.OpenAPIHono().openapi(
14231
+ getIdDocumentsListRoute,
14232
+ async (context) => {
14233
+ const { partyId } = context.req.valid("param");
14234
+ const { sortColumn, sortDirection, limit, page, ...filters } = context.req.valid("query");
14235
+ const { data: idDocumentsList, error } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.getIdDocumentsList({
14236
+ pagination: {
14237
+ page,
14238
+ limit,
14239
+ sort: {
14240
+ column: sortColumn,
14241
+ direction: sortDirection
14242
+ },
14243
+ filterIdDocumentPartyId: partyId,
14244
+ ...filters
14245
+ }
14246
+ });
14247
+ if (!idDocumentsList || error) {
14248
+ return context.json({ message: "Could not list id documents" }, 404);
14249
+ }
14250
+ return context.json(
14251
+ {
14252
+ message: "ID documents listed successfully",
14253
+ idDocumentsList
14254
+ },
14255
+ 200
14256
+ );
14257
+ }
14258
+ );
14259
+
14260
+ const algParams = {
14261
+ RSA: {
14262
+ name: "RSASSA-PKCS1-v1_5",
14263
+ hash: { name: "SHA-256" }
14264
+ },
14265
+ EC: {
14266
+ name: "ECDSA",
14267
+ namedCurve: "P-256"
14268
+ },
14269
+ HMAC: {
14270
+ name: "HMAC",
14271
+ hash: { name: "SHA-256" }
14272
+ }
14273
+ };
14274
+ const verifyPayloadSignature = async ({
14275
+ signature,
14276
+ data,
14277
+ publicKey,
14278
+ algorithm = "RSA"
14279
+ }) => {
14280
+ const binaryPublicKey = Uint8Array.from(
14281
+ atob(publicKey),
14282
+ (c) => c.charCodeAt(0)
14283
+ );
14284
+ const format = algorithm === "HMAC" ? "raw" : "spki";
14285
+ const importedPublicKey = await crypto.subtle.importKey(
14286
+ format,
14287
+ binaryPublicKey,
14288
+ algParams[algorithm],
14289
+ false,
14290
+ ["verify"]
14291
+ );
14292
+ const encodedPayload = new TextEncoder().encode(data);
14293
+ const decodedSignature = Uint8Array.from(
14294
+ atob(signature),
14295
+ (c) => c.charCodeAt(0)
14296
+ );
14297
+ const isValid = await crypto.subtle.verify(
14298
+ algParams[algorithm],
14299
+ importedPublicKey,
14300
+ decodedSignature,
14301
+ encodedPayload
14302
+ );
14303
+ return isValid;
14304
+ };
14305
+
14306
+ const validateBearerScheme = (header) => {
14307
+ return header.startsWith("Bearer ") && header.length > 7 && !header.slice(7).includes(" ");
14308
+ };
14309
+ const extractBearerToken = (header) => {
14310
+ return header.slice(7).trim();
14311
+ };
14312
+ const validateBearerToken = (bearerToken) => {
14313
+ return zod.z.jwt().safeParse(bearerToken).success;
14314
+ };
14315
+
14316
+ const idempotency = () => {
14317
+ return factory.createMiddleware(async (context, next) => {
14318
+ if (!context.env.MIDDLEWARE_IDEMPOTENCY_DISABLED) {
14319
+ const idempotencyKeyHeader = context.req.header("x-idempotency-key");
14320
+ if (!idempotencyKeyHeader) {
14321
+ throw new httpException.HTTPException(401, {
14322
+ message: `The 'x-idempotency-key' header must exist and must have a value.`
14323
+ });
14324
+ }
14325
+ const existingIdempotencyRecord = await context.env.IDEMPOTENCY_KV.get(idempotencyKeyHeader);
14326
+ if (existingIdempotencyRecord) {
14327
+ throw new httpException.HTTPException(409, {
14328
+ message: "The identical request has already been processed. The idempotency key is not unique."
14329
+ });
14330
+ }
14331
+ await context.env.IDEMPOTENCY_KV.put(
14332
+ idempotencyKeyHeader,
14333
+ idempotencyKeyHeader,
14334
+ {
14335
+ expirationTtl: 60 * 60 * 24 * 3
14336
+ // 3 days
14337
+ }
14338
+ );
14339
+ context.set("idempotency", {
14340
+ key: idempotencyKeyHeader
14341
+ });
14342
+ }
14343
+ await next();
14344
+ });
14345
+ };
14346
+
14347
+ const jwt = () => {
14348
+ return factory.createMiddleware(async (context, next) => {
14349
+ if (!context.env.MIDDLEWARE_JWT_DISABLED) {
14350
+ const authorizationHeader = context.req.header("authorization");
14351
+ if (!authorizationHeader) {
14352
+ throw new httpException.HTTPException(401, {
14353
+ message: `The 'authorization' header must exist and must have a value.`
14354
+ });
14355
+ }
14356
+ if (!validateBearerScheme(authorizationHeader)) {
14357
+ throw new httpException.HTTPException(401, {
14358
+ message: `The 'authorization' header value must use the Bearer scheme.`
14359
+ });
14360
+ }
14361
+ const bearerToken = extractBearerToken(authorizationHeader);
14362
+ if (!validateBearerToken(bearerToken)) {
14363
+ throw new httpException.HTTPException(401, {
14364
+ message: `The Bearer token in the 'authorization' header value must be a JWT.`
14365
+ });
14366
+ }
14367
+ const { data, error } = await context.env.AUTH_SERVICE.verifyAccessToken({
14368
+ accessToken: bearerToken
14369
+ });
14370
+ if (!data || error) {
14371
+ throw new httpException.HTTPException(401, {
14372
+ message: "The JWT must contain valid user information."
14373
+ });
14374
+ }
14375
+ const rawUserMetaDataString = data.payload.user.rawUserMetaData;
14376
+ const rawUserMetaData = rawUserMetaDataString ? JSON.parse(rawUserMetaDataString) : null;
14377
+ const identityId = rawUserMetaData.organizationId ?? rawUserMetaData.exchangeOfficeId;
14378
+ if (!identityId) {
14379
+ throw new httpException.HTTPException(422, {
14380
+ message: "User data integrity check failed."
14381
+ });
14382
+ }
14383
+ context.set("identity", {
14384
+ ...data.payload,
14385
+ user: {
14386
+ ...data.payload.user,
14387
+ organizationId: rawUserMetaData.organizationId,
14388
+ exchangeOfficeId: rawUserMetaData.exchangeOfficeId
14389
+ }
14390
+ });
14391
+ }
14392
+ await next();
14393
+ });
14394
+ };
14395
+
14396
+ const signature = () => {
14397
+ return factory.createMiddleware(async (context, next) => {
14398
+ if (!context.env.MIDDLEWARE_SIGNATURE_DISABLED) {
14399
+ const signatureHeader = context.req.header("x-signature");
14400
+ if (!signatureHeader) {
14401
+ throw new httpException.HTTPException(401, {
14402
+ message: `The 'x-signature' header must exist and must have a value.`
14403
+ });
14404
+ }
14405
+ const signatureKeyHeader = context.req.header("X-Signature-Key");
14406
+ if (!signatureKeyHeader) {
14407
+ throw new httpException.HTTPException(401, {
14408
+ message: `The 'x-signature-key' header must exist and must have a value.`
14409
+ });
14410
+ }
14411
+ const payload = JSON.stringify(await context.req.json().catch(() => null));
14412
+ const identityContext = context.get("identity");
14413
+ const organizationId = identityContext.user.organizationId;
14414
+ const exchangeOfficeId = identityContext.user.exchangeOfficeId;
14415
+ const identityId = organizationId ?? exchangeOfficeId;
14416
+ if (!identityId) {
14417
+ throw new httpException.HTTPException(401, {
14418
+ message: "Failed to retrieve request identity ID."
14419
+ });
14420
+ }
14421
+ const { data: organization, error } = await context.env.ORGANIZATION_SERVICE.getOrganization({
14422
+ organizationId: identityId
14423
+ });
14424
+ if (!organization || error) {
14425
+ throw new httpException.HTTPException(404, {
14426
+ message: "Failed to retrieve organization."
14427
+ });
14428
+ }
14429
+ const signatureKey = organization.signatureKeys.filter(
14430
+ (signatureKey2) => signatureKey2.name === signatureKeyHeader
14431
+ )[0];
14432
+ if (!signatureKey) {
14433
+ throw new httpException.HTTPException(404, {
14434
+ message: "Signature key not found."
14435
+ });
14436
+ }
14437
+ const isVerified = await verifyPayloadSignature({
14438
+ signature: signatureHeader,
14439
+ publicKey: signatureKey.publicKey,
14440
+ data: payload
14441
+ });
14442
+ if (!isVerified) {
14443
+ throw new httpException.HTTPException(401, {
14444
+ message: "Invalid signature key or signature."
14445
+ });
14446
+ }
14447
+ }
14448
+ await next();
14449
+ });
14450
+ };
14451
+
14452
+ const paramsSchema = zodOpenapi.z.object({
14453
+ id: zodOpenapi.z.uuid()
12178
14454
  });
12179
14455
  const idDocumentUpdateInputSchema = zodOpenapi.z.object({
12180
14456
  partyId: zodOpenapi.z.uuid().optional(),
@@ -12189,30 +14465,108 @@ const idDocumentUpdateInputSchema = zodOpenapi.z.object({
12189
14465
  backImageUri: zodOpenapi.z.string().optional(),
12190
14466
  idDocStatus: zodOpenapi.z.enum(IdDocStatusZod).optional()
12191
14467
  });
12192
- const idDocumentMultipartSchema = zodOpenapi.z.object({
12193
- idDocument: zodOpenapi.z.string(),
12194
- documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
12195
- file: zodOpenapi.z.any()
14468
+ const responseBodySchema = zodOpenapi.z.object({
14469
+ message: zodOpenapi.z.string(),
14470
+ idDocument: idDocumentOutputSchema
14471
+ });
14472
+ const updateIdDocumentRoute = zodOpenapi.createRoute({
14473
+ method: "put",
14474
+ path: "/{partyId}/id-documents/{id}",
14475
+ summary: "Update party document",
14476
+ tags: ["Documents"],
14477
+ middleware: [jwt, signature(), idempotency()],
14478
+ security: [{ JwtAuth: [] }],
14479
+ request: {
14480
+ headers: zodOpenapi.z.object({
14481
+ "X-Idempotency-Key": XIdempotencyKeyHeaderSchema,
14482
+ "X-Signature": XSignatureHeaderSchema,
14483
+ "X-Signature-Key": XSignatureKeyHeaderSchema
14484
+ }),
14485
+ params: paramsSchema,
14486
+ body: {
14487
+ content: {
14488
+ "application/json": {
14489
+ schema: idDocumentUpdateInputSchema
14490
+ }
14491
+ },
14492
+ required: true
14493
+ }
14494
+ },
14495
+ responses: {
14496
+ 200: {
14497
+ description: "ID document updated successfully",
14498
+ content: {
14499
+ "application/json": {
14500
+ schema: responseBodySchema
14501
+ }
14502
+ }
14503
+ },
14504
+ 404: {
14505
+ description: "ID document not found",
14506
+ content: {
14507
+ "application/json": {
14508
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14509
+ }
14510
+ }
14511
+ },
14512
+ 500: {
14513
+ description: "Internal server error",
14514
+ content: {
14515
+ "application/json": {
14516
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14517
+ }
14518
+ }
14519
+ }
14520
+ }
12196
14521
  });
14522
+ new zodOpenapi.OpenAPIHono().openapi(
14523
+ updateIdDocumentRoute,
14524
+ async (context) => {
14525
+ const { id } = context.req.valid("param");
14526
+ const patch = context.req.valid("json");
14527
+ const { data: existingDocument, error: fetchError } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.getIdDocument({ id });
14528
+ if (!existingDocument || fetchError) {
14529
+ return context.json({ message: "ID document not found" }, 404);
14530
+ }
14531
+ const fullIdDocument = {
14532
+ ...existingDocument,
14533
+ ...patch,
14534
+ id
14535
+ };
14536
+ const { data: updatedIdDocument, error: updateError } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.updateIdDocument({
14537
+ idDocument: fullIdDocument
14538
+ });
14539
+ if (!updatedIdDocument || updateError) {
14540
+ return context.json({ message: "Could not update ID document" }, 500);
14541
+ }
14542
+ return context.json(
14543
+ {
14544
+ message: "ID document updated successfully",
14545
+ idDocument: updatedIdDocument
14546
+ },
14547
+ 200
14548
+ );
14549
+ }
14550
+ );
12197
14551
 
12198
14552
  const messageResponseSchema = zodOpenapi.z.object({
12199
14553
  message: zodOpenapi.z.string()
12200
14554
  });
12201
14555
 
12202
14556
  exports.AddressTypeZod = AddressTypeZod$1;
12203
- exports.AmlScoreTypeZod = AmlScoreTypeZod;
14557
+ exports.AmlScoreTypeZod = AmlScoreTypeZod$1;
12204
14558
  exports.ClientStatusActionZod = ClientStatusActionZod;
12205
- exports.ContactTypeZod = ContactTypeZod;
14559
+ exports.ContactTypeZod = ContactTypeZod$1;
12206
14560
  exports.CustomerStatusZod = CustomerStatusZod$1;
12207
14561
  exports.DOCUMENT_SIDE = DOCUMENT_SIDE;
12208
14562
  exports.GenderZod = GenderZod$1;
12209
14563
  exports.IdDocStatusZod = IdDocStatusZod$1;
12210
14564
  exports.IdDocTypeZod = IdDocTypeZod$1;
12211
14565
  exports.IdentificationTypeZod = IdentificationTypeZod;
12212
- exports.KycStatusZod = KycStatusZod;
12213
- exports.PartyRelationshipTypeZod = PartyRelationshipTypeZod;
14566
+ exports.KycStatusZod = KycStatusZod$1;
14567
+ exports.PartyRelationshipTypeZod = PartyRelationshipTypeZod$1;
12214
14568
  exports.PartyTypeZod = PartyTypeZod$1;
12215
- exports.TRADER_TYPE = TRADER_TYPE;
14569
+ exports.TRADER_TYPE = TRADER_TYPE$1;
12216
14570
  exports.createMdmClient = createMdmClient;
12217
14571
  exports.createPartyInputSchema = createPartyInputSchema;
12218
14572
  exports.idDocumentCreateInputSchema = idDocumentCreateInputSchema;
@@ -12224,6 +14578,6 @@ exports.messageResponseSchema = messageResponseSchema;
12224
14578
  exports.partiesOutputDataSchema = partiesOutputDataSchema;
12225
14579
  exports.partyCreateOutputSchema = partyCreateOutputSchema;
12226
14580
  exports.partyOutputSchema = partyOutputSchema;
12227
- exports.partySchema = partySchema;
14581
+ exports.partySchema = partySchema$1;
12228
14582
  exports.partyUpdateInputSchema = partyUpdateInputSchema;
12229
14583
  exports.updatePartyOuputSchema = updatePartyOuputSchema;