@crowdedkingdoms/crowdyjs 8.0.0 → 8.1.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.
Files changed (59) hide show
  1. package/README.md +92 -15
  2. package/dist/client.d.ts +8 -0
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +5 -0
  5. package/dist/crowdy-client.d.ts +22 -0
  6. package/dist/crowdy-client.d.ts.map +1 -1
  7. package/dist/crowdy-client.js +21 -0
  8. package/dist/domains/gameModel.d.ts +54 -3
  9. package/dist/domains/gameModel.d.ts.map +1 -1
  10. package/dist/domains/gameModel.js +67 -4
  11. package/dist/domains/host.d.ts +14 -3
  12. package/dist/domains/host.d.ts.map +1 -1
  13. package/dist/domains/host.js +17 -3
  14. package/dist/domains/organizations.d.ts +3 -3
  15. package/dist/domains/organizations.js +3 -3
  16. package/dist/domains/quotas.d.ts +1 -1
  17. package/dist/domains/quotas.js +1 -1
  18. package/dist/domains/udp.d.ts +28 -17
  19. package/dist/domains/udp.d.ts.map +1 -1
  20. package/dist/domains/udp.js +28 -17
  21. package/dist/generated/graphql.d.ts +366 -6
  22. package/dist/generated/graphql.d.ts.map +1 -1
  23. package/dist/generated/graphql.js +13 -8
  24. package/dist/index.d.ts +3 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +3 -1
  27. package/dist/kit/blueprints.d.ts +259 -0
  28. package/dist/kit/blueprints.d.ts.map +1 -0
  29. package/dist/kit/blueprints.js +480 -0
  30. package/dist/kit/index.d.ts +7 -0
  31. package/dist/kit/index.d.ts.map +1 -0
  32. package/dist/kit/index.js +6 -0
  33. package/dist/kit/inventory.d.ts +111 -0
  34. package/dist/kit/inventory.d.ts.map +1 -0
  35. package/dist/kit/inventory.js +158 -0
  36. package/dist/kit/kit.d.ts +96 -0
  37. package/dist/kit/kit.d.ts.map +1 -0
  38. package/dist/kit/kit.js +98 -0
  39. package/dist/kit/npcs.d.ts +182 -0
  40. package/dist/kit/npcs.d.ts.map +1 -0
  41. package/dist/kit/npcs.js +106 -0
  42. package/dist/kit/objects.d.ts +108 -0
  43. package/dist/kit/objects.d.ts.map +1 -0
  44. package/dist/kit/objects.js +110 -0
  45. package/dist/kit/shared.d.ts +32 -0
  46. package/dist/kit/shared.d.ts.map +1 -0
  47. package/dist/kit/shared.js +39 -0
  48. package/dist/lb-cookie-store.d.ts +20 -0
  49. package/dist/lb-cookie-store.d.ts.map +1 -0
  50. package/dist/lb-cookie-store.js +73 -0
  51. package/dist/realtime.d.ts +20 -5
  52. package/dist/realtime.d.ts.map +1 -1
  53. package/dist/realtime.js +38 -0
  54. package/dist/types.d.ts +22 -6
  55. package/dist/types.d.ts.map +1 -1
  56. package/dist/world.d.ts +13 -8
  57. package/dist/world.d.ts.map +1 -1
  58. package/dist/world.js +13 -8
  59. package/package.json +6 -4
package/dist/index.js CHANGED
@@ -45,12 +45,14 @@
45
45
  * or internal tooling, never an untrusted browser.
46
46
  */
47
47
  /** The published package version. Mirrors `package.json`. */
48
- export const VERSION = '8.0.0';
48
+ export const VERSION = '8.1.0';
49
+ export { LbCookieStore } from './lb-cookie-store.js';
49
50
  export { CrowdyClient, createCrowdyClient, } from './crowdy-client.js';
50
51
  export { BrowserLocalStorageTokenStore, SessionStore, } from './session.js';
51
52
  export { GraphQLClient, GraphQLTransport, } from './client.js';
52
53
  export { RealtimeClient, } from './realtime.js';
53
54
  export { WorldClient, ActorClient } from './world.js';
55
+ export { GameKitClient, InventoryKit, NpcsKit, ObjectsKit, inventoryBlueprint, inventoryNames, kitInvoke, kitPolicyJson, lockBlueprint, lockNames, mergeBlueprints, npcBehaviorFunctionName, npcBlueprint, toKitInvokeResult, } from './kit/index.js';
54
56
  export { CrowdyError, CrowdyGraphQLError, CrowdyHttpError, CrowdyNetworkError, CrowdyProtocolError, CrowdyRealtimeError, CrowdyTimeoutError, } from './errors.js';
55
57
  export { SequenceAllocator, decodeBase64, encodeBase64, generateCrowdyUuid, validateChunkCoordinates, validateCrowdyUuid, } from './utils.js';
56
58
  export { UdpErrorCode } from './types.js';
@@ -0,0 +1,259 @@
1
+ import type { FunctionMutationInput, FunctionParamInput, Scalars, SeedContainerInput, SeedContainerTypeInput, SeedEdgeInput, SeedFunctionInput, SeedGameModelInput, SeedPropertyDefInput, UpsertAutomationInput, UpsertAutomationTriggerInput } from '../generated/graphql.js';
2
+ /**
3
+ * A composable invoke-policy rule tree, mirroring the server's authority
4
+ * rules (see the Game API "Game Models → Authority" guide). Serialized with
5
+ * {@link kitPolicyJson} into the `invokePolicyJson` a function carries.
6
+ */
7
+ export type KitInvokePolicy = {
8
+ type: 'allow';
9
+ } | {
10
+ type: 'owner_of_self';
11
+ } | {
12
+ type: 'is_host';
13
+ } | {
14
+ type: 'is_current_turn';
15
+ } | {
16
+ type: 'is_participant';
17
+ } | {
18
+ type: 'is_automation';
19
+ } | {
20
+ type: 'tier_feature';
21
+ feature: string;
22
+ } | {
23
+ type: 'group_permission';
24
+ groupId: string;
25
+ permission?: string;
26
+ } | {
27
+ type: 'grid_permission';
28
+ key: string;
29
+ gridId?: string;
30
+ } | {
31
+ type: 'condition';
32
+ expression: string;
33
+ } | {
34
+ type: 'and';
35
+ rules: KitInvokePolicy[];
36
+ } | {
37
+ type: 'or';
38
+ rules: KitInvokePolicy[];
39
+ } | {
40
+ type: 'not';
41
+ rule: KitInvokePolicy;
42
+ };
43
+ /** Serialize a {@link KitInvokePolicy} tree to the wire `invokePolicyJson`. */
44
+ export declare function kitPolicyJson(policy: KitInvokePolicy): string;
45
+ /** An automation spec inside a blueprint (the `appId` is bound at deploy). */
46
+ export type KitAutomationSpec = Omit<UpsertAutomationInput, 'appId'>;
47
+ /** An automation event-trigger spec inside a blueprint. */
48
+ export type KitAutomationTriggerSpec = Omit<UpsertAutomationTriggerInput, 'appId'>;
49
+ /**
50
+ * A **blueprint**: a self-contained, declarative bundle of game-model
51
+ * definitions (container types, property defs, functions), optional seed
52
+ * instances, and optional automations that together implement one game
53
+ * concept (an inventory system, a lockable object, an NPC archetype).
54
+ *
55
+ * Blueprints are plain data — build them with {@link inventoryBlueprint},
56
+ * {@link lockBlueprint}, {@link npcBlueprint}, or by hand — then load them
57
+ * into an app with `client.kit(appId).deploy([...])` (requires the app-admin
58
+ * `manage_apps` permission). Deployment is idempotent: seeding upserts
59
+ * definitions and `upsertAutomation` keys on the automation name.
60
+ */
61
+ export interface KitBlueprint {
62
+ /** A short identifier used in error messages (e.g. `'inventory'`). */
63
+ name: string;
64
+ containerTypes?: SeedContainerTypeInput[];
65
+ propertyDefinitions?: SeedPropertyDefInput[];
66
+ functions?: SeedFunctionInput[];
67
+ /** Optional shared/world containers to seed (catalog data, world objects). */
68
+ containers?: SeedContainerInput[];
69
+ /** Optional edges between seeded containers (by `tempId`). */
70
+ edges?: SeedEdgeInput[];
71
+ /** Server-driven automations to upsert after the seed. */
72
+ automations?: KitAutomationSpec[];
73
+ /** Event triggers to attach to the automations. */
74
+ automationTriggers?: KitAutomationTriggerSpec[];
75
+ }
76
+ /** Convert `PascalCase`/`camelCase` to `snake_case` for derived names. */
77
+ export declare function toSnakeCase(name: string): string;
78
+ /** Options for {@link inventoryBlueprint}. */
79
+ export interface InventoryBlueprintOptions {
80
+ /**
81
+ * Prefix applied to the container type names (e.g. `'Bank'` →
82
+ * `BankInventory` / `BankItemStack`) and, snake-cased, to the function
83
+ * names (`bank_grant_stack`, …). Lets several independent inventory systems
84
+ * coexist in one app. Defaults to none.
85
+ */
86
+ typePrefix?: string;
87
+ /** Default `max_slots` on new inventories. Defaults to 24. */
88
+ maxSlots?: number;
89
+ /** Exclusive upper bound for stack `slot` indexes. Defaults to 64. */
90
+ slotCount?: number;
91
+ }
92
+ /** Names derived by {@link inventoryBlueprint} for a given prefix. */
93
+ export interface InventoryNames {
94
+ inventoryType: string;
95
+ stackType: string;
96
+ grantFn: string;
97
+ consumeFn: string;
98
+ moveFn: string;
99
+ transferFn: string;
100
+ containsEdge: string;
101
+ }
102
+ /** Compute the type/function names an inventory blueprint (and its runtime helper) uses. */
103
+ export declare function inventoryNames(typePrefix?: string): InventoryNames;
104
+ /**
105
+ * Blueprint for a server-authoritative **inventory**: a per-player
106
+ * `Inventory` container plus `ItemStack` containers (`item_id`, `quantity`,
107
+ * `slot`), and owner-gated functions to grant, consume, move, and transfer
108
+ * stacks. Quantity guards live in the invoke policies, so an untrusted client
109
+ * can never overdraw or touch another player's items.
110
+ *
111
+ * Runtime counterpart: `client.kit(appId).inventory`.
112
+ */
113
+ export declare function inventoryBlueprint(options?: InventoryBlueprintOptions): KitBlueprint;
114
+ /**
115
+ * The authority source that may operate a lockable object. Several may be
116
+ * combined (any one grants access — they are OR'd):
117
+ *
118
+ * - `owner` — only the container's owner (`owner_of_self`); "only the owner
119
+ * of this chest can open it".
120
+ * - `key` — the caller must own a matching key item; "if a player has key 1
121
+ * they can open door 1". Adds a required `key_id` (`container_ref`) param.
122
+ * - `gridPermission` — the caller must hold a runtime grid permission; ties
123
+ * the object to a world region ("movement permission on chunk X opens the
124
+ * doors in it").
125
+ * - `groupPermission` — the caller must be in a team/group (optionally with a
126
+ * specific group permission).
127
+ * - `custom` — any hand-written {@link KitInvokePolicy} rule.
128
+ */
129
+ export type LockAuthority = {
130
+ kind: 'owner';
131
+ } | {
132
+ kind: 'key';
133
+ } | {
134
+ kind: 'gridPermission';
135
+ key: string;
136
+ gridId?: string;
137
+ } | {
138
+ kind: 'groupPermission';
139
+ groupId: string;
140
+ permission?: string;
141
+ } | {
142
+ kind: 'custom';
143
+ rule: KitInvokePolicy;
144
+ };
145
+ /** Options for {@link lockBlueprint}. */
146
+ export interface LockBlueprintOptions {
147
+ /**
148
+ * Container type name for the lockable object (`Door`, `Chest`, `Gate`, …).
149
+ * Also drives the function names (`open_door` / `close_door`). Defaults to
150
+ * `'Lockable'`.
151
+ */
152
+ objectTypeName?: string;
153
+ /** Key item type name (only used with a `key` authority). Defaults to `<objectTypeName>Key`. */
154
+ keyTypeName?: string;
155
+ /** One or more authority sources; any one grants access. */
156
+ authority: LockAuthority | LockAuthority[];
157
+ }
158
+ /** Names derived by {@link lockBlueprint} for a given object type. */
159
+ export interface LockNames {
160
+ objectType: string;
161
+ keyType: string;
162
+ openFn: string;
163
+ closeFn: string;
164
+ }
165
+ /** Compute the type/function names a lock blueprint (and its runtime helper) uses. */
166
+ export declare function lockNames(objectTypeName?: string, keyTypeName?: string): LockNames;
167
+ /**
168
+ * Blueprint for a **lockable game object** (door, chest, gate, switch) whose
169
+ * `open`/`close` functions are gated by a configurable authority source:
170
+ * ownership, a key item the caller must hold, a runtime grid permission, a
171
+ * team/group permission, or any custom policy rule. Multiple authorities are
172
+ * OR'd, so "the owner, or anyone with the right key" is one blueprint.
173
+ *
174
+ * Runtime counterpart: `client.kit(appId).objects`.
175
+ */
176
+ export declare function lockBlueprint(options: LockBlueprintOptions): KitBlueprint;
177
+ /** A trigger for an NPC behavior: a schedule (interval or cron) or a model event. */
178
+ export type NpcBehaviorTrigger = {
179
+ intervalMs: number;
180
+ } | {
181
+ cronExpr: string;
182
+ } | {
183
+ onEvent: 'function_invoked' | 'property_changed' | 'container_created';
184
+ functionName?: string;
185
+ containerTypeName?: string;
186
+ propertyKey?: string;
187
+ debounceMs?: number;
188
+ };
189
+ /** One server-driven NPC behavior: a model function plus the automation that drives it. */
190
+ export interface NpcBehaviorSpec {
191
+ /**
192
+ * Automation name (unique per app), e.g. `'npc-wander'`. Also derives the
193
+ * default function name (`npc_wander`).
194
+ */
195
+ name: string;
196
+ /** Entry-point function name. Defaults to the snake-cased behavior name. */
197
+ functionName?: string;
198
+ /** The property writes the behavior performs each tick. */
199
+ mutations: FunctionMutationInput[];
200
+ /** Typed parameters (bind them from a selector or static `paramsJson`). */
201
+ parameters?: FunctionParamInput[];
202
+ /** What makes the behavior run. */
203
+ trigger: NpcBehaviorTrigger;
204
+ /**
205
+ * Selector choosing/filtering targets and binding params (see the Game API
206
+ * "Autonomous Processes → Selectors" guide). JSON-encoded at deploy.
207
+ */
208
+ selector?: Record<string, unknown>;
209
+ /**
210
+ * Convenience: only NPCs whose `role` property equals this act (adds a
211
+ * `selfWhere` filter when no explicit `selector` is given).
212
+ */
213
+ role?: string;
214
+ /** Fan-out cap per run. Defaults to 8. */
215
+ maxTargets?: number;
216
+ /** Static params merged into every call. */
217
+ params?: Record<string, unknown>;
218
+ /** Identity the automation acts as; omit for a trusted server caller. */
219
+ runAsUserId?: Scalars['BigInt']['input'];
220
+ }
221
+ /** Options for {@link npcBlueprint}. */
222
+ export interface NpcBlueprintOptions {
223
+ /** NPC container type name. Defaults to `'Npc'`. */
224
+ typeName?: string;
225
+ /**
226
+ * Extra property definitions beyond the defaults (`role`, `x`, `y`, `z`,
227
+ * `behavior_state`, `health`). `containerTypeName` is filled in.
228
+ */
229
+ extraProperties?: Omit<SeedPropertyDefInput, 'containerTypeName'>[];
230
+ /** The server-driven behaviors this NPC archetype has. */
231
+ behaviors: NpcBehaviorSpec[];
232
+ }
233
+ /** Compute the function/automation names an NPC behavior deploys under. */
234
+ export declare function npcBehaviorFunctionName(behavior: NpcBehaviorSpec): string;
235
+ /**
236
+ * Blueprint for an **NPC archetype**: an admin-instantiable container type
237
+ * holding the NPC's durable state, one `autonomousInvocable` model function
238
+ * per behavior (gated `is_automation` so players cannot puppet them), and the
239
+ * automations + event triggers that drive those behaviors on the server.
240
+ *
241
+ * Runtime counterpart: `client.kit(appId).npcs`.
242
+ */
243
+ export declare function npcBlueprint(options: NpcBlueprintOptions): KitBlueprint;
244
+ /** The wire payloads {@link mergeBlueprints} produces for one deployment. */
245
+ export interface MergedBlueprints {
246
+ seedInput: SeedGameModelInput;
247
+ automations: UpsertAutomationInput[];
248
+ automationTriggers: UpsertAutomationTriggerInput[];
249
+ }
250
+ /**
251
+ * Merge blueprints into a single `gameModelSeed` payload plus the automation
252
+ * upserts, rejecting duplicate type, property, function, or automation names
253
+ * across blueprints (a duplicate almost always means two blueprints need
254
+ * distinct prefixes/type names).
255
+ */
256
+ export declare function mergeBlueprints(appId: Scalars['BigInt']['input'], blueprints: KitBlueprint[], options?: {
257
+ sessionId?: string;
258
+ }): MergedBlueprints;
259
+ //# sourceMappingURL=blueprints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blueprints.d.ts","sourceRoot":"","sources":["../../src/kit/blueprints.ts"],"names":[],"mappings":"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"}