@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 +1314 -417
- package/dist/v1/index.d.cts +5783 -5639
- package/dist/v1/index.d.mts +5783 -5639
- package/dist/v1/index.d.ts +5783 -5639
- package/dist/v1/index.mjs +1299 -406
- package/package.json +1 -1
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
|
|
33
|
+
const ADDRESS_TYPE$1 = [
|
|
32
34
|
"PERMANENT_ADDRESS",
|
|
33
35
|
"REGISTERED_OFFICE",
|
|
34
36
|
"CONTACT_ADDRESS"
|
|
35
37
|
];
|
|
36
|
-
const
|
|
38
|
+
const CONTACT_TYPE$1 = [
|
|
37
39
|
"EMAIL",
|
|
38
40
|
"PHONE_AUTH",
|
|
39
41
|
"PHONE_CONTACT",
|
|
40
42
|
"PHONE_WORK"
|
|
41
43
|
];
|
|
42
|
-
const
|
|
43
|
-
const
|
|
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
|
|
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
|
|
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
|
|
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
|
|
74
|
+
const PARTY_TYPE$1 = [
|
|
73
75
|
"INDIVIDUAL",
|
|
74
76
|
"SELF_EMPLOYED",
|
|
75
77
|
"ORGANIZATION"
|
|
76
78
|
];
|
|
77
|
-
const
|
|
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
|
|
87
|
+
const IDENTIFICATION_TYPE = [
|
|
86
88
|
"FACE_TO_FACE",
|
|
87
89
|
"REMOTE_IDENTIFICATION"
|
|
88
90
|
];
|
|
89
|
-
const
|
|
90
|
-
const
|
|
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
|
|
102
|
+
const ADDRESS_TYPE = [
|
|
99
103
|
"PERMANENT_ADDRESS",
|
|
100
104
|
"REGISTERED_OFFICE",
|
|
101
105
|
"CONTACT_ADDRESS"
|
|
102
106
|
];
|
|
103
|
-
const
|
|
107
|
+
const CONTACT_TYPE = [
|
|
104
108
|
"EMAIL",
|
|
105
109
|
"PHONE_AUTH",
|
|
106
110
|
"PHONE_CONTACT",
|
|
107
111
|
"PHONE_WORK"
|
|
108
112
|
];
|
|
109
|
-
const
|
|
110
|
-
const
|
|
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
|
|
120
|
+
const PARTY_RELATIONSHIP_TYPE = [
|
|
117
121
|
"AUTHORIZED_SIGNATORY",
|
|
118
122
|
"POA_HOLDER",
|
|
119
123
|
"BOARD_MEMBER",
|
|
120
124
|
"UBO"
|
|
121
125
|
];
|
|
122
|
-
const
|
|
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
|
|
135
|
+
const PARTY_TYPE = [
|
|
132
136
|
"INDIVIDUAL",
|
|
133
137
|
"SELF_EMPLOYED",
|
|
134
138
|
"ORGANIZATION"
|
|
135
139
|
];
|
|
136
|
-
const
|
|
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
|
|
145
|
-
const
|
|
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:
|
|
12337
|
+
enum: CUSTOMER_STATUS
|
|
12285
12338
|
}).notNull(),
|
|
12286
|
-
partyType: text("party_type", { enum:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
12473
|
-
kycStatus: text("kyc_status", { enum:
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
12583
|
-
kycStatus: zodOpenapi.z.enum(
|
|
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(
|
|
12605
|
-
kycStatus: zodOpenapi.z.enum(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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$
|
|
12908
|
-
partyType: zodOpenapi.z.enum(
|
|
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(
|
|
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(
|
|
12919
|
-
partyType: zodOpenapi.z.enum(
|
|
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$
|
|
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$
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
13447
|
-
|
|
13448
|
-
|
|
13449
|
-
|
|
13450
|
-
|
|
13451
|
-
|
|
13452
|
-
|
|
13453
|
-
|
|
13454
|
-
|
|
13455
|
-
|
|
13456
|
-
|
|
13457
|
-
|
|
13458
|
-
|
|
13459
|
-
|
|
13460
|
-
|
|
13461
|
-
|
|
13462
|
-
|
|
13463
|
-
|
|
13464
|
-
|
|
13465
|
-
|
|
13466
|
-
|
|
13467
|
-
|
|
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
|
-
|
|
13564
|
-
|
|
13565
|
-
|
|
13566
|
-
|
|
13567
|
-
|
|
13568
|
-
|
|
13569
|
-
|
|
13570
|
-
|
|
13571
|
-
|
|
13572
|
-
|
|
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()
|
|
13587
|
-
internalId: zodOpenapi.z.string().
|
|
13588
|
-
|
|
13589
|
-
|
|
13590
|
-
|
|
13591
|
-
|
|
13592
|
-
|
|
13593
|
-
|
|
13594
|
-
|
|
13595
|
-
|
|
13596
|
-
|
|
13597
|
-
|
|
13598
|
-
|
|
13599
|
-
|
|
13600
|
-
|
|
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(
|
|
13626
|
-
kycStatus: zodOpenapi.z.enum(
|
|
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
|
|
13712
|
-
|
|
13713
|
-
|
|
13714
|
-
|
|
13715
|
-
|
|
13716
|
-
|
|
13717
|
-
|
|
13718
|
-
|
|
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:
|
|
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
|
-
|
|
13735
|
-
|
|
13736
|
-
|
|
13737
|
-
|
|
13738
|
-
|
|
13739
|
-
|
|
13740
|
-
|
|
13741
|
-
|
|
13742
|
-
|
|
13743
|
-
|
|
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
|
|
13746
|
-
|
|
13747
|
-
|
|
13748
|
-
|
|
13749
|
-
|
|
13750
|
-
|
|
13751
|
-
|
|
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(
|
|
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(
|
|
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
|
|
13776
|
-
|
|
13777
|
-
|
|
13778
|
-
|
|
13779
|
-
|
|
13780
|
-
|
|
13781
|
-
|
|
13782
|
-
|
|
13783
|
-
|
|
13784
|
-
|
|
13785
|
-
|
|
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(
|
|
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(
|
|
13799
|
-
});
|
|
13800
|
-
const
|
|
13801
|
-
|
|
13802
|
-
|
|
13803
|
-
|
|
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.
|
|
13811
|
-
exports.
|
|
13812
|
-
exports.
|
|
13813
|
-
exports.
|
|
13814
|
-
exports.
|
|
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.
|
|
13817
|
-
exports.
|
|
13818
|
-
exports.
|
|
13819
|
-
exports.
|
|
13820
|
-
exports.
|
|
13821
|
-
exports.
|
|
13822
|
-
exports.
|
|
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;
|