@1mtx/did-api-contract 1.0.0 → 1.0.1
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.d.mts +178 -10
- package/dist/index.d.ts +178 -10
- package/dist/index.js +29 -12
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +29 -12
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -28,6 +28,7 @@ declare const authContract: {
|
|
|
28
28
|
verify: {
|
|
29
29
|
metadata: {
|
|
30
30
|
openApiTags: string[];
|
|
31
|
+
openApiSecurity: never[];
|
|
31
32
|
};
|
|
32
33
|
summary: "Verify DID signature and receive JWT";
|
|
33
34
|
description: string;
|
|
@@ -81,7 +82,7 @@ declare const authContract: {
|
|
|
81
82
|
*/
|
|
82
83
|
declare function buildAuthMessage(did: string, scheme?: AuthScheme, domain?: string, issuedAt?: string): string;
|
|
83
84
|
|
|
84
|
-
declare const SUPPORTED_FIELDS: readonly ["fullName", "age", "portrait", "gender", "nationality", "
|
|
85
|
+
declare const SUPPORTED_FIELDS: readonly ["fullName", "age", "portrait", "gender", "nationality", "permanentAddress", "documentNumber"];
|
|
85
86
|
type SupportedField = (typeof SUPPORTED_FIELDS)[number];
|
|
86
87
|
declare const CreateEventSchema: z.ZodObject<{
|
|
87
88
|
name: z.ZodString;
|
|
@@ -89,19 +90,19 @@ declare const CreateEventSchema: z.ZodObject<{
|
|
|
89
90
|
description: z.ZodOptional<z.ZodString>;
|
|
90
91
|
maxGuests: z.ZodNumber;
|
|
91
92
|
dateTime: z.ZodString;
|
|
92
|
-
requestedFields: z.ZodArray<z.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "
|
|
93
|
+
requestedFields: z.ZodArray<z.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "permanentAddress", "documentNumber"]>, "many">;
|
|
93
94
|
}, "strip", z.ZodTypeAny, {
|
|
94
95
|
name: string;
|
|
95
96
|
maxGuests: number;
|
|
96
97
|
dateTime: string;
|
|
97
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
98
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
98
99
|
description?: string | undefined;
|
|
99
100
|
coverImageUrl?: string | undefined;
|
|
100
101
|
}, {
|
|
101
102
|
name: string;
|
|
102
103
|
maxGuests: number;
|
|
103
104
|
dateTime: string;
|
|
104
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
105
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
105
106
|
description?: string | undefined;
|
|
106
107
|
coverImageUrl?: string | undefined;
|
|
107
108
|
}>;
|
|
@@ -271,19 +272,19 @@ declare const eventsContract: {
|
|
|
271
272
|
description: z.ZodOptional<z.ZodString>;
|
|
272
273
|
maxGuests: z.ZodNumber;
|
|
273
274
|
dateTime: z.ZodString;
|
|
274
|
-
requestedFields: z.ZodArray<z.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "
|
|
275
|
+
requestedFields: z.ZodArray<z.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "permanentAddress", "documentNumber"]>, "many">;
|
|
275
276
|
}, "strip", z.ZodTypeAny, {
|
|
276
277
|
name: string;
|
|
277
278
|
maxGuests: number;
|
|
278
279
|
dateTime: string;
|
|
279
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
280
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
280
281
|
description?: string | undefined;
|
|
281
282
|
coverImageUrl?: string | undefined;
|
|
282
283
|
}, {
|
|
283
284
|
name: string;
|
|
284
285
|
maxGuests: number;
|
|
285
286
|
dateTime: string;
|
|
286
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
287
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
287
288
|
description?: string | undefined;
|
|
288
289
|
coverImageUrl?: string | undefined;
|
|
289
290
|
}>;
|
|
@@ -791,6 +792,7 @@ declare const checkinContract: {
|
|
|
791
792
|
info: {
|
|
792
793
|
metadata: {
|
|
793
794
|
openApiTags: string[];
|
|
795
|
+
openApiSecurity: never[];
|
|
794
796
|
};
|
|
795
797
|
summary: "Get event info and VP request for check-in (public)";
|
|
796
798
|
method: "GET";
|
|
@@ -870,6 +872,7 @@ declare const checkinContract: {
|
|
|
870
872
|
submit: {
|
|
871
873
|
metadata: {
|
|
872
874
|
openApiTags: string[];
|
|
875
|
+
openApiSecurity: never[];
|
|
873
876
|
};
|
|
874
877
|
summary: "Submit VP for event check-in — issues participation VC on success (public)";
|
|
875
878
|
method: "POST";
|
|
@@ -918,6 +921,87 @@ declare const checkinContract: {
|
|
|
918
921
|
}>;
|
|
919
922
|
};
|
|
920
923
|
};
|
|
924
|
+
myCheckins: {
|
|
925
|
+
metadata: {
|
|
926
|
+
openApiTags: string[];
|
|
927
|
+
openApiSecurity: {
|
|
928
|
+
bearerAuth: never[];
|
|
929
|
+
}[];
|
|
930
|
+
};
|
|
931
|
+
summary: "List authenticated user check-ins";
|
|
932
|
+
method: "GET";
|
|
933
|
+
path: "/v1/checkin/my";
|
|
934
|
+
responses: {
|
|
935
|
+
200: z.ZodArray<z.ZodObject<{
|
|
936
|
+
id: z.ZodString;
|
|
937
|
+
eventId: z.ZodString;
|
|
938
|
+
checkedInAt: z.ZodString;
|
|
939
|
+
event: z.ZodObject<{
|
|
940
|
+
id: z.ZodString;
|
|
941
|
+
name: z.ZodString;
|
|
942
|
+
coverImageUrl: z.ZodNullable<z.ZodString>;
|
|
943
|
+
description: z.ZodNullable<z.ZodString>;
|
|
944
|
+
maxGuests: z.ZodNumber;
|
|
945
|
+
dateTime: z.ZodString;
|
|
946
|
+
currentGuests: z.ZodNumber;
|
|
947
|
+
status: z.ZodEnum<["ACTIVE", "CANCELLED", "COMPLETED"]>;
|
|
948
|
+
}, "strip", z.ZodTypeAny, {
|
|
949
|
+
description: string | null;
|
|
950
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
951
|
+
name: string;
|
|
952
|
+
coverImageUrl: string | null;
|
|
953
|
+
maxGuests: number;
|
|
954
|
+
dateTime: string;
|
|
955
|
+
id: string;
|
|
956
|
+
currentGuests: number;
|
|
957
|
+
}, {
|
|
958
|
+
description: string | null;
|
|
959
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
960
|
+
name: string;
|
|
961
|
+
coverImageUrl: string | null;
|
|
962
|
+
maxGuests: number;
|
|
963
|
+
dateTime: string;
|
|
964
|
+
id: string;
|
|
965
|
+
currentGuests: number;
|
|
966
|
+
}>;
|
|
967
|
+
}, "strip", z.ZodTypeAny, {
|
|
968
|
+
id: string;
|
|
969
|
+
checkedInAt: string;
|
|
970
|
+
event: {
|
|
971
|
+
description: string | null;
|
|
972
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
973
|
+
name: string;
|
|
974
|
+
coverImageUrl: string | null;
|
|
975
|
+
maxGuests: number;
|
|
976
|
+
dateTime: string;
|
|
977
|
+
id: string;
|
|
978
|
+
currentGuests: number;
|
|
979
|
+
};
|
|
980
|
+
eventId: string;
|
|
981
|
+
}, {
|
|
982
|
+
id: string;
|
|
983
|
+
checkedInAt: string;
|
|
984
|
+
event: {
|
|
985
|
+
description: string | null;
|
|
986
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
987
|
+
name: string;
|
|
988
|
+
coverImageUrl: string | null;
|
|
989
|
+
maxGuests: number;
|
|
990
|
+
dateTime: string;
|
|
991
|
+
id: string;
|
|
992
|
+
currentGuests: number;
|
|
993
|
+
};
|
|
994
|
+
eventId: string;
|
|
995
|
+
}>, "many">;
|
|
996
|
+
401: z.ZodObject<{
|
|
997
|
+
message: z.ZodString;
|
|
998
|
+
}, "strip", z.ZodTypeAny, {
|
|
999
|
+
message: string;
|
|
1000
|
+
}, {
|
|
1001
|
+
message: string;
|
|
1002
|
+
}>;
|
|
1003
|
+
};
|
|
1004
|
+
};
|
|
921
1005
|
};
|
|
922
1006
|
|
|
923
1007
|
declare const TurnCredentialsResponseSchema: z.ZodObject<{
|
|
@@ -1007,6 +1091,7 @@ declare const contract: {
|
|
|
1007
1091
|
verify: {
|
|
1008
1092
|
metadata: {
|
|
1009
1093
|
openApiTags: string[];
|
|
1094
|
+
openApiSecurity: never[];
|
|
1010
1095
|
};
|
|
1011
1096
|
summary: "Verify DID signature and receive JWT";
|
|
1012
1097
|
description: string;
|
|
@@ -1066,19 +1151,19 @@ declare const contract: {
|
|
|
1066
1151
|
description: zod.ZodOptional<zod.ZodString>;
|
|
1067
1152
|
maxGuests: zod.ZodNumber;
|
|
1068
1153
|
dateTime: zod.ZodString;
|
|
1069
|
-
requestedFields: zod.ZodArray<zod.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "
|
|
1154
|
+
requestedFields: zod.ZodArray<zod.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "permanentAddress", "documentNumber"]>, "many">;
|
|
1070
1155
|
}, "strip", zod.ZodTypeAny, {
|
|
1071
1156
|
name: string;
|
|
1072
1157
|
maxGuests: number;
|
|
1073
1158
|
dateTime: string;
|
|
1074
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
1159
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
1075
1160
|
description?: string | undefined;
|
|
1076
1161
|
coverImageUrl?: string | undefined;
|
|
1077
1162
|
}, {
|
|
1078
1163
|
name: string;
|
|
1079
1164
|
maxGuests: number;
|
|
1080
1165
|
dateTime: string;
|
|
1081
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
1166
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
1082
1167
|
description?: string | undefined;
|
|
1083
1168
|
coverImageUrl?: string | undefined;
|
|
1084
1169
|
}>;
|
|
@@ -1485,6 +1570,7 @@ declare const contract: {
|
|
|
1485
1570
|
info: {
|
|
1486
1571
|
metadata: {
|
|
1487
1572
|
openApiTags: string[];
|
|
1573
|
+
openApiSecurity: never[];
|
|
1488
1574
|
};
|
|
1489
1575
|
summary: "Get event info and VP request for check-in (public)";
|
|
1490
1576
|
method: "GET";
|
|
@@ -1564,6 +1650,7 @@ declare const contract: {
|
|
|
1564
1650
|
submit: {
|
|
1565
1651
|
metadata: {
|
|
1566
1652
|
openApiTags: string[];
|
|
1653
|
+
openApiSecurity: never[];
|
|
1567
1654
|
};
|
|
1568
1655
|
summary: "Submit VP for event check-in — issues participation VC on success (public)";
|
|
1569
1656
|
method: "POST";
|
|
@@ -1612,6 +1699,87 @@ declare const contract: {
|
|
|
1612
1699
|
}>;
|
|
1613
1700
|
};
|
|
1614
1701
|
};
|
|
1702
|
+
myCheckins: {
|
|
1703
|
+
metadata: {
|
|
1704
|
+
openApiTags: string[];
|
|
1705
|
+
openApiSecurity: {
|
|
1706
|
+
bearerAuth: never[];
|
|
1707
|
+
}[];
|
|
1708
|
+
};
|
|
1709
|
+
summary: "List authenticated user check-ins";
|
|
1710
|
+
method: "GET";
|
|
1711
|
+
path: "/v1/checkin/my";
|
|
1712
|
+
responses: {
|
|
1713
|
+
200: zod.ZodArray<zod.ZodObject<{
|
|
1714
|
+
id: zod.ZodString;
|
|
1715
|
+
eventId: zod.ZodString;
|
|
1716
|
+
checkedInAt: zod.ZodString;
|
|
1717
|
+
event: zod.ZodObject<{
|
|
1718
|
+
id: zod.ZodString;
|
|
1719
|
+
name: zod.ZodString;
|
|
1720
|
+
coverImageUrl: zod.ZodNullable<zod.ZodString>;
|
|
1721
|
+
description: zod.ZodNullable<zod.ZodString>;
|
|
1722
|
+
maxGuests: zod.ZodNumber;
|
|
1723
|
+
dateTime: zod.ZodString;
|
|
1724
|
+
currentGuests: zod.ZodNumber;
|
|
1725
|
+
status: zod.ZodEnum<["ACTIVE", "CANCELLED", "COMPLETED"]>;
|
|
1726
|
+
}, "strip", zod.ZodTypeAny, {
|
|
1727
|
+
description: string | null;
|
|
1728
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
1729
|
+
name: string;
|
|
1730
|
+
coverImageUrl: string | null;
|
|
1731
|
+
maxGuests: number;
|
|
1732
|
+
dateTime: string;
|
|
1733
|
+
id: string;
|
|
1734
|
+
currentGuests: number;
|
|
1735
|
+
}, {
|
|
1736
|
+
description: string | null;
|
|
1737
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
1738
|
+
name: string;
|
|
1739
|
+
coverImageUrl: string | null;
|
|
1740
|
+
maxGuests: number;
|
|
1741
|
+
dateTime: string;
|
|
1742
|
+
id: string;
|
|
1743
|
+
currentGuests: number;
|
|
1744
|
+
}>;
|
|
1745
|
+
}, "strip", zod.ZodTypeAny, {
|
|
1746
|
+
id: string;
|
|
1747
|
+
checkedInAt: string;
|
|
1748
|
+
event: {
|
|
1749
|
+
description: string | null;
|
|
1750
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
1751
|
+
name: string;
|
|
1752
|
+
coverImageUrl: string | null;
|
|
1753
|
+
maxGuests: number;
|
|
1754
|
+
dateTime: string;
|
|
1755
|
+
id: string;
|
|
1756
|
+
currentGuests: number;
|
|
1757
|
+
};
|
|
1758
|
+
eventId: string;
|
|
1759
|
+
}, {
|
|
1760
|
+
id: string;
|
|
1761
|
+
checkedInAt: string;
|
|
1762
|
+
event: {
|
|
1763
|
+
description: string | null;
|
|
1764
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
1765
|
+
name: string;
|
|
1766
|
+
coverImageUrl: string | null;
|
|
1767
|
+
maxGuests: number;
|
|
1768
|
+
dateTime: string;
|
|
1769
|
+
id: string;
|
|
1770
|
+
currentGuests: number;
|
|
1771
|
+
};
|
|
1772
|
+
eventId: string;
|
|
1773
|
+
}>, "many">;
|
|
1774
|
+
401: zod.ZodObject<{
|
|
1775
|
+
message: zod.ZodString;
|
|
1776
|
+
}, "strip", zod.ZodTypeAny, {
|
|
1777
|
+
message: string;
|
|
1778
|
+
}, {
|
|
1779
|
+
message: string;
|
|
1780
|
+
}>;
|
|
1781
|
+
};
|
|
1782
|
+
};
|
|
1615
1783
|
};
|
|
1616
1784
|
turn: {
|
|
1617
1785
|
credentials: {
|
package/dist/index.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ declare const authContract: {
|
|
|
28
28
|
verify: {
|
|
29
29
|
metadata: {
|
|
30
30
|
openApiTags: string[];
|
|
31
|
+
openApiSecurity: never[];
|
|
31
32
|
};
|
|
32
33
|
summary: "Verify DID signature and receive JWT";
|
|
33
34
|
description: string;
|
|
@@ -81,7 +82,7 @@ declare const authContract: {
|
|
|
81
82
|
*/
|
|
82
83
|
declare function buildAuthMessage(did: string, scheme?: AuthScheme, domain?: string, issuedAt?: string): string;
|
|
83
84
|
|
|
84
|
-
declare const SUPPORTED_FIELDS: readonly ["fullName", "age", "portrait", "gender", "nationality", "
|
|
85
|
+
declare const SUPPORTED_FIELDS: readonly ["fullName", "age", "portrait", "gender", "nationality", "permanentAddress", "documentNumber"];
|
|
85
86
|
type SupportedField = (typeof SUPPORTED_FIELDS)[number];
|
|
86
87
|
declare const CreateEventSchema: z.ZodObject<{
|
|
87
88
|
name: z.ZodString;
|
|
@@ -89,19 +90,19 @@ declare const CreateEventSchema: z.ZodObject<{
|
|
|
89
90
|
description: z.ZodOptional<z.ZodString>;
|
|
90
91
|
maxGuests: z.ZodNumber;
|
|
91
92
|
dateTime: z.ZodString;
|
|
92
|
-
requestedFields: z.ZodArray<z.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "
|
|
93
|
+
requestedFields: z.ZodArray<z.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "permanentAddress", "documentNumber"]>, "many">;
|
|
93
94
|
}, "strip", z.ZodTypeAny, {
|
|
94
95
|
name: string;
|
|
95
96
|
maxGuests: number;
|
|
96
97
|
dateTime: string;
|
|
97
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
98
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
98
99
|
description?: string | undefined;
|
|
99
100
|
coverImageUrl?: string | undefined;
|
|
100
101
|
}, {
|
|
101
102
|
name: string;
|
|
102
103
|
maxGuests: number;
|
|
103
104
|
dateTime: string;
|
|
104
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
105
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
105
106
|
description?: string | undefined;
|
|
106
107
|
coverImageUrl?: string | undefined;
|
|
107
108
|
}>;
|
|
@@ -271,19 +272,19 @@ declare const eventsContract: {
|
|
|
271
272
|
description: z.ZodOptional<z.ZodString>;
|
|
272
273
|
maxGuests: z.ZodNumber;
|
|
273
274
|
dateTime: z.ZodString;
|
|
274
|
-
requestedFields: z.ZodArray<z.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "
|
|
275
|
+
requestedFields: z.ZodArray<z.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "permanentAddress", "documentNumber"]>, "many">;
|
|
275
276
|
}, "strip", z.ZodTypeAny, {
|
|
276
277
|
name: string;
|
|
277
278
|
maxGuests: number;
|
|
278
279
|
dateTime: string;
|
|
279
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
280
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
280
281
|
description?: string | undefined;
|
|
281
282
|
coverImageUrl?: string | undefined;
|
|
282
283
|
}, {
|
|
283
284
|
name: string;
|
|
284
285
|
maxGuests: number;
|
|
285
286
|
dateTime: string;
|
|
286
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
287
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
287
288
|
description?: string | undefined;
|
|
288
289
|
coverImageUrl?: string | undefined;
|
|
289
290
|
}>;
|
|
@@ -791,6 +792,7 @@ declare const checkinContract: {
|
|
|
791
792
|
info: {
|
|
792
793
|
metadata: {
|
|
793
794
|
openApiTags: string[];
|
|
795
|
+
openApiSecurity: never[];
|
|
794
796
|
};
|
|
795
797
|
summary: "Get event info and VP request for check-in (public)";
|
|
796
798
|
method: "GET";
|
|
@@ -870,6 +872,7 @@ declare const checkinContract: {
|
|
|
870
872
|
submit: {
|
|
871
873
|
metadata: {
|
|
872
874
|
openApiTags: string[];
|
|
875
|
+
openApiSecurity: never[];
|
|
873
876
|
};
|
|
874
877
|
summary: "Submit VP for event check-in — issues participation VC on success (public)";
|
|
875
878
|
method: "POST";
|
|
@@ -918,6 +921,87 @@ declare const checkinContract: {
|
|
|
918
921
|
}>;
|
|
919
922
|
};
|
|
920
923
|
};
|
|
924
|
+
myCheckins: {
|
|
925
|
+
metadata: {
|
|
926
|
+
openApiTags: string[];
|
|
927
|
+
openApiSecurity: {
|
|
928
|
+
bearerAuth: never[];
|
|
929
|
+
}[];
|
|
930
|
+
};
|
|
931
|
+
summary: "List authenticated user check-ins";
|
|
932
|
+
method: "GET";
|
|
933
|
+
path: "/v1/checkin/my";
|
|
934
|
+
responses: {
|
|
935
|
+
200: z.ZodArray<z.ZodObject<{
|
|
936
|
+
id: z.ZodString;
|
|
937
|
+
eventId: z.ZodString;
|
|
938
|
+
checkedInAt: z.ZodString;
|
|
939
|
+
event: z.ZodObject<{
|
|
940
|
+
id: z.ZodString;
|
|
941
|
+
name: z.ZodString;
|
|
942
|
+
coverImageUrl: z.ZodNullable<z.ZodString>;
|
|
943
|
+
description: z.ZodNullable<z.ZodString>;
|
|
944
|
+
maxGuests: z.ZodNumber;
|
|
945
|
+
dateTime: z.ZodString;
|
|
946
|
+
currentGuests: z.ZodNumber;
|
|
947
|
+
status: z.ZodEnum<["ACTIVE", "CANCELLED", "COMPLETED"]>;
|
|
948
|
+
}, "strip", z.ZodTypeAny, {
|
|
949
|
+
description: string | null;
|
|
950
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
951
|
+
name: string;
|
|
952
|
+
coverImageUrl: string | null;
|
|
953
|
+
maxGuests: number;
|
|
954
|
+
dateTime: string;
|
|
955
|
+
id: string;
|
|
956
|
+
currentGuests: number;
|
|
957
|
+
}, {
|
|
958
|
+
description: string | null;
|
|
959
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
960
|
+
name: string;
|
|
961
|
+
coverImageUrl: string | null;
|
|
962
|
+
maxGuests: number;
|
|
963
|
+
dateTime: string;
|
|
964
|
+
id: string;
|
|
965
|
+
currentGuests: number;
|
|
966
|
+
}>;
|
|
967
|
+
}, "strip", z.ZodTypeAny, {
|
|
968
|
+
id: string;
|
|
969
|
+
checkedInAt: string;
|
|
970
|
+
event: {
|
|
971
|
+
description: string | null;
|
|
972
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
973
|
+
name: string;
|
|
974
|
+
coverImageUrl: string | null;
|
|
975
|
+
maxGuests: number;
|
|
976
|
+
dateTime: string;
|
|
977
|
+
id: string;
|
|
978
|
+
currentGuests: number;
|
|
979
|
+
};
|
|
980
|
+
eventId: string;
|
|
981
|
+
}, {
|
|
982
|
+
id: string;
|
|
983
|
+
checkedInAt: string;
|
|
984
|
+
event: {
|
|
985
|
+
description: string | null;
|
|
986
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
987
|
+
name: string;
|
|
988
|
+
coverImageUrl: string | null;
|
|
989
|
+
maxGuests: number;
|
|
990
|
+
dateTime: string;
|
|
991
|
+
id: string;
|
|
992
|
+
currentGuests: number;
|
|
993
|
+
};
|
|
994
|
+
eventId: string;
|
|
995
|
+
}>, "many">;
|
|
996
|
+
401: z.ZodObject<{
|
|
997
|
+
message: z.ZodString;
|
|
998
|
+
}, "strip", z.ZodTypeAny, {
|
|
999
|
+
message: string;
|
|
1000
|
+
}, {
|
|
1001
|
+
message: string;
|
|
1002
|
+
}>;
|
|
1003
|
+
};
|
|
1004
|
+
};
|
|
921
1005
|
};
|
|
922
1006
|
|
|
923
1007
|
declare const TurnCredentialsResponseSchema: z.ZodObject<{
|
|
@@ -1007,6 +1091,7 @@ declare const contract: {
|
|
|
1007
1091
|
verify: {
|
|
1008
1092
|
metadata: {
|
|
1009
1093
|
openApiTags: string[];
|
|
1094
|
+
openApiSecurity: never[];
|
|
1010
1095
|
};
|
|
1011
1096
|
summary: "Verify DID signature and receive JWT";
|
|
1012
1097
|
description: string;
|
|
@@ -1066,19 +1151,19 @@ declare const contract: {
|
|
|
1066
1151
|
description: zod.ZodOptional<zod.ZodString>;
|
|
1067
1152
|
maxGuests: zod.ZodNumber;
|
|
1068
1153
|
dateTime: zod.ZodString;
|
|
1069
|
-
requestedFields: zod.ZodArray<zod.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "
|
|
1154
|
+
requestedFields: zod.ZodArray<zod.ZodEnum<["fullName", "age", "portrait", "gender", "nationality", "permanentAddress", "documentNumber"]>, "many">;
|
|
1070
1155
|
}, "strip", zod.ZodTypeAny, {
|
|
1071
1156
|
name: string;
|
|
1072
1157
|
maxGuests: number;
|
|
1073
1158
|
dateTime: string;
|
|
1074
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
1159
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
1075
1160
|
description?: string | undefined;
|
|
1076
1161
|
coverImageUrl?: string | undefined;
|
|
1077
1162
|
}, {
|
|
1078
1163
|
name: string;
|
|
1079
1164
|
maxGuests: number;
|
|
1080
1165
|
dateTime: string;
|
|
1081
|
-
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "
|
|
1166
|
+
requestedFields: ("fullName" | "age" | "portrait" | "gender" | "nationality" | "permanentAddress" | "documentNumber")[];
|
|
1082
1167
|
description?: string | undefined;
|
|
1083
1168
|
coverImageUrl?: string | undefined;
|
|
1084
1169
|
}>;
|
|
@@ -1485,6 +1570,7 @@ declare const contract: {
|
|
|
1485
1570
|
info: {
|
|
1486
1571
|
metadata: {
|
|
1487
1572
|
openApiTags: string[];
|
|
1573
|
+
openApiSecurity: never[];
|
|
1488
1574
|
};
|
|
1489
1575
|
summary: "Get event info and VP request for check-in (public)";
|
|
1490
1576
|
method: "GET";
|
|
@@ -1564,6 +1650,7 @@ declare const contract: {
|
|
|
1564
1650
|
submit: {
|
|
1565
1651
|
metadata: {
|
|
1566
1652
|
openApiTags: string[];
|
|
1653
|
+
openApiSecurity: never[];
|
|
1567
1654
|
};
|
|
1568
1655
|
summary: "Submit VP for event check-in — issues participation VC on success (public)";
|
|
1569
1656
|
method: "POST";
|
|
@@ -1612,6 +1699,87 @@ declare const contract: {
|
|
|
1612
1699
|
}>;
|
|
1613
1700
|
};
|
|
1614
1701
|
};
|
|
1702
|
+
myCheckins: {
|
|
1703
|
+
metadata: {
|
|
1704
|
+
openApiTags: string[];
|
|
1705
|
+
openApiSecurity: {
|
|
1706
|
+
bearerAuth: never[];
|
|
1707
|
+
}[];
|
|
1708
|
+
};
|
|
1709
|
+
summary: "List authenticated user check-ins";
|
|
1710
|
+
method: "GET";
|
|
1711
|
+
path: "/v1/checkin/my";
|
|
1712
|
+
responses: {
|
|
1713
|
+
200: zod.ZodArray<zod.ZodObject<{
|
|
1714
|
+
id: zod.ZodString;
|
|
1715
|
+
eventId: zod.ZodString;
|
|
1716
|
+
checkedInAt: zod.ZodString;
|
|
1717
|
+
event: zod.ZodObject<{
|
|
1718
|
+
id: zod.ZodString;
|
|
1719
|
+
name: zod.ZodString;
|
|
1720
|
+
coverImageUrl: zod.ZodNullable<zod.ZodString>;
|
|
1721
|
+
description: zod.ZodNullable<zod.ZodString>;
|
|
1722
|
+
maxGuests: zod.ZodNumber;
|
|
1723
|
+
dateTime: zod.ZodString;
|
|
1724
|
+
currentGuests: zod.ZodNumber;
|
|
1725
|
+
status: zod.ZodEnum<["ACTIVE", "CANCELLED", "COMPLETED"]>;
|
|
1726
|
+
}, "strip", zod.ZodTypeAny, {
|
|
1727
|
+
description: string | null;
|
|
1728
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
1729
|
+
name: string;
|
|
1730
|
+
coverImageUrl: string | null;
|
|
1731
|
+
maxGuests: number;
|
|
1732
|
+
dateTime: string;
|
|
1733
|
+
id: string;
|
|
1734
|
+
currentGuests: number;
|
|
1735
|
+
}, {
|
|
1736
|
+
description: string | null;
|
|
1737
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
1738
|
+
name: string;
|
|
1739
|
+
coverImageUrl: string | null;
|
|
1740
|
+
maxGuests: number;
|
|
1741
|
+
dateTime: string;
|
|
1742
|
+
id: string;
|
|
1743
|
+
currentGuests: number;
|
|
1744
|
+
}>;
|
|
1745
|
+
}, "strip", zod.ZodTypeAny, {
|
|
1746
|
+
id: string;
|
|
1747
|
+
checkedInAt: string;
|
|
1748
|
+
event: {
|
|
1749
|
+
description: string | null;
|
|
1750
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
1751
|
+
name: string;
|
|
1752
|
+
coverImageUrl: string | null;
|
|
1753
|
+
maxGuests: number;
|
|
1754
|
+
dateTime: string;
|
|
1755
|
+
id: string;
|
|
1756
|
+
currentGuests: number;
|
|
1757
|
+
};
|
|
1758
|
+
eventId: string;
|
|
1759
|
+
}, {
|
|
1760
|
+
id: string;
|
|
1761
|
+
checkedInAt: string;
|
|
1762
|
+
event: {
|
|
1763
|
+
description: string | null;
|
|
1764
|
+
status: "ACTIVE" | "CANCELLED" | "COMPLETED";
|
|
1765
|
+
name: string;
|
|
1766
|
+
coverImageUrl: string | null;
|
|
1767
|
+
maxGuests: number;
|
|
1768
|
+
dateTime: string;
|
|
1769
|
+
id: string;
|
|
1770
|
+
currentGuests: number;
|
|
1771
|
+
};
|
|
1772
|
+
eventId: string;
|
|
1773
|
+
}>, "many">;
|
|
1774
|
+
401: zod.ZodObject<{
|
|
1775
|
+
message: zod.ZodString;
|
|
1776
|
+
}, "strip", zod.ZodTypeAny, {
|
|
1777
|
+
message: string;
|
|
1778
|
+
}, {
|
|
1779
|
+
message: string;
|
|
1780
|
+
}>;
|
|
1781
|
+
};
|
|
1782
|
+
};
|
|
1615
1783
|
};
|
|
1616
1784
|
turn: {
|
|
1617
1785
|
credentials: {
|
package/dist/index.js
CHANGED
|
@@ -117,7 +117,7 @@ var authContract = c.router({
|
|
|
117
117
|
"| `400` | Invalid message format (bad JSON, extra keys, wrong domain) |",
|
|
118
118
|
"| `401` | Message expired, DID mismatch, invalid or non-matching signature |"
|
|
119
119
|
].join("\n"),
|
|
120
|
-
metadata: { openApiTags: ["Auth"] }
|
|
120
|
+
metadata: { openApiTags: ["Auth"], openApiSecurity: [] }
|
|
121
121
|
}
|
|
122
122
|
});
|
|
123
123
|
function buildAuthMessage(did, scheme = "eip191", domain = "1Matrix Events", issuedAt = (/* @__PURE__ */ new Date()).toISOString()) {
|
|
@@ -134,20 +134,20 @@ var SUPPORTED_FIELDS = [
|
|
|
134
134
|
"portrait",
|
|
135
135
|
"gender",
|
|
136
136
|
"nationality",
|
|
137
|
-
"
|
|
138
|
-
"
|
|
137
|
+
"permanentAddress",
|
|
138
|
+
"documentNumber"
|
|
139
139
|
];
|
|
140
140
|
var CreateEventSchema = import_zod2.z.object({
|
|
141
|
-
name: import_zod2.z.string().min(1).max(255),
|
|
142
|
-
coverImageUrl: import_zod2.z.string().url().optional(),
|
|
143
|
-
description: import_zod2.z.string().optional(),
|
|
144
|
-
maxGuests: import_zod2.z.number().int().positive(),
|
|
145
|
-
dateTime: import_zod2.z.string().datetime(),
|
|
146
|
-
requestedFields: import_zod2.z.array(import_zod2.z.enum(SUPPORTED_FIELDS)).min(1)
|
|
141
|
+
name: import_zod2.z.string().min(1).max(255).describe("T\xEAn s\u1EF1 ki\u1EC7n"),
|
|
142
|
+
coverImageUrl: import_zod2.z.string().url().optional().describe("\u1EA2nh b\xECa s\u1EF1 ki\u1EC7n"),
|
|
143
|
+
description: import_zod2.z.string().optional().describe("M\xF4 t\u1EA3 s\u1EF1 ki\u1EC7n"),
|
|
144
|
+
maxGuests: import_zod2.z.number().int().positive().describe("S\u1ED1 l\u01B0\u1EE3ng kh\xE1ch t\u1ED1i \u0111a"),
|
|
145
|
+
dateTime: import_zod2.z.string().datetime().describe("Th\u1EDDi gian di\u1EC5n ra s\u1EF1 ki\u1EC7n"),
|
|
146
|
+
requestedFields: import_zod2.z.array(import_zod2.z.enum(SUPPORTED_FIELDS)).min(1).describe("C\xE1c tr\u01B0\u1EDDng d\u1EEF li\u1EC7u y\xEAu c\u1EA7u x\xE1c th\u1EF1c")
|
|
147
147
|
});
|
|
148
148
|
var UpdateEventSchema = import_zod2.z.object({
|
|
149
149
|
name: import_zod2.z.string().min(1).max(255).optional(),
|
|
150
|
-
coverImageUrl: import_zod2.z.string().
|
|
150
|
+
coverImageUrl: import_zod2.z.string().nullable().optional(),
|
|
151
151
|
description: import_zod2.z.string().nullable().optional(),
|
|
152
152
|
maxGuests: import_zod2.z.number().int().positive().optional(),
|
|
153
153
|
dateTime: import_zod2.z.string().datetime().optional(),
|
|
@@ -289,7 +289,7 @@ var checkinContract = c3.router({
|
|
|
289
289
|
404: import_zod3.z.object({ message: import_zod3.z.string() })
|
|
290
290
|
},
|
|
291
291
|
summary: "Get event info and VP request for check-in (public)",
|
|
292
|
-
metadata: { openApiTags: ["Check-in"] }
|
|
292
|
+
metadata: { openApiTags: ["Check-in"], openApiSecurity: [] }
|
|
293
293
|
},
|
|
294
294
|
submit: {
|
|
295
295
|
method: "POST",
|
|
@@ -302,7 +302,24 @@ var checkinContract = c3.router({
|
|
|
302
302
|
409: import_zod3.z.object({ message: import_zod3.z.string() })
|
|
303
303
|
},
|
|
304
304
|
summary: "Submit VP for event check-in \u2014 issues participation VC on success (public)",
|
|
305
|
-
metadata: { openApiTags: ["Check-in"] }
|
|
305
|
+
metadata: { openApiTags: ["Check-in"], openApiSecurity: [] }
|
|
306
|
+
},
|
|
307
|
+
myCheckins: {
|
|
308
|
+
method: "GET",
|
|
309
|
+
path: "/v1/checkin/my",
|
|
310
|
+
responses: {
|
|
311
|
+
200: import_zod3.z.array(
|
|
312
|
+
import_zod3.z.object({
|
|
313
|
+
id: import_zod3.z.string(),
|
|
314
|
+
eventId: import_zod3.z.string(),
|
|
315
|
+
checkedInAt: import_zod3.z.string(),
|
|
316
|
+
event: EventPublicInfoSchema
|
|
317
|
+
})
|
|
318
|
+
),
|
|
319
|
+
401: import_zod3.z.object({ message: import_zod3.z.string() })
|
|
320
|
+
},
|
|
321
|
+
summary: "List authenticated user check-ins",
|
|
322
|
+
metadata: { openApiTags: ["Check-in"], openApiSecurity: [{ bearerAuth: [] }] }
|
|
306
323
|
}
|
|
307
324
|
});
|
|
308
325
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/v1/auth.ts","../src/v1/events.ts","../src/v1/checkin.ts","../src/v1/turn.ts"],"sourcesContent":["import { initContract } from '@ts-rest/core';\nimport { authContract } from './v1/auth';\nimport { eventsContract } from './v1/events';\nimport { checkinContract } from './v1/checkin';\nimport { turnContract } from './v1/turn';\n\nexport * from './v1';\n\nconst c = initContract();\n\nexport const contract = c.router({\n v1: c.router({\n auth: authContract,\n events: eventsContract,\n checkin: checkinContract,\n turn: turnContract,\n }),\n});\n\nexport type Contract = typeof contract;\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const AuthScheme = z.enum(['eip191']);\nexport type AuthScheme = z.infer<typeof AuthScheme>;\n\nexport const VerifyRequestSchema = z.object({\n did: z.string().min(1).describe('DID of the authenticating user (e.g. `did:ethr:0xABC...`)'),\n signature: z\n .string()\n .min(1)\n .describe(\n 'Hex signature of the `message` string, produced by the scheme specified in the message',\n ),\n message: z\n .string()\n .min(1)\n .describe(\n 'Canonical JSON string that was signed. Must be `JSON.stringify({ domain, did, issuedAt, scheme })` where `issuedAt` is an ISO-8601 UTC timestamp within the last 60 seconds and `scheme` is the signing scheme used.',\n ),\n});\n\nexport const VerifyResponseSchema = z.object({\n accessToken: z.string(),\n});\n\nexport const authContract = c.router({\n verify: {\n method: 'POST',\n path: '/v1/auth/verify',\n body: VerifyRequestSchema,\n responses: {\n 200: VerifyResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Verify DID signature and receive JWT',\n description: [\n '## Authentication Flow (1-turn)',\n '',\n 'The client constructs a JSON message, signs it with their Ethereum private key, and submits everything in a single request.',\n '',\n '### Crypto Suite',\n '',\n '| Property | Value |',\n '|----------|-------|',\n '| **Signing scheme** | ECDSA secp256k1 (`scheme: \"eip191\"`) |',\n '| **Signature format** | [EIP-191](https://eips.ethereum.org/EIPS/eip-191) `personal_sign` (65-byte `r‖s‖v`, hex-encoded with `0x` prefix) |',\n '| **DID method** | `did:ethr` — the Ethereum address in the DID must match the signer |',\n '| **Message encoding** | UTF-8 JSON string |',\n '',\n '### Steps',\n '',\n '1. **Build the message** — a canonical JSON string:',\n ' ```json',\n ' {\"domain\":\"1Matrix Events\",\"did\":\"did:ethr:0xYOUR_ADDRESS\",\"issuedAt\":\"2026-02-25T12:00:00.000Z\",\"scheme\":\"eip191\"}',\n ' ```',\n ' Use the `buildAuthMessage(did)` helper from `@1mtx/did-api-contract`, or construct it manually.',\n '',\n '2. **Sign the message** using EIP-191 `personal_sign`:',\n ' ```ts',\n ' // ethers.js v6',\n ' const signature = await wallet.signMessage(message);',\n ' ```',\n '',\n '3. **POST** `{ did, signature, message }` to this endpoint.',\n '',\n '### Validation Rules',\n '',\n '- `issuedAt` must be within **60 seconds in the past** or **5 seconds in the future** (clock tolerance).',\n '- `domain` must equal `\"1Matrix Events\"`.',\n '- `did` in the message must match the `did` in the request body.',\n '- `scheme` must be a supported value (currently only `\"eip191\"`).',\n '- No extra JSON keys beyond `domain`, `did`, `issuedAt`, `scheme` are allowed.',\n '',\n '### Error Codes',\n '',\n '| Status | Reason |',\n '|--------|--------|',\n '| `400` | Invalid message format (bad JSON, extra keys, wrong domain) |',\n '| `401` | Message expired, DID mismatch, invalid or non-matching signature |',\n ].join('\\n'),\n metadata: { openApiTags: ['Auth'] },\n },\n});\n\n/**\n * Builds the canonical JSON string to be signed by the client.\n *\n * Usage:\n * const message = buildAuthMessage(did);\n * const signature = await wallet.signMessage(message);\n * // POST /v1/auth/verify { did, signature, message }\n */\nexport function buildAuthMessage(\n did: string,\n scheme: AuthScheme = 'eip191',\n domain = '1Matrix Events',\n issuedAt: string = new Date().toISOString(),\n): string {\n return JSON.stringify({ domain, did, issuedAt, scheme });\n}\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const SUPPORTED_FIELDS = [\n 'fullName',\n 'age',\n 'portrait',\n 'gender',\n 'nationality',\n 'address',\n 'idNumber',\n] as const;\n\nexport type SupportedField = (typeof SUPPORTED_FIELDS)[number];\n\nexport const CreateEventSchema = z.object({\n name: z.string().min(1).max(255),\n coverImageUrl: z.string().url().optional(),\n description: z.string().optional(),\n maxGuests: z.number().int().positive(),\n dateTime: z.string().datetime(),\n requestedFields: z.array(z.enum(SUPPORTED_FIELDS)).min(1),\n});\n\nexport const UpdateEventSchema = z.object({\n name: z.string().min(1).max(255).optional(),\n coverImageUrl: z.string().url().nullable().optional(),\n description: z.string().nullable().optional(),\n maxGuests: z.number().int().positive().optional(),\n dateTime: z.string().datetime().optional(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']).optional(),\n});\n\nexport const ParticipantSchema = z.object({\n id: z.string(),\n holderDid: z.string(),\n disclosedFields: z.record(z.unknown()),\n checkedInAt: z.string(),\n});\n\nexport const EventResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n dateTime: z.string(),\n userId: z.string(),\n requestedFields: z.array(z.string()),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n participantCount: z.number(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const EventDetailResponseSchema = EventResponseSchema.extend({\n participants: z.array(ParticipantSchema),\n vpRequest: z.record(z.unknown()),\n});\n\nconst SECURITY = [{ bearerAuth: [] }];\n\nexport const eventsContract = c.router({\n create: {\n method: 'POST',\n path: '/v1/events',\n body: CreateEventSchema,\n responses: {\n 201: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Create a new event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n list: {\n method: 'GET',\n path: '/v1/events',\n responses: {\n 200: z.array(EventResponseSchema),\n 401: z.object({ message: z.string() }),\n },\n summary: \"List authenticated organiser's events\",\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getById: {\n method: 'GET',\n path: '/v1/events/:id',\n responses: {\n 200: EventDetailResponseSchema,\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event details including participants (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n update: {\n method: 'PATCH',\n path: '/v1/events/:id',\n body: UpdateEventSchema,\n responses: {\n 200: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Update event fields (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n delete: {\n method: 'DELETE',\n path: '/v1/events/:id',\n body: c.noBody(),\n responses: {\n 204: z.undefined(),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Delete event and all related data (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getCredentials: {\n method: 'GET',\n path: '/v1/events/:id/credentials',\n responses: {\n 200: z.array(z.record(z.unknown())),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'List issued VCs for event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const EventPublicInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n dateTime: z.string(),\n currentGuests: z.number(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n});\n\nexport const CheckinInfoResponseSchema = z.object({\n event: EventPublicInfoSchema,\n vpRequest: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitRequestSchema = z.object({\n verifiablePresentation: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitResponseSchema = z.object({\n success: z.literal(true),\n credential: z.record(z.unknown()),\n});\n\nexport const checkinContract = c.router({\n info: {\n method: 'GET',\n path: '/v1/checkin/:eventId/info',\n responses: {\n 200: CheckinInfoResponseSchema,\n 400: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event info and VP request for check-in (public)',\n metadata: { openApiTags: ['Check-in'] },\n },\n submit: {\n method: 'POST',\n path: '/v1/checkin/:eventId/submit',\n body: CheckinSubmitRequestSchema,\n responses: {\n 200: CheckinSubmitResponseSchema,\n 400: z.object({ message: z.string(), errors: z.array(z.string()).optional() }),\n 404: z.object({ message: z.string() }),\n 409: z.object({ message: z.string() }),\n },\n summary: 'Submit VP for event check-in — issues participation VC on success (public)',\n metadata: { openApiTags: ['Check-in'] },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nconst IceServerSchema = z.object({\n urls: z.union([z.string(), z.array(z.string())]),\n username: z.string().optional(),\n credential: z.string().optional(),\n});\n\nexport const TurnCredentialsResponseSchema = z.object({\n iceServers: z.array(IceServerSchema),\n});\n\nexport const turnContract = c.router({\n credentials: {\n method: 'GET',\n path: '/v1/turn/credentials',\n responses: {\n 200: TurnCredentialsResponseSchema,\n 401: z.object({ message: z.string() }),\n 502: z.object({ message: z.string() }),\n },\n summary: 'Get Cloudflare TURN credentials for WebRTC (authenticated)',\n metadata: { openApiTags: ['TURN'] },\n },\n});\n"],"mappings":"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","names":["import_core","import_core","import_zod","c","import_core","import_zod","c","import_core","import_zod","c","c"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/v1/auth.ts","../src/v1/events.ts","../src/v1/checkin.ts","../src/v1/turn.ts"],"sourcesContent":["import { initContract } from '@ts-rest/core';\nimport { authContract } from './v1/auth';\nimport { eventsContract } from './v1/events';\nimport { checkinContract } from './v1/checkin';\nimport { turnContract } from './v1/turn';\n\nexport * from './v1';\n\nconst c = initContract();\n\nexport const contract = c.router({\n v1: c.router({\n auth: authContract,\n events: eventsContract,\n checkin: checkinContract,\n turn: turnContract,\n }),\n});\n\nexport type Contract = typeof contract;\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const AuthScheme = z.enum(['eip191']);\nexport type AuthScheme = z.infer<typeof AuthScheme>;\n\nexport const VerifyRequestSchema = z.object({\n did: z.string().min(1).describe('DID of the authenticating user (e.g. `did:ethr:0xABC...`)'),\n signature: z\n .string()\n .min(1)\n .describe(\n 'Hex signature of the `message` string, produced by the scheme specified in the message',\n ),\n message: z\n .string()\n .min(1)\n .describe(\n 'Canonical JSON string that was signed. Must be `JSON.stringify({ domain, did, issuedAt, scheme })` where `issuedAt` is an ISO-8601 UTC timestamp within the last 60 seconds and `scheme` is the signing scheme used.',\n ),\n});\n\nexport const VerifyResponseSchema = z.object({\n accessToken: z.string(),\n});\n\nexport const authContract = c.router({\n verify: {\n method: 'POST',\n path: '/v1/auth/verify',\n body: VerifyRequestSchema,\n responses: {\n 200: VerifyResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Verify DID signature and receive JWT',\n description: [\n '## Authentication Flow (1-turn)',\n '',\n 'The client constructs a JSON message, signs it with their Ethereum private key, and submits everything in a single request.',\n '',\n '### Crypto Suite',\n '',\n '| Property | Value |',\n '|----------|-------|',\n '| **Signing scheme** | ECDSA secp256k1 (`scheme: \"eip191\"`) |',\n '| **Signature format** | [EIP-191](https://eips.ethereum.org/EIPS/eip-191) `personal_sign` (65-byte `r‖s‖v`, hex-encoded with `0x` prefix) |',\n '| **DID method** | `did:ethr` — the Ethereum address in the DID must match the signer |',\n '| **Message encoding** | UTF-8 JSON string |',\n '',\n '### Steps',\n '',\n '1. **Build the message** — a canonical JSON string:',\n ' ```json',\n ' {\"domain\":\"1Matrix Events\",\"did\":\"did:ethr:0xYOUR_ADDRESS\",\"issuedAt\":\"2026-02-25T12:00:00.000Z\",\"scheme\":\"eip191\"}',\n ' ```',\n ' Use the `buildAuthMessage(did)` helper from `@1mtx/did-api-contract`, or construct it manually.',\n '',\n '2. **Sign the message** using EIP-191 `personal_sign`:',\n ' ```ts',\n ' // ethers.js v6',\n ' const signature = await wallet.signMessage(message);',\n ' ```',\n '',\n '3. **POST** `{ did, signature, message }` to this endpoint.',\n '',\n '### Validation Rules',\n '',\n '- `issuedAt` must be within **60 seconds in the past** or **5 seconds in the future** (clock tolerance).',\n '- `domain` must equal `\"1Matrix Events\"`.',\n '- `did` in the message must match the `did` in the request body.',\n '- `scheme` must be a supported value (currently only `\"eip191\"`).',\n '- No extra JSON keys beyond `domain`, `did`, `issuedAt`, `scheme` are allowed.',\n '',\n '### Error Codes',\n '',\n '| Status | Reason |',\n '|--------|--------|',\n '| `400` | Invalid message format (bad JSON, extra keys, wrong domain) |',\n '| `401` | Message expired, DID mismatch, invalid or non-matching signature |',\n ].join('\\n'),\n metadata: { openApiTags: ['Auth'], openApiSecurity: [] },\n },\n});\n\n/**\n * Builds the canonical JSON string to be signed by the client.\n *\n * Usage:\n * const message = buildAuthMessage(did);\n * const signature = await wallet.signMessage(message);\n * // POST /v1/auth/verify { did, signature, message }\n */\nexport function buildAuthMessage(\n did: string,\n scheme: AuthScheme = 'eip191',\n domain = '1Matrix Events',\n issuedAt: string = new Date().toISOString(),\n): string {\n return JSON.stringify({ domain, did, issuedAt, scheme });\n}\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const SUPPORTED_FIELDS = [\n 'fullName',\n 'age',\n 'portrait',\n 'gender',\n 'nationality',\n 'permanentAddress',\n 'documentNumber',\n] as const;\n\nexport type SupportedField = (typeof SUPPORTED_FIELDS)[number];\n\nexport const CreateEventSchema = z.object({\n name: z.string().min(1).max(255).describe('Tên sự kiện'),\n coverImageUrl: z.string().url().optional().describe('Ảnh bìa sự kiện'),\n description: z.string().optional().describe('Mô tả sự kiện'),\n maxGuests: z.number().int().positive().describe('Số lượng khách tối đa'),\n dateTime: z.string().datetime().describe('Thời gian diễn ra sự kiện'),\n requestedFields: z.array(z.enum(SUPPORTED_FIELDS)).min(1).describe('Các trường dữ liệu yêu cầu xác thực'),\n});\n\nexport const UpdateEventSchema = z.object({\n name: z.string().min(1).max(255).optional(),\n coverImageUrl: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n maxGuests: z.number().int().positive().optional(),\n dateTime: z.string().datetime().optional(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']).optional(),\n});\n\nexport const ParticipantSchema = z.object({\n id: z.string(),\n holderDid: z.string(),\n disclosedFields: z.record(z.unknown()),\n checkedInAt: z.string(),\n});\n\nexport const EventResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n dateTime: z.string(),\n userId: z.string(),\n requestedFields: z.array(z.string()),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n participantCount: z.number(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const EventDetailResponseSchema = EventResponseSchema.extend({\n participants: z.array(ParticipantSchema),\n vpRequest: z.record(z.unknown()),\n});\n\nconst SECURITY = [{ bearerAuth: [] }];\n\nexport const eventsContract = c.router({\n create: {\n method: 'POST',\n path: '/v1/events',\n body: CreateEventSchema,\n responses: {\n 201: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Create a new event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n list: {\n method: 'GET',\n path: '/v1/events',\n responses: {\n 200: z.array(EventResponseSchema),\n 401: z.object({ message: z.string() }),\n },\n summary: \"List authenticated organiser's events\",\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getById: {\n method: 'GET',\n path: '/v1/events/:id',\n responses: {\n 200: EventDetailResponseSchema,\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event details including participants (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n update: {\n method: 'PATCH',\n path: '/v1/events/:id',\n body: UpdateEventSchema,\n responses: {\n 200: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Update event fields (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n delete: {\n method: 'DELETE',\n path: '/v1/events/:id',\n body: c.noBody(),\n responses: {\n 204: z.undefined(),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Delete event and all related data (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getCredentials: {\n method: 'GET',\n path: '/v1/events/:id/credentials',\n responses: {\n 200: z.array(z.record(z.unknown())),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'List issued VCs for event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const EventPublicInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n dateTime: z.string(),\n currentGuests: z.number(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n});\n\nexport const CheckinInfoResponseSchema = z.object({\n event: EventPublicInfoSchema,\n vpRequest: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitRequestSchema = z.object({\n verifiablePresentation: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitResponseSchema = z.object({\n success: z.literal(true),\n credential: z.record(z.unknown()),\n});\n\nexport const checkinContract = c.router({\n info: {\n method: 'GET',\n path: '/v1/checkin/:eventId/info',\n responses: {\n 200: CheckinInfoResponseSchema,\n 400: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event info and VP request for check-in (public)',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [] },\n },\n submit: {\n method: 'POST',\n path: '/v1/checkin/:eventId/submit',\n body: CheckinSubmitRequestSchema,\n responses: {\n 200: CheckinSubmitResponseSchema,\n 400: z.object({ message: z.string(), errors: z.array(z.string()).optional() }),\n 404: z.object({ message: z.string() }),\n 409: z.object({ message: z.string() }),\n },\n summary: 'Submit VP for event check-in — issues participation VC on success (public)',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [] },\n },\n myCheckins: {\n method: 'GET',\n path: '/v1/checkin/my',\n responses: {\n 200: z.array(\n z.object({\n id: z.string(),\n eventId: z.string(),\n checkedInAt: z.string(),\n event: EventPublicInfoSchema,\n }),\n ),\n 401: z.object({ message: z.string() }),\n },\n summary: 'List authenticated user check-ins',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [{ bearerAuth: [] }] },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nconst IceServerSchema = z.object({\n urls: z.union([z.string(), z.array(z.string())]),\n username: z.string().optional(),\n credential: z.string().optional(),\n});\n\nexport const TurnCredentialsResponseSchema = z.object({\n iceServers: z.array(IceServerSchema),\n});\n\nexport const turnContract = c.router({\n credentials: {\n method: 'GET',\n path: '/v1/turn/credentials',\n responses: {\n 200: TurnCredentialsResponseSchema,\n 401: z.object({ message: z.string() }),\n 502: z.object({ message: z.string() }),\n },\n summary: 'Get Cloudflare TURN credentials for WebRTC (authenticated)',\n metadata: { openApiTags: ['TURN'] },\n },\n});\n"],"mappings":"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","names":["import_core","import_core","import_zod","c","import_core","import_zod","c","import_core","import_zod","c","c"]}
|
package/dist/index.mjs
CHANGED
|
@@ -74,7 +74,7 @@ var authContract = c.router({
|
|
|
74
74
|
"| `400` | Invalid message format (bad JSON, extra keys, wrong domain) |",
|
|
75
75
|
"| `401` | Message expired, DID mismatch, invalid or non-matching signature |"
|
|
76
76
|
].join("\n"),
|
|
77
|
-
metadata: { openApiTags: ["Auth"] }
|
|
77
|
+
metadata: { openApiTags: ["Auth"], openApiSecurity: [] }
|
|
78
78
|
}
|
|
79
79
|
});
|
|
80
80
|
function buildAuthMessage(did, scheme = "eip191", domain = "1Matrix Events", issuedAt = (/* @__PURE__ */ new Date()).toISOString()) {
|
|
@@ -91,20 +91,20 @@ var SUPPORTED_FIELDS = [
|
|
|
91
91
|
"portrait",
|
|
92
92
|
"gender",
|
|
93
93
|
"nationality",
|
|
94
|
-
"
|
|
95
|
-
"
|
|
94
|
+
"permanentAddress",
|
|
95
|
+
"documentNumber"
|
|
96
96
|
];
|
|
97
97
|
var CreateEventSchema = z2.object({
|
|
98
|
-
name: z2.string().min(1).max(255),
|
|
99
|
-
coverImageUrl: z2.string().url().optional(),
|
|
100
|
-
description: z2.string().optional(),
|
|
101
|
-
maxGuests: z2.number().int().positive(),
|
|
102
|
-
dateTime: z2.string().datetime(),
|
|
103
|
-
requestedFields: z2.array(z2.enum(SUPPORTED_FIELDS)).min(1)
|
|
98
|
+
name: z2.string().min(1).max(255).describe("T\xEAn s\u1EF1 ki\u1EC7n"),
|
|
99
|
+
coverImageUrl: z2.string().url().optional().describe("\u1EA2nh b\xECa s\u1EF1 ki\u1EC7n"),
|
|
100
|
+
description: z2.string().optional().describe("M\xF4 t\u1EA3 s\u1EF1 ki\u1EC7n"),
|
|
101
|
+
maxGuests: z2.number().int().positive().describe("S\u1ED1 l\u01B0\u1EE3ng kh\xE1ch t\u1ED1i \u0111a"),
|
|
102
|
+
dateTime: z2.string().datetime().describe("Th\u1EDDi gian di\u1EC5n ra s\u1EF1 ki\u1EC7n"),
|
|
103
|
+
requestedFields: z2.array(z2.enum(SUPPORTED_FIELDS)).min(1).describe("C\xE1c tr\u01B0\u1EDDng d\u1EEF li\u1EC7u y\xEAu c\u1EA7u x\xE1c th\u1EF1c")
|
|
104
104
|
});
|
|
105
105
|
var UpdateEventSchema = z2.object({
|
|
106
106
|
name: z2.string().min(1).max(255).optional(),
|
|
107
|
-
coverImageUrl: z2.string().
|
|
107
|
+
coverImageUrl: z2.string().nullable().optional(),
|
|
108
108
|
description: z2.string().nullable().optional(),
|
|
109
109
|
maxGuests: z2.number().int().positive().optional(),
|
|
110
110
|
dateTime: z2.string().datetime().optional(),
|
|
@@ -246,7 +246,7 @@ var checkinContract = c3.router({
|
|
|
246
246
|
404: z3.object({ message: z3.string() })
|
|
247
247
|
},
|
|
248
248
|
summary: "Get event info and VP request for check-in (public)",
|
|
249
|
-
metadata: { openApiTags: ["Check-in"] }
|
|
249
|
+
metadata: { openApiTags: ["Check-in"], openApiSecurity: [] }
|
|
250
250
|
},
|
|
251
251
|
submit: {
|
|
252
252
|
method: "POST",
|
|
@@ -259,7 +259,24 @@ var checkinContract = c3.router({
|
|
|
259
259
|
409: z3.object({ message: z3.string() })
|
|
260
260
|
},
|
|
261
261
|
summary: "Submit VP for event check-in \u2014 issues participation VC on success (public)",
|
|
262
|
-
metadata: { openApiTags: ["Check-in"] }
|
|
262
|
+
metadata: { openApiTags: ["Check-in"], openApiSecurity: [] }
|
|
263
|
+
},
|
|
264
|
+
myCheckins: {
|
|
265
|
+
method: "GET",
|
|
266
|
+
path: "/v1/checkin/my",
|
|
267
|
+
responses: {
|
|
268
|
+
200: z3.array(
|
|
269
|
+
z3.object({
|
|
270
|
+
id: z3.string(),
|
|
271
|
+
eventId: z3.string(),
|
|
272
|
+
checkedInAt: z3.string(),
|
|
273
|
+
event: EventPublicInfoSchema
|
|
274
|
+
})
|
|
275
|
+
),
|
|
276
|
+
401: z3.object({ message: z3.string() })
|
|
277
|
+
},
|
|
278
|
+
summary: "List authenticated user check-ins",
|
|
279
|
+
metadata: { openApiTags: ["Check-in"], openApiSecurity: [{ bearerAuth: [] }] }
|
|
263
280
|
}
|
|
264
281
|
});
|
|
265
282
|
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/v1/auth.ts","../src/v1/events.ts","../src/v1/checkin.ts","../src/v1/turn.ts"],"sourcesContent":["import { initContract } from '@ts-rest/core';\nimport { authContract } from './v1/auth';\nimport { eventsContract } from './v1/events';\nimport { checkinContract } from './v1/checkin';\nimport { turnContract } from './v1/turn';\n\nexport * from './v1';\n\nconst c = initContract();\n\nexport const contract = c.router({\n v1: c.router({\n auth: authContract,\n events: eventsContract,\n checkin: checkinContract,\n turn: turnContract,\n }),\n});\n\nexport type Contract = typeof contract;\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const AuthScheme = z.enum(['eip191']);\nexport type AuthScheme = z.infer<typeof AuthScheme>;\n\nexport const VerifyRequestSchema = z.object({\n did: z.string().min(1).describe('DID of the authenticating user (e.g. `did:ethr:0xABC...`)'),\n signature: z\n .string()\n .min(1)\n .describe(\n 'Hex signature of the `message` string, produced by the scheme specified in the message',\n ),\n message: z\n .string()\n .min(1)\n .describe(\n 'Canonical JSON string that was signed. Must be `JSON.stringify({ domain, did, issuedAt, scheme })` where `issuedAt` is an ISO-8601 UTC timestamp within the last 60 seconds and `scheme` is the signing scheme used.',\n ),\n});\n\nexport const VerifyResponseSchema = z.object({\n accessToken: z.string(),\n});\n\nexport const authContract = c.router({\n verify: {\n method: 'POST',\n path: '/v1/auth/verify',\n body: VerifyRequestSchema,\n responses: {\n 200: VerifyResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Verify DID signature and receive JWT',\n description: [\n '## Authentication Flow (1-turn)',\n '',\n 'The client constructs a JSON message, signs it with their Ethereum private key, and submits everything in a single request.',\n '',\n '### Crypto Suite',\n '',\n '| Property | Value |',\n '|----------|-------|',\n '| **Signing scheme** | ECDSA secp256k1 (`scheme: \"eip191\"`) |',\n '| **Signature format** | [EIP-191](https://eips.ethereum.org/EIPS/eip-191) `personal_sign` (65-byte `r‖s‖v`, hex-encoded with `0x` prefix) |',\n '| **DID method** | `did:ethr` — the Ethereum address in the DID must match the signer |',\n '| **Message encoding** | UTF-8 JSON string |',\n '',\n '### Steps',\n '',\n '1. **Build the message** — a canonical JSON string:',\n ' ```json',\n ' {\"domain\":\"1Matrix Events\",\"did\":\"did:ethr:0xYOUR_ADDRESS\",\"issuedAt\":\"2026-02-25T12:00:00.000Z\",\"scheme\":\"eip191\"}',\n ' ```',\n ' Use the `buildAuthMessage(did)` helper from `@1mtx/did-api-contract`, or construct it manually.',\n '',\n '2. **Sign the message** using EIP-191 `personal_sign`:',\n ' ```ts',\n ' // ethers.js v6',\n ' const signature = await wallet.signMessage(message);',\n ' ```',\n '',\n '3. **POST** `{ did, signature, message }` to this endpoint.',\n '',\n '### Validation Rules',\n '',\n '- `issuedAt` must be within **60 seconds in the past** or **5 seconds in the future** (clock tolerance).',\n '- `domain` must equal `\"1Matrix Events\"`.',\n '- `did` in the message must match the `did` in the request body.',\n '- `scheme` must be a supported value (currently only `\"eip191\"`).',\n '- No extra JSON keys beyond `domain`, `did`, `issuedAt`, `scheme` are allowed.',\n '',\n '### Error Codes',\n '',\n '| Status | Reason |',\n '|--------|--------|',\n '| `400` | Invalid message format (bad JSON, extra keys, wrong domain) |',\n '| `401` | Message expired, DID mismatch, invalid or non-matching signature |',\n ].join('\\n'),\n metadata: { openApiTags: ['Auth'] },\n },\n});\n\n/**\n * Builds the canonical JSON string to be signed by the client.\n *\n * Usage:\n * const message = buildAuthMessage(did);\n * const signature = await wallet.signMessage(message);\n * // POST /v1/auth/verify { did, signature, message }\n */\nexport function buildAuthMessage(\n did: string,\n scheme: AuthScheme = 'eip191',\n domain = '1Matrix Events',\n issuedAt: string = new Date().toISOString(),\n): string {\n return JSON.stringify({ domain, did, issuedAt, scheme });\n}\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const SUPPORTED_FIELDS = [\n 'fullName',\n 'age',\n 'portrait',\n 'gender',\n 'nationality',\n 'address',\n 'idNumber',\n] as const;\n\nexport type SupportedField = (typeof SUPPORTED_FIELDS)[number];\n\nexport const CreateEventSchema = z.object({\n name: z.string().min(1).max(255),\n coverImageUrl: z.string().url().optional(),\n description: z.string().optional(),\n maxGuests: z.number().int().positive(),\n dateTime: z.string().datetime(),\n requestedFields: z.array(z.enum(SUPPORTED_FIELDS)).min(1),\n});\n\nexport const UpdateEventSchema = z.object({\n name: z.string().min(1).max(255).optional(),\n coverImageUrl: z.string().url().nullable().optional(),\n description: z.string().nullable().optional(),\n maxGuests: z.number().int().positive().optional(),\n dateTime: z.string().datetime().optional(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']).optional(),\n});\n\nexport const ParticipantSchema = z.object({\n id: z.string(),\n holderDid: z.string(),\n disclosedFields: z.record(z.unknown()),\n checkedInAt: z.string(),\n});\n\nexport const EventResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n dateTime: z.string(),\n userId: z.string(),\n requestedFields: z.array(z.string()),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n participantCount: z.number(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const EventDetailResponseSchema = EventResponseSchema.extend({\n participants: z.array(ParticipantSchema),\n vpRequest: z.record(z.unknown()),\n});\n\nconst SECURITY = [{ bearerAuth: [] }];\n\nexport const eventsContract = c.router({\n create: {\n method: 'POST',\n path: '/v1/events',\n body: CreateEventSchema,\n responses: {\n 201: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Create a new event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n list: {\n method: 'GET',\n path: '/v1/events',\n responses: {\n 200: z.array(EventResponseSchema),\n 401: z.object({ message: z.string() }),\n },\n summary: \"List authenticated organiser's events\",\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getById: {\n method: 'GET',\n path: '/v1/events/:id',\n responses: {\n 200: EventDetailResponseSchema,\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event details including participants (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n update: {\n method: 'PATCH',\n path: '/v1/events/:id',\n body: UpdateEventSchema,\n responses: {\n 200: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Update event fields (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n delete: {\n method: 'DELETE',\n path: '/v1/events/:id',\n body: c.noBody(),\n responses: {\n 204: z.undefined(),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Delete event and all related data (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getCredentials: {\n method: 'GET',\n path: '/v1/events/:id/credentials',\n responses: {\n 200: z.array(z.record(z.unknown())),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'List issued VCs for event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const EventPublicInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n dateTime: z.string(),\n currentGuests: z.number(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n});\n\nexport const CheckinInfoResponseSchema = z.object({\n event: EventPublicInfoSchema,\n vpRequest: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitRequestSchema = z.object({\n verifiablePresentation: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitResponseSchema = z.object({\n success: z.literal(true),\n credential: z.record(z.unknown()),\n});\n\nexport const checkinContract = c.router({\n info: {\n method: 'GET',\n path: '/v1/checkin/:eventId/info',\n responses: {\n 200: CheckinInfoResponseSchema,\n 400: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event info and VP request for check-in (public)',\n metadata: { openApiTags: ['Check-in'] },\n },\n submit: {\n method: 'POST',\n path: '/v1/checkin/:eventId/submit',\n body: CheckinSubmitRequestSchema,\n responses: {\n 200: CheckinSubmitResponseSchema,\n 400: z.object({ message: z.string(), errors: z.array(z.string()).optional() }),\n 404: z.object({ message: z.string() }),\n 409: z.object({ message: z.string() }),\n },\n summary: 'Submit VP for event check-in — issues participation VC on success (public)',\n metadata: { openApiTags: ['Check-in'] },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nconst IceServerSchema = z.object({\n urls: z.union([z.string(), z.array(z.string())]),\n username: z.string().optional(),\n credential: z.string().optional(),\n});\n\nexport const TurnCredentialsResponseSchema = z.object({\n iceServers: z.array(IceServerSchema),\n});\n\nexport const turnContract = c.router({\n credentials: {\n method: 'GET',\n path: '/v1/turn/credentials',\n responses: {\n 200: TurnCredentialsResponseSchema,\n 401: z.object({ message: z.string() }),\n 502: z.object({ message: z.string() }),\n },\n summary: 'Get Cloudflare TURN credentials for WebRTC (authenticated)',\n metadata: { openApiTags: ['TURN'] },\n },\n});\n"],"mappings":"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","names":["initContract","initContract","z","c","initContract","z","c","initContract","z","c","c","initContract"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/v1/auth.ts","../src/v1/events.ts","../src/v1/checkin.ts","../src/v1/turn.ts"],"sourcesContent":["import { initContract } from '@ts-rest/core';\nimport { authContract } from './v1/auth';\nimport { eventsContract } from './v1/events';\nimport { checkinContract } from './v1/checkin';\nimport { turnContract } from './v1/turn';\n\nexport * from './v1';\n\nconst c = initContract();\n\nexport const contract = c.router({\n v1: c.router({\n auth: authContract,\n events: eventsContract,\n checkin: checkinContract,\n turn: turnContract,\n }),\n});\n\nexport type Contract = typeof contract;\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const AuthScheme = z.enum(['eip191']);\nexport type AuthScheme = z.infer<typeof AuthScheme>;\n\nexport const VerifyRequestSchema = z.object({\n did: z.string().min(1).describe('DID of the authenticating user (e.g. `did:ethr:0xABC...`)'),\n signature: z\n .string()\n .min(1)\n .describe(\n 'Hex signature of the `message` string, produced by the scheme specified in the message',\n ),\n message: z\n .string()\n .min(1)\n .describe(\n 'Canonical JSON string that was signed. Must be `JSON.stringify({ domain, did, issuedAt, scheme })` where `issuedAt` is an ISO-8601 UTC timestamp within the last 60 seconds and `scheme` is the signing scheme used.',\n ),\n});\n\nexport const VerifyResponseSchema = z.object({\n accessToken: z.string(),\n});\n\nexport const authContract = c.router({\n verify: {\n method: 'POST',\n path: '/v1/auth/verify',\n body: VerifyRequestSchema,\n responses: {\n 200: VerifyResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Verify DID signature and receive JWT',\n description: [\n '## Authentication Flow (1-turn)',\n '',\n 'The client constructs a JSON message, signs it with their Ethereum private key, and submits everything in a single request.',\n '',\n '### Crypto Suite',\n '',\n '| Property | Value |',\n '|----------|-------|',\n '| **Signing scheme** | ECDSA secp256k1 (`scheme: \"eip191\"`) |',\n '| **Signature format** | [EIP-191](https://eips.ethereum.org/EIPS/eip-191) `personal_sign` (65-byte `r‖s‖v`, hex-encoded with `0x` prefix) |',\n '| **DID method** | `did:ethr` — the Ethereum address in the DID must match the signer |',\n '| **Message encoding** | UTF-8 JSON string |',\n '',\n '### Steps',\n '',\n '1. **Build the message** — a canonical JSON string:',\n ' ```json',\n ' {\"domain\":\"1Matrix Events\",\"did\":\"did:ethr:0xYOUR_ADDRESS\",\"issuedAt\":\"2026-02-25T12:00:00.000Z\",\"scheme\":\"eip191\"}',\n ' ```',\n ' Use the `buildAuthMessage(did)` helper from `@1mtx/did-api-contract`, or construct it manually.',\n '',\n '2. **Sign the message** using EIP-191 `personal_sign`:',\n ' ```ts',\n ' // ethers.js v6',\n ' const signature = await wallet.signMessage(message);',\n ' ```',\n '',\n '3. **POST** `{ did, signature, message }` to this endpoint.',\n '',\n '### Validation Rules',\n '',\n '- `issuedAt` must be within **60 seconds in the past** or **5 seconds in the future** (clock tolerance).',\n '- `domain` must equal `\"1Matrix Events\"`.',\n '- `did` in the message must match the `did` in the request body.',\n '- `scheme` must be a supported value (currently only `\"eip191\"`).',\n '- No extra JSON keys beyond `domain`, `did`, `issuedAt`, `scheme` are allowed.',\n '',\n '### Error Codes',\n '',\n '| Status | Reason |',\n '|--------|--------|',\n '| `400` | Invalid message format (bad JSON, extra keys, wrong domain) |',\n '| `401` | Message expired, DID mismatch, invalid or non-matching signature |',\n ].join('\\n'),\n metadata: { openApiTags: ['Auth'], openApiSecurity: [] },\n },\n});\n\n/**\n * Builds the canonical JSON string to be signed by the client.\n *\n * Usage:\n * const message = buildAuthMessage(did);\n * const signature = await wallet.signMessage(message);\n * // POST /v1/auth/verify { did, signature, message }\n */\nexport function buildAuthMessage(\n did: string,\n scheme: AuthScheme = 'eip191',\n domain = '1Matrix Events',\n issuedAt: string = new Date().toISOString(),\n): string {\n return JSON.stringify({ domain, did, issuedAt, scheme });\n}\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const SUPPORTED_FIELDS = [\n 'fullName',\n 'age',\n 'portrait',\n 'gender',\n 'nationality',\n 'permanentAddress',\n 'documentNumber',\n] as const;\n\nexport type SupportedField = (typeof SUPPORTED_FIELDS)[number];\n\nexport const CreateEventSchema = z.object({\n name: z.string().min(1).max(255).describe('Tên sự kiện'),\n coverImageUrl: z.string().url().optional().describe('Ảnh bìa sự kiện'),\n description: z.string().optional().describe('Mô tả sự kiện'),\n maxGuests: z.number().int().positive().describe('Số lượng khách tối đa'),\n dateTime: z.string().datetime().describe('Thời gian diễn ra sự kiện'),\n requestedFields: z.array(z.enum(SUPPORTED_FIELDS)).min(1).describe('Các trường dữ liệu yêu cầu xác thực'),\n});\n\nexport const UpdateEventSchema = z.object({\n name: z.string().min(1).max(255).optional(),\n coverImageUrl: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n maxGuests: z.number().int().positive().optional(),\n dateTime: z.string().datetime().optional(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']).optional(),\n});\n\nexport const ParticipantSchema = z.object({\n id: z.string(),\n holderDid: z.string(),\n disclosedFields: z.record(z.unknown()),\n checkedInAt: z.string(),\n});\n\nexport const EventResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n dateTime: z.string(),\n userId: z.string(),\n requestedFields: z.array(z.string()),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n participantCount: z.number(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const EventDetailResponseSchema = EventResponseSchema.extend({\n participants: z.array(ParticipantSchema),\n vpRequest: z.record(z.unknown()),\n});\n\nconst SECURITY = [{ bearerAuth: [] }];\n\nexport const eventsContract = c.router({\n create: {\n method: 'POST',\n path: '/v1/events',\n body: CreateEventSchema,\n responses: {\n 201: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Create a new event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n list: {\n method: 'GET',\n path: '/v1/events',\n responses: {\n 200: z.array(EventResponseSchema),\n 401: z.object({ message: z.string() }),\n },\n summary: \"List authenticated organiser's events\",\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getById: {\n method: 'GET',\n path: '/v1/events/:id',\n responses: {\n 200: EventDetailResponseSchema,\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event details including participants (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n update: {\n method: 'PATCH',\n path: '/v1/events/:id',\n body: UpdateEventSchema,\n responses: {\n 200: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Update event fields (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n delete: {\n method: 'DELETE',\n path: '/v1/events/:id',\n body: c.noBody(),\n responses: {\n 204: z.undefined(),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Delete event and all related data (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getCredentials: {\n method: 'GET',\n path: '/v1/events/:id/credentials',\n responses: {\n 200: z.array(z.record(z.unknown())),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'List issued VCs for event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const EventPublicInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n dateTime: z.string(),\n currentGuests: z.number(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n});\n\nexport const CheckinInfoResponseSchema = z.object({\n event: EventPublicInfoSchema,\n vpRequest: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitRequestSchema = z.object({\n verifiablePresentation: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitResponseSchema = z.object({\n success: z.literal(true),\n credential: z.record(z.unknown()),\n});\n\nexport const checkinContract = c.router({\n info: {\n method: 'GET',\n path: '/v1/checkin/:eventId/info',\n responses: {\n 200: CheckinInfoResponseSchema,\n 400: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event info and VP request for check-in (public)',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [] },\n },\n submit: {\n method: 'POST',\n path: '/v1/checkin/:eventId/submit',\n body: CheckinSubmitRequestSchema,\n responses: {\n 200: CheckinSubmitResponseSchema,\n 400: z.object({ message: z.string(), errors: z.array(z.string()).optional() }),\n 404: z.object({ message: z.string() }),\n 409: z.object({ message: z.string() }),\n },\n summary: 'Submit VP for event check-in — issues participation VC on success (public)',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [] },\n },\n myCheckins: {\n method: 'GET',\n path: '/v1/checkin/my',\n responses: {\n 200: z.array(\n z.object({\n id: z.string(),\n eventId: z.string(),\n checkedInAt: z.string(),\n event: EventPublicInfoSchema,\n }),\n ),\n 401: z.object({ message: z.string() }),\n },\n summary: 'List authenticated user check-ins',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [{ bearerAuth: [] }] },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nconst IceServerSchema = z.object({\n urls: z.union([z.string(), z.array(z.string())]),\n username: z.string().optional(),\n credential: z.string().optional(),\n});\n\nexport const TurnCredentialsResponseSchema = z.object({\n iceServers: z.array(IceServerSchema),\n});\n\nexport const turnContract = c.router({\n credentials: {\n method: 'GET',\n path: '/v1/turn/credentials',\n responses: {\n 200: TurnCredentialsResponseSchema,\n 401: z.object({ message: z.string() }),\n 502: z.object({ message: z.string() }),\n },\n summary: 'Get Cloudflare TURN credentials for WebRTC (authenticated)',\n metadata: { openApiTags: ['TURN'] },\n },\n});\n"],"mappings":"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","names":["initContract","initContract","z","c","initContract","z","c","initContract","z","c","c","initContract"]}
|