@jgengine/convex 0.7.0 → 0.9.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.
@@ -0,0 +1,518 @@
1
+ import type { DataModelFromSchemaDefinition, GenericMutationCtx } from "convex/server";
2
+ import type { GenericId } from "convex/values";
3
+ import type { ChatMessage } from "@jgengine/core/game/chat";
4
+ import type { ChatSendOutcome } from "@jgengine/core/multiplayer/chatContract";
5
+ import { type PoseSyncRules } from "@jgengine/core/multiplayer/presenceModel";
6
+ import type { GameRuntime } from "@jgengine/core/runtime/gameRuntime";
7
+ import type { LeaderboardIncrement } from "@jgengine/core/runtime/hostPersistence";
8
+ export declare function jgengineTables(): {
9
+ jgGameServers: import("convex/server").TableDefinition<import("convex/values").VObject<{
10
+ createdAt: number;
11
+ dirtyAt?: number | undefined;
12
+ gameId: string;
13
+ joinCode?: string | undefined;
14
+ lastSavedAt?: number | undefined;
15
+ memberUserIds: string[];
16
+ mode?: string | undefined;
17
+ modeConfig?: any;
18
+ revision: number;
19
+ save: "none" | {
20
+ auto: string;
21
+ scope: "chunks" | "player" | "player+chunks";
22
+ };
23
+ serverState: any;
24
+ sessionPlayers: any;
25
+ slotsPerServer: number;
26
+ status: "closed" | "open" | "running";
27
+ tickAnchorMs: number;
28
+ updatedAt: number;
29
+ visibility?: "private" | "public" | undefined;
30
+ }, {
31
+ gameId: import("convex/values").VString<string, "required">;
32
+ status: import("convex/values").VUnion<"closed" | "open" | "running", [import("convex/values").VLiteral<"open", "required">, import("convex/values").VLiteral<"running", "required">, import("convex/values").VLiteral<"closed", "required">], "required", never>;
33
+ mode: import("convex/values").VString<string | undefined, "optional">;
34
+ modeConfig: import("convex/values").VAny<any, "optional", string>;
35
+ visibility: import("convex/values").VUnion<"private" | "public" | undefined, [import("convex/values").VLiteral<"public", "required">, import("convex/values").VLiteral<"private", "required">], "optional", never>;
36
+ joinCode: import("convex/values").VString<string | undefined, "optional">;
37
+ memberUserIds: import("convex/values").VArray<string[], import("convex/values").VString<string, "required">, "required">;
38
+ slotsPerServer: import("convex/values").VFloat64<number, "required">;
39
+ save: import("convex/values").VUnion<"none" | {
40
+ auto: string;
41
+ scope: "chunks" | "player" | "player+chunks";
42
+ }, [import("convex/values").VLiteral<"none", "required">, import("convex/values").VObject<{
43
+ auto: string;
44
+ scope: "chunks" | "player" | "player+chunks";
45
+ }, {
46
+ auto: import("convex/values").VString<string, "required">;
47
+ scope: import("convex/values").VUnion<"chunks" | "player" | "player+chunks", [import("convex/values").VLiteral<"player", "required">, import("convex/values").VLiteral<"chunks", "required">, import("convex/values").VLiteral<"player+chunks", "required">], "required", never>;
48
+ }, "required", "auto" | "scope">], "required", "auto" | "scope">;
49
+ serverState: import("convex/values").VAny<any, "required", string>;
50
+ sessionPlayers: import("convex/values").VAny<any, "required", string>;
51
+ revision: import("convex/values").VFloat64<number, "required">;
52
+ tickAnchorMs: import("convex/values").VFloat64<number, "required">;
53
+ lastSavedAt: import("convex/values").VFloat64<number | undefined, "optional">;
54
+ dirtyAt: import("convex/values").VFloat64<number | undefined, "optional">;
55
+ createdAt: import("convex/values").VFloat64<number, "required">;
56
+ updatedAt: import("convex/values").VFloat64<number, "required">;
57
+ }, "required", "createdAt" | "dirtyAt" | "gameId" | "joinCode" | "lastSavedAt" | "memberUserIds" | "mode" | "modeConfig" | "revision" | "save" | "save.auto" | "save.scope" | "serverState" | "sessionPlayers" | "slotsPerServer" | "status" | "tickAnchorMs" | "updatedAt" | "visibility" | `modeConfig.${string}` | `serverState.${string}` | `sessionPlayers.${string}`>, {
58
+ by_game_and_status: ["gameId", "status", "_creationTime"];
59
+ }, {}, {}>;
60
+ jgPlayerProfiles: import("convex/server").TableDefinition<import("convex/values").VObject<{
61
+ createdAt: number;
62
+ dirtyAt?: number | undefined;
63
+ gameId: string;
64
+ playerState: any;
65
+ revision: number;
66
+ updatedAt: number;
67
+ userId: string;
68
+ }, {
69
+ userId: import("convex/values").VString<string, "required">;
70
+ gameId: import("convex/values").VString<string, "required">;
71
+ playerState: import("convex/values").VAny<any, "required", string>;
72
+ revision: import("convex/values").VFloat64<number, "required">;
73
+ dirtyAt: import("convex/values").VFloat64<number | undefined, "optional">;
74
+ createdAt: import("convex/values").VFloat64<number, "required">;
75
+ updatedAt: import("convex/values").VFloat64<number, "required">;
76
+ }, "required", "createdAt" | "dirtyAt" | "gameId" | "playerState" | "revision" | "updatedAt" | "userId" | `playerState.${string}`>, {
77
+ by_user_and_game: ["userId", "gameId", "_creationTime"];
78
+ }, {}, {}>;
79
+ jgWorldChunks: import("convex/server").TableDefinition<import("convex/values").VObject<{
80
+ chunkKey: string;
81
+ dirtyAt?: number | undefined;
82
+ serverId: GenericId<"jgGameServers">;
83
+ snapshot: any;
84
+ updatedAt: number;
85
+ }, {
86
+ serverId: import("convex/values").VId<GenericId<"jgGameServers">, "required">;
87
+ chunkKey: import("convex/values").VString<string, "required">;
88
+ snapshot: import("convex/values").VAny<any, "required", string>;
89
+ dirtyAt: import("convex/values").VFloat64<number | undefined, "optional">;
90
+ updatedAt: import("convex/values").VFloat64<number, "required">;
91
+ }, "required", "chunkKey" | "dirtyAt" | "serverId" | "snapshot" | "updatedAt" | `snapshot.${string}`>, {
92
+ by_server: ["serverId", "_creationTime"];
93
+ by_server_and_chunk: ["serverId", "chunkKey", "_creationTime"];
94
+ }, {}, {}>;
95
+ jgLeaderboardRows: import("convex/server").TableDefinition<import("convex/values").VObject<{
96
+ gameId: string;
97
+ scope: "global" | "profile" | "server";
98
+ serverId?: GenericId<"jgGameServers"> | undefined;
99
+ stat: string;
100
+ updatedAt: number;
101
+ userId: string;
102
+ value: number;
103
+ }, {
104
+ gameId: import("convex/values").VString<string, "required">;
105
+ stat: import("convex/values").VString<string, "required">;
106
+ scope: import("convex/values").VUnion<"global" | "profile" | "server", [import("convex/values").VLiteral<"global", "required">, import("convex/values").VLiteral<"server", "required">, import("convex/values").VLiteral<"profile", "required">], "required", never>;
107
+ serverId: import("convex/values").VId<GenericId<"jgGameServers"> | undefined, "optional">;
108
+ userId: import("convex/values").VString<string, "required">;
109
+ value: import("convex/values").VFloat64<number, "required">;
110
+ updatedAt: import("convex/values").VFloat64<number, "required">;
111
+ }, "required", "gameId" | "scope" | "serverId" | "stat" | "updatedAt" | "userId" | "value">, {
112
+ by_game_scope_stat_value: ["gameId", "scope", "stat", "value", "_creationTime"];
113
+ by_user_scope_stat: ["userId", "scope", "stat", "_creationTime"];
114
+ }, {}, {}>;
115
+ jgFeedBuffers: import("convex/server").TableDefinition<import("convex/values").VObject<{
116
+ action: string;
117
+ entries: any[];
118
+ serverId: GenericId<"jgGameServers">;
119
+ updatedAt: number;
120
+ }, {
121
+ serverId: import("convex/values").VId<GenericId<"jgGameServers">, "required">;
122
+ action: import("convex/values").VString<string, "required">;
123
+ entries: import("convex/values").VArray<any[], import("convex/values").VAny<any, "required", string>, "required">;
124
+ updatedAt: import("convex/values").VFloat64<number, "required">;
125
+ }, "required", "action" | "entries" | "serverId" | "updatedAt">, {
126
+ by_server_and_action: ["serverId", "action", "_creationTime"];
127
+ }, {}, {}>;
128
+ jgPoses: import("convex/server").TableDefinition<import("convex/values").VObject<{
129
+ rotationPitch: number;
130
+ rotationY: number;
131
+ serverId: string;
132
+ updatedAt: number;
133
+ userId: string;
134
+ x: number;
135
+ y: number;
136
+ z: number;
137
+ }, {
138
+ serverId: import("convex/values").VString<string, "required">;
139
+ userId: import("convex/values").VString<string, "required">;
140
+ x: import("convex/values").VFloat64<number, "required">;
141
+ y: import("convex/values").VFloat64<number, "required">;
142
+ z: import("convex/values").VFloat64<number, "required">;
143
+ rotationY: import("convex/values").VFloat64<number, "required">;
144
+ rotationPitch: import("convex/values").VFloat64<number, "required">;
145
+ updatedAt: import("convex/values").VFloat64<number, "required">;
146
+ }, "required", "rotationPitch" | "rotationY" | "serverId" | "updatedAt" | "userId" | "x" | "y" | "z">, {
147
+ by_server: ["serverId", "_creationTime"];
148
+ by_server_and_user: ["serverId", "userId", "_creationTime"];
149
+ }, {}, {}>;
150
+ jgChatMessages: import("convex/server").TableDefinition<import("convex/values").VObject<{
151
+ at: number;
152
+ body: string;
153
+ channelId: string;
154
+ serverId: string;
155
+ userId: string;
156
+ }, {
157
+ serverId: import("convex/values").VString<string, "required">;
158
+ channelId: import("convex/values").VString<string, "required">;
159
+ userId: import("convex/values").VString<string, "required">;
160
+ body: import("convex/values").VString<string, "required">;
161
+ at: import("convex/values").VFloat64<number, "required">;
162
+ }, "required", "at" | "body" | "channelId" | "serverId" | "userId">, {
163
+ by_server_channel: ["serverId", "channelId", "_creationTime"];
164
+ }, {}, {}>;
165
+ };
166
+ declare const schemaForTypes: import("convex/server").SchemaDefinition<{
167
+ jgGameServers: import("convex/server").TableDefinition<import("convex/values").VObject<{
168
+ createdAt: number;
169
+ dirtyAt?: number | undefined;
170
+ gameId: string;
171
+ joinCode?: string | undefined;
172
+ lastSavedAt?: number | undefined;
173
+ memberUserIds: string[];
174
+ mode?: string | undefined;
175
+ modeConfig?: any;
176
+ revision: number;
177
+ save: "none" | {
178
+ auto: string;
179
+ scope: "chunks" | "player" | "player+chunks";
180
+ };
181
+ serverState: any;
182
+ sessionPlayers: any;
183
+ slotsPerServer: number;
184
+ status: "closed" | "open" | "running";
185
+ tickAnchorMs: number;
186
+ updatedAt: number;
187
+ visibility?: "private" | "public" | undefined;
188
+ }, {
189
+ gameId: import("convex/values").VString<string, "required">;
190
+ status: import("convex/values").VUnion<"closed" | "open" | "running", [import("convex/values").VLiteral<"open", "required">, import("convex/values").VLiteral<"running", "required">, import("convex/values").VLiteral<"closed", "required">], "required", never>;
191
+ mode: import("convex/values").VString<string | undefined, "optional">;
192
+ modeConfig: import("convex/values").VAny<any, "optional", string>;
193
+ visibility: import("convex/values").VUnion<"private" | "public" | undefined, [import("convex/values").VLiteral<"public", "required">, import("convex/values").VLiteral<"private", "required">], "optional", never>;
194
+ joinCode: import("convex/values").VString<string | undefined, "optional">;
195
+ memberUserIds: import("convex/values").VArray<string[], import("convex/values").VString<string, "required">, "required">;
196
+ slotsPerServer: import("convex/values").VFloat64<number, "required">;
197
+ save: import("convex/values").VUnion<"none" | {
198
+ auto: string;
199
+ scope: "chunks" | "player" | "player+chunks";
200
+ }, [import("convex/values").VLiteral<"none", "required">, import("convex/values").VObject<{
201
+ auto: string;
202
+ scope: "chunks" | "player" | "player+chunks";
203
+ }, {
204
+ auto: import("convex/values").VString<string, "required">;
205
+ scope: import("convex/values").VUnion<"chunks" | "player" | "player+chunks", [import("convex/values").VLiteral<"player", "required">, import("convex/values").VLiteral<"chunks", "required">, import("convex/values").VLiteral<"player+chunks", "required">], "required", never>;
206
+ }, "required", "auto" | "scope">], "required", "auto" | "scope">;
207
+ serverState: import("convex/values").VAny<any, "required", string>;
208
+ sessionPlayers: import("convex/values").VAny<any, "required", string>;
209
+ revision: import("convex/values").VFloat64<number, "required">;
210
+ tickAnchorMs: import("convex/values").VFloat64<number, "required">;
211
+ lastSavedAt: import("convex/values").VFloat64<number | undefined, "optional">;
212
+ dirtyAt: import("convex/values").VFloat64<number | undefined, "optional">;
213
+ createdAt: import("convex/values").VFloat64<number, "required">;
214
+ updatedAt: import("convex/values").VFloat64<number, "required">;
215
+ }, "required", "createdAt" | "dirtyAt" | "gameId" | "joinCode" | "lastSavedAt" | "memberUserIds" | "mode" | "modeConfig" | "revision" | "save" | "save.auto" | "save.scope" | "serverState" | "sessionPlayers" | "slotsPerServer" | "status" | "tickAnchorMs" | "updatedAt" | "visibility" | `modeConfig.${string}` | `serverState.${string}` | `sessionPlayers.${string}`>, {
216
+ by_game_and_status: ["gameId", "status", "_creationTime"];
217
+ }, {}, {}>;
218
+ jgPlayerProfiles: import("convex/server").TableDefinition<import("convex/values").VObject<{
219
+ createdAt: number;
220
+ dirtyAt?: number | undefined;
221
+ gameId: string;
222
+ playerState: any;
223
+ revision: number;
224
+ updatedAt: number;
225
+ userId: string;
226
+ }, {
227
+ userId: import("convex/values").VString<string, "required">;
228
+ gameId: import("convex/values").VString<string, "required">;
229
+ playerState: import("convex/values").VAny<any, "required", string>;
230
+ revision: import("convex/values").VFloat64<number, "required">;
231
+ dirtyAt: import("convex/values").VFloat64<number | undefined, "optional">;
232
+ createdAt: import("convex/values").VFloat64<number, "required">;
233
+ updatedAt: import("convex/values").VFloat64<number, "required">;
234
+ }, "required", "createdAt" | "dirtyAt" | "gameId" | "playerState" | "revision" | "updatedAt" | "userId" | `playerState.${string}`>, {
235
+ by_user_and_game: ["userId", "gameId", "_creationTime"];
236
+ }, {}, {}>;
237
+ jgWorldChunks: import("convex/server").TableDefinition<import("convex/values").VObject<{
238
+ chunkKey: string;
239
+ dirtyAt?: number | undefined;
240
+ serverId: GenericId<"jgGameServers">;
241
+ snapshot: any;
242
+ updatedAt: number;
243
+ }, {
244
+ serverId: import("convex/values").VId<GenericId<"jgGameServers">, "required">;
245
+ chunkKey: import("convex/values").VString<string, "required">;
246
+ snapshot: import("convex/values").VAny<any, "required", string>;
247
+ dirtyAt: import("convex/values").VFloat64<number | undefined, "optional">;
248
+ updatedAt: import("convex/values").VFloat64<number, "required">;
249
+ }, "required", "chunkKey" | "dirtyAt" | "serverId" | "snapshot" | "updatedAt" | `snapshot.${string}`>, {
250
+ by_server: ["serverId", "_creationTime"];
251
+ by_server_and_chunk: ["serverId", "chunkKey", "_creationTime"];
252
+ }, {}, {}>;
253
+ jgLeaderboardRows: import("convex/server").TableDefinition<import("convex/values").VObject<{
254
+ gameId: string;
255
+ scope: "global" | "profile" | "server";
256
+ serverId?: GenericId<"jgGameServers"> | undefined;
257
+ stat: string;
258
+ updatedAt: number;
259
+ userId: string;
260
+ value: number;
261
+ }, {
262
+ gameId: import("convex/values").VString<string, "required">;
263
+ stat: import("convex/values").VString<string, "required">;
264
+ scope: import("convex/values").VUnion<"global" | "profile" | "server", [import("convex/values").VLiteral<"global", "required">, import("convex/values").VLiteral<"server", "required">, import("convex/values").VLiteral<"profile", "required">], "required", never>;
265
+ serverId: import("convex/values").VId<GenericId<"jgGameServers"> | undefined, "optional">;
266
+ userId: import("convex/values").VString<string, "required">;
267
+ value: import("convex/values").VFloat64<number, "required">;
268
+ updatedAt: import("convex/values").VFloat64<number, "required">;
269
+ }, "required", "gameId" | "scope" | "serverId" | "stat" | "updatedAt" | "userId" | "value">, {
270
+ by_game_scope_stat_value: ["gameId", "scope", "stat", "value", "_creationTime"];
271
+ by_user_scope_stat: ["userId", "scope", "stat", "_creationTime"];
272
+ }, {}, {}>;
273
+ jgFeedBuffers: import("convex/server").TableDefinition<import("convex/values").VObject<{
274
+ action: string;
275
+ entries: any[];
276
+ serverId: GenericId<"jgGameServers">;
277
+ updatedAt: number;
278
+ }, {
279
+ serverId: import("convex/values").VId<GenericId<"jgGameServers">, "required">;
280
+ action: import("convex/values").VString<string, "required">;
281
+ entries: import("convex/values").VArray<any[], import("convex/values").VAny<any, "required", string>, "required">;
282
+ updatedAt: import("convex/values").VFloat64<number, "required">;
283
+ }, "required", "action" | "entries" | "serverId" | "updatedAt">, {
284
+ by_server_and_action: ["serverId", "action", "_creationTime"];
285
+ }, {}, {}>;
286
+ jgPoses: import("convex/server").TableDefinition<import("convex/values").VObject<{
287
+ rotationPitch: number;
288
+ rotationY: number;
289
+ serverId: string;
290
+ updatedAt: number;
291
+ userId: string;
292
+ x: number;
293
+ y: number;
294
+ z: number;
295
+ }, {
296
+ serverId: import("convex/values").VString<string, "required">;
297
+ userId: import("convex/values").VString<string, "required">;
298
+ x: import("convex/values").VFloat64<number, "required">;
299
+ y: import("convex/values").VFloat64<number, "required">;
300
+ z: import("convex/values").VFloat64<number, "required">;
301
+ rotationY: import("convex/values").VFloat64<number, "required">;
302
+ rotationPitch: import("convex/values").VFloat64<number, "required">;
303
+ updatedAt: import("convex/values").VFloat64<number, "required">;
304
+ }, "required", "rotationPitch" | "rotationY" | "serverId" | "updatedAt" | "userId" | "x" | "y" | "z">, {
305
+ by_server: ["serverId", "_creationTime"];
306
+ by_server_and_user: ["serverId", "userId", "_creationTime"];
307
+ }, {}, {}>;
308
+ jgChatMessages: import("convex/server").TableDefinition<import("convex/values").VObject<{
309
+ at: number;
310
+ body: string;
311
+ channelId: string;
312
+ serverId: string;
313
+ userId: string;
314
+ }, {
315
+ serverId: import("convex/values").VString<string, "required">;
316
+ channelId: import("convex/values").VString<string, "required">;
317
+ userId: import("convex/values").VString<string, "required">;
318
+ body: import("convex/values").VString<string, "required">;
319
+ at: import("convex/values").VFloat64<number, "required">;
320
+ }, "required", "at" | "body" | "channelId" | "serverId" | "userId">, {
321
+ by_server_channel: ["serverId", "channelId", "_creationTime"];
322
+ }, {}, {}>;
323
+ }, true>;
324
+ type JGDataModel = DataModelFromSchemaDefinition<typeof schemaForTypes>;
325
+ type JGMutationCtx = GenericMutationCtx<JGDataModel>;
326
+ export type JgAuthMode = "anonymous" | "required";
327
+ export declare const DEFAULT_CONVEX_POSE_RULES: PoseSyncRules;
328
+ export declare function applyLeaderboardIncrements(ctx: JGMutationCtx, gameId: string, entries: LeaderboardIncrement[]): Promise<void>;
329
+ export declare const JG_RUNTIME_TICK_MS = 1000;
330
+ export declare function createGameServerFunctions(options?: {
331
+ runtimes?: GameRuntime[];
332
+ auth?: JgAuthMode;
333
+ slotsPerServer?: number;
334
+ allowedFeedActions?: readonly string[];
335
+ }): {
336
+ joinServer: import("convex/server").RegisteredMutation<"public", {
337
+ externalId?: string | undefined;
338
+ gameId: string;
339
+ joinCode?: string | undefined;
340
+ mode?: string | undefined;
341
+ modeConfig?: any;
342
+ serverId?: GenericId<"jgGameServers"> | undefined;
343
+ visibility?: "private" | "public" | undefined;
344
+ }, Promise<{
345
+ serverId: GenericId<"jgGameServers">;
346
+ isNew: boolean;
347
+ }>>;
348
+ leaveServer: import("convex/server").RegisteredMutation<"public", {
349
+ externalId?: string | undefined;
350
+ serverId: GenericId<"jgGameServers">;
351
+ }, Promise<null>>;
352
+ runCommand: import("convex/server").RegisteredMutation<"public", {
353
+ command: string;
354
+ externalId?: string | undefined;
355
+ input: any;
356
+ serverId: GenericId<"jgGameServers">;
357
+ }, Promise<{
358
+ ok: false;
359
+ reason: string;
360
+ } | {
361
+ ok: true;
362
+ }>>;
363
+ flushSave: import("convex/server").RegisteredMutation<"public", {
364
+ externalId?: string | undefined;
365
+ serverId: GenericId<"jgGameServers">;
366
+ }, Promise<boolean>>;
367
+ getServer: import("convex/server").RegisteredQuery<"public", {
368
+ externalId?: string | undefined;
369
+ serverId: GenericId<"jgGameServers">;
370
+ }, Promise<{
371
+ _id: GenericId<"jgGameServers">;
372
+ gameId: string;
373
+ status: "closed" | "open" | "running";
374
+ mode: string | undefined;
375
+ memberUserIds: string[];
376
+ slotsPerServer: number;
377
+ save: "none" | {
378
+ auto: string;
379
+ scope: "chunks" | "player" | "player+chunks";
380
+ };
381
+ revision: number;
382
+ serverState: any;
383
+ sessionPlayers: {
384
+ [x: string]: {} | null;
385
+ };
386
+ updatedAt: number;
387
+ } | null>>;
388
+ getPlayerProfile: import("convex/server").RegisteredQuery<"public", {
389
+ externalId?: string | undefined;
390
+ gameId: string;
391
+ }, Promise<{
392
+ userId: string;
393
+ gameId: string;
394
+ playerState: any;
395
+ revision: number;
396
+ updatedAt: number;
397
+ } | null>>;
398
+ getFeed: import("convex/server").RegisteredQuery<"public", {
399
+ action: string;
400
+ externalId?: string | undefined;
401
+ serverId: GenericId<"jgGameServers">;
402
+ }, Promise<any[]>>;
403
+ pushFeedEntry: import("convex/server").RegisteredMutation<"public", {
404
+ action: string;
405
+ entry: any;
406
+ externalId?: string | undefined;
407
+ serverId: GenericId<"jgGameServers">;
408
+ }, Promise<null>>;
409
+ listOpenServers: import("convex/server").RegisteredQuery<"public", {
410
+ externalId?: string | undefined;
411
+ gameId: string;
412
+ limit?: number | undefined;
413
+ }, Promise<{
414
+ _id: GenericId<"jgGameServers">;
415
+ status: "closed" | "open" | "running";
416
+ memberCount: number;
417
+ slotsPerServer: number;
418
+ mode: string | undefined;
419
+ updatedAt: number;
420
+ }[]>>;
421
+ tickActiveServers: import("convex/server").RegisteredMutation<"internal", {}, Promise<{
422
+ ticked: number;
423
+ saved: number;
424
+ }>>;
425
+ flushDirtyServers: import("convex/server").RegisteredMutation<"internal", {}, Promise<{
426
+ saved: number;
427
+ }>>;
428
+ };
429
+ export declare function createLeaderboardFunctions(options?: {
430
+ auth?: JgAuthMode;
431
+ }): {
432
+ getTop: import("convex/server").RegisteredQuery<"public", {
433
+ externalId?: string | undefined;
434
+ gameId: string;
435
+ limit?: number | undefined;
436
+ scope: "global" | "profile" | "server";
437
+ serverId?: GenericId<"jgGameServers"> | undefined;
438
+ stat: string;
439
+ }, Promise<{
440
+ userId: string;
441
+ value: number;
442
+ }[]>>;
443
+ getProfile: import("convex/server").RegisteredQuery<"public", {
444
+ externalId?: string | undefined;
445
+ gameId: string;
446
+ userId: string;
447
+ }, Promise<Record<string, number>>>;
448
+ incrementMany: import("convex/server").RegisteredMutation<"internal", {
449
+ entries: {
450
+ by: number;
451
+ scope: "global" | "profile" | "server";
452
+ serverId?: GenericId<"jgGameServers"> | undefined;
453
+ stat: string;
454
+ userId: string;
455
+ }[];
456
+ gameId: string;
457
+ }, Promise<null>>;
458
+ };
459
+ export declare function createPresenceFunctions(options?: {
460
+ auth?: JgAuthMode;
461
+ freshWindowMs?: number;
462
+ poseRules?: PoseSyncRules;
463
+ }): {
464
+ list: import("convex/server").RegisteredQuery<"public", {
465
+ externalId?: string | undefined;
466
+ serverId: string;
467
+ }, Promise<{
468
+ userId: string;
469
+ position: {
470
+ x: number;
471
+ y: number;
472
+ z: number;
473
+ };
474
+ rotationY: number;
475
+ rotationPitch: number;
476
+ lastSeenAt: number;
477
+ }[]>>;
478
+ sync: import("convex/server").RegisteredMutation<"public", {
479
+ externalId?: string | undefined;
480
+ pose: {
481
+ rotationPitch: number;
482
+ rotationY: number;
483
+ x: number;
484
+ y: number;
485
+ z: number;
486
+ };
487
+ serverId: string;
488
+ }, Promise<null>>;
489
+ leave: import("convex/server").RegisteredMutation<"public", {
490
+ externalId?: string | undefined;
491
+ serverId: string;
492
+ }, Promise<null>>;
493
+ };
494
+ export declare function createChatFunctions(options?: {
495
+ auth?: JgAuthMode;
496
+ historyLimit?: number;
497
+ maxBodyLength?: number;
498
+ minIntervalMs?: number;
499
+ }): {
500
+ messages: import("convex/server").RegisteredQuery<"public", {
501
+ channelId: string;
502
+ externalId?: string | undefined;
503
+ serverId: string;
504
+ }, Promise<ChatMessage[]>>;
505
+ sendMessage: import("convex/server").RegisteredMutation<"public", {
506
+ body: string;
507
+ channelId: string;
508
+ externalId?: string | undefined;
509
+ serverId: string;
510
+ }, Promise<ChatSendOutcome>>;
511
+ };
512
+ export type JgCronSpec = {
513
+ name: string;
514
+ intervalSeconds: number;
515
+ functionKey: "tickActiveServers" | "flushDirtyServers";
516
+ };
517
+ export declare function jgengineCronSpecs(): readonly JgCronSpec[];
518
+ export {};