@anvil-js/client 0.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/server.js ADDED
@@ -0,0 +1,492 @@
1
+ import { UUIDSchema, SessionSchema, ResetPasswordInputSchema, ForgotPasswordInputSchema, ValidateInputSchema, UserSummarySchema, RefreshInputSchema, RegisterInputSchema, LoginInputSchema, RequestDownloadInputSchema, RequestDownloadOutputSchema, GetBuildInputSchema, BuildSchema, ListBuildsInputSchema, BuildSummarySchema, CheckLicenseInputSchema, CheckLicenseOutputSchema, ListLicensesInputSchema, LicenseSchema, SuspensionStatusSchema, CommunityRulesStatusSchema, DeleteTrustedHostInputSchema, CreateTrustedHostInputSchema, TrustedHostSchema, InviteToServerInputSchema, ReportActivityInputSchema, PresenceSchema, LookupByNameInputSchema, LookupByNameOutputSchema, CancelRequestInputSchema, AcceptRequestInputSchema, RelationshipSchema, ListRelationshipsInputSchema, DeleteRelationshipInputSchema, CreateRelationshipInputSchema, EquipCosmeticInputSchema, CosmeticSchema, DeleteOutfitInputSchema, UpdateOutfitInputSchema, OutfitSchema, CreateOutfitInputSchema, SaveEmoteWheelInputSchema, EmoteWheelSchema, SetActiveSkinInputSchema, UploadSkinInputSchema, SkinSchema, ChannelReportsInputSchema, ReportMessageInputSchema, MarkReadInputSchema, DeleteMessageInputSchema, EditMessageInputSchema, MessageSchema, SendMessageInputSchema, ListMessagesInputSchema, CreateGroupInputSchema, ChannelSchema, CreateDMInputSchema, ListChannelsInputSchema, DeleteMediaInputSchema, UploadMediaInputSchema, MediaItemSchema, ListMediaInputSchema, ISODateSchema, SignalingMessageSchema, SendSignalingInputSchema, CloseUpnpInputSchema, CreateUpnpInputSchema, UpnpSessionSchema, KnownServerSchema, SystemStatusSchema, InstalledInstanceSchema, ReportTelemetryInputSchema, LauncherUpdateInfoSchema } from './chunk-WIGN6UED.js';
2
+ import { initTRPC, TRPCError } from '@trpc/server';
3
+ import { z } from 'zod';
4
+
5
+ var createContext = async (opts) => {
6
+ return {
7
+ userUuid: opts.userUuid,
8
+ token: opts.token,
9
+ requestId: opts.requestId ?? (typeof crypto !== "undefined" ? crypto.randomUUID() : Math.random().toString())
10
+ };
11
+ };
12
+ var t = initTRPC.context().create({
13
+ // No superjson transformer in the scaffold. The MSW dev layer
14
+ // returns plain `{ result: { data } }` envelopes; using
15
+ // superjson here requires the server to wrap responses in
16
+ // `{ result: { data, meta: { values } } }`, which the MSW
17
+ // handlers don't (and shouldn't) emit. All our data is
18
+ // JSON-serializable so the default transformer is correct.
19
+ // When `apps/api` is wired, either re-introduce superjson
20
+ // here AND update the MSW handlers to match, or leave the
21
+ // default transformer in place (the prod NestJS handler can
22
+ // also omit the transformer).
23
+ errorFormatter: ({ shape }) => ({
24
+ ...shape,
25
+ data: {
26
+ code: shape.data.code,
27
+ httpStatus: shape.data.httpStatus
28
+ }
29
+ })
30
+ });
31
+ var router = t.router;
32
+ var publicProcedure = t.procedure;
33
+ var middleware = t.middleware;
34
+ var isAuthed = middleware(({ ctx, next }) => {
35
+ if (!ctx.userUuid) {
36
+ throw new TRPCError({
37
+ code: "UNAUTHORIZED",
38
+ message: "Authentication required"
39
+ });
40
+ }
41
+ const parsed = UUIDSchema.safeParse(ctx.userUuid);
42
+ if (!parsed.success) {
43
+ throw new TRPCError({
44
+ code: "UNAUTHORIZED",
45
+ message: "Invalid user identifier"
46
+ });
47
+ }
48
+ return next({ ctx: { ...ctx, userUuid: ctx.userUuid } });
49
+ });
50
+ var protectedProcedure = t.procedure.use(isAuthed);
51
+ var authRouter = router({
52
+ // --- Anvil auth (email + password) ---
53
+ signIn: publicProcedure.input(LoginInputSchema).output(
54
+ z.object({
55
+ accessToken: z.string(),
56
+ refreshToken: z.string(),
57
+ expiresAt: z.string().datetime(),
58
+ user: UserSummarySchema
59
+ })
60
+ ).mutation(() => {
61
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
62
+ }),
63
+ signUp: publicProcedure.input(RegisterInputSchema).output(
64
+ z.object({
65
+ accessToken: z.string(),
66
+ refreshToken: z.string(),
67
+ expiresAt: z.string().datetime(),
68
+ user: UserSummarySchema
69
+ })
70
+ ).mutation(() => {
71
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
72
+ }),
73
+ refresh: publicProcedure.input(RefreshInputSchema).output(
74
+ z.object({
75
+ accessToken: z.string(),
76
+ refreshToken: z.string(),
77
+ expiresAt: z.string().datetime()
78
+ })
79
+ ).mutation(() => {
80
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
81
+ }),
82
+ validate: publicProcedure.input(ValidateInputSchema).output(
83
+ z.object({
84
+ valid: z.boolean(),
85
+ user: UserSummarySchema.optional(),
86
+ expiresAt: z.string().datetime().optional()
87
+ })
88
+ ).query(() => {
89
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
90
+ }),
91
+ forgotPassword: publicProcedure.input(ForgotPasswordInputSchema).output(z.void()).mutation(() => {
92
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
93
+ }),
94
+ resetPassword: publicProcedure.input(ResetPasswordInputSchema).output(z.void()).mutation(() => {
95
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
96
+ }),
97
+ signOut: protectedProcedure.output(z.void()).mutation(() => {
98
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
99
+ }),
100
+ // --- Session (current authenticated user) ---
101
+ session: router({
102
+ current: protectedProcedure.output(SessionSchema).query(() => {
103
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
104
+ })
105
+ }),
106
+ // --- Mojang auth (Microsoft OAuth) -- spec §5.1 ---
107
+ mojang: router({
108
+ startDeviceCode: publicProcedure.output(
109
+ z.object({
110
+ deviceCode: z.string(),
111
+ userCode: z.string(),
112
+ verificationUri: z.string().url(),
113
+ expiresIn: z.number().int(),
114
+ interval: z.number().int()
115
+ })
116
+ ).mutation(() => {
117
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
118
+ }),
119
+ pollDeviceCode: publicProcedure.input(z.object({ deviceCode: z.string() })).output(
120
+ z.discriminatedUnion("kind", [
121
+ z.object({
122
+ kind: z.literal("success"),
123
+ mcAccessToken: z.string(),
124
+ mcRefreshToken: z.string(),
125
+ mcExpiresAt: z.string().datetime(),
126
+ profile: z.object({ uuid: UUIDSchema, username: z.string() })
127
+ }),
128
+ z.object({ kind: z.literal("pending") }),
129
+ z.object({
130
+ kind: z.literal("error"),
131
+ code: z.enum(["authorization_declined", "expired", "slow_down"])
132
+ })
133
+ ])
134
+ ).query(() => {
135
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
136
+ })
137
+ })
138
+ });
139
+ var buildsRouter = router({
140
+ list: publicProcedure.input(ListBuildsInputSchema).output(
141
+ z.object({
142
+ items: z.array(BuildSummarySchema),
143
+ total: z.number().int().nonnegative(),
144
+ page: z.number().int().min(1),
145
+ pageSize: z.number().int().min(1)
146
+ })
147
+ ).query(() => {
148
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
149
+ }),
150
+ get: publicProcedure.input(GetBuildInputSchema).output(BuildSchema).query(() => {
151
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
152
+ }),
153
+ getVersions: publicProcedure.input(z.object({ buildId: UUIDSchema })).output(z.array(z.any())).query(() => {
154
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
155
+ }),
156
+ requestDownload: protectedProcedure.input(RequestDownloadInputSchema).output(RequestDownloadOutputSchema).mutation(() => {
157
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
158
+ })
159
+ });
160
+ var licensesRouter = router({
161
+ list: protectedProcedure.input(ListLicensesInputSchema).output(z.array(LicenseSchema)).query(() => {
162
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
163
+ }),
164
+ check: protectedProcedure.input(CheckLicenseInputSchema).output(CheckLicenseOutputSchema).query(() => {
165
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
166
+ })
167
+ });
168
+ var healthRouter = router({
169
+ ping: publicProcedure.output(z.object({ status: z.string(), version: z.string(), timestamp: z.string().datetime() })).query(() => ({
170
+ status: "ok",
171
+ version: "0.0.0",
172
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
173
+ })),
174
+ version: publicProcedure.output(
175
+ z.object({
176
+ api: z.string(),
177
+ minLauncher: z.string(),
178
+ recommendedLauncher: z.string(),
179
+ deprecations: z.array(z.string())
180
+ })
181
+ ).query(() => ({
182
+ api: "0.0.0",
183
+ minLauncher: "0.0.0",
184
+ recommendedLauncher: "0.0.0",
185
+ deprecations: []
186
+ }))
187
+ });
188
+ var socialRouter = router({
189
+ relationships: router({
190
+ create: protectedProcedure.input(CreateRelationshipInputSchema).output(z.object({ relationship: RelationshipSchema, created: z.boolean() })).mutation(() => {
191
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
192
+ }),
193
+ delete: protectedProcedure.input(DeleteRelationshipInputSchema).output(z.object({ deleted: z.boolean() })).mutation(() => {
194
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
195
+ }),
196
+ list: protectedProcedure.input(ListRelationshipsInputSchema).output(z.object({ items: z.array(RelationshipSchema) })).query(() => {
197
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
198
+ }),
199
+ acceptRequest: protectedProcedure.input(AcceptRequestInputSchema).output(z.object({ relationship: RelationshipSchema })).mutation(() => {
200
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
201
+ }),
202
+ cancelRequest: protectedProcedure.input(CancelRequestInputSchema).output(z.object({ cancelled: z.boolean() })).mutation(() => {
203
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
204
+ })
205
+ }),
206
+ users: router({
207
+ lookupByName: protectedProcedure.input(LookupByNameInputSchema).output(LookupByNameOutputSchema).query(() => {
208
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
209
+ })
210
+ }),
211
+ presence: router({
212
+ /**
213
+ * Query (not subscription) in this scaffold. Prod presence streaming
214
+ * will land as a separate /v1/ws subscription multiplexed over the
215
+ * WebSocket gateway. For now the MSW layer returns a snapshot of the
216
+ * current presence map; the client polls every 5s.
217
+ */
218
+ get: protectedProcedure.input(z.object({ uuids: z.array(UUIDSchema) })).output(z.object({ items: z.array(PresenceSchema) })).query(() => {
219
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
220
+ })
221
+ }),
222
+ activity: router({
223
+ report: protectedProcedure.input(ReportActivityInputSchema).output(z.void()).mutation(() => {
224
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
225
+ })
226
+ }),
227
+ invites: router({
228
+ toServer: protectedProcedure.input(InviteToServerInputSchema).output(z.object({ delivered: z.boolean() })).mutation(() => {
229
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
230
+ })
231
+ }),
232
+ trustedHosts: router({
233
+ list: protectedProcedure.input(z.void()).output(z.object({ items: z.array(TrustedHostSchema) })).query(() => {
234
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
235
+ }),
236
+ create: protectedProcedure.input(CreateTrustedHostInputSchema).output(z.object({ host: TrustedHostSchema })).mutation(() => {
237
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
238
+ }),
239
+ delete: protectedProcedure.input(DeleteTrustedHostInputSchema).output(z.object({ deleted: z.boolean() })).mutation(() => {
240
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
241
+ })
242
+ }),
243
+ communityRules: router({
244
+ get: protectedProcedure.input(z.void()).output(CommunityRulesStatusSchema).query(() => {
245
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
246
+ }),
247
+ agree: protectedProcedure.input(z.void()).output(z.object({ accepted: z.boolean() })).mutation(() => {
248
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
249
+ })
250
+ }),
251
+ suspension: router({
252
+ get: protectedProcedure.input(z.void()).output(SuspensionStatusSchema).query(() => {
253
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
254
+ })
255
+ })
256
+ });
257
+ var cosmeticsRouter = router({
258
+ list: protectedProcedure.input(
259
+ z.object({
260
+ type: z.enum(["hat", "body", "back", "face", "hand", "feet", "particle", "emote"]).optional(),
261
+ owned: z.boolean().optional(),
262
+ limit: z.number().int().min(1).max(200).default(60),
263
+ offset: z.number().int().min(0).default(0)
264
+ })
265
+ ).output(z.object({ items: z.array(CosmeticSchema), total: z.number().int().nonnegative() })).query(() => {
266
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
267
+ }),
268
+ equip: protectedProcedure.input(EquipCosmeticInputSchema).output(z.object({ ok: z.boolean() })).mutation(() => {
269
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
270
+ })
271
+ });
272
+ var outfitsRouter = router({
273
+ list: protectedProcedure.input(z.void()).output(z.object({ items: z.array(OutfitSchema) })).query(() => {
274
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
275
+ }),
276
+ create: protectedProcedure.input(CreateOutfitInputSchema).output(z.object({ outfit: OutfitSchema })).mutation(() => {
277
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
278
+ }),
279
+ update: protectedProcedure.input(UpdateOutfitInputSchema).output(z.object({ outfit: OutfitSchema })).mutation(() => {
280
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
281
+ }),
282
+ delete: protectedProcedure.input(DeleteOutfitInputSchema).output(z.object({ deleted: z.boolean() })).mutation(() => {
283
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
284
+ })
285
+ });
286
+ var emoteWheelsRouter = router({
287
+ list: protectedProcedure.input(z.void()).output(z.object({ items: z.array(EmoteWheelSchema) })).query(() => {
288
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
289
+ }),
290
+ save: protectedProcedure.input(SaveEmoteWheelInputSchema).output(z.object({ wheel: EmoteWheelSchema })).mutation(() => {
291
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
292
+ })
293
+ });
294
+ var skinsRouter = router({
295
+ list: protectedProcedure.input(z.void()).output(z.object({ items: z.array(SkinSchema) })).query(() => {
296
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
297
+ }),
298
+ upload: protectedProcedure.input(UploadSkinInputSchema).output(z.object({ skin: SkinSchema })).mutation(() => {
299
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
300
+ }),
301
+ setActive: protectedProcedure.input(SetActiveSkinInputSchema).output(z.object({ ok: z.boolean() })).mutation(() => {
302
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
303
+ })
304
+ });
305
+ var chatRouter = router({
306
+ channels: router({
307
+ list: protectedProcedure.input(ListChannelsInputSchema).output(z.object({ items: z.array(ChannelSchema) })).query(() => {
308
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
309
+ }),
310
+ createDM: protectedProcedure.input(CreateDMInputSchema).output(z.object({ channel: ChannelSchema })).mutation(() => {
311
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
312
+ }),
313
+ createGroup: protectedProcedure.input(CreateGroupInputSchema).output(z.object({ channel: ChannelSchema })).mutation(() => {
314
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
315
+ })
316
+ }),
317
+ messages: router({
318
+ list: protectedProcedure.input(ListMessagesInputSchema).output(z.object({ items: z.array(MessageSchema) })).query(() => {
319
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
320
+ }),
321
+ send: protectedProcedure.input(SendMessageInputSchema).output(z.object({ message: MessageSchema })).mutation(() => {
322
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
323
+ }),
324
+ edit: protectedProcedure.input(EditMessageInputSchema).output(z.object({ message: MessageSchema })).mutation(() => {
325
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
326
+ }),
327
+ delete: protectedProcedure.input(DeleteMessageInputSchema).output(z.object({ deleted: z.boolean() })).mutation(() => {
328
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
329
+ }),
330
+ markRead: protectedProcedure.input(MarkReadInputSchema).output(z.object({ ok: z.boolean() })).mutation(() => {
331
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
332
+ }),
333
+ report: protectedProcedure.input(ReportMessageInputSchema).output(z.object({ reported: z.boolean() })).mutation(() => {
334
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
335
+ }),
336
+ reports: protectedProcedure.input(ChannelReportsInputSchema).output(z.object({ items: z.array(z.any()) })).query(() => {
337
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
338
+ })
339
+ })
340
+ });
341
+ var mediaRouter = router({
342
+ list: protectedProcedure.input(ListMediaInputSchema).output(z.object({ items: z.array(MediaItemSchema) })).query(() => {
343
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
344
+ }),
345
+ upload: protectedProcedure.input(UploadMediaInputSchema).output(z.object({ item: MediaItemSchema })).mutation(() => {
346
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
347
+ }),
348
+ delete: protectedProcedure.input(DeleteMediaInputSchema).output(z.object({ deleted: z.boolean() })).mutation(() => {
349
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
350
+ })
351
+ });
352
+ var multiplayerRouter = router({
353
+ sendSignaling: protectedProcedure.input(SendSignalingInputSchema).output(z.object({ message: SignalingMessageSchema })).mutation(() => {
354
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
355
+ }),
356
+ listSignaling: protectedProcedure.input(z.object({ fromUuid: UUIDSchema.optional(), since: ISODateSchema.optional() })).output(z.object({ items: z.array(SignalingMessageSchema) })).query(() => {
357
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
358
+ })
359
+ });
360
+ var upnpRouter = router({
361
+ list: protectedProcedure.input(z.void()).output(z.object({ items: z.array(UpnpSessionSchema) })).query(() => {
362
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
363
+ }),
364
+ create: protectedProcedure.input(CreateUpnpInputSchema).output(z.object({ session: UpnpSessionSchema })).mutation(() => {
365
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
366
+ }),
367
+ close: protectedProcedure.input(CloseUpnpInputSchema).output(z.object({ closed: z.boolean() })).mutation(() => {
368
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
369
+ })
370
+ });
371
+ var discoveryRouter = router({
372
+ list: protectedProcedure.input(z.void()).output(z.object({ items: z.array(KnownServerSchema) })).query(() => {
373
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
374
+ })
375
+ });
376
+ var systemRouter = router({
377
+ status: protectedProcedure.input(z.void()).output(SystemStatusSchema).query(() => {
378
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
379
+ })
380
+ });
381
+ var instancesRouter = router({
382
+ list: protectedProcedure.input(z.void()).output(z.object({ items: z.array(InstalledInstanceSchema) })).query(() => {
383
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
384
+ })
385
+ });
386
+ var telemetryRouter = router({
387
+ report: protectedProcedure.input(ReportTelemetryInputSchema).output(z.object({ ok: z.boolean() })).mutation(() => {
388
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
389
+ })
390
+ });
391
+ var launcherRouter = router({
392
+ updateCheck: protectedProcedure.input(z.void()).output(LauncherUpdateInfoSchema).query(() => {
393
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
394
+ })
395
+ });
396
+ var adminRouter = router({
397
+ users: router({
398
+ list: protectedProcedure.input(z.object({ limit: z.number().optional(), offset: z.number().optional(), search: z.string().optional() }).optional()).query(() => {
399
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
400
+ }),
401
+ get: protectedProcedure.input(z.object({ uuid: z.string() })).query(() => {
402
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
403
+ }),
404
+ updateRole: protectedProcedure.input(z.object({ uuid: z.string(), role: z.enum(["USER", "MODERATOR", "ADMIN"]) })).mutation(() => {
405
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
406
+ }),
407
+ ban: protectedProcedure.input(z.object({ uuid: z.string() })).mutation(() => {
408
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
409
+ })
410
+ }),
411
+ builds: router({
412
+ list: protectedProcedure.query(() => {
413
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
414
+ }),
415
+ create: protectedProcedure.input(z.object({ slug: z.string(), name: z.string(), shortDescription: z.string().optional(), iconUrl: z.string().optional(), visibility: z.enum(["PUBLIC", "PRIVATE", "UNLISTED"]).optional() })).mutation(() => {
416
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
417
+ }),
418
+ update: protectedProcedure.input(z.object({ id: z.string(), name: z.string().optional(), shortDescription: z.string().optional(), iconUrl: z.string().optional().nullable(), visibility: z.enum(["PUBLIC", "PRIVATE", "UNLISTED"]).optional() })).mutation(() => {
419
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
420
+ }),
421
+ delete: protectedProcedure.input(z.object({ id: z.string() })).mutation(() => {
422
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
423
+ }),
424
+ listVersions: protectedProcedure.input(z.object({ buildId: z.string() })).query(() => {
425
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
426
+ }),
427
+ createVersion: protectedProcedure.input(z.object({
428
+ buildId: z.string(),
429
+ name: z.string(),
430
+ mcVersion: z.string(),
431
+ loader: z.enum(["VANILLA", "FABRIC", "FORGE", "NEOFORGE", "QUILT"]),
432
+ loaderVersion: z.string().optional(),
433
+ changelog: z.string().optional(),
434
+ downloadUrl: z.string().optional(),
435
+ sha256: z.string().optional(),
436
+ bytes: z.number().optional()
437
+ })).mutation(() => {
438
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
439
+ }),
440
+ deleteVersion: protectedProcedure.input(z.object({ id: z.string() })).mutation(() => {
441
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
442
+ })
443
+ }),
444
+ telemetry: router({
445
+ recent: protectedProcedure.query(() => {
446
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
447
+ })
448
+ }),
449
+ stats: protectedProcedure.query(() => {
450
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
451
+ })
452
+ });
453
+ var profileRouter = router({
454
+ update: protectedProcedure.input(z.object({ displayName: z.string().optional(), bio: z.string().optional().nullable(), avatarUrl: z.string().url().optional().nullable() })).mutation(() => {
455
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
456
+ }),
457
+ changePassword: protectedProcedure.input(z.object({ currentPassword: z.string(), newPassword: z.string().min(8) })).mutation(() => {
458
+ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: "not implemented" });
459
+ })
460
+ });
461
+ var appRouter = router({
462
+ v1: router({
463
+ health: healthRouter,
464
+ auth: authRouter,
465
+ profile: profileRouter,
466
+ builds: buildsRouter,
467
+ licenses: licensesRouter,
468
+ social: socialRouter,
469
+ cosmetics: cosmeticsRouter,
470
+ admin: adminRouter,
471
+ outfits: outfitsRouter,
472
+ emoteWheels: emoteWheelsRouter,
473
+ skins: skinsRouter,
474
+ chat: chatRouter,
475
+ media: mediaRouter,
476
+ multiplayer: multiplayerRouter,
477
+ upnp: upnpRouter,
478
+ discovery: discoveryRouter,
479
+ system: systemRouter,
480
+ instances: instancesRouter,
481
+ telemetry: telemetryRouter,
482
+ launcher: launcherRouter
483
+ })
484
+ });
485
+ var createCaller = async (ctx) => {
486
+ const context = await createContext(ctx);
487
+ return appRouter.createCaller(context);
488
+ };
489
+
490
+ export { appRouter, createCaller, createContext, protectedProcedure, publicProcedure };
491
+ //# sourceMappingURL=server.js.map
492
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/router.ts"],"names":[],"mappings":"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","file":"server.js","sourcesContent":["// AppRouter -- tRPC v11 router definition.\n// Procedures will be implemented in @anvil/api (private repo) and\n// consumed by apps/web via @anvil-js/client. For local dev, MSW handlers\n// in apps/web/src/lib/anvil-api/mock/handlers.ts provide the responses.\n\nimport { initTRPC, TRPCError } from '@trpc/server';\nimport { z } from 'zod';\nimport {\n UUIDSchema,\n UserSummarySchema,\n SessionSchema,\n LoginInputSchema,\n RegisterInputSchema,\n RefreshInputSchema,\n ForgotPasswordInputSchema,\n ResetPasswordInputSchema,\n ValidateInputSchema,\n BuildSummarySchema,\n BuildSchema,\n ListBuildsInputSchema,\n GetBuildInputSchema,\n RequestDownloadInputSchema,\n RequestDownloadOutputSchema,\n LicenseSchema,\n ListLicensesInputSchema,\n CheckLicenseInputSchema,\n CheckLicenseOutputSchema,\n} from './schemas/index';\n\n/**\n * Context shape -- populated by NestJS at request time.\n * See `apps/api/src/v1/auth/auth.guard.ts` (private repo) for the production version.\n */\nexport interface CreateContextOptions {\n userUuid?: string;\n token?: string;\n requestId?: string;\n}\n\nexport const createContext = async (opts: CreateContextOptions) => {\n return {\n userUuid: opts.userUuid,\n token: opts.token,\n requestId:\n opts.requestId ??\n (typeof crypto !== 'undefined' ? crypto.randomUUID() : Math.random().toString()),\n };\n};\n\nexport type Context = Awaited<ReturnType<typeof createContext>>;\n\nconst t = initTRPC.context<Context>().create({\n // No superjson transformer in the scaffold. The MSW dev layer\n // returns plain `{ result: { data } }` envelopes; using\n // superjson here requires the server to wrap responses in\n // `{ result: { data, meta: { values } } }`, which the MSW\n // handlers don't (and shouldn't) emit. All our data is\n // JSON-serializable so the default transformer is correct.\n // When `apps/api` is wired, either re-introduce superjson\n // here AND update the MSW handlers to match, or leave the\n // default transformer in place (the prod NestJS handler can\n // also omit the transformer).\n errorFormatter: ({ shape }) => ({\n ...shape,\n data: {\n code: shape.data.code,\n httpStatus: shape.data.httpStatus,\n },\n }),\n});\n\nexport const router = t.router;\nexport const publicProcedure = t.procedure;\nexport const middleware = t.middleware;\n\nconst isAuthed = middleware(({ ctx, next }) => {\n if (!ctx.userUuid) {\n throw new TRPCError({\n code: 'UNAUTHORIZED',\n message: 'Authentication required',\n });\n }\n const parsed = UUIDSchema.safeParse(ctx.userUuid);\n if (!parsed.success) {\n throw new TRPCError({\n code: 'UNAUTHORIZED',\n message: 'Invalid user identifier',\n });\n }\n return next({ ctx: { ...ctx, userUuid: ctx.userUuid } });\n});\n\nexport const protectedProcedure = t.procedure.use(isAuthed);\n\n// =====================================================================\n// v1.auth.* -- Authentication procedures (spec §5)\n// =====================================================================\n\nconst authRouter = router({\n // --- Anvil auth (email + password) ---\n signIn: publicProcedure\n .input(LoginInputSchema)\n .output(\n z.object({\n accessToken: z.string(),\n refreshToken: z.string(),\n expiresAt: z.string().datetime(),\n user: UserSummarySchema,\n }),\n )\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n signUp: publicProcedure\n .input(RegisterInputSchema)\n .output(\n z.object({\n accessToken: z.string(),\n refreshToken: z.string(),\n expiresAt: z.string().datetime(),\n user: UserSummarySchema,\n }),\n )\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n refresh: publicProcedure\n .input(RefreshInputSchema)\n .output(\n z.object({\n accessToken: z.string(),\n refreshToken: z.string(),\n expiresAt: z.string().datetime(),\n }),\n )\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n validate: publicProcedure\n .input(ValidateInputSchema)\n .output(\n z.object({\n valid: z.boolean(),\n user: UserSummarySchema.optional(),\n expiresAt: z.string().datetime().optional(),\n }),\n )\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n forgotPassword: publicProcedure\n .input(ForgotPasswordInputSchema)\n .output(z.void())\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n resetPassword: publicProcedure\n .input(ResetPasswordInputSchema)\n .output(z.void())\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n signOut: protectedProcedure.output(z.void()).mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n // --- Session (current authenticated user) ---\n session: router({\n current: protectedProcedure.output(SessionSchema).query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n\n // --- Mojang auth (Microsoft OAuth) -- spec §5.1 ---\n mojang: router({\n startDeviceCode: publicProcedure\n .output(\n z.object({\n deviceCode: z.string(),\n userCode: z.string(),\n verificationUri: z.string().url(),\n expiresIn: z.number().int(),\n interval: z.number().int(),\n }),\n )\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n pollDeviceCode: publicProcedure\n .input(z.object({ deviceCode: z.string() }))\n .output(\n z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('success'),\n mcAccessToken: z.string(),\n mcRefreshToken: z.string(),\n mcExpiresAt: z.string().datetime(),\n profile: z.object({ uuid: UUIDSchema, username: z.string() }),\n }),\n z.object({ kind: z.literal('pending') }),\n z.object({\n kind: z.literal('error'),\n code: z.enum(['authorization_declined', 'expired', 'slow_down']),\n }),\n ]),\n )\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n});\n\n// =====================================================================\n// v1.builds.* -- Content catalog (spec §6)\n// =====================================================================\n\nconst buildsRouter = router({\n list: publicProcedure\n .input(ListBuildsInputSchema)\n .output(\n z.object({\n items: z.array(BuildSummarySchema),\n total: z.number().int().nonnegative(),\n page: z.number().int().min(1),\n pageSize: z.number().int().min(1),\n }),\n )\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n get: publicProcedure\n .input(GetBuildInputSchema)\n .output(BuildSchema)\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n getVersions: publicProcedure\n .input(z.object({ buildId: UUIDSchema }))\n .output(z.array(z.any())) // BuildVersion[]\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n requestDownload: protectedProcedure\n .input(RequestDownloadInputSchema)\n .output(RequestDownloadOutputSchema)\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\n// =====================================================================\n// v1.licenses.* -- License management (spec §9)\n// =====================================================================\n\nconst licensesRouter = router({\n list: protectedProcedure\n .input(ListLicensesInputSchema)\n .output(z.array(LicenseSchema))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n check: protectedProcedure\n .input(CheckLicenseInputSchema)\n .output(CheckLicenseOutputSchema)\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\n// =====================================================================\n// v1.health.* -- Liveness/readiness (spec §4)\n// =====================================================================\n\nconst healthRouter = router({\n ping: publicProcedure\n .output(z.object({ status: z.string(), version: z.string(), timestamp: z.string().datetime() }))\n .query(() => ({\n status: 'ok',\n version: '0.0.0',\n timestamp: new Date().toISOString(),\n })),\n\n version: publicProcedure\n .output(\n z.object({\n api: z.string(),\n minLauncher: z.string(),\n recommendedLauncher: z.string(),\n deprecations: z.array(z.string()),\n }),\n )\n .query(() => ({\n api: '0.0.0',\n minLauncher: '0.0.0',\n recommendedLauncher: '0.0.0',\n deprecations: [] as string[],\n })),\n});\n\n// =====================================================================\n// v1.social.* -- Social & Presence (spec §12, essentialws compat)\n// =====================================================================\n\nimport {\n RelationshipSchema,\n TrustedHostSchema,\n PresenceSchema,\n CommunityRulesStatusSchema,\n SuspensionStatusSchema,\n ISODateSchema,\n CreateRelationshipInputSchema,\n DeleteRelationshipInputSchema,\n ListRelationshipsInputSchema,\n AcceptRequestInputSchema,\n CancelRequestInputSchema,\n LookupByNameInputSchema,\n LookupByNameOutputSchema,\n ReportActivityInputSchema,\n InviteToServerInputSchema,\n CreateTrustedHostInputSchema,\n DeleteTrustedHostInputSchema,\n CosmeticSchema,\n OutfitSchema,\n EmoteWheelSchema,\n SkinSchema,\n EquipCosmeticInputSchema,\n CreateOutfitInputSchema,\n UpdateOutfitInputSchema,\n DeleteOutfitInputSchema,\n SaveEmoteWheelInputSchema,\n UploadSkinInputSchema,\n SetActiveSkinInputSchema,\n ChannelSchema,\n MessageSchema,\n ListChannelsInputSchema,\n CreateDMInputSchema,\n CreateGroupInputSchema,\n ListMessagesInputSchema,\n SendMessageInputSchema,\n EditMessageInputSchema,\n DeleteMessageInputSchema,\n MarkReadInputSchema,\n ReportMessageInputSchema,\n ChannelReportsInputSchema,\n MediaItemSchema,\n ListMediaInputSchema,\n UploadMediaInputSchema,\n DeleteMediaInputSchema,\n SignalingMessageSchema,\n SendSignalingInputSchema,\n UpnpSessionSchema,\n CreateUpnpInputSchema,\n CloseUpnpInputSchema,\n KnownServerSchema,\n SystemStatusSchema,\n InstalledInstanceSchema,\n ReportTelemetryInputSchema,\n LauncherUpdateInfoSchema,\n} from './schemas';\n\nconst socialRouter = router({\n relationships: router({\n create: protectedProcedure\n .input(CreateRelationshipInputSchema)\n .output(z.object({ relationship: RelationshipSchema, created: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n delete: protectedProcedure\n .input(DeleteRelationshipInputSchema)\n .output(z.object({ deleted: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n list: protectedProcedure\n .input(ListRelationshipsInputSchema)\n .output(z.object({ items: z.array(RelationshipSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n acceptRequest: protectedProcedure\n .input(AcceptRequestInputSchema)\n .output(z.object({ relationship: RelationshipSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n cancelRequest: protectedProcedure\n .input(CancelRequestInputSchema)\n .output(z.object({ cancelled: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n\n users: router({\n lookupByName: protectedProcedure\n .input(LookupByNameInputSchema)\n .output(LookupByNameOutputSchema)\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n\n presence: router({\n /**\n * Query (not subscription) in this scaffold. Prod presence streaming\n * will land as a separate /v1/ws subscription multiplexed over the\n * WebSocket gateway. For now the MSW layer returns a snapshot of the\n * current presence map; the client polls every 5s.\n */\n get: protectedProcedure\n .input(z.object({ uuids: z.array(UUIDSchema) }))\n .output(z.object({ items: z.array(PresenceSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n\n activity: router({\n report: protectedProcedure\n .input(ReportActivityInputSchema)\n .output(z.void())\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n\n invites: router({\n toServer: protectedProcedure\n .input(InviteToServerInputSchema)\n .output(z.object({ delivered: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n\n trustedHosts: router({\n list: protectedProcedure\n .input(z.void())\n .output(z.object({ items: z.array(TrustedHostSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n create: protectedProcedure\n .input(CreateTrustedHostInputSchema)\n .output(z.object({ host: TrustedHostSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n delete: protectedProcedure\n .input(DeleteTrustedHostInputSchema)\n .output(z.object({ deleted: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n\n communityRules: router({\n get: protectedProcedure\n .input(z.void())\n .output(CommunityRulesStatusSchema)\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n agree: protectedProcedure\n .input(z.void())\n .output(z.object({ accepted: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n\n suspension: router({\n get: protectedProcedure\n .input(z.void())\n .output(SuspensionStatusSchema)\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n});\n\n// =====================================================================\n// v1.cosmetics.*, v1.outfits.*, v1.emoteWheels.*, v1.skins.* (spec §13 - §16)\n// =====================================================================\n\nconst cosmeticsRouter = router({\n list: protectedProcedure\n .input(\n z.object({\n type: z\n .enum(['hat', 'body', 'back', 'face', 'hand', 'feet', 'particle', 'emote'])\n .optional(),\n owned: z.boolean().optional(),\n limit: z.number().int().min(1).max(200).default(60),\n offset: z.number().int().min(0).default(0),\n }),\n )\n .output(z.object({ items: z.array(CosmeticSchema), total: z.number().int().nonnegative() }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n equip: protectedProcedure\n .input(EquipCosmeticInputSchema)\n .output(z.object({ ok: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\nconst outfitsRouter = router({\n list: protectedProcedure\n .input(z.void())\n .output(z.object({ items: z.array(OutfitSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n create: protectedProcedure\n .input(CreateOutfitInputSchema)\n .output(z.object({ outfit: OutfitSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n update: protectedProcedure\n .input(UpdateOutfitInputSchema)\n .output(z.object({ outfit: OutfitSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n delete: protectedProcedure\n .input(DeleteOutfitInputSchema)\n .output(z.object({ deleted: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\nconst emoteWheelsRouter = router({\n list: protectedProcedure\n .input(z.void())\n .output(z.object({ items: z.array(EmoteWheelSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n save: protectedProcedure\n .input(SaveEmoteWheelInputSchema)\n .output(z.object({ wheel: EmoteWheelSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\nconst skinsRouter = router({\n list: protectedProcedure\n .input(z.void())\n .output(z.object({ items: z.array(SkinSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n upload: protectedProcedure\n .input(UploadSkinInputSchema)\n .output(z.object({ skin: SkinSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n setActive: protectedProcedure\n .input(SetActiveSkinInputSchema)\n .output(z.object({ ok: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\n// =====================================================================\n// v1.chat.* (spec §17)\n// =====================================================================\n\nconst chatRouter = router({\n channels: router({\n list: protectedProcedure\n .input(ListChannelsInputSchema)\n .output(z.object({ items: z.array(ChannelSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n createDM: protectedProcedure\n .input(CreateDMInputSchema)\n .output(z.object({ channel: ChannelSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n createGroup: protectedProcedure\n .input(CreateGroupInputSchema)\n .output(z.object({ channel: ChannelSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n\n messages: router({\n list: protectedProcedure\n .input(ListMessagesInputSchema)\n .output(z.object({ items: z.array(MessageSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n send: protectedProcedure\n .input(SendMessageInputSchema)\n .output(z.object({ message: MessageSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n edit: protectedProcedure\n .input(EditMessageInputSchema)\n .output(z.object({ message: MessageSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n delete: protectedProcedure\n .input(DeleteMessageInputSchema)\n .output(z.object({ deleted: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n markRead: protectedProcedure\n .input(MarkReadInputSchema)\n .output(z.object({ ok: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n report: protectedProcedure\n .input(ReportMessageInputSchema)\n .output(z.object({ reported: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n reports: protectedProcedure\n .input(ChannelReportsInputSchema)\n .output(z.object({ items: z.array(z.any()) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n }),\n});\n\n// =====================================================================\n// v1.media.*, v1.multiplayer.*, v1.upnp.*, v1.discovery.*, v1.system.*,\n// v1.instances.*, v1.telemetry.*, v1.launcher.* (spec §18 - §22)\n// =====================================================================\n\nconst mediaRouter = router({\n list: protectedProcedure\n .input(ListMediaInputSchema)\n .output(z.object({ items: z.array(MediaItemSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n upload: protectedProcedure\n .input(UploadMediaInputSchema)\n .output(z.object({ item: MediaItemSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n delete: protectedProcedure\n .input(DeleteMediaInputSchema)\n .output(z.object({ deleted: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\nconst multiplayerRouter = router({\n sendSignaling: protectedProcedure\n .input(SendSignalingInputSchema)\n .output(z.object({ message: SignalingMessageSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n listSignaling: protectedProcedure\n .input(z.object({ fromUuid: UUIDSchema.optional(), since: ISODateSchema.optional() }))\n .output(z.object({ items: z.array(SignalingMessageSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\nconst upnpRouter = router({\n list: protectedProcedure\n .input(z.void())\n .output(z.object({ items: z.array(UpnpSessionSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n create: protectedProcedure\n .input(CreateUpnpInputSchema)\n .output(z.object({ session: UpnpSessionSchema }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n\n close: protectedProcedure\n .input(CloseUpnpInputSchema)\n .output(z.object({ closed: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\nconst discoveryRouter = router({\n list: protectedProcedure\n .input(z.void())\n .output(z.object({ items: z.array(KnownServerSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\nconst systemRouter = router({\n status: protectedProcedure\n .input(z.void())\n .output(SystemStatusSchema)\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\nconst instancesRouter = router({\n list: protectedProcedure\n .input(z.void())\n .output(z.object({ items: z.array(InstalledInstanceSchema) }))\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\nconst telemetryRouter = router({\n report: protectedProcedure\n .input(ReportTelemetryInputSchema)\n .output(z.object({ ok: z.boolean() }))\n .mutation(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\nconst launcherRouter = router({\n updateCheck: protectedProcedure\n .input(z.void())\n .output(LauncherUpdateInfoSchema)\n .query(() => {\n throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' });\n }),\n});\n\nconst adminRouter = router({\n users: router({\n list: protectedProcedure\n .input(z.object({ limit: z.number().optional(), offset: z.number().optional(), search: z.string().optional() }).optional())\n .query(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n get: protectedProcedure\n .input(z.object({ uuid: z.string() }))\n .query(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n updateRole: protectedProcedure\n .input(z.object({ uuid: z.string(), role: z.enum(['USER', 'MODERATOR', 'ADMIN']) }))\n .mutation(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n ban: protectedProcedure\n .input(z.object({ uuid: z.string() }))\n .mutation(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n }),\n builds: router({\n list: protectedProcedure.query(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n create: protectedProcedure\n .input(z.object({ slug: z.string(), name: z.string(), shortDescription: z.string().optional(), iconUrl: z.string().optional(), visibility: z.enum(['PUBLIC', 'PRIVATE', 'UNLISTED']).optional() }))\n .mutation(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n update: protectedProcedure\n .input(z.object({ id: z.string(), name: z.string().optional(), shortDescription: z.string().optional(), iconUrl: z.string().optional().nullable(), visibility: z.enum(['PUBLIC', 'PRIVATE', 'UNLISTED']).optional() }))\n .mutation(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n delete: protectedProcedure\n .input(z.object({ id: z.string() }))\n .mutation(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n listVersions: protectedProcedure\n .input(z.object({ buildId: z.string() }))\n .query(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n createVersion: protectedProcedure\n .input(z.object({\n buildId: z.string(),\n name: z.string(),\n mcVersion: z.string(),\n loader: z.enum(['VANILLA', 'FABRIC', 'FORGE', 'NEOFORGE', 'QUILT']),\n loaderVersion: z.string().optional(),\n changelog: z.string().optional(),\n downloadUrl: z.string().optional(),\n sha256: z.string().optional(),\n bytes: z.number().optional(),\n }))\n .mutation(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n deleteVersion: protectedProcedure\n .input(z.object({ id: z.string() }))\n .mutation(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n }),\n telemetry: router({\n recent: protectedProcedure.query(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n }),\n stats: protectedProcedure.query(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n});\n\n/**\n * AppRouter -- full router scaffold.\n * Procedures throw 'not implemented' until @anvil/api (private) wires them.\n * For local dev, MSW handlers in apps/web/src/lib/anvil-api/mock/handlers.ts\n * intercept and return canned responses.\n */\nconst profileRouter = router({\n update: protectedProcedure\n .input(z.object({ displayName: z.string().optional(), bio: z.string().optional().nullable(), avatarUrl: z.string().url().optional().nullable() }))\n .mutation(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n changePassword: protectedProcedure\n .input(z.object({ currentPassword: z.string(), newPassword: z.string().min(8) }))\n .mutation(() => { throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: 'not implemented' }); }),\n});\n\nexport const appRouter = router({\n v1: router({\n health: healthRouter,\n auth: authRouter,\n profile: profileRouter,\n builds: buildsRouter,\n licenses: licensesRouter,\n social: socialRouter,\n cosmetics: cosmeticsRouter,\n admin: adminRouter,\n outfits: outfitsRouter,\n emoteWheels: emoteWheelsRouter,\n skins: skinsRouter,\n chat: chatRouter,\n media: mediaRouter,\n multiplayer: multiplayerRouter,\n upnp: upnpRouter,\n discovery: discoveryRouter,\n system: systemRouter,\n instances: instancesRouter,\n telemetry: telemetryRouter,\n launcher: launcherRouter,\n }),\n});\n\nexport type AppRouter = typeof appRouter;\n\n/**\n * createCaller -- for server-side rendering and tests.\n * Avoids the HTTP transport entirely.\n */\nexport const createCaller = async (ctx: CreateContextOptions) => {\n const context = await createContext(ctx);\n return appRouter.createCaller(context);\n};\n"]}