@shipload/sdk 1.0.0-next.42 → 1.0.0-next.44

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 (42) hide show
  1. package/lib/shipload.d.ts +222 -172
  2. package/lib/shipload.js +658 -421
  3. package/lib/shipload.js.map +1 -1
  4. package/lib/shipload.m.js +644 -423
  5. package/lib/shipload.m.js.map +1 -1
  6. package/lib/testing.d.ts +50 -67
  7. package/lib/testing.js +168 -208
  8. package/lib/testing.js.map +1 -1
  9. package/lib/testing.m.js +169 -209
  10. package/lib/testing.m.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/contracts/server.ts +126 -214
  13. package/src/data/capabilities.ts +22 -14
  14. package/src/data/capability-formulas.ts +7 -7
  15. package/src/data/entities.json +4 -0
  16. package/src/data/item-ids.ts +1 -0
  17. package/src/data/items.json +6 -0
  18. package/src/data/kind-registry.json +18 -6
  19. package/src/data/kind-registry.ts +7 -0
  20. package/src/data/metadata.ts +22 -15
  21. package/src/data/recipes.json +147 -138
  22. package/src/derivation/build-methods.test.ts +13 -0
  23. package/src/derivation/build-methods.ts +5 -2
  24. package/src/derivation/capabilities.ts +8 -8
  25. package/src/derivation/capability-mappings.ts +49 -4
  26. package/src/index-module.ts +21 -1
  27. package/src/managers/actions.ts +42 -8
  28. package/src/managers/cluster.test.ts +39 -0
  29. package/src/managers/cluster.ts +53 -0
  30. package/src/managers/context.ts +9 -0
  31. package/src/managers/index.ts +2 -0
  32. package/src/nft/buildImmutableData.ts +15 -17
  33. package/src/nft/description.ts +8 -8
  34. package/src/resolution/describe-module.ts +6 -6
  35. package/src/resolution/resolve-item.ts +3 -3
  36. package/src/scheduling/unwrap.test.ts +60 -0
  37. package/src/scheduling/unwrap.ts +187 -0
  38. package/src/shipload.ts +5 -0
  39. package/src/subscriptions/manager.cluster.test.ts +46 -0
  40. package/src/subscriptions/manager.ts +22 -0
  41. package/src/subscriptions/types.ts +16 -0
  42. package/src/types.ts +7 -0
@@ -0,0 +1,46 @@
1
+ import {afterEach, describe, expect, test} from 'bun:test'
2
+ import {SubscriptionsManager} from './manager'
3
+ import type {ServerMessage} from './types'
4
+
5
+ function createManager(): SubscriptionsManager {
6
+ return new SubscriptionsManager({url: 'ws://localhost:0'})
7
+ }
8
+
9
+ function deliver(mgr: SubscriptionsManager, msg: ServerMessage) {
10
+ ;(mgr as unknown as {onMessage(m: ServerMessage): void}).onMessage(msg)
11
+ }
12
+
13
+ describe('cluster delta routing', () => {
14
+ let mgr: SubscriptionsManager | undefined
15
+
16
+ afterEach(() => {
17
+ mgr?.close()
18
+ mgr = undefined
19
+ })
20
+
21
+ test('routes a cluster frame to the matching entity subscription onCluster', () => {
22
+ mgr = createManager()
23
+ const received: unknown[] = []
24
+ const handle = mgr.subscribeEntity(42, {
25
+ onCluster: (p) => received.push(p),
26
+ })
27
+ deliver(mgr, {
28
+ type: 'cluster',
29
+ sub_id: handle.subId,
30
+ hub_id: 42,
31
+ seq: 7,
32
+ cells: [{gx: 0, gy: 1, entity: 99}],
33
+ })
34
+ expect(received).toEqual([
35
+ {hubId: 42, seq: 7, cells: [{gx: 0, gy: 1, entity: 99}], erased: false},
36
+ ])
37
+ })
38
+
39
+ test('an erased cluster frame yields cells:null, erased:true', () => {
40
+ mgr = createManager()
41
+ const received: unknown[] = []
42
+ const handle = mgr.subscribeEntity(42, {onCluster: (p) => received.push(p)})
43
+ deliver(mgr, {type: 'cluster', sub_id: handle.subId, hub_id: 42, seq: 8, erased: true})
44
+ expect(received).toEqual([{hubId: 42, seq: 8, cells: null, erased: true}])
45
+ })
46
+ })
@@ -3,6 +3,8 @@ import type {
3
3
  BoundingBox,
4
4
  BoundsDeltaMessage,
5
5
  ClientMessage,
6
+ ClusterCellWire,
7
+ ClusterDeltaMessage,
6
8
  EntityDeletedMessage,
7
9
  ServerMessage,
8
10
  SnapshotMessage,
@@ -57,6 +59,12 @@ export interface EntitySubscriptionHandlers {
57
59
  ) => void
58
60
  onDeleted?: (id: string, meta: EntitySubscriptionMeta) => void
59
61
  onError?: (error: Error) => void
62
+ onCluster?: (payload: {
63
+ hubId: number
64
+ seq: number
65
+ cells: ClusterCellWire[] | null
66
+ erased: boolean
67
+ }) => void
60
68
  }
61
69
 
62
70
  export interface EntitiesSubscriptionHandle {
@@ -306,6 +314,9 @@ export class SubscriptionsManager {
306
314
  case 'entity_deleted':
307
315
  this.handleEntityDeleted(msg)
308
316
  break
317
+ case 'cluster':
318
+ this.handleCluster(msg)
319
+ break
309
320
  case 'error':
310
321
  this.handleError(msg)
311
322
  break
@@ -367,4 +378,15 @@ export class SubscriptionsManager {
367
378
  }
368
379
  sub.handlers.onDeleted?.(String(msg.entity_id), {seq: msg.seq})
369
380
  }
381
+
382
+ private handleCluster(msg: ClusterDeltaMessage) {
383
+ const sub = this.entitySubs.get(msg.sub_id)
384
+ if (!sub) return
385
+ sub.handlers.onCluster?.({
386
+ hubId: msg.hub_id,
387
+ seq: msg.seq,
388
+ cells: msg.erased ? null : (msg.cells ?? []),
389
+ erased: msg.erased === true,
390
+ })
391
+ }
370
392
  }
@@ -139,6 +139,21 @@ export type ErrorMessage = {
139
139
  sub_id?: string
140
140
  }
141
141
 
142
+ export interface ClusterCellWire {
143
+ gx: number
144
+ gy: number
145
+ entity: number
146
+ }
147
+
148
+ export type ClusterDeltaMessage = {
149
+ type: 'cluster'
150
+ sub_id: string
151
+ hub_id: number
152
+ seq: number
153
+ cells?: ClusterCellWire[]
154
+ erased?: boolean
155
+ }
156
+
142
157
  export type ServerMessage =
143
158
  | AckMessage
144
159
  | SnapshotMessage
@@ -149,3 +164,4 @@ export type ServerMessage =
149
164
  | EventCatchupCompleteMessage
150
165
  | PongMessage
151
166
  | ErrorMessage
167
+ | ClusterDeltaMessage
package/src/types.ts CHANGED
@@ -5,6 +5,7 @@ import {
5
5
  type UInt32,
6
6
  type UInt32Type,
7
7
  UInt64,
8
+ type UInt64Type,
8
9
  } from '@wharfkit/antelope'
9
10
  import {ServerContract} from './contracts'
10
11
 
@@ -25,6 +26,12 @@ export const BASE_ORBITAL_MASS = 100000
25
26
  export const MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE = 100
26
27
  export const MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL = 200
27
28
 
29
+ export interface ClusterSlotType {
30
+ hub: UInt64Type
31
+ gx: number
32
+ gy: number
33
+ }
34
+
28
35
  export interface ShipLike {
29
36
  coordinates: ServerContract.Types.coordinates
30
37
  hullmass?: UInt32