@avallon-labs/mcp 5.4.0 → 5.6.0-staging.210
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/index.js
CHANGED
|
@@ -9,7 +9,13 @@ var getListAgentsUrl = (params) => {
|
|
|
9
9
|
const normalizedParams = new URLSearchParams();
|
|
10
10
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
11
11
|
if (value !== void 0) {
|
|
12
|
-
|
|
12
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
13
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
14
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
15
|
+
}
|
|
16
|
+
} else {
|
|
17
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
18
|
+
}
|
|
13
19
|
}
|
|
14
20
|
});
|
|
15
21
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -168,7 +174,13 @@ var getListJobsUrl = (params) => {
|
|
|
168
174
|
const normalizedParams = new URLSearchParams();
|
|
169
175
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
170
176
|
if (value !== void 0) {
|
|
171
|
-
|
|
177
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
178
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
179
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
180
|
+
}
|
|
181
|
+
} else {
|
|
182
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
183
|
+
}
|
|
172
184
|
}
|
|
173
185
|
});
|
|
174
186
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -203,7 +215,13 @@ var getListApiKeysUrl = (params) => {
|
|
|
203
215
|
const normalizedParams = new URLSearchParams();
|
|
204
216
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
205
217
|
if (value !== void 0) {
|
|
206
|
-
|
|
218
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
219
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
220
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
221
|
+
}
|
|
222
|
+
} else {
|
|
223
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
224
|
+
}
|
|
207
225
|
}
|
|
208
226
|
});
|
|
209
227
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -278,7 +296,13 @@ var getListArtifactsUrl = (params) => {
|
|
|
278
296
|
const normalizedParams = new URLSearchParams();
|
|
279
297
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
280
298
|
if (value !== void 0) {
|
|
281
|
-
|
|
299
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
300
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
301
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
302
|
+
}
|
|
303
|
+
} else {
|
|
304
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
305
|
+
}
|
|
282
306
|
}
|
|
283
307
|
});
|
|
284
308
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -317,7 +341,13 @@ var getGetArtifactMetadataKeysUrl = (params) => {
|
|
|
317
341
|
const normalizedParams = new URLSearchParams();
|
|
318
342
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
319
343
|
if (value !== void 0) {
|
|
320
|
-
|
|
344
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
345
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
346
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
347
|
+
}
|
|
348
|
+
} else {
|
|
349
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
350
|
+
}
|
|
321
351
|
}
|
|
322
352
|
});
|
|
323
353
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -404,7 +434,13 @@ var getGetOAuthUrlUrl = (params) => {
|
|
|
404
434
|
const normalizedParams = new URLSearchParams();
|
|
405
435
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
406
436
|
if (value !== void 0) {
|
|
407
|
-
|
|
437
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
438
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
439
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
440
|
+
}
|
|
441
|
+
} else {
|
|
442
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
443
|
+
}
|
|
408
444
|
}
|
|
409
445
|
});
|
|
410
446
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -445,7 +481,13 @@ var getListCallsUrl = (params) => {
|
|
|
445
481
|
const normalizedParams = new URLSearchParams();
|
|
446
482
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
447
483
|
if (value !== void 0) {
|
|
448
|
-
|
|
484
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
485
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
486
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
487
|
+
}
|
|
488
|
+
} else {
|
|
489
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
490
|
+
}
|
|
449
491
|
}
|
|
450
492
|
});
|
|
451
493
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -468,7 +510,13 @@ var getGetCallUrl = (id, params) => {
|
|
|
468
510
|
const normalizedParams = new URLSearchParams();
|
|
469
511
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
470
512
|
if (value !== void 0) {
|
|
471
|
-
|
|
513
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
514
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
515
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
516
|
+
}
|
|
517
|
+
} else {
|
|
518
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
519
|
+
}
|
|
472
520
|
}
|
|
473
521
|
});
|
|
474
522
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -503,7 +551,13 @@ var getGetCallAnalyticsUrl = (params) => {
|
|
|
503
551
|
const normalizedParams = new URLSearchParams();
|
|
504
552
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
505
553
|
if (value !== void 0) {
|
|
506
|
-
|
|
554
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
555
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
556
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
557
|
+
}
|
|
558
|
+
} else {
|
|
559
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
560
|
+
}
|
|
507
561
|
}
|
|
508
562
|
});
|
|
509
563
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -544,7 +598,13 @@ var getListCallFeedbackUrl = (id, params) => {
|
|
|
544
598
|
const normalizedParams = new URLSearchParams();
|
|
545
599
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
546
600
|
if (value !== void 0) {
|
|
547
|
-
|
|
601
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
602
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
603
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
604
|
+
}
|
|
605
|
+
} else {
|
|
606
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
607
|
+
}
|
|
548
608
|
}
|
|
549
609
|
});
|
|
550
610
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -599,7 +659,13 @@ var getListClaimsUrl = (params) => {
|
|
|
599
659
|
const normalizedParams = new URLSearchParams();
|
|
600
660
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
601
661
|
if (value !== void 0) {
|
|
602
|
-
|
|
662
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
663
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
664
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
665
|
+
}
|
|
666
|
+
} else {
|
|
667
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
668
|
+
}
|
|
603
669
|
}
|
|
604
670
|
});
|
|
605
671
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -638,7 +704,13 @@ var getCheckEmailUsernameAvailabilityUrl = (params) => {
|
|
|
638
704
|
const normalizedParams = new URLSearchParams();
|
|
639
705
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
640
706
|
if (value !== void 0) {
|
|
641
|
-
|
|
707
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
708
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
709
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
710
|
+
}
|
|
711
|
+
} else {
|
|
712
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
713
|
+
}
|
|
642
714
|
}
|
|
643
715
|
});
|
|
644
716
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -679,7 +751,13 @@ var getListEmailAgentsUrl = (params) => {
|
|
|
679
751
|
const normalizedParams = new URLSearchParams();
|
|
680
752
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
681
753
|
if (value !== void 0) {
|
|
682
|
-
|
|
754
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
755
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
756
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
757
|
+
}
|
|
758
|
+
} else {
|
|
759
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
760
|
+
}
|
|
683
761
|
}
|
|
684
762
|
});
|
|
685
763
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -738,7 +816,13 @@ var getListEmailsUrl = (params) => {
|
|
|
738
816
|
const normalizedParams = new URLSearchParams();
|
|
739
817
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
740
818
|
if (value !== void 0) {
|
|
741
|
-
|
|
819
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
820
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
821
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
822
|
+
}
|
|
823
|
+
} else {
|
|
824
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
825
|
+
}
|
|
742
826
|
}
|
|
743
827
|
});
|
|
744
828
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -773,7 +857,13 @@ var getListExtractorJobsUrl = (params) => {
|
|
|
773
857
|
const normalizedParams = new URLSearchParams();
|
|
774
858
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
775
859
|
if (value !== void 0) {
|
|
776
|
-
|
|
860
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
861
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
862
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
863
|
+
}
|
|
864
|
+
} else {
|
|
865
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
866
|
+
}
|
|
777
867
|
}
|
|
778
868
|
});
|
|
779
869
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -846,7 +936,13 @@ var getListAgenticJobMessagesUrl = (id, params) => {
|
|
|
846
936
|
const normalizedParams = new URLSearchParams();
|
|
847
937
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
848
938
|
if (value !== void 0) {
|
|
849
|
-
|
|
939
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
940
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
941
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
942
|
+
}
|
|
943
|
+
} else {
|
|
944
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
945
|
+
}
|
|
850
946
|
}
|
|
851
947
|
});
|
|
852
948
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -905,7 +1001,13 @@ var getListExtractorsUrl = (params) => {
|
|
|
905
1001
|
const normalizedParams = new URLSearchParams();
|
|
906
1002
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
907
1003
|
if (value !== void 0) {
|
|
908
|
-
|
|
1004
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
1005
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
1006
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
1007
|
+
}
|
|
1008
|
+
} else {
|
|
1009
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
1010
|
+
}
|
|
909
1011
|
}
|
|
910
1012
|
});
|
|
911
1013
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -974,11 +1076,33 @@ var getExtract = async (id, options) => {
|
|
|
974
1076
|
headers: res.headers
|
|
975
1077
|
};
|
|
976
1078
|
};
|
|
1079
|
+
var getGetExtractCitationsUrl = (id) => {
|
|
1080
|
+
return `/v1/extracts/${id}/citations`;
|
|
1081
|
+
};
|
|
1082
|
+
var getExtractCitations = async (id, options) => {
|
|
1083
|
+
const res = await fetch(getGetExtractCitationsUrl(id), {
|
|
1084
|
+
...options,
|
|
1085
|
+
method: "GET"
|
|
1086
|
+
});
|
|
1087
|
+
const body = [204, 205, 304].includes(res.status) ? null : await res.text();
|
|
1088
|
+
const data = body ? JSON.parse(body) : {};
|
|
1089
|
+
return {
|
|
1090
|
+
data,
|
|
1091
|
+
status: res.status,
|
|
1092
|
+
headers: res.headers
|
|
1093
|
+
};
|
|
1094
|
+
};
|
|
977
1095
|
var getListExtractsUrl = (params) => {
|
|
978
1096
|
const normalizedParams = new URLSearchParams();
|
|
979
1097
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
980
1098
|
if (value !== void 0) {
|
|
981
|
-
|
|
1099
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
1100
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
1101
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
1102
|
+
}
|
|
1103
|
+
} else {
|
|
1104
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
1105
|
+
}
|
|
982
1106
|
}
|
|
983
1107
|
});
|
|
984
1108
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -1035,7 +1159,13 @@ var getListToolsUrl = (params) => {
|
|
|
1035
1159
|
const normalizedParams = new URLSearchParams();
|
|
1036
1160
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
1037
1161
|
if (value !== void 0) {
|
|
1038
|
-
|
|
1162
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
1163
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
1164
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
1165
|
+
}
|
|
1166
|
+
} else {
|
|
1167
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
1168
|
+
}
|
|
1039
1169
|
}
|
|
1040
1170
|
});
|
|
1041
1171
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -1258,7 +1388,13 @@ var getListWebhookDeliveriesUrl = (id, params) => {
|
|
|
1258
1388
|
const normalizedParams = new URLSearchParams();
|
|
1259
1389
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
1260
1390
|
if (value !== void 0) {
|
|
1261
|
-
|
|
1391
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
1392
|
+
for (const [sk, sv] of Object.entries(value)) {
|
|
1393
|
+
if (sv !== void 0) normalizedParams.append(`${key}[${sk}]`, String(sv));
|
|
1394
|
+
}
|
|
1395
|
+
} else {
|
|
1396
|
+
normalizedParams.append(key, value === null ? "null" : String(value));
|
|
1397
|
+
}
|
|
1262
1398
|
}
|
|
1263
1399
|
});
|
|
1264
1400
|
const stringifiedParams = normalizedParams.toString();
|
|
@@ -1876,6 +2012,17 @@ var getExtractHandler = async (args) => {
|
|
|
1876
2012
|
]
|
|
1877
2013
|
};
|
|
1878
2014
|
};
|
|
2015
|
+
var getExtractCitationsHandler = async (args) => {
|
|
2016
|
+
const res = await getExtractCitations(args.pathParams.id);
|
|
2017
|
+
return {
|
|
2018
|
+
content: [
|
|
2019
|
+
{
|
|
2020
|
+
type: "text",
|
|
2021
|
+
text: JSON.stringify(res)
|
|
2022
|
+
}
|
|
2023
|
+
]
|
|
2024
|
+
};
|
|
2025
|
+
};
|
|
1879
2026
|
var listExtractsHandler = async (args) => {
|
|
1880
2027
|
const res = await listExtracts(args.queryParams);
|
|
1881
2028
|
return {
|
|
@@ -3503,8 +3650,36 @@ var GetExtractResponse = zod.object({
|
|
|
3503
3650
|
job_id: zod.string(),
|
|
3504
3651
|
scope: zod.record(zod.string(), zod.unknown()),
|
|
3505
3652
|
result: zod.unknown(),
|
|
3653
|
+
citations: zod.union([zod.unknown(), zod.null()]),
|
|
3506
3654
|
created_at: zod.string().datetime({})
|
|
3507
3655
|
});
|
|
3656
|
+
var getExtractCitationsPathIdRegExp = new RegExp(
|
|
3657
|
+
"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
|
|
3658
|
+
);
|
|
3659
|
+
var GetExtractCitationsParams = zod.object({
|
|
3660
|
+
id: zod.string().uuid().regex(getExtractCitationsPathIdRegExp)
|
|
3661
|
+
});
|
|
3662
|
+
var GetExtractCitationsResponse = zod.object({
|
|
3663
|
+
citations: zod.unknown(),
|
|
3664
|
+
chunks: zod.record(
|
|
3665
|
+
zod.string(),
|
|
3666
|
+
zod.object({
|
|
3667
|
+
artifact_id: zod.string(),
|
|
3668
|
+
artifact_name: zod.string(),
|
|
3669
|
+
page: zod.union([zod.number(), zod.null()]),
|
|
3670
|
+
bounding_box: zod.union([
|
|
3671
|
+
zod.object({
|
|
3672
|
+
left: zod.number(),
|
|
3673
|
+
top: zod.number(),
|
|
3674
|
+
width: zod.number(),
|
|
3675
|
+
height: zod.number()
|
|
3676
|
+
}),
|
|
3677
|
+
zod.null()
|
|
3678
|
+
]),
|
|
3679
|
+
content: zod.string()
|
|
3680
|
+
})
|
|
3681
|
+
)
|
|
3682
|
+
});
|
|
3508
3683
|
var listExtractsQueryCountDefault = 50;
|
|
3509
3684
|
var listExtractsQueryCountMax = 100;
|
|
3510
3685
|
var listExtractsQueryOffsetDefault = 0;
|
|
@@ -3538,6 +3713,7 @@ var ListExtractsResponseItem = zod.object({
|
|
|
3538
3713
|
extractor_name: zod.string(),
|
|
3539
3714
|
scope: zod.record(zod.string(), zod.unknown()),
|
|
3540
3715
|
result: zod.unknown(),
|
|
3716
|
+
citations: zod.union([zod.unknown(), zod.null()]),
|
|
3541
3717
|
created_at: zod.string().datetime({})
|
|
3542
3718
|
});
|
|
3543
3719
|
var ListExtractsResponse = zod.array(ListExtractsResponseItem);
|
|
@@ -4359,6 +4535,14 @@ server.tool(
|
|
|
4359
4535
|
},
|
|
4360
4536
|
getExtractHandler
|
|
4361
4537
|
);
|
|
4538
|
+
server.tool(
|
|
4539
|
+
"getExtractCitations",
|
|
4540
|
+
"Get extract citations",
|
|
4541
|
+
{
|
|
4542
|
+
pathParams: GetExtractCitationsParams
|
|
4543
|
+
},
|
|
4544
|
+
getExtractCitationsHandler
|
|
4545
|
+
);
|
|
4362
4546
|
server.tool(
|
|
4363
4547
|
"listExtracts",
|
|
4364
4548
|
"List extracts",
|
|
@@ -4506,4 +4690,4 @@ var transport = new StdioServerTransport();
|
|
|
4506
4690
|
server.connect(transport).then(() => {
|
|
4507
4691
|
console.error("MCP server running on stdio");
|
|
4508
4692
|
}).catch(console.error);
|
|
4509
|
-
//# sourceMappingURL=server-
|
|
4693
|
+
//# sourceMappingURL=server-TI3O6PYQ.js.map
|