@devizovaburza/mdm-sdk 0.0.12 → 0.0.14

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;
@@ -28,31 +30,31 @@ const createMdmClient = (baseUrl, options) => {
28
30
  return client.hc(baseUrl, options);
29
31
  };
30
32
 
31
- const AddressTypeZod$1 = [
33
+ const ADDRESS_TYPE$1 = [
32
34
  "PERMANENT_ADDRESS",
33
35
  "REGISTERED_OFFICE",
34
36
  "CONTACT_ADDRESS"
35
37
  ];
36
- const ContactTypeZod$1 = [
38
+ const CONTACT_TYPE$1 = [
37
39
  "EMAIL",
38
40
  "PHONE_AUTH",
39
41
  "PHONE_CONTACT",
40
42
  "PHONE_WORK"
41
43
  ];
42
- const IdDocTypeZod$1 = ["PASSPORT", "ID", "DRIVING_LICENSE"];
43
- const IdDocStatusZod$1 = [
44
+ const ID_DOC_TYPE$1 = ["PASSPORT", "ID", "DRIVING_LICENSE"];
45
+ const ID_DOC_STATUS$1 = [
44
46
  "ACTIVE",
45
47
  "EXPIRED",
46
48
  "EXPIRE_SOON",
47
49
  "REVOKED"
48
50
  ];
49
- const PartyRelationshipTypeZod$1 = [
51
+ const PARTY_RELATIONSHIP_TYPE$1 = [
50
52
  "AUTHORIZED_SIGNATORY",
51
53
  "POA_HOLDER",
52
54
  "BOARD_MEMBER",
53
55
  "UBO"
54
56
  ];
55
- const CustomerStatusZod$1 = [
57
+ const CUSTOMER_STATUS$1 = [
56
58
  // 'LEAD',
57
59
  "NEW",
58
60
  "ACTIVE",
@@ -61,7 +63,7 @@ const CustomerStatusZod$1 = [
61
63
  // 'FORMER',
62
64
  // 'DECEASED',
63
65
  ];
64
- const ClientStatusActionZod = [
66
+ const CLIENT_STATUS_ACTION = [
65
67
  "ON_CUSTOMER_FORM_COMPLETED",
66
68
  "ON_MANUAL_KYC_VERIFICATION_COMPLETED",
67
69
  "ON_MANUAL_RISK_ASSESSMENT_COMPLETED",
@@ -69,12 +71,12 @@ const ClientStatusActionZod = [
69
71
  "ON_CLOSE_CLIENT",
70
72
  "ON_UNBLOCK_CLIENT"
71
73
  ];
72
- const PartyTypeZod$1 = [
74
+ const PARTY_TYPE$1 = [
73
75
  "INDIVIDUAL",
74
76
  "SELF_EMPLOYED",
75
77
  "ORGANIZATION"
76
78
  ];
77
- const AmlScoreTypeZod$1 = [
79
+ const AML_SCORE_TYPE$1 = [
78
80
  "LOW",
79
81
  "MEDIUM",
80
82
  "HIGH",
@@ -82,44 +84,46 @@ const AmlScoreTypeZod$1 = [
82
84
  "UNVERIFIED",
83
85
  "UNCLASSIFIED"
84
86
  ];
85
- const IdentificationTypeZod = [
87
+ const IDENTIFICATION_TYPE = [
86
88
  "FACE_TO_FACE",
87
89
  "REMOTE_IDENTIFICATION"
88
90
  ];
89
- const GenderZod$1 = ["M", "F", "OTHER"];
90
- const KycStatusZod$1 = [
91
+ const GENDER$1 = ["M", "F", "OTHER"];
92
+ const KYC_STATUS$1 = [
91
93
  "NOT_APPROVED",
92
94
  "VERIFIED",
93
95
  "UNVERIFIED",
94
96
  "REJECTED"
95
97
  ];
96
98
  const TRADER_TYPE$1 = ["PERSON", "COMPANY", "OSVC"];
99
+ const PRODUCT_TYPE$1 = ["TXS", "CBS"];
100
+ const TXS_CLIENT_TYPE$1 = ["CLIENT", "PROVIDER"];
97
101
 
98
- const AddressTypeZod = [
102
+ const ADDRESS_TYPE = [
99
103
  "PERMANENT_ADDRESS",
100
104
  "REGISTERED_OFFICE",
101
105
  "CONTACT_ADDRESS"
102
106
  ];
103
- const ContactTypeZod = [
107
+ const CONTACT_TYPE = [
104
108
  "EMAIL",
105
109
  "PHONE_AUTH",
106
110
  "PHONE_CONTACT",
107
111
  "PHONE_WORK"
108
112
  ];
109
- const IdDocTypeZod = ["PASSPORT", "ID", "DRIVING_LICENSE"];
110
- const IdDocStatusZod = [
113
+ const ID_DOC_TYPE = ["PASSPORT", "ID", "DRIVING_LICENSE"];
114
+ const ID_DOC_STATUS = [
111
115
  "ACTIVE",
112
116
  "EXPIRED",
113
117
  "EXPIRE_SOON",
114
118
  "REVOKED"
115
119
  ];
116
- const PartyRelationshipTypeZod = [
120
+ const PARTY_RELATIONSHIP_TYPE = [
117
121
  "AUTHORIZED_SIGNATORY",
118
122
  "POA_HOLDER",
119
123
  "BOARD_MEMBER",
120
124
  "UBO"
121
125
  ];
122
- const CustomerStatusZod = [
126
+ const CUSTOMER_STATUS = [
123
127
  // 'LEAD',
124
128
  "NEW",
125
129
  "ACTIVE",
@@ -128,12 +132,12 @@ const CustomerStatusZod = [
128
132
  // 'FORMER',
129
133
  // 'DECEASED',
130
134
  ];
131
- const PartyTypeZod = [
135
+ const PARTY_TYPE = [
132
136
  "INDIVIDUAL",
133
137
  "SELF_EMPLOYED",
134
138
  "ORGANIZATION"
135
139
  ];
136
- const AmlScoreTypeZod = [
140
+ const AML_SCORE_TYPE = [
137
141
  "LOW",
138
142
  "MEDIUM",
139
143
  "HIGH",
@@ -141,14 +145,15 @@ const AmlScoreTypeZod = [
141
145
  "UNVERIFIED",
142
146
  "UNCLASSIFIED"
143
147
  ];
144
- const GenderZod = ["M", "F", "OTHER"];
145
- const KycStatusZod = [
148
+ const GENDER = ["M", "F", "OTHER"];
149
+ const KYC_STATUS = [
146
150
  "NOT_APPROVED",
147
151
  "VERIFIED",
148
152
  "UNVERIFIED",
149
153
  "REJECTED"
150
154
  ];
151
155
  const TRADER_TYPE = ["PERSON", "COMPANY", "OSVC"];
156
+ const PRODUCT_TYPE = ["TXS", "CBS"];
152
157
 
153
158
  const entityKind = Symbol.for("drizzle:entityKind");
154
159
  function is(value, type) {
@@ -1352,12 +1357,60 @@ function sqliteTableBase(name, columns, extraConfig, schema, baseName = name) {
1352
1357
  const table = Object.assign(rawTable, builtColumns);
1353
1358
  table[Table.Symbol.Columns] = builtColumns;
1354
1359
  table[Table.Symbol.ExtraConfigColumns] = builtColumns;
1360
+ if (extraConfig) {
1361
+ table[SQLiteTable.Symbol.ExtraConfigBuilder] = extraConfig;
1362
+ }
1355
1363
  return table;
1356
1364
  }
1357
1365
  const sqliteTable = (name, columns, extraConfig) => {
1358
- return sqliteTableBase(name, columns);
1366
+ return sqliteTableBase(name, columns, extraConfig);
1359
1367
  };
1360
1368
 
1369
+ class IndexBuilderOn {
1370
+ constructor(name, unique) {
1371
+ this.name = name;
1372
+ this.unique = unique;
1373
+ }
1374
+ static [entityKind] = "SQLiteIndexBuilderOn";
1375
+ on(...columns) {
1376
+ return new IndexBuilder(this.name, columns, this.unique);
1377
+ }
1378
+ }
1379
+ class IndexBuilder {
1380
+ static [entityKind] = "SQLiteIndexBuilder";
1381
+ /** @internal */
1382
+ config;
1383
+ constructor(name, columns, unique) {
1384
+ this.config = {
1385
+ name,
1386
+ columns,
1387
+ unique,
1388
+ where: void 0
1389
+ };
1390
+ }
1391
+ /**
1392
+ * Condition for partial index.
1393
+ */
1394
+ where(condition) {
1395
+ this.config.where = condition;
1396
+ return this;
1397
+ }
1398
+ /** @internal */
1399
+ build(table) {
1400
+ return new Index(this.config, table);
1401
+ }
1402
+ }
1403
+ class Index {
1404
+ static [entityKind] = "SQLiteIndex";
1405
+ config;
1406
+ constructor(config, table) {
1407
+ this.config = { ...config, table };
1408
+ }
1409
+ }
1410
+ function uniqueIndex(name) {
1411
+ return new IndexBuilderOn(name, true);
1412
+ }
1413
+
1361
1414
  const CONSTANTS = {
1362
1415
  INT8_MIN: -128,
1363
1416
  INT8_MAX: 127,
@@ -1654,15 +1707,15 @@ const createSelectSchema = (entity, refine) => {
1654
1707
  return handleEnum(entity);
1655
1708
  }
1656
1709
  const columns = getColumns(entity);
1657
- return handleColumns(columns, {}, selectConditions);
1710
+ return handleColumns(columns, refine ?? {}, selectConditions);
1658
1711
  };
1659
1712
  const createInsertSchema = (entity, refine) => {
1660
1713
  const columns = getColumns(entity);
1661
- return handleColumns(columns, {}, insertConditions);
1714
+ return handleColumns(columns, refine ?? {}, insertConditions);
1662
1715
  };
1663
1716
  const createUpdateSchema = (entity, refine) => {
1664
1717
  const columns = getColumns(entity);
1665
- return handleColumns(columns, {}, updateConditions);
1718
+ return handleColumns(columns, refine ?? {}, updateConditions);
1666
1719
  };
1667
1720
 
1668
1721
  var esprima$1 = {exports: {}};
@@ -12281,9 +12334,9 @@ const party = sqliteTable("party", {
12281
12334
  internalId: text("internal_id"),
12282
12335
  note: text("note"),
12283
12336
  customerStatus: text("customer_status", {
12284
- enum: CustomerStatusZod
12337
+ enum: CUSTOMER_STATUS
12285
12338
  }).notNull(),
12286
- partyType: text("party_type", { enum: PartyTypeZod }).notNull(),
12339
+ partyType: text("party_type", { enum: PARTY_TYPE }).notNull(),
12287
12340
  language: text("language", { enum: generalCodes.LANGUAGE_CODES }).notNull(),
12288
12341
  countryCode: text("country_code", { enum: generalCodes.COUNTRY_CODES_2 }),
12289
12342
  isClient: integer("is_client", { mode: "boolean" }).notNull().default(false),
@@ -12295,7 +12348,7 @@ const address = sqliteTable("address", {
12295
12348
  internalId: text("internal_id"),
12296
12349
  partyId: text("party_id").notNull().references(() => party.id),
12297
12350
  ruianCode: text("ruian_code"),
12298
- addressType: text("address_type", { enum: AddressTypeZod }).notNull(),
12351
+ addressType: text("address_type", { enum: ADDRESS_TYPE }).notNull(),
12299
12352
  street: text("street"),
12300
12353
  orientationNumber: text("orientation_number"),
12301
12354
  descriptiveNumber: text("descriptive_number"),
@@ -12311,7 +12364,7 @@ const contact = sqliteTable("contact", {
12311
12364
  ...base,
12312
12365
  internalId: text("internal_id"),
12313
12366
  partyId: text("party_id").notNull().references(() => party.id),
12314
- contactType: text("contact_type", { enum: ContactTypeZod }),
12367
+ contactType: text("contact_type", { enum: CONTACT_TYPE }),
12315
12368
  email: text("email").notNull(),
12316
12369
  phoneNumber: text("phone_number").notNull()
12317
12370
  });
@@ -12320,7 +12373,7 @@ const idDocument = sqliteTable("id_document", {
12320
12373
  ...base,
12321
12374
  internalId: text("internal_id"),
12322
12375
  partyId: text("party_id").notNull().references(() => party.id),
12323
- idDocType: text("id_doc_type", { enum: IdDocTypeZod }).notNull(),
12376
+ idDocType: text("id_doc_type", { enum: ID_DOC_TYPE }).notNull(),
12324
12377
  idDocNumber: text("id_doc_number").notNull(),
12325
12378
  idDocHolderName: text("id_doc_holder_name").notNull(),
12326
12379
  issueDate: integer("issue_date", { mode: "timestamp_ms" }),
@@ -12329,7 +12382,7 @@ const idDocument = sqliteTable("id_document", {
12329
12382
  countryOfIssue: text("country_of_issue", { enum: generalCodes.COUNTRY_CODES_2 }),
12330
12383
  frontImageUri: text("front_image_uri"),
12331
12384
  backImageUri: text("back_image_uri"),
12332
- idDocStatus: text("id_doc_status", { enum: IdDocStatusZod })
12385
+ idDocStatus: text("id_doc_status", { enum: ID_DOC_STATUS })
12333
12386
  });
12334
12387
 
12335
12388
  const individual = sqliteTable("individual", {
@@ -12344,7 +12397,7 @@ const individual = sqliteTable("individual", {
12344
12397
  birthPlace: text("birth_place").notNull(),
12345
12398
  countryOfBirth: text("country_of_birth", { enum: generalCodes.COUNTRY_CODES_2 }),
12346
12399
  personalId: text("personal_id").notNull(),
12347
- gender: text("gender", { enum: GenderZod }).notNull(),
12400
+ gender: text("gender", { enum: GENDER }).notNull(),
12348
12401
  citizenship: text("citizenship", { enum: generalCodes.COUNTRY_CODES_2 }).notNull(),
12349
12402
  citizenshipOther: text("citizenship_other", { enum: generalCodes.COUNTRY_CODES_2 }),
12350
12403
  employer: text("employer"),
@@ -12405,7 +12458,7 @@ const partyRelationship = sqliteTable("party_relationship", {
12405
12458
  ...base,
12406
12459
  internalId: text("internal_id"),
12407
12460
  relationshipType: text("relationship_type", {
12408
- enum: PartyRelationshipTypeZod
12461
+ enum: PARTY_RELATIONSHIP_TYPE
12409
12462
  }),
12410
12463
  fromPartyId: text("from_party_id").references(() => party.id),
12411
12464
  toPartyId: text("to_party_id").references(() => party.id),
@@ -12469,8 +12522,8 @@ const aml = sqliteTable("aml", {
12469
12522
  existencePeriod: text("existence_period"),
12470
12523
  reputation: text("reputation"),
12471
12524
  isDistraint: integer("is_distraint", { mode: "boolean" }).notNull().default(false),
12472
- riskLevel: text("risk_level", { enum: AmlScoreTypeZod }).notNull(),
12473
- kycStatus: text("kyc_status", { enum: KycStatusZod })
12525
+ riskLevel: text("risk_level", { enum: AML_SCORE_TYPE }).notNull(),
12526
+ kycStatus: text("kyc_status", { enum: KYC_STATUS })
12474
12527
  });
12475
12528
 
12476
12529
  const recipient = sqliteTable("recipient", {
@@ -12501,8 +12554,26 @@ sqliteTable("trader_client", {
12501
12554
  legacyId: text("legacy_id")
12502
12555
  });
12503
12556
 
12557
+ const partyProduct = sqliteTable(
12558
+ "party_product",
12559
+ {
12560
+ ...base,
12561
+ partyId: text("party_id").notNull().references(() => party.id),
12562
+ product: text("product", { enum: PRODUCT_TYPE }).notNull(),
12563
+ config: text("config", { mode: "json" }).$type()
12564
+ },
12565
+ (table) => [
12566
+ uniqueIndex("party_product_party_id_product_unique").on(
12567
+ table.partyId,
12568
+ table.product
12569
+ )
12570
+ ]
12571
+ );
12572
+
12504
12573
  sqliteTable("base", baseMdmSqlite);
12505
12574
 
12575
+ const TXS_CLIENT_TYPE = ["CLIENT", "PROVIDER"];
12576
+
12506
12577
  createInsertSchema(address);
12507
12578
  createUpdateSchema(address);
12508
12579
  createSelectSchema(address);
@@ -12511,7 +12582,7 @@ const addressInsertSchema = zodOpenapi.z.object({
12511
12582
  partyId: zodOpenapi.z.uuid(),
12512
12583
  internalId: zodOpenapi.z.string().optional().nullable(),
12513
12584
  ruianCode: zodOpenapi.z.string().optional().nullable(),
12514
- addressType: zodOpenapi.z.enum(AddressTypeZod),
12585
+ addressType: zodOpenapi.z.enum(ADDRESS_TYPE),
12515
12586
  street: zodOpenapi.z.string().optional().nullable(),
12516
12587
  orientationNumber: zodOpenapi.z.string().optional().nullable(),
12517
12588
  descriptiveNumber: zodOpenapi.z.string().optional().nullable(),
@@ -12527,7 +12598,7 @@ const addressUpdateSchema = zodOpenapi.z.object({
12527
12598
  partyId: zodOpenapi.z.uuid().optional(),
12528
12599
  internalId: zodOpenapi.z.string().optional().nullable(),
12529
12600
  ruianCode: zodOpenapi.z.string().optional().nullable(),
12530
- addressType: zodOpenapi.z.enum(AddressTypeZod).optional(),
12601
+ addressType: zodOpenapi.z.enum(ADDRESS_TYPE).optional(),
12531
12602
  street: zodOpenapi.z.string().optional().nullable(),
12532
12603
  orientationNumber: zodOpenapi.z.string().optional().nullable(),
12533
12604
  descriptiveNumber: zodOpenapi.z.string().optional().nullable(),
@@ -12544,7 +12615,7 @@ const addressSelectSchema = zodOpenapi.z.object({
12544
12615
  partyId: zodOpenapi.z.uuid(),
12545
12616
  internalId: zodOpenapi.z.string().nullable(),
12546
12617
  ruianCode: zodOpenapi.z.string().nullable(),
12547
- addressType: zodOpenapi.z.enum(AddressTypeZod),
12618
+ addressType: zodOpenapi.z.enum(ADDRESS_TYPE),
12548
12619
  street: zodOpenapi.z.string().nullable(),
12549
12620
  orientationNumber: zodOpenapi.z.string().nullable(),
12550
12621
  descriptiveNumber: zodOpenapi.z.string().nullable(),
@@ -12579,8 +12650,8 @@ const amlInsertSchema = zodOpenapi.z.object({
12579
12650
  signatureMethod: zodOpenapi.z.string().nullable().optional(),
12580
12651
  existencePeriod: zodOpenapi.z.string().nullable().optional(),
12581
12652
  reputation: zodOpenapi.z.string().nullable().optional(),
12582
- riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod).nullable().optional(),
12583
- kycStatus: zodOpenapi.z.enum(KycStatusZod).nullable().optional()
12653
+ riskLevel: zodOpenapi.z.enum(AML_SCORE_TYPE).nullable().optional(),
12654
+ kycStatus: zodOpenapi.z.enum(KYC_STATUS).nullable().optional()
12584
12655
  });
12585
12656
  const amlUpdateSchema = zodOpenapi.z.object({
12586
12657
  id: zodOpenapi.z.uuid(),
@@ -12601,8 +12672,8 @@ const amlUpdateSchema = zodOpenapi.z.object({
12601
12672
  signatureMethod: zodOpenapi.z.string().nullable().optional(),
12602
12673
  existencePeriod: zodOpenapi.z.string().nullable().optional(),
12603
12674
  reputation: zodOpenapi.z.string().nullable().optional(),
12604
- riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod).nullable().optional(),
12605
- kycStatus: zodOpenapi.z.enum(KycStatusZod).nullable().optional()
12675
+ riskLevel: zodOpenapi.z.enum(AML_SCORE_TYPE).nullable().optional(),
12676
+ kycStatus: zodOpenapi.z.enum(KYC_STATUS).nullable().optional()
12606
12677
  });
12607
12678
  const amlSelectSchema = amlBaseSelectSchema;
12608
12679
 
@@ -12625,7 +12696,7 @@ createSelectSchema(contact);
12625
12696
  const contactInsertSchema = zodOpenapi.z.object({
12626
12697
  partyId: zodOpenapi.z.uuid(),
12627
12698
  internalId: zodOpenapi.z.string().optional().nullable(),
12628
- contactType: zodOpenapi.z.enum(ContactTypeZod).optional(),
12699
+ contactType: zodOpenapi.z.enum(CONTACT_TYPE).optional(),
12629
12700
  email: zodOpenapi.z.email("Invalid email format"),
12630
12701
  phoneNumber: zodOpenapi.z.string()
12631
12702
  });
@@ -12633,7 +12704,7 @@ const contactUpdateSchema = zodOpenapi.z.object({
12633
12704
  id: zodOpenapi.z.uuid(),
12634
12705
  partyId: zodOpenapi.z.uuid().optional(),
12635
12706
  internalId: zodOpenapi.z.string().optional().nullable(),
12636
- contactType: zodOpenapi.z.enum(ContactTypeZod).optional(),
12707
+ contactType: zodOpenapi.z.enum(CONTACT_TYPE).optional(),
12637
12708
  email: zodOpenapi.z.email("Invalid email format").optional(),
12638
12709
  phoneNumber: zodOpenapi.z.string().optional()
12639
12710
  });
@@ -12651,7 +12722,7 @@ const individualInsertSchema$1 = zodOpenapi.z.object({
12651
12722
  birthPlace: zodOpenapi.z.string(),
12652
12723
  countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12653
12724
  personalId: zodOpenapi.z.string(),
12654
- gender: zodOpenapi.z.enum(GenderZod),
12725
+ gender: zodOpenapi.z.enum(GENDER),
12655
12726
  citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12656
12727
  citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12657
12728
  employer: zodOpenapi.z.string().optional().nullable(),
@@ -12679,7 +12750,7 @@ const individualUpdateSchema$1 = zodOpenapi.z.object({
12679
12750
  birthPlace: zodOpenapi.z.string().optional(),
12680
12751
  countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12681
12752
  personalId: zodOpenapi.z.string().optional(),
12682
- gender: zodOpenapi.z.enum(GenderZod).optional(),
12753
+ gender: zodOpenapi.z.enum(GENDER).optional(),
12683
12754
  citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
12684
12755
  citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12685
12756
  employer: zodOpenapi.z.string().optional().nullable(),
@@ -12708,7 +12779,7 @@ const individualSelectSchema = zodOpenapi.z.object({
12708
12779
  birthPlace: zodOpenapi.z.string(),
12709
12780
  countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
12710
12781
  personalId: zodOpenapi.z.string(),
12711
- gender: zodOpenapi.z.enum(GenderZod),
12782
+ gender: zodOpenapi.z.enum(GENDER),
12712
12783
  citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
12713
12784
  citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
12714
12785
  employer: zodOpenapi.z.string().nullable(),
@@ -12865,7 +12936,7 @@ createSelectSchema(idDocument);
12865
12936
  const idDocumentInsertSchema = zodOpenapi.z.object({
12866
12937
  partyId: zodOpenapi.z.uuid(),
12867
12938
  internalId: zodOpenapi.z.string().optional().nullable(),
12868
- idDocType: zodOpenapi.z.enum(IdDocTypeZod),
12939
+ idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
12869
12940
  idDocNumber: zodOpenapi.z.string(),
12870
12941
  idDocHolderName: zodOpenapi.z.string(),
12871
12942
  issueDate: zodOpenapi.z.date().optional().nullable(),
@@ -12874,13 +12945,13 @@ const idDocumentInsertSchema = zodOpenapi.z.object({
12874
12945
  countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12875
12946
  frontImageUri: zodOpenapi.z.url().optional().nullable(),
12876
12947
  backImageUri: zodOpenapi.z.url().optional().nullable(),
12877
- idDocStatus: zodOpenapi.z.enum(IdDocStatusZod).optional().nullable()
12948
+ idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).optional().nullable()
12878
12949
  });
12879
12950
  const idDocumentUpdateSchema = zodOpenapi.z.object({
12880
12951
  id: zodOpenapi.z.uuid(),
12881
12952
  partyId: zodOpenapi.z.uuid().optional(),
12882
12953
  internalId: zodOpenapi.z.string().optional().nullable(),
12883
- idDocType: zodOpenapi.z.enum(IdDocTypeZod).optional(),
12954
+ idDocType: zodOpenapi.z.enum(ID_DOC_TYPE).optional(),
12884
12955
  idDocNumber: zodOpenapi.z.string().optional(),
12885
12956
  idDocHolderName: zodOpenapi.z.string().optional(),
12886
12957
  issueDate: zodOpenapi.z.date().optional().nullable(),
@@ -12889,7 +12960,7 @@ const idDocumentUpdateSchema = zodOpenapi.z.object({
12889
12960
  countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional().nullable(),
12890
12961
  frontImageUri: zodOpenapi.z.url("Invalid URL format").optional().nullable(),
12891
12962
  backImageUri: zodOpenapi.z.url("Invalid URL format").optional().nullable(),
12892
- idDocStatus: zodOpenapi.z.enum(IdDocStatusZod).optional().nullable()
12963
+ idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).optional().nullable()
12893
12964
  });
12894
12965
 
12895
12966
  const recipientBaseInsertSchema = createInsertSchema(recipient);
@@ -12902,21 +12973,64 @@ const recipientInsertSchema = bankAccountInsertSchema;
12902
12973
  const recipientUpdateSchema = bankAccountUpdateSchema;
12903
12974
  const recipientSelectSchema = bankAccountSelectSchema;
12904
12975
 
12976
+ const productTxsConfigSchema = zodOpenapi.z.object({
12977
+ fee: zodOpenapi.z.number(),
12978
+ margin: zodOpenapi.z.number(),
12979
+ reportingEmail: zodOpenapi.z.string().optional(),
12980
+ clientType: zodOpenapi.z.enum(TXS_CLIENT_TYPE).optional()
12981
+ });
12982
+ const productCbsConfigSchema = zodOpenapi.z.object({});
12983
+ const productConfigSchema = zodOpenapi.z.union([
12984
+ productTxsConfigSchema,
12985
+ productCbsConfigSchema
12986
+ ]);
12987
+ const partyProductBaseInsertSchema = createInsertSchema(partyProduct, {
12988
+ config: () => productConfigSchema.nullable()
12989
+ });
12990
+ createUpdateSchema(partyProduct, {
12991
+ config: () => productConfigSchema.nullable()
12992
+ });
12993
+ createSelectSchema(partyProduct, {
12994
+ config: () => productConfigSchema.nullable()
12995
+ });
12996
+ const partyProductUpdateSchema = partyProductBaseInsertSchema.extend({
12997
+ partyId: zodOpenapi.z.uuid()
12998
+ });
12999
+ partyProductUpdateSchema.omit({
13000
+ id: true
13001
+ });
13002
+ const partyProductSelectSchema = partyProductUpdateSchema.required();
13003
+ zodOpenapi.z.array(partyProductSelectSchema);
13004
+ const productsInputSchema$2 = zodOpenapi.z.object({
13005
+ txs: productTxsConfigSchema.optional(),
13006
+ cbs: productCbsConfigSchema.optional()
13007
+ });
13008
+ const productTxsConfigOutputSchema = zodOpenapi.z.object({
13009
+ fee: zodOpenapi.z.number(),
13010
+ margin: zodOpenapi.z.number(),
13011
+ reportingEmail: zodOpenapi.z.string().nullable(),
13012
+ clientType: zodOpenapi.z.enum(TXS_CLIENT_TYPE).nullable()
13013
+ });
13014
+ const productsOutputSchema$1 = zodOpenapi.z.object({
13015
+ txs: productTxsConfigOutputSchema.nullable(),
13016
+ cbs: productCbsConfigSchema.nullable()
13017
+ });
13018
+
12905
13019
  createInsertSchema(party);
12906
13020
  createUpdateSchema(party);
12907
- const partySchema$1 = zodOpenapi.z.object({
12908
- partyType: zodOpenapi.z.enum(PartyTypeZod),
13021
+ const partySchema$2 = zodOpenapi.z.object({
13022
+ partyType: zodOpenapi.z.enum(PARTY_TYPE),
12909
13023
  language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
12910
13024
  id: zodOpenapi.z.uuid().nullable(),
12911
13025
  note: zodOpenapi.z.string().optional(),
12912
13026
  countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
12913
- customerStatus: zodOpenapi.z.enum(CustomerStatusZod).optional(),
13027
+ customerStatus: zodOpenapi.z.enum(CUSTOMER_STATUS).optional(),
12914
13028
  legacyId: zodOpenapi.z.string().optional()
12915
13029
  });
12916
13030
  const partyOutputSchema$1 = zodOpenapi.z.object({
12917
13031
  internalId: zodOpenapi.z.string().nullable(),
12918
- customerStatus: zodOpenapi.z.enum(CustomerStatusZod),
12919
- partyType: zodOpenapi.z.enum(PartyTypeZod),
13032
+ customerStatus: zodOpenapi.z.enum(CUSTOMER_STATUS),
13033
+ partyType: zodOpenapi.z.enum(PARTY_TYPE),
12920
13034
  language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
12921
13035
  id: zodOpenapi.z.uuid(),
12922
13036
  note: zodOpenapi.z.string().nullable(),
@@ -12925,7 +13039,7 @@ const partyOutputSchema$1 = zodOpenapi.z.object({
12925
13039
  createdAt: zodOpenapi.z.date().nullable(),
12926
13040
  updatedAt: zodOpenapi.z.date().nullable()
12927
13041
  });
12928
- const createPartySchema = partySchema$1.omit({ id: true });
13042
+ const createPartySchema = partySchema$2.omit({ id: true });
12929
13043
  zodOpenapi.z.object({
12930
13044
  party: createPartySchema,
12931
13045
  personalData: individualInsertSchema$1.omit({ partyId: true }).nullable(),
@@ -12934,18 +13048,20 @@ zodOpenapi.z.object({
12934
13048
  recipients: zodOpenapi.z.array(recipientInsertSchema.omit({ partyId: true })).nullable(),
12935
13049
  disponents: zodOpenapi.z.array(disponentCreateSchema).nullable(),
12936
13050
  addresses: zodOpenapi.z.array(addressInsertSchema.omit({ partyId: true })),
12937
- aml: amlInsertSchema.omit({ partyId: true })
13051
+ aml: amlInsertSchema.omit({ partyId: true }),
13052
+ products: productsInputSchema$2.optional()
12938
13053
  });
12939
13054
  zodOpenapi.z.object({
12940
13055
  partyId: zodOpenapi.z.uuid(),
12941
- party: partySchema$1,
13056
+ party: partySchema$2,
12942
13057
  personalData: individualUpdateSchema$1.optional(),
12943
13058
  organizationData: organizationUpdateSchema$1.optional(),
12944
13059
  bankAccounts: zodOpenapi.z.array(bankAccountUpsertSchema).optional(),
12945
13060
  recipients: zodOpenapi.z.array(recipientUpsertSchema).optional(),
12946
13061
  disponents: zodOpenapi.z.array(disponentUpdateSchema$1).optional(),
12947
13062
  addresses: zodOpenapi.z.array(addressUpdateSchema).optional(),
12948
- aml: amlUpdateSchema.optional()
13063
+ aml: amlUpdateSchema.optional(),
13064
+ products: productsInputSchema$2.optional()
12949
13065
  });
12950
13066
  const partySelectOutputSchema = zodOpenapi.z.object({
12951
13067
  party: partyOutputSchema$1.nullable(),
@@ -12955,7 +13071,8 @@ const partySelectOutputSchema = zodOpenapi.z.object({
12955
13071
  bankAccounts: zodOpenapi.z.array(bankAccountSelectSchema).nullable(),
12956
13072
  disponents: zodOpenapi.z.array(disponentSelectSchema).nullable(),
12957
13073
  addresses: zodOpenapi.z.array(addressSelectSchema).nullable(),
12958
- recipients: zodOpenapi.z.array(recipientSelectSchema).nullable()
13074
+ recipients: zodOpenapi.z.array(recipientSelectSchema).nullable(),
13075
+ products: productsOutputSchema$1.nullable()
12959
13076
  });
12960
13077
  zodOpenapi.z.array(partySelectOutputSchema);
12961
13078
  const partySelectDataSchema = zodOpenapi.z.object({
@@ -12972,7 +13089,8 @@ const partySelectArrayDataSchema = zodOpenapi.z.object({
12972
13089
  });
12973
13090
  zodOpenapi.z.object({
12974
13091
  ...partySelectDataSchema.shape,
12975
- ...partySelectArrayDataSchema.shape
13092
+ ...partySelectArrayDataSchema.shape,
13093
+ products: productsOutputSchema$1.nullable()
12976
13094
  });
12977
13095
 
12978
13096
  createInsertSchema(partyChange);
@@ -13000,7 +13118,7 @@ createInsertSchema(partyRelationship);
13000
13118
  createUpdateSchema(partyRelationship);
13001
13119
  createSelectSchema(partyRelationship);
13002
13120
  zodOpenapi.z.object({
13003
- relationshipType: zodOpenapi.z.enum(PartyRelationshipTypeZod).optional(),
13121
+ relationshipType: zodOpenapi.z.enum(PARTY_RELATIONSHIP_TYPE).optional(),
13004
13122
  frompartyId: zodOpenapi.z.uuid().optional().nullable(),
13005
13123
  internalId: zodOpenapi.z.string().optional().nullable(),
13006
13124
  topartyId: zodOpenapi.z.uuid().optional().nullable(),
@@ -13009,7 +13127,7 @@ zodOpenapi.z.object({
13009
13127
  });
13010
13128
  zodOpenapi.z.object({
13011
13129
  id: zodOpenapi.z.uuid(),
13012
- relationshipType: zodOpenapi.z.enum(PartyRelationshipTypeZod).optional(),
13130
+ relationshipType: zodOpenapi.z.enum(PARTY_RELATIONSHIP_TYPE).optional(),
13013
13131
  frompartyId: zodOpenapi.z.uuid().optional().nullable(),
13014
13132
  internalId: zodOpenapi.z.string().optional().nullable(),
13015
13133
  topartyId: zodOpenapi.z.uuid().optional().nullable(),
@@ -13199,7 +13317,7 @@ zod.z.object({
13199
13317
  id: zod.z.uuid()
13200
13318
  });
13201
13319
 
13202
- const ALLOWED_ID_DOCUMENTS_FILTERS = {
13320
+ const ALLOWED_ID_DOCUMENTS_FILTERS$1 = {
13203
13321
  PARTY_ID: "filterIdDocumentPartyId",
13204
13322
  ISSUER: "filterIdDocumentIssuer"
13205
13323
  };
@@ -13211,8 +13329,8 @@ zod.z.object({
13211
13329
  column: zod.z.string(),
13212
13330
  direction: zod.z.enum(["asc", "desc"])
13213
13331
  }),
13214
- [ALLOWED_ID_DOCUMENTS_FILTERS.PARTY_ID]: zod.z.union([zod.z.uuid(), zod.z.uuid().array()]).optional(),
13215
- [ALLOWED_ID_DOCUMENTS_FILTERS.ISSUER]: zod.z.union([zod.z.string(), zod.z.string().array()]).optional(),
13332
+ [ALLOWED_ID_DOCUMENTS_FILTERS$1.PARTY_ID]: zod.z.union([zod.z.uuid(), zod.z.uuid().array()]).optional(),
13333
+ [ALLOWED_ID_DOCUMENTS_FILTERS$1.ISSUER]: zod.z.union([zod.z.string(), zod.z.string().array()]).optional(),
13216
13334
  search: zod.z.string().optional()
13217
13335
  })
13218
13336
  });
@@ -13269,8 +13387,49 @@ zod.z.object({
13269
13387
  id: zod.z.uuid()
13270
13388
  });
13271
13389
 
13390
+ const routeError = zodOpenapi.z.object({
13391
+ message: zodOpenapi.z.string(),
13392
+ data: zodOpenapi.z.null(),
13393
+ errorDetail: zodOpenapi.z.object({
13394
+ message: zodOpenapi.z.string(),
13395
+ code: zodOpenapi.z.number()
13396
+ }).optional(),
13397
+ error: zodOpenapi.z.boolean()
13398
+ });
13399
+ const errorResponse = (entityName, action = "creation") => ({
13400
+ 404: {
13401
+ content: {
13402
+ "application/json": {
13403
+ schema: zodOpenapi.z.object({
13404
+ message: zodOpenapi.z.string(),
13405
+ stackTrace: zodOpenapi.z.string().optional()
13406
+ })
13407
+ }
13408
+ },
13409
+ description: `Not Found. This can occur when the ${entityName} is not found.`
13410
+ },
13411
+ 500: {
13412
+ content: {
13413
+ "application/json": {
13414
+ schema: zodOpenapi.z.object({
13415
+ message: zodOpenapi.z.string(),
13416
+ stackTrace: zodOpenapi.z.string().optional()
13417
+ })
13418
+ }
13419
+ },
13420
+ description: `Internal Server Error. This can occur when the ${entityName} ${action} fails.`
13421
+ }
13422
+ });
13423
+
13424
+ const partySchema$1 = zodOpenapi.z.object({
13425
+ partyType: zodOpenapi.z.enum(PARTY_TYPE),
13426
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13427
+ id: zodOpenapi.z.uuid(),
13428
+ internalId: zodOpenapi.z.string().optional(),
13429
+ note: zodOpenapi.z.string().optional(),
13430
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13431
+ });
13272
13432
  const individualInsertSchema = zodOpenapi.z.object({
13273
- partyId: zodOpenapi.z.uuid(),
13274
13433
  internalId: zodOpenapi.z.string().optional(),
13275
13434
  name: zodOpenapi.z.string(),
13276
13435
  surname: zodOpenapi.z.string(),
@@ -13280,7 +13439,7 @@ const individualInsertSchema = zodOpenapi.z.object({
13280
13439
  birthPlace: zodOpenapi.z.string(),
13281
13440
  countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13282
13441
  personalId: zodOpenapi.z.string(),
13283
- gender: zodOpenapi.z.enum(GenderZod),
13442
+ gender: zodOpenapi.z.enum(GENDER),
13284
13443
  citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13285
13444
  citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13286
13445
  employer: zodOpenapi.z.string().optional(),
@@ -13297,6 +13456,183 @@ const individualInsertSchema = zodOpenapi.z.object({
13297
13456
  stayAbroad: zodOpenapi.z.boolean().optional(),
13298
13457
  stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13299
13458
  });
13459
+ const createOrganizationInputSchema = zodOpenapi.z.object({
13460
+ internalId: zodOpenapi.z.string().optional(),
13461
+ businessName: zodOpenapi.z.string(),
13462
+ email: zodOpenapi.z.string().optional(),
13463
+ phone: zodOpenapi.z.string().optional(),
13464
+ registeredNumber: zodOpenapi.z.string(),
13465
+ registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13466
+ operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13467
+ presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13468
+ monthlyVolumeIn: zodOpenapi.z.number(),
13469
+ monthlyVolumeOut: zodOpenapi.z.number(),
13470
+ ownedBy: zodOpenapi.z.string(),
13471
+ companyObjects: zodOpenapi.z.string(),
13472
+ annualTurnover: zodOpenapi.z.number(),
13473
+ numberOfEmployees: zodOpenapi.z.number(),
13474
+ prosecuted: zodOpenapi.z.string().optional(),
13475
+ location: zodOpenapi.z.string().optional(),
13476
+ fileNumber: zodOpenapi.z.string().optional(),
13477
+ websiteUrl: zodOpenapi.z.string().optional(),
13478
+ vatPayer: zodOpenapi.z.boolean(),
13479
+ companyObjectsDescription: zodOpenapi.z.string(),
13480
+ turnover3years: zodOpenapi.z.number(),
13481
+ operationCountries: zodOpenapi.z.string(),
13482
+ riskyBusinessType: zodOpenapi.z.string().optional()
13483
+ });
13484
+ const updateBankAccountSchema$1 = zodOpenapi.z.object({
13485
+ ...bankAccountMetadataSchema.shape,
13486
+ partyId: zodOpenapi.z.uuid(),
13487
+ internalId: zodOpenapi.z.string().optional(),
13488
+ holderName: zodOpenapi.z.string(),
13489
+ number: zodOpenapi.z.string().optional(),
13490
+ currency: bankAccountMetadataSchema.shape.currency.nonoptional(),
13491
+ countryCode: bankAccountMetadataSchema.shape.countryCode.nonoptional(),
13492
+ id: bankAccountMetadataSchema.shape.id.nonoptional()
13493
+ });
13494
+ const bankAccountInputSchema = updateBankAccountSchema$1.required({
13495
+ holderName: true,
13496
+ currency: true,
13497
+ countryCode: true
13498
+ }).omit({ id: true, partyId: true });
13499
+ const disponentSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13500
+ zodOpenapi.z.object({
13501
+ partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13502
+ data: individualInsertSchema
13503
+ }),
13504
+ zodOpenapi.z.object({
13505
+ partyType: zodOpenapi.z.literal("ORGANIZATION"),
13506
+ data: createOrganizationInputSchema
13507
+ })
13508
+ ]);
13509
+ const createAddressInputSchema = zodOpenapi.z.object({
13510
+ addressType: zodOpenapi.z.enum(ADDRESS_TYPE),
13511
+ internalId: zodOpenapi.z.string().optional(),
13512
+ street: zodOpenapi.z.string(),
13513
+ orientationNumber: zodOpenapi.z.string().optional(),
13514
+ descriptiveNumber: zodOpenapi.z.string().optional(),
13515
+ municipality: zodOpenapi.z.string().max(255),
13516
+ municipalityPart: zodOpenapi.z.string().optional(),
13517
+ zipCode: zodOpenapi.z.string().max(20),
13518
+ district: zodOpenapi.z.string().max(255),
13519
+ region: zodOpenapi.z.string().max(255),
13520
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13521
+ ruianCode: zodOpenapi.z.string().optional()
13522
+ });
13523
+ const createAmlInputSchema = zodOpenapi.z.object({
13524
+ internalId: zodOpenapi.z.string().optional(),
13525
+ sourceOfWealth: zodOpenapi.z.string(),
13526
+ yearlyIncome: zodOpenapi.z.string(),
13527
+ tradesPurpose: zodOpenapi.z.string().optional(),
13528
+ sourceOfIncome: zodOpenapi.z.string(),
13529
+ transactionType: zodOpenapi.z.string().optional(),
13530
+ transactionTypeExpiry: zodOpenapi.z.date().optional(),
13531
+ isDistraint: zodOpenapi.z.boolean().default(false),
13532
+ estTxsVolumeMonth: zodOpenapi.z.string(),
13533
+ estTxsVolumeYear: zodOpenapi.z.string(),
13534
+ tradingCountries: zodOpenapi.z.string(),
13535
+ tradingSide: zodOpenapi.z.string(),
13536
+ acceptedAMLTermsAndConditions: zodOpenapi.z.boolean(),
13537
+ signatureMethod: zodOpenapi.z.string().optional(),
13538
+ existencePeriod: zodOpenapi.z.string().optional(),
13539
+ reputation: zodOpenapi.z.string().optional(),
13540
+ riskLevel: zodOpenapi.z.enum(AML_SCORE_TYPE).optional(),
13541
+ kycStatus: zodOpenapi.z.enum(KYC_STATUS).optional()
13542
+ });
13543
+ const productsInputSchema$1 = zodOpenapi.z.object({
13544
+ txs: zodOpenapi.z.object({
13545
+ fee: zodOpenapi.z.number(),
13546
+ margin: zodOpenapi.z.number(),
13547
+ reportingEmail: zodOpenapi.z.string().optional(),
13548
+ clientType: zodOpenapi.z.enum(TXS_CLIENT_TYPE).optional()
13549
+ }).optional(),
13550
+ cbs: zodOpenapi.z.object({}).optional()
13551
+ });
13552
+ const createPartyInputSchema = zodOpenapi.z.object({
13553
+ party: partySchema$1.omit({ id: true }),
13554
+ personalData: individualInsertSchema.nullable(),
13555
+ organizationData: createOrganizationInputSchema.nullable(),
13556
+ bankAccounts: zodOpenapi.z.array(bankAccountInputSchema),
13557
+ disponents: zodOpenapi.z.array(disponentSchema),
13558
+ addresses: zodOpenapi.z.array(createAddressInputSchema),
13559
+ aml: createAmlInputSchema,
13560
+ recipients: zodOpenapi.z.array(bankAccountInputSchema),
13561
+ products: productsInputSchema$1.optional()
13562
+ });
13563
+ const partyCreateOutputSchema = zodOpenapi.z.object({
13564
+ customerStatus: zodOpenapi.z.enum(CUSTOMER_STATUS),
13565
+ partyType: zodOpenapi.z.enum(PARTY_TYPE),
13566
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13567
+ id: zodOpenapi.z.uuid(),
13568
+ internalId: zodOpenapi.z.string().nullable(),
13569
+ note: zodOpenapi.z.string().nullable(),
13570
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13571
+ createdAt: zodOpenapi.z.date().nullable(),
13572
+ updatedAt: zodOpenapi.z.date().nullable()
13573
+ });
13574
+ const responseBodySchema$5 = zodOpenapi.z.object({
13575
+ message: zodOpenapi.z.string(),
13576
+ party: partyCreateOutputSchema
13577
+ });
13578
+ const createPartyRoute = zodOpenapi.createRoute({
13579
+ method: "post",
13580
+ path: "/",
13581
+ summary: "Create party",
13582
+ tags: ["Parties"],
13583
+ request: {
13584
+ body: {
13585
+ content: {
13586
+ "application/json": {
13587
+ schema: createPartyInputSchema
13588
+ }
13589
+ },
13590
+ required: true
13591
+ }
13592
+ },
13593
+ responses: {
13594
+ 200: {
13595
+ content: {
13596
+ "application/json": {
13597
+ schema: responseBodySchema$5
13598
+ }
13599
+ },
13600
+ description: "Creates a Party."
13601
+ },
13602
+ ...errorResponse("Party", "Creation")
13603
+ }
13604
+ });
13605
+ new zodOpenapi.OpenAPIHono().openapi(
13606
+ createPartyRoute,
13607
+ async (context) => {
13608
+ const party = context.req.valid("json");
13609
+ const { data: partyData, error } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.createParty(party);
13610
+ if (!partyData || error) {
13611
+ return context.json(
13612
+ {
13613
+ message: "Could not create a party"
13614
+ },
13615
+ 500
13616
+ );
13617
+ }
13618
+ return context.json(
13619
+ {
13620
+ message: "party created",
13621
+ party: partyData
13622
+ },
13623
+ 200
13624
+ );
13625
+ }
13626
+ );
13627
+
13628
+ const partySchema = zodOpenapi.z.object({
13629
+ partyType: zodOpenapi.z.enum(PARTY_TYPE),
13630
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13631
+ id: zodOpenapi.z.uuid(),
13632
+ internalId: zodOpenapi.z.string().optional(),
13633
+ note: zodOpenapi.z.string().optional(),
13634
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13635
+ });
13300
13636
  const individualUpdateSchema = zodOpenapi.z.object({
13301
13637
  id: zodOpenapi.z.uuid(),
13302
13638
  partyId: zodOpenapi.z.uuid(),
@@ -13309,7 +13645,7 @@ const individualUpdateSchema = zodOpenapi.z.object({
13309
13645
  birthPlace: zodOpenapi.z.string().optional(),
13310
13646
  countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13311
13647
  personalId: zodOpenapi.z.string().optional(),
13312
- gender: zodOpenapi.z.enum(GenderZod).optional(),
13648
+ gender: zodOpenapi.z.enum(GENDER).optional(),
13313
13649
  citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13314
13650
  citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13315
13651
  employer: zodOpenapi.z.string().optional(),
@@ -13326,64 +13662,6 @@ const individualUpdateSchema = zodOpenapi.z.object({
13326
13662
  stayAbroad: zodOpenapi.z.boolean().optional(),
13327
13663
  stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13328
13664
  });
13329
- const individualOutputSchema = zodOpenapi.z.object({
13330
- id: zodOpenapi.z.uuid(),
13331
- partyId: zodOpenapi.z.uuid(),
13332
- internalId: zodOpenapi.z.string().nullable(),
13333
- name: zodOpenapi.z.string(),
13334
- surname: zodOpenapi.z.string(),
13335
- email: zodOpenapi.z.string().nullable(),
13336
- phone: zodOpenapi.z.string().nullable(),
13337
- birthDate: zodOpenapi.z.string().nullable(),
13338
- birthPlace: zodOpenapi.z.string(),
13339
- countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13340
- personalId: zodOpenapi.z.string(),
13341
- gender: zodOpenapi.z.enum(GenderZod),
13342
- citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13343
- citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13344
- employer: zodOpenapi.z.string().nullable(),
13345
- employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13346
- registeredNumber: zodOpenapi.z.string(),
13347
- isPep: zodOpenapi.z.boolean(),
13348
- titleBefore: zodOpenapi.z.string().nullable(),
13349
- titleAfter: zodOpenapi.z.string().nullable(),
13350
- birthSurname: zodOpenapi.z.string().nullable(),
13351
- vocativeTitle: zodOpenapi.z.string().nullable(),
13352
- deathDate: zodOpenapi.z.coerce.date().nullable(),
13353
- deathNotification: zodOpenapi.z.coerce.date().nullable(),
13354
- pin: zodOpenapi.z.string().nullable(),
13355
- stayAbroad: zodOpenapi.z.boolean().nullable(),
13356
- stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13357
- createdAt: zodOpenapi.z.coerce.date().nullable(),
13358
- updatedAt: zodOpenapi.z.coerce.date().nullable()
13359
- });
13360
-
13361
- zodOpenapi.z.object({
13362
- partyId: zodOpenapi.z.uuid(),
13363
- internalId: zodOpenapi.z.string().optional(),
13364
- businessName: zodOpenapi.z.string(),
13365
- email: zodOpenapi.z.email("Invalid email format").optional(),
13366
- phone: zodOpenapi.z.string().optional(),
13367
- registeredNumber: zodOpenapi.z.string(),
13368
- registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13369
- operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13370
- presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13371
- monthlyVolumeIn: zodOpenapi.z.number(),
13372
- monthlyVolumeOut: zodOpenapi.z.number(),
13373
- ownedBy: zodOpenapi.z.string(),
13374
- companyObjects: zodOpenapi.z.string(),
13375
- annualTurnover: zodOpenapi.z.number(),
13376
- numberOfEmployees: zodOpenapi.z.number().optional(),
13377
- prosecuted: zodOpenapi.z.string().optional(),
13378
- location: zodOpenapi.z.string().optional(),
13379
- fileNumber: zodOpenapi.z.string().optional(),
13380
- websiteUrl: zodOpenapi.z.url("Invalid website URL").optional(),
13381
- vatPayer: zodOpenapi.z.boolean(),
13382
- companyObjectsDescription: zodOpenapi.z.string(),
13383
- turnover3years: zodOpenapi.z.number(),
13384
- operationCountries: zodOpenapi.z.string(),
13385
- riskyBusinessType: zodOpenapi.z.string().optional()
13386
- });
13387
13665
  const organizationUpdateSchema = zodOpenapi.z.object({
13388
13666
  id: zodOpenapi.z.uuid(),
13389
13667
  partyId: zodOpenapi.z.uuid().optional(),
@@ -13411,60 +13689,201 @@ const organizationUpdateSchema = zodOpenapi.z.object({
13411
13689
  operationCountries: zodOpenapi.z.string(),
13412
13690
  riskyBusinessType: zodOpenapi.z.string().optional()
13413
13691
  });
13414
- zodOpenapi.z.object({
13415
- id: zodOpenapi.z.uuid(),
13416
- partyId: zodOpenapi.z.uuid(),
13417
- internalId: zodOpenapi.z.string().nullable(),
13418
- businessName: zodOpenapi.z.string(),
13419
- email: zodOpenapi.z.string().nullable(),
13420
- phone: zodOpenapi.z.string().nullable(),
13421
- registeredNumber: zodOpenapi.z.string(),
13422
- registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13423
- operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13424
- presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13425
- monthlyVolumeIn: zodOpenapi.z.number(),
13426
- monthlyVolumeOut: zodOpenapi.z.number(),
13427
- ownedBy: zodOpenapi.z.string(),
13428
- companyObjects: zodOpenapi.z.string(),
13429
- annualTurnover: zodOpenapi.z.number(),
13430
- numberOfEmployees: zodOpenapi.z.number().nullable(),
13431
- prosecuted: zodOpenapi.z.string().nullable(),
13432
- location: zodOpenapi.z.string().nullable(),
13433
- fileNumber: zodOpenapi.z.string().nullable(),
13434
- websiteUrl: zodOpenapi.z.string().nullable(),
13435
- vatPayer: zodOpenapi.z.boolean(),
13436
- companyObjectsDescription: zodOpenapi.z.string(),
13437
- turnover3years: zodOpenapi.z.number(),
13438
- operationCountries: zodOpenapi.z.string(),
13439
- riskyBusinessType: zodOpenapi.z.string().nullable(),
13440
- createdAt: zodOpenapi.z.coerce.date().nullable(),
13441
- updatedAt: zodOpenapi.z.coerce.date().nullable()
13442
- });
13443
- const createOrganizationInputSchema = zodOpenapi.z.object({
13692
+ const updateBankAccountSchema = zodOpenapi.z.object({
13693
+ ...bankAccountMetadataSchema.shape,
13444
13694
  partyId: zodOpenapi.z.uuid(),
13445
13695
  internalId: zodOpenapi.z.string().optional(),
13446
- businessName: zodOpenapi.z.string(),
13447
- email: zodOpenapi.z.string().optional(),
13448
- phone: zodOpenapi.z.string().optional(),
13449
- registeredNumber: zodOpenapi.z.string(),
13450
- registeredIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13451
- operatesIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13452
- presentIn: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13453
- monthlyVolumeIn: zodOpenapi.z.number(),
13454
- monthlyVolumeOut: zodOpenapi.z.number(),
13455
- ownedBy: zodOpenapi.z.string(),
13456
- companyObjects: zodOpenapi.z.string(),
13457
- annualTurnover: zodOpenapi.z.number(),
13458
- numberOfEmployees: zodOpenapi.z.number(),
13459
- prosecuted: zodOpenapi.z.string().optional(),
13460
- location: zodOpenapi.z.string().optional(),
13461
- fileNumber: zodOpenapi.z.string().optional(),
13462
- websiteUrl: zodOpenapi.z.string().optional(),
13463
- vatPayer: zodOpenapi.z.boolean(),
13464
- companyObjectsDescription: zodOpenapi.z.string(),
13465
- turnover3years: zodOpenapi.z.number(),
13466
- operationCountries: zodOpenapi.z.string(),
13467
- riskyBusinessType: zodOpenapi.z.string().optional()
13696
+ holderName: zodOpenapi.z.string(),
13697
+ number: zodOpenapi.z.string().optional(),
13698
+ currency: bankAccountMetadataSchema.shape.currency.nonoptional(),
13699
+ countryCode: bankAccountMetadataSchema.shape.countryCode.nonoptional(),
13700
+ id: bankAccountMetadataSchema.shape.id.nonoptional()
13701
+ });
13702
+ const disponentUpdateSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13703
+ zodOpenapi.z.object({
13704
+ partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13705
+ data: individualUpdateSchema
13706
+ }),
13707
+ zodOpenapi.z.object({
13708
+ partyType: zodOpenapi.z.literal("ORGANIZATION"),
13709
+ data: organizationUpdateSchema
13710
+ })
13711
+ ]);
13712
+ const updateAddressInputSchema = zodOpenapi.z.object({
13713
+ id: zodOpenapi.z.uuid(),
13714
+ partyId: zodOpenapi.z.uuid(),
13715
+ internalId: zodOpenapi.z.string().optional(),
13716
+ addressType: zodOpenapi.z.enum(ADDRESS_TYPE),
13717
+ street: zodOpenapi.z.string(),
13718
+ orientationNumber: zodOpenapi.z.string().optional(),
13719
+ descriptiveNumber: zodOpenapi.z.string().optional(),
13720
+ municipality: zodOpenapi.z.string().max(255),
13721
+ municipalityPart: zodOpenapi.z.string().optional(),
13722
+ zipCode: zodOpenapi.z.string().max(20),
13723
+ district: zodOpenapi.z.string().max(255),
13724
+ region: zodOpenapi.z.string().max(255),
13725
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13726
+ ruianCode: zodOpenapi.z.string().optional()
13727
+ });
13728
+ const updateAmlInputSchema = zodOpenapi.z.object({
13729
+ id: zodOpenapi.z.uuid(),
13730
+ partyId: zodOpenapi.z.uuid().optional(),
13731
+ internalId: zodOpenapi.z.string().optional(),
13732
+ sourceOfWealth: zodOpenapi.z.string().optional(),
13733
+ yearlyIncome: zodOpenapi.z.string().optional(),
13734
+ tradesPurpose: zodOpenapi.z.string().optional(),
13735
+ sourceOfIncome: zodOpenapi.z.string().optional(),
13736
+ transactionType: zodOpenapi.z.string().optional(),
13737
+ transactionTypeExpiry: zodOpenapi.z.date().optional(),
13738
+ isDistraint: zodOpenapi.z.boolean().optional(),
13739
+ estTxsVolumeMonth: zodOpenapi.z.string(),
13740
+ estTxsVolumeYear: zodOpenapi.z.string(),
13741
+ tradingCountries: zodOpenapi.z.string(),
13742
+ tradingSide: zodOpenapi.z.string(),
13743
+ acceptedAMLTermsAndConditions: zodOpenapi.z.boolean(),
13744
+ signatureMethod: zodOpenapi.z.string().optional(),
13745
+ existencePeriod: zodOpenapi.z.string().optional(),
13746
+ reputation: zodOpenapi.z.string().optional(),
13747
+ riskLevel: zodOpenapi.z.enum(AML_SCORE_TYPE).optional(),
13748
+ kycStatus: zodOpenapi.z.enum(KYC_STATUS).optional()
13749
+ });
13750
+ const productsInputSchema = zodOpenapi.z.object({
13751
+ txs: zodOpenapi.z.object({
13752
+ fee: zodOpenapi.z.number(),
13753
+ margin: zodOpenapi.z.number(),
13754
+ reportingEmail: zodOpenapi.z.string().optional(),
13755
+ clientType: zodOpenapi.z.enum(TXS_CLIENT_TYPE).optional()
13756
+ }).optional(),
13757
+ cbs: zodOpenapi.z.object({}).optional()
13758
+ });
13759
+ const partyUpdateInputSchema = zodOpenapi.z.object({
13760
+ party: partySchema,
13761
+ personalData: individualUpdateSchema.nullable(),
13762
+ organizationData: organizationUpdateSchema.nullable(),
13763
+ bankAccounts: zodOpenapi.z.array(updateBankAccountSchema),
13764
+ disponents: zodOpenapi.z.array(disponentUpdateSchema).optional(),
13765
+ addresses: zodOpenapi.z.array(updateAddressInputSchema),
13766
+ recipients: zodOpenapi.z.array(updateBankAccountSchema).nullable(),
13767
+ aml: updateAmlInputSchema.optional(),
13768
+ products: productsInputSchema.optional()
13769
+ });
13770
+ const updatePartyOuputSchema = zodOpenapi.z.object({
13771
+ id: zodOpenapi.z.uuid(),
13772
+ customerStatus: zodOpenapi.z.enum(CUSTOMER_STATUS),
13773
+ partyType: zodOpenapi.z.enum(PARTY_TYPE),
13774
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13775
+ note: zodOpenapi.z.string().nullable(),
13776
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable()
13777
+ });
13778
+ const responseBodySchema$4 = zodOpenapi.z.object({
13779
+ message: zodOpenapi.z.string(),
13780
+ party: updatePartyOuputSchema
13781
+ });
13782
+ const updatePartyRoute = zodOpenapi.createRoute({
13783
+ method: "put",
13784
+ path: "/{partyId}",
13785
+ summary: "Update party",
13786
+ tags: ["Parties"],
13787
+ security: [
13788
+ {
13789
+ JwtAuth: []
13790
+ }
13791
+ ],
13792
+ request: {
13793
+ params: zodOpenapi.z.object({ partyId: zodOpenapi.z.uuid() }),
13794
+ body: {
13795
+ content: {
13796
+ "application/json": {
13797
+ schema: partyUpdateInputSchema
13798
+ }
13799
+ },
13800
+ required: true
13801
+ }
13802
+ },
13803
+ responses: {
13804
+ 200: {
13805
+ content: {
13806
+ "application/json": {
13807
+ schema: responseBodySchema$4
13808
+ }
13809
+ },
13810
+ description: "Updates a Party."
13811
+ },
13812
+ ...errorResponse("Party", "Update")
13813
+ }
13814
+ });
13815
+ new zodOpenapi.OpenAPIHono().openapi(
13816
+ updatePartyRoute,
13817
+ async (context) => {
13818
+ const party = context.req.valid("json");
13819
+ const { partyId } = context.req.valid("param");
13820
+ const { data: updatedParty, error: partyError } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.updateParty({
13821
+ partyId,
13822
+ party: party.party,
13823
+ personalData: party.personalData ?? void 0,
13824
+ organizationData: party.organizationData ?? void 0,
13825
+ bankAccounts: party.bankAccounts ?? void 0,
13826
+ disponents: party.disponents ?? void 0,
13827
+ addresses: party.addresses ?? void 0,
13828
+ recipients: party.recipients ?? void 0,
13829
+ aml: party.aml ?? void 0,
13830
+ products: party.products ?? void 0
13831
+ });
13832
+ if (!updatedParty || partyError) {
13833
+ return context.json({ message: "Could not update a Party" }, 404);
13834
+ }
13835
+ return context.json(
13836
+ {
13837
+ message: "Party updated successfully",
13838
+ party: updatedParty
13839
+ },
13840
+ 200
13841
+ );
13842
+ }
13843
+ );
13844
+
13845
+ const partyBaseOutputSchema = zodOpenapi.z.object({
13846
+ customerStatus: zodOpenapi.z.enum(CUSTOMER_STATUS),
13847
+ partyType: zodOpenapi.z.enum(PARTY_TYPE),
13848
+ language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13849
+ id: zodOpenapi.z.uuid(),
13850
+ internalId: zodOpenapi.z.string().nullable(),
13851
+ note: zodOpenapi.z.string().nullable(),
13852
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13853
+ createdAt: zodOpenapi.z.date().nullable(),
13854
+ updatedAt: zodOpenapi.z.date().nullable(),
13855
+ isClient: zodOpenapi.z.boolean()
13856
+ });
13857
+ const individualOutputSchema = zodOpenapi.z.object({
13858
+ id: zodOpenapi.z.uuid(),
13859
+ partyId: zodOpenapi.z.uuid(),
13860
+ internalId: zodOpenapi.z.string().nullable(),
13861
+ name: zodOpenapi.z.string(),
13862
+ surname: zodOpenapi.z.string(),
13863
+ email: zodOpenapi.z.string().nullable(),
13864
+ phone: zodOpenapi.z.string().nullable(),
13865
+ birthDate: zodOpenapi.z.string().nullable(),
13866
+ birthPlace: zodOpenapi.z.string(),
13867
+ countryOfBirth: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13868
+ personalId: zodOpenapi.z.string(),
13869
+ gender: zodOpenapi.z.enum(GENDER),
13870
+ citizenship: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13871
+ citizenshipOther: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13872
+ employer: zodOpenapi.z.string().nullable(),
13873
+ employerCountry: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13874
+ registeredNumber: zodOpenapi.z.string(),
13875
+ isPep: zodOpenapi.z.boolean(),
13876
+ titleBefore: zodOpenapi.z.string().nullable(),
13877
+ titleAfter: zodOpenapi.z.string().nullable(),
13878
+ birthSurname: zodOpenapi.z.string().nullable(),
13879
+ vocativeTitle: zodOpenapi.z.string().nullable(),
13880
+ deathDate: zodOpenapi.z.coerce.date().nullable(),
13881
+ deathNotification: zodOpenapi.z.coerce.date().nullable(),
13882
+ pin: zodOpenapi.z.string().nullable(),
13883
+ stayAbroad: zodOpenapi.z.boolean().nullable(),
13884
+ stayAbroadCountries: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13885
+ createdAt: zodOpenapi.z.coerce.date().nullable(),
13886
+ updatedAt: zodOpenapi.z.coerce.date().nullable()
13468
13887
  });
13469
13888
  const createOrganizationOutputSchema = zodOpenapi.z.object({
13470
13889
  partyId: zodOpenapi.z.uuid(),
@@ -13492,53 +13911,6 @@ const createOrganizationOutputSchema = zodOpenapi.z.object({
13492
13911
  operationCountries: zodOpenapi.z.string(),
13493
13912
  riskyBusinessType: zodOpenapi.z.string().nullable()
13494
13913
  });
13495
-
13496
- const disponentSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13497
- zodOpenapi.z.object({
13498
- partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13499
- data: individualInsertSchema.omit({ partyId: true })
13500
- }),
13501
- zodOpenapi.z.object({
13502
- partyType: zodOpenapi.z.literal("ORGANIZATION"),
13503
- data: createOrganizationInputSchema.omit({ partyId: true })
13504
- })
13505
- ]);
13506
- const disponentUpdateSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13507
- zodOpenapi.z.object({
13508
- partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13509
- data: individualUpdateSchema
13510
- }),
13511
- zodOpenapi.z.object({
13512
- partyType: zodOpenapi.z.literal("ORGANIZATION"),
13513
- data: organizationUpdateSchema
13514
- })
13515
- ]);
13516
- const disponentOutputSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13517
- zodOpenapi.z.object({
13518
- partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13519
- data: individualOutputSchema.nullable()
13520
- }),
13521
- zodOpenapi.z.object({
13522
- partyType: zodOpenapi.z.literal("ORGANIZATION"),
13523
- data: createOrganizationOutputSchema.nullable()
13524
- })
13525
- ]);
13526
-
13527
- const updateBankAccountSchema = zodOpenapi.z.object({
13528
- ...bankAccountMetadataSchema.shape,
13529
- partyId: zodOpenapi.z.uuid(),
13530
- internalId: zodOpenapi.z.string().optional(),
13531
- holderName: zodOpenapi.z.string(),
13532
- number: zodOpenapi.z.string().optional(),
13533
- currency: bankAccountMetadataSchema.shape.currency.nonoptional(),
13534
- countryCode: bankAccountMetadataSchema.shape.countryCode.nonoptional(),
13535
- id: bankAccountMetadataSchema.shape.id.nonoptional()
13536
- });
13537
- const bankAccountInputSchema = updateBankAccountSchema.required({
13538
- holderName: true,
13539
- currency: true,
13540
- countryCode: true
13541
- }).omit({ id: true, partyId: true });
13542
13914
  const bankAccountOutputSchema = zodOpenapi.z.object({
13543
13915
  id: zodOpenapi.z.string(),
13544
13916
  partyId: zodOpenapi.z.uuid(),
@@ -13559,49 +13931,33 @@ const bankAccountOutputSchema = zodOpenapi.z.object({
13559
13931
  brBankNumber: zodOpenapi.z.string().nullable(),
13560
13932
  updatedAt: zodOpenapi.z.coerce.date().nullable()
13561
13933
  });
13562
-
13563
- const createAmlInputSchema = zodOpenapi.z.object({
13564
- partyId: zodOpenapi.z.uuid(),
13565
- internalId: zodOpenapi.z.string().optional(),
13566
- sourceOfWealth: zodOpenapi.z.string(),
13567
- yearlyIncome: zodOpenapi.z.string(),
13568
- tradesPurpose: zodOpenapi.z.string().optional(),
13569
- sourceOfIncome: zodOpenapi.z.string(),
13570
- transactionType: zodOpenapi.z.string().optional(),
13571
- transactionTypeExpiry: zodOpenapi.z.date().optional(),
13572
- isDistraint: zodOpenapi.z.boolean().default(false),
13573
- estTxsVolumeMonth: zodOpenapi.z.string(),
13574
- estTxsVolumeYear: zodOpenapi.z.string(),
13575
- tradingCountries: zodOpenapi.z.string(),
13576
- tradingSide: zodOpenapi.z.string(),
13577
- acceptedAMLTermsAndConditions: zodOpenapi.z.boolean(),
13578
- signatureMethod: zodOpenapi.z.string().optional(),
13579
- existencePeriod: zodOpenapi.z.string().optional(),
13580
- reputation: zodOpenapi.z.string().optional(),
13581
- riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod$1).optional(),
13582
- kycStatus: zodOpenapi.z.enum(KycStatusZod$1).optional()
13583
- });
13584
- const updateAmlInputSchema = zodOpenapi.z.object({
13934
+ const disponentOutputSchema = zodOpenapi.z.discriminatedUnion("partyType", [
13935
+ zodOpenapi.z.object({
13936
+ partyType: zodOpenapi.z.literal("INDIVIDUAL"),
13937
+ data: individualOutputSchema.nullable()
13938
+ }),
13939
+ zodOpenapi.z.object({
13940
+ partyType: zodOpenapi.z.literal("ORGANIZATION"),
13941
+ data: createOrganizationOutputSchema.nullable()
13942
+ })
13943
+ ]);
13944
+ const createAddressOutputSchema = zodOpenapi.z.object({
13585
13945
  id: zodOpenapi.z.uuid(),
13586
- partyId: zodOpenapi.z.uuid().optional(),
13587
- internalId: zodOpenapi.z.string().optional(),
13588
- sourceOfWealth: zodOpenapi.z.string().optional(),
13589
- yearlyIncome: zodOpenapi.z.string().optional(),
13590
- tradesPurpose: zodOpenapi.z.string().optional(),
13591
- sourceOfIncome: zodOpenapi.z.string().optional(),
13592
- transactionType: zodOpenapi.z.string().optional(),
13593
- transactionTypeExpiry: zodOpenapi.z.date().optional(),
13594
- isDistraint: zodOpenapi.z.boolean().optional(),
13595
- estTxsVolumeMonth: zodOpenapi.z.string(),
13596
- estTxsVolumeYear: zodOpenapi.z.string(),
13597
- tradingCountries: zodOpenapi.z.string(),
13598
- tradingSide: zodOpenapi.z.string(),
13599
- acceptedAMLTermsAndConditions: zodOpenapi.z.boolean(),
13600
- signatureMethod: zodOpenapi.z.string().optional(),
13601
- existencePeriod: zodOpenapi.z.string().optional(),
13602
- reputation: zodOpenapi.z.string().optional(),
13603
- riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod$1).optional(),
13604
- kycStatus: zodOpenapi.z.enum(KycStatusZod$1).optional()
13946
+ partyId: zodOpenapi.z.uuid(),
13947
+ internalId: zodOpenapi.z.string().nullable(),
13948
+ addressType: zodOpenapi.z.enum(ADDRESS_TYPE),
13949
+ street: zodOpenapi.z.string().nullable(),
13950
+ orientationNumber: zodOpenapi.z.string().nullable(),
13951
+ descriptiveNumber: zodOpenapi.z.string().nullable(),
13952
+ municipality: zodOpenapi.z.string(),
13953
+ municipalityPart: zodOpenapi.z.string().nullable(),
13954
+ zipCode: zodOpenapi.z.string(),
13955
+ district: zodOpenapi.z.string().nullable(),
13956
+ region: zodOpenapi.z.string().nullable(),
13957
+ countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13958
+ ruianCode: zodOpenapi.z.string().nullable(),
13959
+ createdAt: zodOpenapi.z.date().nullable(),
13960
+ updatedAt: zodOpenapi.z.date().nullable()
13605
13961
  });
13606
13962
  const createAmlOutputSchema = zodOpenapi.z.object({
13607
13963
  id: zodOpenapi.z.uuid(),
@@ -13622,142 +13978,200 @@ const createAmlOutputSchema = zodOpenapi.z.object({
13622
13978
  signatureMethod: zodOpenapi.z.string().nullable(),
13623
13979
  existencePeriod: zodOpenapi.z.string().nullable(),
13624
13980
  reputation: zodOpenapi.z.string().nullable(),
13625
- riskLevel: zodOpenapi.z.enum(AmlScoreTypeZod$1),
13626
- kycStatus: zodOpenapi.z.enum(KycStatusZod$1).nullable(),
13627
- createdAt: zodOpenapi.z.date().nullable(),
13628
- updatedAt: zodOpenapi.z.date().nullable()
13629
- });
13630
-
13631
- const createAddressInputSchema = zodOpenapi.z.object({
13632
- partyId: zodOpenapi.z.uuid(),
13633
- addressType: zodOpenapi.z.enum(AddressTypeZod),
13634
- internalId: zodOpenapi.z.string().optional(),
13635
- street: zodOpenapi.z.string(),
13636
- orientationNumber: zodOpenapi.z.string().optional(),
13637
- descriptiveNumber: zodOpenapi.z.string().optional(),
13638
- municipality: zodOpenapi.z.string().max(255),
13639
- municipalityPart: zodOpenapi.z.string().optional(),
13640
- zipCode: zodOpenapi.z.string().max(20),
13641
- district: zodOpenapi.z.string().max(255),
13642
- region: zodOpenapi.z.string().max(255),
13643
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13644
- ruianCode: zodOpenapi.z.string().optional()
13645
- });
13646
- const createAddressOutputSchema = zodOpenapi.z.object({
13647
- id: zodOpenapi.z.uuid(),
13648
- partyId: zodOpenapi.z.uuid(),
13649
- internalId: zodOpenapi.z.string().nullable(),
13650
- addressType: zodOpenapi.z.enum(AddressTypeZod),
13651
- street: zodOpenapi.z.string().nullable(),
13652
- orientationNumber: zodOpenapi.z.string().nullable(),
13653
- descriptiveNumber: zodOpenapi.z.string().nullable(),
13654
- municipality: zodOpenapi.z.string(),
13655
- municipalityPart: zodOpenapi.z.string().nullable(),
13656
- zipCode: zodOpenapi.z.string(),
13657
- district: zodOpenapi.z.string().nullable(),
13658
- region: zodOpenapi.z.string().nullable(),
13659
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13660
- ruianCode: zodOpenapi.z.string().nullable(),
13661
- createdAt: zodOpenapi.z.date().nullable(),
13662
- updatedAt: zodOpenapi.z.date().nullable()
13663
- });
13664
- const updateAddressInputSchema = zodOpenapi.z.object({
13665
- id: zodOpenapi.z.uuid(),
13666
- partyId: zodOpenapi.z.uuid(),
13667
- internalId: zodOpenapi.z.string().optional(),
13668
- addressType: zodOpenapi.z.enum(AddressTypeZod),
13669
- street: zodOpenapi.z.string(),
13670
- orientationNumber: zodOpenapi.z.string().optional(),
13671
- descriptiveNumber: zodOpenapi.z.string().optional(),
13672
- municipality: zodOpenapi.z.string().max(255),
13673
- municipalityPart: zodOpenapi.z.string().optional(),
13674
- zipCode: zodOpenapi.z.string().max(20),
13675
- district: zodOpenapi.z.string().max(255),
13676
- region: zodOpenapi.z.string().max(255),
13677
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2),
13678
- ruianCode: zodOpenapi.z.string().optional()
13679
- });
13680
-
13681
- const partySchema = zodOpenapi.z.object({
13682
- partyType: zodOpenapi.z.enum(PartyTypeZod),
13683
- language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13684
- id: zodOpenapi.z.uuid(),
13685
- internalId: zodOpenapi.z.string().optional(),
13686
- note: zodOpenapi.z.string().optional(),
13687
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional()
13688
- });
13689
- const partyCreateOutputSchema = zodOpenapi.z.object({
13690
- customerStatus: zodOpenapi.z.enum(CustomerStatusZod),
13691
- partyType: zodOpenapi.z.enum(PartyTypeZod),
13692
- language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13693
- id: zodOpenapi.z.uuid(),
13694
- internalId: zodOpenapi.z.string().nullable(),
13695
- note: zodOpenapi.z.string().nullable(),
13696
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13697
- createdAt: zodOpenapi.z.date().nullable(),
13698
- updatedAt: zodOpenapi.z.date().nullable()
13699
- });
13700
- zodOpenapi.z.object({
13701
- customerStatus: zodOpenapi.z.enum(CustomerStatusZod),
13702
- partyType: zodOpenapi.z.enum(PartyTypeZod),
13703
- language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13704
- id: zodOpenapi.z.uuid(),
13705
- internalId: zodOpenapi.z.string().nullable(),
13706
- note: zodOpenapi.z.string().nullable(),
13707
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13981
+ riskLevel: zodOpenapi.z.enum(AML_SCORE_TYPE),
13982
+ kycStatus: zodOpenapi.z.enum(KYC_STATUS).nullable(),
13708
13983
  createdAt: zodOpenapi.z.date().nullable(),
13709
13984
  updatedAt: zodOpenapi.z.date().nullable()
13710
13985
  });
13711
- const createPartyInputSchema = zodOpenapi.z.object({
13712
- party: partySchema.omit({ id: true }),
13713
- personalData: individualInsertSchema.omit({ partyId: true }).nullable(),
13714
- organizationData: createOrganizationInputSchema.omit({ partyId: true }).nullable(),
13715
- bankAccounts: zodOpenapi.z.array(bankAccountInputSchema),
13716
- disponents: zodOpenapi.z.array(disponentSchema),
13717
- addresses: zodOpenapi.z.array(createAddressInputSchema.omit({ partyId: true })),
13718
- aml: createAmlInputSchema.omit({ partyId: true }),
13719
- recipients: zodOpenapi.z.array(bankAccountInputSchema)
13986
+ const productsOutputSchema = zodOpenapi.z.object({
13987
+ txs: zodOpenapi.z.object({
13988
+ fee: zodOpenapi.z.number(),
13989
+ margin: zodOpenapi.z.number(),
13990
+ reportingEmail: zodOpenapi.z.string().nullable(),
13991
+ clientType: zodOpenapi.z.enum(TXS_CLIENT_TYPE).nullable()
13992
+ }).nullable(),
13993
+ cbs: zodOpenapi.z.object({}).nullable()
13720
13994
  });
13721
13995
  const partyOutputSchema = zodOpenapi.z.object({
13722
- party: partyCreateOutputSchema.extend({
13723
- id: zodOpenapi.z.uuid(),
13724
- isClient: zodOpenapi.z.boolean()
13725
- }).nullable(),
13996
+ party: partyBaseOutputSchema.nullable(),
13726
13997
  personalData: individualOutputSchema.nullable(),
13727
13998
  organizationData: createOrganizationOutputSchema.nullable(),
13728
13999
  bankAccounts: zodOpenapi.z.array(bankAccountOutputSchema).nullable(),
13729
14000
  disponents: zodOpenapi.z.array(disponentOutputSchema).nullable(),
13730
14001
  addresses: zodOpenapi.z.array(createAddressOutputSchema).nullable(),
13731
14002
  aml: createAmlOutputSchema.nullable(),
13732
- recipients: zodOpenapi.z.array(bankAccountOutputSchema).nullable()
14003
+ recipients: zodOpenapi.z.array(bankAccountOutputSchema).nullable(),
14004
+ products: productsOutputSchema.nullable()
14005
+ });
14006
+ const responseBodySchema$3 = zodOpenapi.z.object({
14007
+ message: zodOpenapi.z.string(),
14008
+ party: partyOutputSchema
14009
+ });
14010
+ const getPartyByPartyIdRoute = zodOpenapi.createRoute({
14011
+ method: "get",
14012
+ path: "/{partyId}",
14013
+ summary: "Get party",
14014
+ tags: ["Parties"],
14015
+ request: {
14016
+ params: zodOpenapi.z.object({ partyId: zodOpenapi.z.uuid() })
14017
+ },
14018
+ responses: {
14019
+ 200: {
14020
+ content: {
14021
+ "application/json": {
14022
+ schema: responseBodySchema$3
14023
+ }
14024
+ },
14025
+ description: "Get party by party Id"
14026
+ },
14027
+ ...errorResponse("party", "Get")
14028
+ }
13733
14029
  });
13734
- const partiesOutputDataSchema = zodOpenapi.z.array(partyOutputSchema);
13735
- const partyUpdateInputSchema = zodOpenapi.z.object({
13736
- party: partySchema,
13737
- personalData: individualUpdateSchema.nullable(),
13738
- organizationData: organizationUpdateSchema.nullable(),
13739
- bankAccounts: zodOpenapi.z.array(updateBankAccountSchema),
13740
- disponents: zodOpenapi.z.array(disponentUpdateSchema).optional(),
13741
- addresses: zodOpenapi.z.array(updateAddressInputSchema),
13742
- recipients: zodOpenapi.z.array(updateBankAccountSchema).nullable(),
13743
- aml: updateAmlInputSchema.optional()
14030
+ new zodOpenapi.OpenAPIHono().openapi(
14031
+ getPartyByPartyIdRoute,
14032
+ async (context) => {
14033
+ const { partyId } = context.req.valid("param");
14034
+ const { data: partyData, error: partyError } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.getParty({ partyId });
14035
+ if (partyData == null || partyError) {
14036
+ return context.json({ message: "Party not found" }, 404);
14037
+ }
14038
+ return context.json(
14039
+ {
14040
+ message: "Party Found",
14041
+ party: partyData
14042
+ },
14043
+ 200
14044
+ );
14045
+ }
14046
+ );
14047
+
14048
+ const paginationSchema = zodOpenapi.z.object({
14049
+ offset: zodOpenapi.z.number().default(1),
14050
+ limit: zodOpenapi.z.number().default(10)
13744
14051
  });
13745
- const updatePartyOuputSchema = zodOpenapi.z.object({
13746
- id: zodOpenapi.z.uuid(),
13747
- customerStatus: zodOpenapi.z.enum(CustomerStatusZod),
13748
- partyType: zodOpenapi.z.enum(PartyTypeZod),
13749
- language: zodOpenapi.z.enum(generalCodes.LANGUAGE_CODES),
13750
- note: zodOpenapi.z.string().nullable(),
13751
- countryCode: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable()
14052
+ const paginationAndSearchSchema = zodOpenapi.z.object({
14053
+ page: zodOpenapi.z.coerce.number().positive().default(1),
14054
+ limit: zodOpenapi.z.coerce.number().positive().default(20),
14055
+ column: zodOpenapi.z.string(),
14056
+ direction: zodOpenapi.z.enum(["asc", "desc"]),
14057
+ search: zodOpenapi.z.string().optional(),
14058
+ ids: zodOpenapi.z.string().array().optional()
14059
+ });
14060
+ paginationSchema.extend({
14061
+ partyId: zodOpenapi.z.uuid()
13752
14062
  });
14063
+ paginationSchema.extend({
14064
+ id: zodOpenapi.z.uuid()
14065
+ });
14066
+ zodOpenapi.z.object({ partyId: zodOpenapi.z.uuid() });
13753
14067
 
14068
+ const partiesOutputDataSchema = zodOpenapi.z.array(partyOutputSchema);
14069
+ const getPartiesRoute = zodOpenapi.createRoute({
14070
+ method: "get",
14071
+ path: "/",
14072
+ summary: "List parties",
14073
+ tags: ["Parties"],
14074
+ request: { query: paginationAndSearchSchema },
14075
+ responses: {
14076
+ 500: {
14077
+ description: "Internal Server Error",
14078
+ content: {
14079
+ "application/json": {
14080
+ schema: routeError
14081
+ }
14082
+ }
14083
+ },
14084
+ 200: {
14085
+ content: {
14086
+ "application/json": {
14087
+ schema: zodOpenapi.z.object({
14088
+ message: zodOpenapi.z.string(),
14089
+ data: zodOpenapi.z.object({
14090
+ parties: partiesOutputDataSchema,
14091
+ totalCount: zodOpenapi.z.number()
14092
+ })
14093
+ })
14094
+ }
14095
+ },
14096
+ description: "Get Parties."
14097
+ }
14098
+ }
14099
+ });
14100
+ new zodOpenapi.OpenAPIHono().openapi(
14101
+ getPartiesRoute,
14102
+ async (context) => {
14103
+ const query = context.req.query();
14104
+ const validatedQuery = {
14105
+ page: query.page ? Number(query.page) : 1,
14106
+ limit: query.limit ? Number(query.limit) : 10,
14107
+ column: query.column || "createdAt",
14108
+ direction: query.direction || "desc",
14109
+ search: query.search,
14110
+ ids: query.ids ? Array.isArray(query.ids) ? query.ids : [query.ids] : void 0
14111
+ };
14112
+ const {
14113
+ data: parties,
14114
+ error,
14115
+ message,
14116
+ status
14117
+ } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.getParties(
14118
+ validatedQuery
14119
+ );
14120
+ if (error || !parties) {
14121
+ return context.json(
14122
+ {
14123
+ message: "Failed to get parties",
14124
+ data: null,
14125
+ errorDetail: {
14126
+ message,
14127
+ code: status
14128
+ },
14129
+ error: true
14130
+ },
14131
+ 500
14132
+ );
14133
+ }
14134
+ return context.json({ message, data: parties }, 200);
14135
+ }
14136
+ );
14137
+
14138
+ const DOCUMENT_SIDE = ["front", "back"];
14139
+ const paramsSchema$2 = zodOpenapi.z.object({
14140
+ partyId: zodOpenapi.z.uuid()
14141
+ });
14142
+ const idDocumentCreateInputSchema = zodOpenapi.z.object({
14143
+ partyId: zodOpenapi.z.uuid(),
14144
+ idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
14145
+ idDocNumber: zodOpenapi.z.string(),
14146
+ idDocHolderName: zodOpenapi.z.string(),
14147
+ issueDate: zodOpenapi.z.coerce.date().optional(),
14148
+ expirationDate: zodOpenapi.z.coerce.date().optional(),
14149
+ issuer: zodOpenapi.z.string().optional(),
14150
+ countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
14151
+ idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).optional()
14152
+ });
14153
+ const idDocumentMultipartSchema = zodOpenapi.z.object({
14154
+ idDocument: zodOpenapi.z.string(),
14155
+ documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
14156
+ file: zodOpenapi.z.any()
14157
+ });
14158
+ const multipartOpenApiSchema = zodOpenapi.z.object({
14159
+ idDocument: zodOpenapi.z.string().openapi({
14160
+ description: "JSON stringified IdDocument payload"
14161
+ }),
14162
+ documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
14163
+ file: zodOpenapi.z.any().openapi({
14164
+ type: "string",
14165
+ format: "binary"
14166
+ })
14167
+ });
13754
14168
  const idDocumentOutputSchema = zodOpenapi.z.object({
13755
14169
  id: zodOpenapi.z.uuid(),
13756
14170
  createdAt: zodOpenapi.z.iso.datetime().nullable(),
13757
14171
  updatedAt: zodOpenapi.z.iso.datetime().nullable(),
13758
14172
  deletedAt: zodOpenapi.z.iso.datetime().nullable(),
13759
14173
  partyId: zodOpenapi.z.uuid(),
13760
- idDocType: zodOpenapi.z.enum(IdDocTypeZod),
14174
+ idDocType: zodOpenapi.z.enum(ID_DOC_TYPE),
13761
14175
  idDocNumber: zodOpenapi.z.string(),
13762
14176
  idDocHolderName: zodOpenapi.z.string(),
13763
14177
  issueDate: zodOpenapi.z.iso.datetime().nullable(),
@@ -13766,27 +14180,428 @@ const idDocumentOutputSchema = zodOpenapi.z.object({
13766
14180
  countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).nullable(),
13767
14181
  frontImageUri: zodOpenapi.z.string().nullable(),
13768
14182
  backImageUri: zodOpenapi.z.string().nullable(),
13769
- idDocStatus: zodOpenapi.z.enum(IdDocStatusZod).nullable()
14183
+ idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).nullable()
14184
+ });
14185
+ const responseBodySchema$2 = zodOpenapi.z.object({
14186
+ message: zodOpenapi.z.string(),
14187
+ idDocument: idDocumentOutputSchema
14188
+ });
14189
+ const createDocumentRoute = zodOpenapi.createRoute({
14190
+ method: "post",
14191
+ path: "/{partyId}/id-documents",
14192
+ summary: "Create ID document and upload file",
14193
+ tags: ["Documents"],
14194
+ // middleware: [jwt, signature(), idempotency()],
14195
+ // security: [{ JwtAuth: [] }],
14196
+ request: {
14197
+ // headers: z.object({
14198
+ // 'X-Idempotency-Key': XIdempotencyKeyHeaderSchema,
14199
+ // 'X-Signature': XSignatureHeaderSchema,
14200
+ // 'X-Signature-Key': XSignatureKeyHeaderSchema,
14201
+ // }),
14202
+ body: {
14203
+ content: {
14204
+ "multipart/form-data": {
14205
+ schema: multipartOpenApiSchema
14206
+ }
14207
+ },
14208
+ required: true
14209
+ },
14210
+ params: paramsSchema$2
14211
+ },
14212
+ responses: {
14213
+ 200: {
14214
+ description: "Document created and file uploaded",
14215
+ content: {
14216
+ "application/json": {
14217
+ schema: responseBodySchema$2
14218
+ }
14219
+ }
14220
+ },
14221
+ 400: {
14222
+ description: "Invalid request",
14223
+ content: {
14224
+ "application/json": {
14225
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14226
+ }
14227
+ }
14228
+ },
14229
+ 500: {
14230
+ description: "Internal server error",
14231
+ content: {
14232
+ "application/json": {
14233
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14234
+ }
14235
+ }
14236
+ }
14237
+ }
14238
+ });
14239
+ new zodOpenapi.OpenAPIHono().openapi(
14240
+ createDocumentRoute,
14241
+ async (context) => {
14242
+ const rawBody = await context.req.parseBody();
14243
+ const { partyId } = await context.req.param();
14244
+ const idDocumentRaw = rawBody.idDocument;
14245
+ const documentSide = rawBody.documentSide;
14246
+ const file = rawBody.file;
14247
+ if (typeof idDocumentRaw !== "string" || !DOCUMENT_SIDE.includes(documentSide) || !(file instanceof File)) {
14248
+ return context.json({ message: "Invalid multipart payload" }, 400);
14249
+ }
14250
+ const idDocumentJson = JSON.parse(JSON.parse(idDocumentRaw));
14251
+ const idDocumentResult = idDocumentCreateInputSchema.safeParse(idDocumentJson);
14252
+ if (!idDocumentResult.success) {
14253
+ console.error(idDocumentResult.error);
14254
+ return context.json({ message: "Could not parse IdDocument" }, 400);
14255
+ }
14256
+ const {
14257
+ data: createdIdDocument,
14258
+ error: createError,
14259
+ message
14260
+ } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.createIdDocument({
14261
+ idDocument: idDocumentResult.data,
14262
+ partyId
14263
+ });
14264
+ if (!createdIdDocument || createError) {
14265
+ console.error(message);
14266
+ return context.json({ message: "Could not create IdDocument" }, 500);
14267
+ }
14268
+ const bytes = new Uint8Array(await file.arrayBuffer());
14269
+ const { data: uploadResult, error: uploadError } = await context.env.DOCUMENT_SERVICE.uploadDocument({
14270
+ entityType: "client",
14271
+ entityId: createdIdDocument.id,
14272
+ type: "kyc",
14273
+ metadata: {},
14274
+ file: {
14275
+ bytes,
14276
+ type: file.type,
14277
+ name: file.name,
14278
+ size: file.size
14279
+ }
14280
+ });
14281
+ if (!uploadResult || uploadError) {
14282
+ return context.json({ message: "File upload failed" }, 500);
14283
+ }
14284
+ return context.json(
14285
+ {
14286
+ message: "IdDocument created successfully",
14287
+ idDocument: {
14288
+ ...createdIdDocument,
14289
+ frontImageUri: documentSide === "front" ? uploadResult.storageUrl : createdIdDocument.frontImageUri,
14290
+ backImageUri: documentSide === "back" ? uploadResult.storageUrl : createdIdDocument.backImageUri
14291
+ }
14292
+ },
14293
+ 200
14294
+ );
14295
+ }
14296
+ );
14297
+
14298
+ const XIdempotencyKeyHeaderSchema = zodOpenapi.z.string().openapi({
14299
+ description: "Unique identifier header to ensure the request is processed only once.",
14300
+ example: "4ac15c22-2bd3-426f-b915-bfd5febdb7df"
13770
14301
  });
14302
+ const XSignatureHeaderSchema = zodOpenapi.z.string().openapi({
14303
+ description: "Payload signature header to verify request body integrity.",
14304
+ example: "FIXAxHO6QqH3M7t4MatM8U6l/nIqWj7jIEW2U6/771MGUorSywy+GmKIG3B1mxT1jR7qPtBHQ5YSO8O53iCvOh6kIhbGXtVe/3C61dsEykLbmntV3nF4DY8/HyfF8a6c2Asc5bvgHrhosGi3s/ouoNowMpsckyq66We8H5gRbXlqJm4Bl1zWWQah4aQLX548L8DLx5+EIgArNMVVG8ryCES99aovJBKrQQMpQLwss1sSFuUZ1kdBCodtvxgTOXOugnZ1UNCmUNFXryQ6bn7wY7Punml/rwR/zTQ9j4SX07iFeQC5rgm9/zi29DBluegu+b8/G8oXrf6L4hugbMEKJfLRfKjNHCrjCooKtInoYxwNEfJyJ9mhqdBoeIBca9zgPpewdbwFLXVV82TYR+xZiywDcHKQ62IzQp07NOMCl4xArSJ3vIWUftSYpLIwomyjQEbY27oGiubUF4krEKgHnMYalCn0ruYOwFik2Pa6FEfIZo0TSXDC24UHQb5mJNPYpv2hny7U5CZPmBvjaRGMVnE+WgRUT19cwqlSL3pWAfeSn1Wro7lYBp/PmlRPgYIxl9GJwNlQ0G+NzP9cMSJbmI5fwErDNgJAaPaMwZbJ3y8ikmbBkkXNPKvQrWVGCJ4nP+/f8yYzMZq272EFx984pSoo2yAeBJnrxbW+AlZxyIo="
14305
+ });
14306
+ const XSignatureKeyHeaderSchema = zodOpenapi.z.string().openapi({
14307
+ description: "Signature key identifier header to specify which key was used for payload signing.",
14308
+ example: "ixtal"
14309
+ });
14310
+ const ALLOWED_ID_DOCUMENTS_FILTERS = {
14311
+ PARTY_ID: "filterIdDocumentPartyId",
14312
+ ISSUER: "filterIdDocumentIssuer"
14313
+ };
14314
+
13771
14315
  const idDocumentsListOutputSchema = zodOpenapi.z.object({
13772
14316
  totalCount: zodOpenapi.z.number(),
13773
14317
  idDocuments: zodOpenapi.z.array(idDocumentOutputSchema)
13774
14318
  });
13775
- const DOCUMENT_SIDE = ["front", "back"];
13776
- const idDocumentCreateInputSchema = zodOpenapi.z.object({
13777
- partyId: zodOpenapi.z.uuid(),
13778
- idDocType: zodOpenapi.z.enum(IdDocTypeZod),
13779
- idDocNumber: zodOpenapi.z.string(),
13780
- idDocHolderName: zodOpenapi.z.string(),
13781
- issueDate: zodOpenapi.z.coerce.date().optional(),
13782
- expirationDate: zodOpenapi.z.coerce.date().optional(),
13783
- issuer: zodOpenapi.z.string().optional(),
13784
- countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13785
- idDocStatus: zodOpenapi.z.enum(IdDocStatusZod).optional()
14319
+ const paramsSchema$1 = zodOpenapi.z.object({
14320
+ partyId: zodOpenapi.z.uuid()
14321
+ });
14322
+ const arrayQuery = (schema) => zodOpenapi.z.preprocess((val) => {
14323
+ if (typeof val === "string") {
14324
+ return val.includes(",") ? val.split(",") : [val];
14325
+ }
14326
+ return val;
14327
+ }, schema.array()).optional();
14328
+ const querySchema = zodOpenapi.z.object({
14329
+ page: zodOpenapi.z.coerce.number().positive().default(1),
14330
+ limit: zodOpenapi.z.coerce.number().positive().default(20),
14331
+ sortColumn: zodOpenapi.z.string().default("updatedAt"),
14332
+ sortDirection: zodOpenapi.z.enum(["asc", "desc"]).default("desc"),
14333
+ [ALLOWED_ID_DOCUMENTS_FILTERS.PARTY_ID]: arrayQuery(zodOpenapi.z.uuid()),
14334
+ [ALLOWED_ID_DOCUMENTS_FILTERS.ISSUER]: arrayQuery(zodOpenapi.z.string()),
14335
+ search: zodOpenapi.z.string().optional()
14336
+ });
14337
+ const responseBodySchema$1 = zodOpenapi.z.object({
14338
+ message: zodOpenapi.z.string(),
14339
+ idDocumentsList: idDocumentsListOutputSchema
14340
+ });
14341
+ const getIdDocumentsListRoute = zodOpenapi.createRoute({
14342
+ method: "get",
14343
+ path: "/{partyId}/id-documents",
14344
+ summary: "List party ID documents",
14345
+ tags: ["Documents"],
14346
+ request: {
14347
+ params: paramsSchema$1,
14348
+ query: querySchema
14349
+ },
14350
+ responses: {
14351
+ 200: {
14352
+ description: "ID documents list fetched",
14353
+ content: {
14354
+ "application/json": {
14355
+ schema: responseBodySchema$1
14356
+ }
14357
+ }
14358
+ },
14359
+ 404: {
14360
+ description: "ID documents not found",
14361
+ content: {
14362
+ "application/json": {
14363
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14364
+ }
14365
+ }
14366
+ },
14367
+ 500: {
14368
+ description: "Internal server error",
14369
+ content: {
14370
+ "application/json": {
14371
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14372
+ }
14373
+ }
14374
+ }
14375
+ }
14376
+ });
14377
+ new zodOpenapi.OpenAPIHono().openapi(
14378
+ getIdDocumentsListRoute,
14379
+ async (context) => {
14380
+ const { partyId } = context.req.valid("param");
14381
+ const { sortColumn, sortDirection, limit, page, ...filters } = context.req.valid("query");
14382
+ const { data: idDocumentsList, error } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.getIdDocumentsList({
14383
+ pagination: {
14384
+ page,
14385
+ limit,
14386
+ sort: {
14387
+ column: sortColumn,
14388
+ direction: sortDirection
14389
+ },
14390
+ filterIdDocumentPartyId: partyId,
14391
+ ...filters
14392
+ }
14393
+ });
14394
+ if (!idDocumentsList || error) {
14395
+ return context.json({ message: "Could not list id documents" }, 404);
14396
+ }
14397
+ return context.json(
14398
+ {
14399
+ message: "ID documents listed successfully",
14400
+ idDocumentsList
14401
+ },
14402
+ 200
14403
+ );
14404
+ }
14405
+ );
14406
+
14407
+ const algParams = {
14408
+ RSA: {
14409
+ name: "RSASSA-PKCS1-v1_5",
14410
+ hash: { name: "SHA-256" }
14411
+ },
14412
+ EC: {
14413
+ name: "ECDSA",
14414
+ namedCurve: "P-256"
14415
+ },
14416
+ HMAC: {
14417
+ name: "HMAC",
14418
+ hash: { name: "SHA-256" }
14419
+ }
14420
+ };
14421
+ const verifyPayloadSignature = async ({
14422
+ signature,
14423
+ data,
14424
+ publicKey,
14425
+ algorithm = "RSA"
14426
+ }) => {
14427
+ const binaryPublicKey = Uint8Array.from(
14428
+ atob(publicKey),
14429
+ (c) => c.charCodeAt(0)
14430
+ );
14431
+ const format = algorithm === "HMAC" ? "raw" : "spki";
14432
+ const importedPublicKey = await crypto.subtle.importKey(
14433
+ format,
14434
+ binaryPublicKey,
14435
+ algParams[algorithm],
14436
+ false,
14437
+ ["verify"]
14438
+ );
14439
+ const encodedPayload = new TextEncoder().encode(data);
14440
+ const decodedSignature = Uint8Array.from(
14441
+ atob(signature),
14442
+ (c) => c.charCodeAt(0)
14443
+ );
14444
+ const isValid = await crypto.subtle.verify(
14445
+ algParams[algorithm],
14446
+ importedPublicKey,
14447
+ decodedSignature,
14448
+ encodedPayload
14449
+ );
14450
+ return isValid;
14451
+ };
14452
+
14453
+ const validateBearerScheme = (header) => {
14454
+ return header.startsWith("Bearer ") && header.length > 7 && !header.slice(7).includes(" ");
14455
+ };
14456
+ const extractBearerToken = (header) => {
14457
+ return header.slice(7).trim();
14458
+ };
14459
+ const validateBearerToken = (bearerToken) => {
14460
+ return zod.z.jwt().safeParse(bearerToken).success;
14461
+ };
14462
+
14463
+ const idempotency = () => {
14464
+ return factory.createMiddleware(async (context, next) => {
14465
+ if (!context.env.MIDDLEWARE_IDEMPOTENCY_DISABLED) {
14466
+ const idempotencyKeyHeader = context.req.header("x-idempotency-key");
14467
+ if (!idempotencyKeyHeader) {
14468
+ throw new httpException.HTTPException(401, {
14469
+ message: `The 'x-idempotency-key' header must exist and must have a value.`
14470
+ });
14471
+ }
14472
+ const existingIdempotencyRecord = await context.env.IDEMPOTENCY_KV.get(idempotencyKeyHeader);
14473
+ if (existingIdempotencyRecord) {
14474
+ throw new httpException.HTTPException(409, {
14475
+ message: "The identical request has already been processed. The idempotency key is not unique."
14476
+ });
14477
+ }
14478
+ await context.env.IDEMPOTENCY_KV.put(
14479
+ idempotencyKeyHeader,
14480
+ idempotencyKeyHeader,
14481
+ {
14482
+ expirationTtl: 60 * 60 * 24 * 3
14483
+ // 3 days
14484
+ }
14485
+ );
14486
+ context.set("idempotency", {
14487
+ key: idempotencyKeyHeader
14488
+ });
14489
+ }
14490
+ await next();
14491
+ });
14492
+ };
14493
+
14494
+ const jwt = () => {
14495
+ return factory.createMiddleware(async (context, next) => {
14496
+ if (!context.env.MIDDLEWARE_JWT_DISABLED) {
14497
+ const authorizationHeader = context.req.header("authorization");
14498
+ if (!authorizationHeader) {
14499
+ throw new httpException.HTTPException(401, {
14500
+ message: `The 'authorization' header must exist and must have a value.`
14501
+ });
14502
+ }
14503
+ if (!validateBearerScheme(authorizationHeader)) {
14504
+ throw new httpException.HTTPException(401, {
14505
+ message: `The 'authorization' header value must use the Bearer scheme.`
14506
+ });
14507
+ }
14508
+ const bearerToken = extractBearerToken(authorizationHeader);
14509
+ if (!validateBearerToken(bearerToken)) {
14510
+ throw new httpException.HTTPException(401, {
14511
+ message: `The Bearer token in the 'authorization' header value must be a JWT.`
14512
+ });
14513
+ }
14514
+ const { data, error } = await context.env.AUTH_SERVICE.verifyAccessToken({
14515
+ accessToken: bearerToken
14516
+ });
14517
+ if (!data || error) {
14518
+ throw new httpException.HTTPException(401, {
14519
+ message: "The JWT must contain valid user information."
14520
+ });
14521
+ }
14522
+ const rawUserMetaDataString = data.payload.user.rawUserMetaData;
14523
+ const rawUserMetaData = rawUserMetaDataString ? JSON.parse(rawUserMetaDataString) : null;
14524
+ const identityId = rawUserMetaData.organizationId ?? rawUserMetaData.exchangeOfficeId;
14525
+ if (!identityId) {
14526
+ throw new httpException.HTTPException(422, {
14527
+ message: "User data integrity check failed."
14528
+ });
14529
+ }
14530
+ context.set("identity", {
14531
+ ...data.payload,
14532
+ user: {
14533
+ ...data.payload.user,
14534
+ organizationId: rawUserMetaData.organizationId,
14535
+ exchangeOfficeId: rawUserMetaData.exchangeOfficeId
14536
+ }
14537
+ });
14538
+ }
14539
+ await next();
14540
+ });
14541
+ };
14542
+
14543
+ const signature = () => {
14544
+ return factory.createMiddleware(async (context, next) => {
14545
+ if (!context.env.MIDDLEWARE_SIGNATURE_DISABLED) {
14546
+ const signatureHeader = context.req.header("x-signature");
14547
+ if (!signatureHeader) {
14548
+ throw new httpException.HTTPException(401, {
14549
+ message: `The 'x-signature' header must exist and must have a value.`
14550
+ });
14551
+ }
14552
+ const signatureKeyHeader = context.req.header("X-Signature-Key");
14553
+ if (!signatureKeyHeader) {
14554
+ throw new httpException.HTTPException(401, {
14555
+ message: `The 'x-signature-key' header must exist and must have a value.`
14556
+ });
14557
+ }
14558
+ const payload = JSON.stringify(await context.req.json().catch(() => null));
14559
+ const identityContext = context.get("identity");
14560
+ const organizationId = identityContext.user.organizationId;
14561
+ const exchangeOfficeId = identityContext.user.exchangeOfficeId;
14562
+ const identityId = organizationId ?? exchangeOfficeId;
14563
+ if (!identityId) {
14564
+ throw new httpException.HTTPException(401, {
14565
+ message: "Failed to retrieve request identity ID."
14566
+ });
14567
+ }
14568
+ const { data: organization, error } = await context.env.ORGANIZATION_SERVICE.getOrganization({
14569
+ organizationId: identityId
14570
+ });
14571
+ if (!organization || error) {
14572
+ throw new httpException.HTTPException(404, {
14573
+ message: "Failed to retrieve organization."
14574
+ });
14575
+ }
14576
+ const signatureKey = organization.signatureKeys.filter(
14577
+ (signatureKey2) => signatureKey2.name === signatureKeyHeader
14578
+ )[0];
14579
+ if (!signatureKey) {
14580
+ throw new httpException.HTTPException(404, {
14581
+ message: "Signature key not found."
14582
+ });
14583
+ }
14584
+ const isVerified = await verifyPayloadSignature({
14585
+ signature: signatureHeader,
14586
+ publicKey: signatureKey.publicKey,
14587
+ data: payload
14588
+ });
14589
+ if (!isVerified) {
14590
+ throw new httpException.HTTPException(401, {
14591
+ message: "Invalid signature key or signature."
14592
+ });
14593
+ }
14594
+ }
14595
+ await next();
14596
+ });
14597
+ };
14598
+
14599
+ const paramsSchema = zodOpenapi.z.object({
14600
+ id: zodOpenapi.z.uuid()
13786
14601
  });
13787
14602
  const idDocumentUpdateInputSchema = zodOpenapi.z.object({
13788
14603
  partyId: zodOpenapi.z.uuid().optional(),
13789
- idDocType: zodOpenapi.z.enum(IdDocTypeZod).optional(),
14604
+ idDocType: zodOpenapi.z.enum(ID_DOC_TYPE).optional(),
13790
14605
  idDocNumber: zodOpenapi.z.string().optional(),
13791
14606
  idDocHolderName: zodOpenapi.z.string().optional(),
13792
14607
  issueDate: zodOpenapi.z.coerce.date().optional(),
@@ -13795,32 +14610,112 @@ const idDocumentUpdateInputSchema = zodOpenapi.z.object({
13795
14610
  countryOfIssue: zodOpenapi.z.enum(generalCodes.COUNTRY_CODES_2).optional(),
13796
14611
  frontImageUri: zodOpenapi.z.string().optional(),
13797
14612
  backImageUri: zodOpenapi.z.string().optional(),
13798
- idDocStatus: zodOpenapi.z.enum(IdDocStatusZod).optional()
13799
- });
13800
- const idDocumentMultipartSchema = zodOpenapi.z.object({
13801
- idDocument: zodOpenapi.z.string(),
13802
- documentSide: zodOpenapi.z.enum(DOCUMENT_SIDE),
13803
- file: zodOpenapi.z.any()
14613
+ idDocStatus: zodOpenapi.z.enum(ID_DOC_STATUS).optional()
14614
+ });
14615
+ const responseBodySchema = zodOpenapi.z.object({
14616
+ message: zodOpenapi.z.string(),
14617
+ idDocument: idDocumentOutputSchema
14618
+ });
14619
+ const updateIdDocumentRoute = zodOpenapi.createRoute({
14620
+ method: "put",
14621
+ path: "/{partyId}/id-documents/{id}",
14622
+ summary: "Update party document",
14623
+ tags: ["Documents"],
14624
+ middleware: [jwt, signature(), idempotency()],
14625
+ security: [{ JwtAuth: [] }],
14626
+ request: {
14627
+ headers: zodOpenapi.z.object({
14628
+ "X-Idempotency-Key": XIdempotencyKeyHeaderSchema,
14629
+ "X-Signature": XSignatureHeaderSchema,
14630
+ "X-Signature-Key": XSignatureKeyHeaderSchema
14631
+ }),
14632
+ params: paramsSchema,
14633
+ body: {
14634
+ content: {
14635
+ "application/json": {
14636
+ schema: idDocumentUpdateInputSchema
14637
+ }
14638
+ },
14639
+ required: true
14640
+ }
14641
+ },
14642
+ responses: {
14643
+ 200: {
14644
+ description: "ID document updated successfully",
14645
+ content: {
14646
+ "application/json": {
14647
+ schema: responseBodySchema
14648
+ }
14649
+ }
14650
+ },
14651
+ 404: {
14652
+ description: "ID document not found",
14653
+ content: {
14654
+ "application/json": {
14655
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14656
+ }
14657
+ }
14658
+ },
14659
+ 500: {
14660
+ description: "Internal server error",
14661
+ content: {
14662
+ "application/json": {
14663
+ schema: zodOpenapi.z.object({ message: zodOpenapi.z.string() })
14664
+ }
14665
+ }
14666
+ }
14667
+ }
13804
14668
  });
14669
+ new zodOpenapi.OpenAPIHono().openapi(
14670
+ updateIdDocumentRoute,
14671
+ async (context) => {
14672
+ const { id } = context.req.valid("param");
14673
+ const patch = context.req.valid("json");
14674
+ const { data: existingDocument, error: fetchError } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.getIdDocument({ id });
14675
+ if (!existingDocument || fetchError) {
14676
+ return context.json({ message: "ID document not found" }, 404);
14677
+ }
14678
+ const fullIdDocument = {
14679
+ ...existingDocument,
14680
+ ...patch,
14681
+ id
14682
+ };
14683
+ const { data: updatedIdDocument, error: updateError } = await context.env.MASTER_DATA_MANAGEMENT_SERVICE.updateIdDocument({
14684
+ idDocument: fullIdDocument
14685
+ });
14686
+ if (!updatedIdDocument || updateError) {
14687
+ return context.json({ message: "Could not update ID document" }, 500);
14688
+ }
14689
+ return context.json(
14690
+ {
14691
+ message: "ID document updated successfully",
14692
+ idDocument: updatedIdDocument
14693
+ },
14694
+ 200
14695
+ );
14696
+ }
14697
+ );
13805
14698
 
13806
14699
  const messageResponseSchema = zodOpenapi.z.object({
13807
14700
  message: zodOpenapi.z.string()
13808
14701
  });
13809
14702
 
13810
- exports.AddressTypeZod = AddressTypeZod$1;
13811
- exports.AmlScoreTypeZod = AmlScoreTypeZod$1;
13812
- exports.ClientStatusActionZod = ClientStatusActionZod;
13813
- exports.ContactTypeZod = ContactTypeZod$1;
13814
- exports.CustomerStatusZod = CustomerStatusZod$1;
14703
+ exports.ADDRESS_TYPE = ADDRESS_TYPE$1;
14704
+ exports.AML_SCORE_TYPE = AML_SCORE_TYPE$1;
14705
+ exports.CLIENT_STATUS_ACTION = CLIENT_STATUS_ACTION;
14706
+ exports.CONTACT_TYPE = CONTACT_TYPE$1;
14707
+ exports.CUSTOMER_STATUS = CUSTOMER_STATUS$1;
13815
14708
  exports.DOCUMENT_SIDE = DOCUMENT_SIDE;
13816
- exports.GenderZod = GenderZod$1;
13817
- exports.IdDocStatusZod = IdDocStatusZod$1;
13818
- exports.IdDocTypeZod = IdDocTypeZod$1;
13819
- exports.IdentificationTypeZod = IdentificationTypeZod;
13820
- exports.KycStatusZod = KycStatusZod$1;
13821
- exports.PartyRelationshipTypeZod = PartyRelationshipTypeZod$1;
13822
- exports.PartyTypeZod = PartyTypeZod$1;
14709
+ exports.GENDER = GENDER$1;
14710
+ exports.IDENTIFICATION_TYPE = IDENTIFICATION_TYPE;
14711
+ exports.ID_DOC_STATUS = ID_DOC_STATUS$1;
14712
+ exports.ID_DOC_TYPE = ID_DOC_TYPE$1;
14713
+ exports.KYC_STATUS = KYC_STATUS$1;
14714
+ exports.PARTY_RELATIONSHIP_TYPE = PARTY_RELATIONSHIP_TYPE$1;
14715
+ exports.PARTY_TYPE = PARTY_TYPE$1;
14716
+ exports.PRODUCT_TYPE = PRODUCT_TYPE$1;
13823
14717
  exports.TRADER_TYPE = TRADER_TYPE$1;
14718
+ exports.TXS_CLIENT_TYPE = TXS_CLIENT_TYPE$1;
13824
14719
  exports.createMdmClient = createMdmClient;
13825
14720
  exports.createPartyInputSchema = createPartyInputSchema;
13826
14721
  exports.idDocumentCreateInputSchema = idDocumentCreateInputSchema;
@@ -13832,6 +14727,8 @@ exports.messageResponseSchema = messageResponseSchema;
13832
14727
  exports.partiesOutputDataSchema = partiesOutputDataSchema;
13833
14728
  exports.partyCreateOutputSchema = partyCreateOutputSchema;
13834
14729
  exports.partyOutputSchema = partyOutputSchema;
13835
- exports.partySchema = partySchema;
14730
+ exports.partySchema = partySchema$1;
13836
14731
  exports.partyUpdateInputSchema = partyUpdateInputSchema;
14732
+ exports.productsInputSchema = productsInputSchema$1;
14733
+ exports.productsOutputSchema = productsOutputSchema;
13837
14734
  exports.updatePartyOuputSchema = updatePartyOuputSchema;