@jgengine/convex 0.18.0 → 0.19.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/CHANGELOG.md +265 -2
- package/dist/convexPresenceTransport.d.ts +2 -6
- package/dist/convexPresenceTransport.js +2 -2
- package/dist/createConvexGameTransport.d.ts +15 -11
- package/dist/createConvexGameTransport.js +66 -3
- package/dist/hostedServer.d.ts +1 -1
- package/dist/hostedServer.js +12 -12
- package/dist/server.d.ts +362 -26
- package/dist/server.js +576 -201
- package/dist/territory.d.ts +20 -0
- package/dist/territory.js +47 -0
- package/dist/worldPresence.d.ts +68 -0
- package/dist/worldPresence.js +128 -0
- package/package.json +2 -2
- package/skills/ce-handoff/SKILL.md +2 -2
- package/skills/jgengine/SKILL.md +9 -5
- package/skills/jgengine/api.md +205 -101
- package/skills/jgengine/capabilities.md +56 -0
- package/skills/jgengine/recipes/minimal-game.md +3 -0
- package/skills/jgengine-multiplayer/SKILL.md +25 -0
- package/skills/jgengine-multiplayer/api.md +159 -109
- package/skills/jgengine-multiplayer/capabilities.md +37 -0
package/dist/hostedServer.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineSchema, internalMutationGeneric, mutationGeneric, queryGeneric, } from "convex/server";
|
|
2
2
|
import { ConvexError, v } from "convex/values";
|
|
3
3
|
import { INPUT_COMMAND } from "@jgengine/core/runtime/hostedGameRunner";
|
|
4
|
-
import {
|
|
4
|
+
import { createHostedWorldSessionAsync, } from "@jgengine/core/runtime/hostedWorldSession";
|
|
5
5
|
import { commitIfRevisionMatch } from "./occ.js";
|
|
6
6
|
import { jgengineHostedTables, resolveActor } from "./server.js";
|
|
7
7
|
/**
|
|
@@ -10,14 +10,14 @@ import { jgengineHostedTables, resolveActor } from "./server.js";
|
|
|
10
10
|
* members and replay held inputs, run the op, then persist the snapshot at `revision + 1` iff the world changed.
|
|
11
11
|
* @internal
|
|
12
12
|
*/
|
|
13
|
-
export function invokeHostedWorld(invocation) {
|
|
13
|
+
export async function invokeHostedWorld(invocation) {
|
|
14
14
|
const { game, store, members = [], inputs = {}, now, op } = invocation;
|
|
15
|
-
const loaded = store.load();
|
|
15
|
+
const loaded = await store.load();
|
|
16
16
|
const loadedJson = loaded === null ? null : JSON.stringify(loaded.snapshot);
|
|
17
|
-
const session =
|
|
17
|
+
const session = await createHostedWorldSessionAsync({
|
|
18
18
|
definition: game.definition,
|
|
19
19
|
content: game.content,
|
|
20
|
-
store: { load: () => loaded, save: () => { } },
|
|
20
|
+
store: { load: async () => loaded, save: async () => { } },
|
|
21
21
|
...(now === undefined ? {} : { now }),
|
|
22
22
|
...(game.models === undefined ? {} : { models: game.models }),
|
|
23
23
|
});
|
|
@@ -32,7 +32,7 @@ export function invokeHostedWorld(invocation) {
|
|
|
32
32
|
return { value, revision: baseRevision, changed: false, members: session.members() };
|
|
33
33
|
}
|
|
34
34
|
const record = { snapshot, revision: baseRevision + 1 };
|
|
35
|
-
store.save(record);
|
|
35
|
+
await store.save(record);
|
|
36
36
|
return { value, revision: record.revision, changed: true, members: session.members() };
|
|
37
37
|
}
|
|
38
38
|
const hostedSchemaForTypes = defineSchema(jgengineHostedTables());
|
|
@@ -55,8 +55,8 @@ function worldStoreForRow(row) {
|
|
|
55
55
|
let captured = null;
|
|
56
56
|
return {
|
|
57
57
|
store: {
|
|
58
|
-
load
|
|
59
|
-
save(record) {
|
|
58
|
+
async load() { return loaded; },
|
|
59
|
+
async save(record) {
|
|
60
60
|
captured = record;
|
|
61
61
|
},
|
|
62
62
|
},
|
|
@@ -155,7 +155,7 @@ export function createHostedGameServerFunctions(options) {
|
|
|
155
155
|
const row = await getWorldRow(ctx, args.gameId, serverId);
|
|
156
156
|
const isNew = !(row?.memberUserIds ?? []).includes(actorUserId);
|
|
157
157
|
const { store, captured } = worldStoreForRow(row);
|
|
158
|
-
const outcome = invokeHostedWorld({
|
|
158
|
+
const outcome = await invokeHostedWorld({
|
|
159
159
|
game,
|
|
160
160
|
store,
|
|
161
161
|
members: row?.memberUserIds ?? [],
|
|
@@ -193,7 +193,7 @@ export function createHostedGameServerFunctions(options) {
|
|
|
193
193
|
return null;
|
|
194
194
|
const game = resolveGame(args.gameId);
|
|
195
195
|
const { store, captured } = worldStoreForRow(row);
|
|
196
|
-
const outcome = invokeHostedWorld({
|
|
196
|
+
const outcome = await invokeHostedWorld({
|
|
197
197
|
game,
|
|
198
198
|
store,
|
|
199
199
|
members: row.memberUserIds,
|
|
@@ -245,7 +245,7 @@ export function createHostedGameServerFunctions(options) {
|
|
|
245
245
|
const game = resolveGame(args.gameId);
|
|
246
246
|
const loadedRevision = row.revision;
|
|
247
247
|
const { store, captured } = worldStoreForRow(row);
|
|
248
|
-
const outcome = invokeHostedWorld({
|
|
248
|
+
const outcome = await invokeHostedWorld({
|
|
249
249
|
game,
|
|
250
250
|
store,
|
|
251
251
|
members: row.memberUserIds,
|
|
@@ -319,7 +319,7 @@ export function createHostedGameServerFunctions(options) {
|
|
|
319
319
|
continue;
|
|
320
320
|
const elapsedMs = nowMs - row.tickAnchorMs;
|
|
321
321
|
const { store, captured } = worldStoreForRow(row);
|
|
322
|
-
const outcome = invokeHostedWorld({
|
|
322
|
+
const outcome = await invokeHostedWorld({
|
|
323
323
|
game,
|
|
324
324
|
store,
|
|
325
325
|
members: row.memberUserIds,
|