@1mtx/did-api-contract 1.0.0
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 +1673 -0
- package/dist/index.d.ts +1673 -0
- package/dist/index.js +368 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +324 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +35 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
AuthScheme: () => AuthScheme,
|
|
24
|
+
CheckinInfoResponseSchema: () => CheckinInfoResponseSchema,
|
|
25
|
+
CheckinSubmitRequestSchema: () => CheckinSubmitRequestSchema,
|
|
26
|
+
CheckinSubmitResponseSchema: () => CheckinSubmitResponseSchema,
|
|
27
|
+
CreateEventSchema: () => CreateEventSchema,
|
|
28
|
+
EventDetailResponseSchema: () => EventDetailResponseSchema,
|
|
29
|
+
EventPublicInfoSchema: () => EventPublicInfoSchema,
|
|
30
|
+
EventResponseSchema: () => EventResponseSchema,
|
|
31
|
+
ParticipantSchema: () => ParticipantSchema,
|
|
32
|
+
SUPPORTED_FIELDS: () => SUPPORTED_FIELDS,
|
|
33
|
+
TurnCredentialsResponseSchema: () => TurnCredentialsResponseSchema,
|
|
34
|
+
UpdateEventSchema: () => UpdateEventSchema,
|
|
35
|
+
VerifyRequestSchema: () => VerifyRequestSchema,
|
|
36
|
+
VerifyResponseSchema: () => VerifyResponseSchema,
|
|
37
|
+
authContract: () => authContract,
|
|
38
|
+
buildAuthMessage: () => buildAuthMessage,
|
|
39
|
+
checkinContract: () => checkinContract,
|
|
40
|
+
contract: () => contract,
|
|
41
|
+
eventsContract: () => eventsContract,
|
|
42
|
+
turnContract: () => turnContract
|
|
43
|
+
});
|
|
44
|
+
module.exports = __toCommonJS(index_exports);
|
|
45
|
+
var import_core5 = require("@ts-rest/core");
|
|
46
|
+
|
|
47
|
+
// src/v1/auth.ts
|
|
48
|
+
var import_core = require("@ts-rest/core");
|
|
49
|
+
var import_zod = require("zod");
|
|
50
|
+
var c = (0, import_core.initContract)();
|
|
51
|
+
var AuthScheme = import_zod.z.enum(["eip191"]);
|
|
52
|
+
var VerifyRequestSchema = import_zod.z.object({
|
|
53
|
+
did: import_zod.z.string().min(1).describe("DID of the authenticating user (e.g. `did:ethr:0xABC...`)"),
|
|
54
|
+
signature: import_zod.z.string().min(1).describe(
|
|
55
|
+
"Hex signature of the `message` string, produced by the scheme specified in the message"
|
|
56
|
+
),
|
|
57
|
+
message: import_zod.z.string().min(1).describe(
|
|
58
|
+
"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."
|
|
59
|
+
)
|
|
60
|
+
});
|
|
61
|
+
var VerifyResponseSchema = import_zod.z.object({
|
|
62
|
+
accessToken: import_zod.z.string()
|
|
63
|
+
});
|
|
64
|
+
var authContract = c.router({
|
|
65
|
+
verify: {
|
|
66
|
+
method: "POST",
|
|
67
|
+
path: "/v1/auth/verify",
|
|
68
|
+
body: VerifyRequestSchema,
|
|
69
|
+
responses: {
|
|
70
|
+
200: VerifyResponseSchema,
|
|
71
|
+
400: import_zod.z.object({ message: import_zod.z.string() }),
|
|
72
|
+
401: import_zod.z.object({ message: import_zod.z.string() })
|
|
73
|
+
},
|
|
74
|
+
summary: "Verify DID signature and receive JWT",
|
|
75
|
+
description: [
|
|
76
|
+
"## Authentication Flow (1-turn)",
|
|
77
|
+
"",
|
|
78
|
+
"The client constructs a JSON message, signs it with their Ethereum private key, and submits everything in a single request.",
|
|
79
|
+
"",
|
|
80
|
+
"### Crypto Suite",
|
|
81
|
+
"",
|
|
82
|
+
"| Property | Value |",
|
|
83
|
+
"|----------|-------|",
|
|
84
|
+
'| **Signing scheme** | ECDSA secp256k1 (`scheme: "eip191"`) |',
|
|
85
|
+
"| **Signature format** | [EIP-191](https://eips.ethereum.org/EIPS/eip-191) `personal_sign` (65-byte `r\u2016s\u2016v`, hex-encoded with `0x` prefix) |",
|
|
86
|
+
"| **DID method** | `did:ethr` \u2014 the Ethereum address in the DID must match the signer |",
|
|
87
|
+
"| **Message encoding** | UTF-8 JSON string |",
|
|
88
|
+
"",
|
|
89
|
+
"### Steps",
|
|
90
|
+
"",
|
|
91
|
+
"1. **Build the message** \u2014 a canonical JSON string:",
|
|
92
|
+
" ```json",
|
|
93
|
+
' {"domain":"1Matrix Events","did":"did:ethr:0xYOUR_ADDRESS","issuedAt":"2026-02-25T12:00:00.000Z","scheme":"eip191"}',
|
|
94
|
+
" ```",
|
|
95
|
+
" Use the `buildAuthMessage(did)` helper from `@1mtx/did-api-contract`, or construct it manually.",
|
|
96
|
+
"",
|
|
97
|
+
"2. **Sign the message** using EIP-191 `personal_sign`:",
|
|
98
|
+
" ```ts",
|
|
99
|
+
" // ethers.js v6",
|
|
100
|
+
" const signature = await wallet.signMessage(message);",
|
|
101
|
+
" ```",
|
|
102
|
+
"",
|
|
103
|
+
"3. **POST** `{ did, signature, message }` to this endpoint.",
|
|
104
|
+
"",
|
|
105
|
+
"### Validation Rules",
|
|
106
|
+
"",
|
|
107
|
+
"- `issuedAt` must be within **60 seconds in the past** or **5 seconds in the future** (clock tolerance).",
|
|
108
|
+
'- `domain` must equal `"1Matrix Events"`.',
|
|
109
|
+
"- `did` in the message must match the `did` in the request body.",
|
|
110
|
+
'- `scheme` must be a supported value (currently only `"eip191"`).',
|
|
111
|
+
"- No extra JSON keys beyond `domain`, `did`, `issuedAt`, `scheme` are allowed.",
|
|
112
|
+
"",
|
|
113
|
+
"### Error Codes",
|
|
114
|
+
"",
|
|
115
|
+
"| Status | Reason |",
|
|
116
|
+
"|--------|--------|",
|
|
117
|
+
"| `400` | Invalid message format (bad JSON, extra keys, wrong domain) |",
|
|
118
|
+
"| `401` | Message expired, DID mismatch, invalid or non-matching signature |"
|
|
119
|
+
].join("\n"),
|
|
120
|
+
metadata: { openApiTags: ["Auth"] }
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
function buildAuthMessage(did, scheme = "eip191", domain = "1Matrix Events", issuedAt = (/* @__PURE__ */ new Date()).toISOString()) {
|
|
124
|
+
return JSON.stringify({ domain, did, issuedAt, scheme });
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// src/v1/events.ts
|
|
128
|
+
var import_core2 = require("@ts-rest/core");
|
|
129
|
+
var import_zod2 = require("zod");
|
|
130
|
+
var c2 = (0, import_core2.initContract)();
|
|
131
|
+
var SUPPORTED_FIELDS = [
|
|
132
|
+
"fullName",
|
|
133
|
+
"age",
|
|
134
|
+
"portrait",
|
|
135
|
+
"gender",
|
|
136
|
+
"nationality",
|
|
137
|
+
"address",
|
|
138
|
+
"idNumber"
|
|
139
|
+
];
|
|
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)
|
|
147
|
+
});
|
|
148
|
+
var UpdateEventSchema = import_zod2.z.object({
|
|
149
|
+
name: import_zod2.z.string().min(1).max(255).optional(),
|
|
150
|
+
coverImageUrl: import_zod2.z.string().url().nullable().optional(),
|
|
151
|
+
description: import_zod2.z.string().nullable().optional(),
|
|
152
|
+
maxGuests: import_zod2.z.number().int().positive().optional(),
|
|
153
|
+
dateTime: import_zod2.z.string().datetime().optional(),
|
|
154
|
+
status: import_zod2.z.enum(["ACTIVE", "CANCELLED", "COMPLETED"]).optional()
|
|
155
|
+
});
|
|
156
|
+
var ParticipantSchema = import_zod2.z.object({
|
|
157
|
+
id: import_zod2.z.string(),
|
|
158
|
+
holderDid: import_zod2.z.string(),
|
|
159
|
+
disclosedFields: import_zod2.z.record(import_zod2.z.unknown()),
|
|
160
|
+
checkedInAt: import_zod2.z.string()
|
|
161
|
+
});
|
|
162
|
+
var EventResponseSchema = import_zod2.z.object({
|
|
163
|
+
id: import_zod2.z.string(),
|
|
164
|
+
name: import_zod2.z.string(),
|
|
165
|
+
coverImageUrl: import_zod2.z.string().nullable(),
|
|
166
|
+
description: import_zod2.z.string().nullable(),
|
|
167
|
+
maxGuests: import_zod2.z.number(),
|
|
168
|
+
dateTime: import_zod2.z.string(),
|
|
169
|
+
userId: import_zod2.z.string(),
|
|
170
|
+
requestedFields: import_zod2.z.array(import_zod2.z.string()),
|
|
171
|
+
status: import_zod2.z.enum(["ACTIVE", "CANCELLED", "COMPLETED"]),
|
|
172
|
+
participantCount: import_zod2.z.number(),
|
|
173
|
+
createdAt: import_zod2.z.string(),
|
|
174
|
+
updatedAt: import_zod2.z.string()
|
|
175
|
+
});
|
|
176
|
+
var EventDetailResponseSchema = EventResponseSchema.extend({
|
|
177
|
+
participants: import_zod2.z.array(ParticipantSchema),
|
|
178
|
+
vpRequest: import_zod2.z.record(import_zod2.z.unknown())
|
|
179
|
+
});
|
|
180
|
+
var SECURITY = [{ bearerAuth: [] }];
|
|
181
|
+
var eventsContract = c2.router({
|
|
182
|
+
create: {
|
|
183
|
+
method: "POST",
|
|
184
|
+
path: "/v1/events",
|
|
185
|
+
body: CreateEventSchema,
|
|
186
|
+
responses: {
|
|
187
|
+
201: EventResponseSchema,
|
|
188
|
+
400: import_zod2.z.object({ message: import_zod2.z.string() }),
|
|
189
|
+
401: import_zod2.z.object({ message: import_zod2.z.string() })
|
|
190
|
+
},
|
|
191
|
+
summary: "Create a new event (organiser only)",
|
|
192
|
+
metadata: { openApiTags: ["Events"], openApiSecurity: SECURITY }
|
|
193
|
+
},
|
|
194
|
+
list: {
|
|
195
|
+
method: "GET",
|
|
196
|
+
path: "/v1/events",
|
|
197
|
+
responses: {
|
|
198
|
+
200: import_zod2.z.array(EventResponseSchema),
|
|
199
|
+
401: import_zod2.z.object({ message: import_zod2.z.string() })
|
|
200
|
+
},
|
|
201
|
+
summary: "List authenticated organiser's events",
|
|
202
|
+
metadata: { openApiTags: ["Events"], openApiSecurity: SECURITY }
|
|
203
|
+
},
|
|
204
|
+
getById: {
|
|
205
|
+
method: "GET",
|
|
206
|
+
path: "/v1/events/:id",
|
|
207
|
+
responses: {
|
|
208
|
+
200: EventDetailResponseSchema,
|
|
209
|
+
401: import_zod2.z.object({ message: import_zod2.z.string() }),
|
|
210
|
+
403: import_zod2.z.object({ message: import_zod2.z.string() }),
|
|
211
|
+
404: import_zod2.z.object({ message: import_zod2.z.string() })
|
|
212
|
+
},
|
|
213
|
+
summary: "Get event details including participants (organiser only)",
|
|
214
|
+
metadata: { openApiTags: ["Events"], openApiSecurity: SECURITY }
|
|
215
|
+
},
|
|
216
|
+
update: {
|
|
217
|
+
method: "PATCH",
|
|
218
|
+
path: "/v1/events/:id",
|
|
219
|
+
body: UpdateEventSchema,
|
|
220
|
+
responses: {
|
|
221
|
+
200: EventResponseSchema,
|
|
222
|
+
400: import_zod2.z.object({ message: import_zod2.z.string() }),
|
|
223
|
+
401: import_zod2.z.object({ message: import_zod2.z.string() }),
|
|
224
|
+
403: import_zod2.z.object({ message: import_zod2.z.string() }),
|
|
225
|
+
404: import_zod2.z.object({ message: import_zod2.z.string() })
|
|
226
|
+
},
|
|
227
|
+
summary: "Update event fields (organiser only)",
|
|
228
|
+
metadata: { openApiTags: ["Events"], openApiSecurity: SECURITY }
|
|
229
|
+
},
|
|
230
|
+
delete: {
|
|
231
|
+
method: "DELETE",
|
|
232
|
+
path: "/v1/events/:id",
|
|
233
|
+
body: c2.noBody(),
|
|
234
|
+
responses: {
|
|
235
|
+
204: import_zod2.z.undefined(),
|
|
236
|
+
401: import_zod2.z.object({ message: import_zod2.z.string() }),
|
|
237
|
+
403: import_zod2.z.object({ message: import_zod2.z.string() }),
|
|
238
|
+
404: import_zod2.z.object({ message: import_zod2.z.string() })
|
|
239
|
+
},
|
|
240
|
+
summary: "Delete event and all related data (organiser only)",
|
|
241
|
+
metadata: { openApiTags: ["Events"], openApiSecurity: SECURITY }
|
|
242
|
+
},
|
|
243
|
+
getCredentials: {
|
|
244
|
+
method: "GET",
|
|
245
|
+
path: "/v1/events/:id/credentials",
|
|
246
|
+
responses: {
|
|
247
|
+
200: import_zod2.z.array(import_zod2.z.record(import_zod2.z.unknown())),
|
|
248
|
+
401: import_zod2.z.object({ message: import_zod2.z.string() }),
|
|
249
|
+
403: import_zod2.z.object({ message: import_zod2.z.string() }),
|
|
250
|
+
404: import_zod2.z.object({ message: import_zod2.z.string() })
|
|
251
|
+
},
|
|
252
|
+
summary: "List issued VCs for event (organiser only)",
|
|
253
|
+
metadata: { openApiTags: ["Events"], openApiSecurity: SECURITY }
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
// src/v1/checkin.ts
|
|
258
|
+
var import_core3 = require("@ts-rest/core");
|
|
259
|
+
var import_zod3 = require("zod");
|
|
260
|
+
var c3 = (0, import_core3.initContract)();
|
|
261
|
+
var EventPublicInfoSchema = import_zod3.z.object({
|
|
262
|
+
id: import_zod3.z.string(),
|
|
263
|
+
name: import_zod3.z.string(),
|
|
264
|
+
coverImageUrl: import_zod3.z.string().nullable(),
|
|
265
|
+
description: import_zod3.z.string().nullable(),
|
|
266
|
+
maxGuests: import_zod3.z.number(),
|
|
267
|
+
dateTime: import_zod3.z.string(),
|
|
268
|
+
currentGuests: import_zod3.z.number(),
|
|
269
|
+
status: import_zod3.z.enum(["ACTIVE", "CANCELLED", "COMPLETED"])
|
|
270
|
+
});
|
|
271
|
+
var CheckinInfoResponseSchema = import_zod3.z.object({
|
|
272
|
+
event: EventPublicInfoSchema,
|
|
273
|
+
vpRequest: import_zod3.z.record(import_zod3.z.unknown())
|
|
274
|
+
});
|
|
275
|
+
var CheckinSubmitRequestSchema = import_zod3.z.object({
|
|
276
|
+
verifiablePresentation: import_zod3.z.record(import_zod3.z.unknown())
|
|
277
|
+
});
|
|
278
|
+
var CheckinSubmitResponseSchema = import_zod3.z.object({
|
|
279
|
+
success: import_zod3.z.literal(true),
|
|
280
|
+
credential: import_zod3.z.record(import_zod3.z.unknown())
|
|
281
|
+
});
|
|
282
|
+
var checkinContract = c3.router({
|
|
283
|
+
info: {
|
|
284
|
+
method: "GET",
|
|
285
|
+
path: "/v1/checkin/:eventId/info",
|
|
286
|
+
responses: {
|
|
287
|
+
200: CheckinInfoResponseSchema,
|
|
288
|
+
400: import_zod3.z.object({ message: import_zod3.z.string() }),
|
|
289
|
+
404: import_zod3.z.object({ message: import_zod3.z.string() })
|
|
290
|
+
},
|
|
291
|
+
summary: "Get event info and VP request for check-in (public)",
|
|
292
|
+
metadata: { openApiTags: ["Check-in"] }
|
|
293
|
+
},
|
|
294
|
+
submit: {
|
|
295
|
+
method: "POST",
|
|
296
|
+
path: "/v1/checkin/:eventId/submit",
|
|
297
|
+
body: CheckinSubmitRequestSchema,
|
|
298
|
+
responses: {
|
|
299
|
+
200: CheckinSubmitResponseSchema,
|
|
300
|
+
400: import_zod3.z.object({ message: import_zod3.z.string(), errors: import_zod3.z.array(import_zod3.z.string()).optional() }),
|
|
301
|
+
404: import_zod3.z.object({ message: import_zod3.z.string() }),
|
|
302
|
+
409: import_zod3.z.object({ message: import_zod3.z.string() })
|
|
303
|
+
},
|
|
304
|
+
summary: "Submit VP for event check-in \u2014 issues participation VC on success (public)",
|
|
305
|
+
metadata: { openApiTags: ["Check-in"] }
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
// src/v1/turn.ts
|
|
310
|
+
var import_core4 = require("@ts-rest/core");
|
|
311
|
+
var import_zod4 = require("zod");
|
|
312
|
+
var c4 = (0, import_core4.initContract)();
|
|
313
|
+
var IceServerSchema = import_zod4.z.object({
|
|
314
|
+
urls: import_zod4.z.union([import_zod4.z.string(), import_zod4.z.array(import_zod4.z.string())]),
|
|
315
|
+
username: import_zod4.z.string().optional(),
|
|
316
|
+
credential: import_zod4.z.string().optional()
|
|
317
|
+
});
|
|
318
|
+
var TurnCredentialsResponseSchema = import_zod4.z.object({
|
|
319
|
+
iceServers: import_zod4.z.array(IceServerSchema)
|
|
320
|
+
});
|
|
321
|
+
var turnContract = c4.router({
|
|
322
|
+
credentials: {
|
|
323
|
+
method: "GET",
|
|
324
|
+
path: "/v1/turn/credentials",
|
|
325
|
+
responses: {
|
|
326
|
+
200: TurnCredentialsResponseSchema,
|
|
327
|
+
401: import_zod4.z.object({ message: import_zod4.z.string() }),
|
|
328
|
+
502: import_zod4.z.object({ message: import_zod4.z.string() })
|
|
329
|
+
},
|
|
330
|
+
summary: "Get Cloudflare TURN credentials for WebRTC (authenticated)",
|
|
331
|
+
metadata: { openApiTags: ["TURN"] }
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
// src/index.ts
|
|
336
|
+
var c5 = (0, import_core5.initContract)();
|
|
337
|
+
var contract = c5.router({
|
|
338
|
+
v1: c5.router({
|
|
339
|
+
auth: authContract,
|
|
340
|
+
events: eventsContract,
|
|
341
|
+
checkin: checkinContract,
|
|
342
|
+
turn: turnContract
|
|
343
|
+
})
|
|
344
|
+
});
|
|
345
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
346
|
+
0 && (module.exports = {
|
|
347
|
+
AuthScheme,
|
|
348
|
+
CheckinInfoResponseSchema,
|
|
349
|
+
CheckinSubmitRequestSchema,
|
|
350
|
+
CheckinSubmitResponseSchema,
|
|
351
|
+
CreateEventSchema,
|
|
352
|
+
EventDetailResponseSchema,
|
|
353
|
+
EventPublicInfoSchema,
|
|
354
|
+
EventResponseSchema,
|
|
355
|
+
ParticipantSchema,
|
|
356
|
+
SUPPORTED_FIELDS,
|
|
357
|
+
TurnCredentialsResponseSchema,
|
|
358
|
+
UpdateEventSchema,
|
|
359
|
+
VerifyRequestSchema,
|
|
360
|
+
VerifyResponseSchema,
|
|
361
|
+
authContract,
|
|
362
|
+
buildAuthMessage,
|
|
363
|
+
checkinContract,
|
|
364
|
+
contract,
|
|
365
|
+
eventsContract,
|
|
366
|
+
turnContract
|
|
367
|
+
});
|
|
368
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"]}
|