@dcl/sdk 7.20.2-22104870534.commit-0df3cc0 → 7.20.2-22169778016.commit-030cbfe
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/atom.d.ts +19 -0
- package/atom.js +83 -0
- package/future.d.ts +8 -0
- package/future.js +26 -0
- package/network/binary-message-bus.d.ts +6 -3
- package/network/binary-message-bus.js +9 -5
- package/network/chunking.d.ts +5 -0
- package/network/chunking.js +38 -0
- package/network/events/implementation.d.ts +93 -0
- package/network/events/implementation.js +230 -0
- package/network/events/index.d.ts +42 -0
- package/network/events/index.js +43 -0
- package/network/events/protocol.d.ts +27 -0
- package/network/events/protocol.js +66 -0
- package/network/events/registry.d.ts +8 -0
- package/network/events/registry.js +3 -0
- package/network/index.d.ts +8 -2
- package/network/index.js +16 -3
- package/network/message-bus-sync.d.ts +14 -1
- package/network/message-bus-sync.js +166 -103
- package/network/server/index.d.ts +14 -0
- package/network/server/index.js +219 -0
- package/network/server/utils.d.ts +18 -0
- package/network/server/utils.js +135 -0
- package/network/state.js +3 -5
- package/package.json +6 -6
- package/server/env-var.d.ts +15 -0
- package/server/env-var.js +31 -0
- package/server/index.d.ts +2 -0
- package/server/index.js +3 -0
- package/server/storage/constants.d.ts +23 -0
- package/server/storage/constants.js +2 -0
- package/server/storage/index.d.ts +22 -0
- package/server/storage/index.js +29 -0
- package/server/storage/player.d.ts +43 -0
- package/server/storage/player.js +92 -0
- package/server/storage/scene.d.ts +38 -0
- package/server/storage/scene.js +90 -0
- package/server/storage-url.d.ts +10 -0
- package/server/storage-url.js +29 -0
- package/server/utils.d.ts +35 -0
- package/server/utils.js +56 -0
- package/src/atom.ts +98 -0
- package/src/future.ts +38 -0
- package/src/network/binary-message-bus.ts +9 -4
- package/src/network/chunking.ts +45 -0
- package/src/network/events/implementation.ts +286 -0
- package/src/network/events/index.ts +48 -0
- package/src/network/events/protocol.ts +94 -0
- package/src/network/events/registry.ts +18 -0
- package/src/network/index.ts +40 -3
- package/src/network/message-bus-sync.ts +180 -110
- package/src/network/server/index.ts +301 -0
- package/src/network/server/utils.ts +189 -0
- package/src/network/state.ts +3 -4
- package/src/server/env-var.ts +36 -0
- package/src/server/index.ts +2 -0
- package/src/server/storage/constants.ts +22 -0
- package/src/server/storage/index.ts +44 -0
- package/src/server/storage/player.ts +156 -0
- package/src/server/storage/scene.ts +149 -0
- package/src/server/storage-url.ts +34 -0
- package/src/server/utils.ts +73 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Room - Multiplayer messaging for SDK7
|
|
3
|
+
*
|
|
4
|
+
* Simple room-based communication system for multiplayer scenes.
|
|
5
|
+
*
|
|
6
|
+
* @example Basic usage:
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { registerMessages, getRoom, isServer } from '@dcl/sdk/network/events'
|
|
9
|
+
*
|
|
10
|
+
* const MyMessages = {
|
|
11
|
+
* playerJump: Schemas.Map({ playerId: Schemas.String, position: Schemas.Vector3 }),
|
|
12
|
+
* gameUpdate: Schemas.Map({ message: Schemas.String })
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* // Option 1: Register and get typed room
|
|
16
|
+
* const room = registerMessages(MyMessages)
|
|
17
|
+
*
|
|
18
|
+
* // Option 2: Register first, then get typed room
|
|
19
|
+
* // registerMessages(MyMessages)
|
|
20
|
+
* // const room = getRoom<typeof MyMessages>()
|
|
21
|
+
*
|
|
22
|
+
* export function main() {
|
|
23
|
+
* if (isServer()) {
|
|
24
|
+
* room.onMessage('playerJump', (data, context) => {
|
|
25
|
+
* console.log(`Player ${context?.from} jumped`)
|
|
26
|
+
* room.send('gameUpdate', { message: 'Player jumped!' })
|
|
27
|
+
* })
|
|
28
|
+
* } else {
|
|
29
|
+
* room.send('playerJump', { playerId: 'me', position: { x: 1, y: 2, z: 3 } })
|
|
30
|
+
* room.onMessage('gameUpdate', (data) => {
|
|
31
|
+
* console.log('Server says:', data.message)
|
|
32
|
+
* })
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @packageDocumentation
|
|
38
|
+
*/
|
|
39
|
+
import { registerMessages, getRoom, EventContext } from './implementation';
|
|
40
|
+
import { EventSchemaRegistry } from './registry';
|
|
41
|
+
export { registerMessages, getRoom };
|
|
42
|
+
export type { EventContext, EventSchemaRegistry };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Room - Multiplayer messaging for SDK7
|
|
3
|
+
*
|
|
4
|
+
* Simple room-based communication system for multiplayer scenes.
|
|
5
|
+
*
|
|
6
|
+
* @example Basic usage:
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { registerMessages, getRoom, isServer } from '@dcl/sdk/network/events'
|
|
9
|
+
*
|
|
10
|
+
* const MyMessages = {
|
|
11
|
+
* playerJump: Schemas.Map({ playerId: Schemas.String, position: Schemas.Vector3 }),
|
|
12
|
+
* gameUpdate: Schemas.Map({ message: Schemas.String })
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* // Option 1: Register and get typed room
|
|
16
|
+
* const room = registerMessages(MyMessages)
|
|
17
|
+
*
|
|
18
|
+
* // Option 2: Register first, then get typed room
|
|
19
|
+
* // registerMessages(MyMessages)
|
|
20
|
+
* // const room = getRoom<typeof MyMessages>()
|
|
21
|
+
*
|
|
22
|
+
* export function main() {
|
|
23
|
+
* if (isServer()) {
|
|
24
|
+
* room.onMessage('playerJump', (data, context) => {
|
|
25
|
+
* console.log(`Player ${context?.from} jumped`)
|
|
26
|
+
* room.send('gameUpdate', { message: 'Player jumped!' })
|
|
27
|
+
* })
|
|
28
|
+
* } else {
|
|
29
|
+
* room.send('playerJump', { playerId: 'me', position: { x: 1, y: 2, z: 3 } })
|
|
30
|
+
* room.onMessage('gameUpdate', (data) => {
|
|
31
|
+
* console.log('Server says:', data.message)
|
|
32
|
+
* })
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @packageDocumentation
|
|
38
|
+
*/
|
|
39
|
+
// Import public API and types
|
|
40
|
+
import { registerMessages, getRoom } from './implementation';
|
|
41
|
+
// Re-export public API - only what users need
|
|
42
|
+
export { registerMessages, getRoom };
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV0d29yay9ldmVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUFFSCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQTtBQUcxRSw4Q0FBOEM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSb29tIC0gTXVsdGlwbGF5ZXIgbWVzc2FnaW5nIGZvciBTREs3XG4gKlxuICogU2ltcGxlIHJvb20tYmFzZWQgY29tbXVuaWNhdGlvbiBzeXN0ZW0gZm9yIG11bHRpcGxheWVyIHNjZW5lcy5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHJlZ2lzdGVyTWVzc2FnZXMsIGdldFJvb20sIGlzU2VydmVyIH0gZnJvbSAnQGRjbC9zZGsvbmV0d29yay9ldmVudHMnXG4gKlxuICogY29uc3QgTXlNZXNzYWdlcyA9IHtcbiAqICAgcGxheWVySnVtcDogU2NoZW1hcy5NYXAoeyBwbGF5ZXJJZDogU2NoZW1hcy5TdHJpbmcsIHBvc2l0aW9uOiBTY2hlbWFzLlZlY3RvcjMgfSksXG4gKiAgIGdhbWVVcGRhdGU6IFNjaGVtYXMuTWFwKHsgbWVzc2FnZTogU2NoZW1hcy5TdHJpbmcgfSlcbiAqIH1cbiAqXG4gKiAvLyBPcHRpb24gMTogUmVnaXN0ZXIgYW5kIGdldCB0eXBlZCByb29tXG4gKiBjb25zdCByb29tID0gcmVnaXN0ZXJNZXNzYWdlcyhNeU1lc3NhZ2VzKVxuICpcbiAqIC8vIE9wdGlvbiAyOiBSZWdpc3RlciBmaXJzdCwgdGhlbiBnZXQgdHlwZWQgcm9vbVxuICogLy8gcmVnaXN0ZXJNZXNzYWdlcyhNeU1lc3NhZ2VzKVxuICogLy8gY29uc3Qgcm9vbSA9IGdldFJvb208dHlwZW9mIE15TWVzc2FnZXM+KClcbiAqXG4gKiBleHBvcnQgZnVuY3Rpb24gbWFpbigpIHtcbiAqICAgaWYgKGlzU2VydmVyKCkpIHtcbiAqICAgICByb29tLm9uTWVzc2FnZSgncGxheWVySnVtcCcsIChkYXRhLCBjb250ZXh0KSA9PiB7XG4gKiAgICAgICBjb25zb2xlLmxvZyhgUGxheWVyICR7Y29udGV4dD8uZnJvbX0ganVtcGVkYClcbiAqICAgICAgIHJvb20uc2VuZCgnZ2FtZVVwZGF0ZScsIHsgbWVzc2FnZTogJ1BsYXllciBqdW1wZWQhJyB9KVxuICogICAgIH0pXG4gKiAgIH0gZWxzZSB7XG4gKiAgICAgcm9vbS5zZW5kKCdwbGF5ZXJKdW1wJywgeyBwbGF5ZXJJZDogJ21lJywgcG9zaXRpb246IHsgeDogMSwgeTogMiwgejogMyB9IH0pXG4gKiAgICAgcm9vbS5vbk1lc3NhZ2UoJ2dhbWVVcGRhdGUnLCAoZGF0YSkgPT4ge1xuICogICAgICAgY29uc29sZS5sb2coJ1NlcnZlciBzYXlzOicsIGRhdGEubWVzc2FnZSlcbiAqICAgICB9KVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuXG4vLyBJbXBvcnQgcHVibGljIEFQSSBhbmQgdHlwZXNcbmltcG9ydCB7IHJlZ2lzdGVyTWVzc2FnZXMsIGdldFJvb20sIEV2ZW50Q29udGV4dCB9IGZyb20gJy4vaW1wbGVtZW50YXRpb24nXG5pbXBvcnQgeyBFdmVudFNjaGVtYVJlZ2lzdHJ5IH0gZnJvbSAnLi9yZWdpc3RyeSdcblxuLy8gUmUtZXhwb3J0IHB1YmxpYyBBUEkgLSBvbmx5IHdoYXQgdXNlcnMgbmVlZFxuZXhwb3J0IHsgcmVnaXN0ZXJNZXNzYWdlcywgZ2V0Um9vbSB9XG5cbi8vIFJlLWV4cG9ydCB0eXBlcyB0aGF0IHVzZXJzIG5lZWRcbmV4cG9ydCB0eXBlIHsgRXZlbnRDb250ZXh0LCBFdmVudFNjaGVtYVJlZ2lzdHJ5IH1cbiJdfQ==
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EventSchemas, EventTypes, EventSchemaRegistry } from './registry';
|
|
2
|
+
/**
|
|
3
|
+
* Encode an event into a binary buffer
|
|
4
|
+
* @param eventType - The type of event from the registry
|
|
5
|
+
* @param data - The event data matching the schema
|
|
6
|
+
* @param registry - Optional custom registry (defaults to EventSchemas)
|
|
7
|
+
* @returns Binary buffer containing the encoded event
|
|
8
|
+
*/
|
|
9
|
+
export declare function encodeEvent<T extends EventSchemaRegistry = typeof EventSchemas, K extends keyof T = keyof T>(eventType: K, data: EventTypes<T>[K], registry?: T): Uint8Array;
|
|
10
|
+
/**
|
|
11
|
+
* Decode a binary buffer into an event
|
|
12
|
+
* @param data - Binary buffer containing the encoded event
|
|
13
|
+
* @param registry - Optional custom registry (defaults to EventSchemas)
|
|
14
|
+
* @returns Decoded event with type, payload, and timestamp
|
|
15
|
+
*/
|
|
16
|
+
export declare function decodeEvent<T extends EventSchemaRegistry = typeof EventSchemas>(data: Uint8Array, registry?: T): {
|
|
17
|
+
eventType: keyof T;
|
|
18
|
+
payload: EventTypes<T>[keyof T];
|
|
19
|
+
timestamp: number;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Validate if an event type exists in the registry
|
|
23
|
+
* @param eventType - The event type to check
|
|
24
|
+
* @param registry - Optional custom registry (defaults to EventSchemas)
|
|
25
|
+
* @returns True if the event type exists
|
|
26
|
+
*/
|
|
27
|
+
export declare function isValidEventType<T extends EventSchemaRegistry = typeof EventSchemas>(eventType: string, registry?: T): eventType is Extract<keyof T, string>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ReadWriteByteBuffer } from '@dcl/ecs/dist/serialization/ByteBuffer';
|
|
2
|
+
import { Schemas } from '@dcl/ecs';
|
|
3
|
+
import { EventSchemas } from './registry';
|
|
4
|
+
// Event envelope that wraps all events with metadata
|
|
5
|
+
const EventEnvelope = Schemas.Map({
|
|
6
|
+
eventType: Schemas.String,
|
|
7
|
+
timestamp: Schemas.Int64
|
|
8
|
+
});
|
|
9
|
+
/**
|
|
10
|
+
* Encode an event into a binary buffer
|
|
11
|
+
* @param eventType - The type of event from the registry
|
|
12
|
+
* @param data - The event data matching the schema
|
|
13
|
+
* @param registry - Optional custom registry (defaults to EventSchemas)
|
|
14
|
+
* @returns Binary buffer containing the encoded event
|
|
15
|
+
*/
|
|
16
|
+
export function encodeEvent(eventType, data, registry = EventSchemas) {
|
|
17
|
+
const buffer = new ReadWriteByteBuffer();
|
|
18
|
+
// Write envelope with event type and timestamp
|
|
19
|
+
EventEnvelope.serialize({
|
|
20
|
+
eventType: eventType,
|
|
21
|
+
timestamp: Date.now()
|
|
22
|
+
}, buffer);
|
|
23
|
+
// Get the schema for this event type
|
|
24
|
+
const schema = registry[eventType];
|
|
25
|
+
if (!schema) {
|
|
26
|
+
throw new Error(`Unknown event type: ${String(eventType)}`);
|
|
27
|
+
}
|
|
28
|
+
// Write the typed payload
|
|
29
|
+
schema.serialize(data, buffer);
|
|
30
|
+
return buffer.toBinary();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Decode a binary buffer into an event
|
|
34
|
+
* @param data - Binary buffer containing the encoded event
|
|
35
|
+
* @param registry - Optional custom registry (defaults to EventSchemas)
|
|
36
|
+
* @returns Decoded event with type, payload, and timestamp
|
|
37
|
+
*/
|
|
38
|
+
export function decodeEvent(data, registry = EventSchemas) {
|
|
39
|
+
const buffer = new ReadWriteByteBuffer();
|
|
40
|
+
buffer.writeBuffer(data, false);
|
|
41
|
+
// Read envelope
|
|
42
|
+
const envelope = EventEnvelope.deserialize(buffer);
|
|
43
|
+
const eventType = envelope.eventType;
|
|
44
|
+
// Get the schema for this event type
|
|
45
|
+
const schema = registry[eventType];
|
|
46
|
+
if (!schema) {
|
|
47
|
+
throw new Error(`Unknown event type: ${String(eventType)}`);
|
|
48
|
+
}
|
|
49
|
+
// Read the typed payload
|
|
50
|
+
const payload = schema.deserialize(buffer);
|
|
51
|
+
return {
|
|
52
|
+
eventType,
|
|
53
|
+
payload,
|
|
54
|
+
timestamp: envelope.timestamp
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Validate if an event type exists in the registry
|
|
59
|
+
* @param eventType - The event type to check
|
|
60
|
+
* @param registry - Optional custom registry (defaults to EventSchemas)
|
|
61
|
+
* @returns True if the event type exists
|
|
62
|
+
*/
|
|
63
|
+
export function isValidEventType(eventType, registry = EventSchemas) {
|
|
64
|
+
return eventType in registry;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV0d29yay9ldmVudHMvcHJvdG9jb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDNUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFtQyxNQUFNLFlBQVksQ0FBQTtBQUUxRSxxREFBcUQ7QUFDckQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNoQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU07SUFDekIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0NBQ3pCLENBQUMsQ0FBQTtBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLFNBQVksRUFDWixJQUFzQixFQUN0QixXQUFjLFlBQWlCO0lBRS9CLE1BQU0sTUFBTSxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQTtJQUV4QywrQ0FBK0M7SUFDL0MsYUFBYSxDQUFDLFNBQVMsQ0FDckI7UUFDRSxTQUFTLEVBQUUsU0FBbUI7UUFDOUIsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7S0FDdEIsRUFDRCxNQUFNLENBQ1AsQ0FBQTtJQUVELHFDQUFxQztJQUNyQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDbEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUE7S0FDNUQ7SUFFRCwwQkFBMEI7SUFDMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFOUIsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUE7QUFDMUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsSUFBZ0IsRUFDaEIsV0FBYyxZQUFpQjtJQU0vQixNQUFNLE1BQU0sR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUE7SUFDeEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFFL0IsZ0JBQWdCO0lBQ2hCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQW9CLENBQUE7SUFFL0MscUNBQXFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNsQyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtLQUM1RDtJQUVELHlCQUF5QjtJQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTFDLE9BQU87UUFDTCxTQUFTO1FBQ1QsT0FBTztRQUNQLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztLQUM5QixDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixTQUFpQixFQUNqQixXQUFjLFlBQWlCO0lBRS9CLE9BQU8sU0FBUyxJQUFJLFFBQVEsQ0FBQTtBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhZFdyaXRlQnl0ZUJ1ZmZlciB9IGZyb20gJ0BkY2wvZWNzL2Rpc3Qvc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgU2NoZW1hcyB9IGZyb20gJ0BkY2wvZWNzJ1xuaW1wb3J0IHsgRXZlbnRTY2hlbWFzLCBFdmVudFR5cGVzLCBFdmVudFNjaGVtYVJlZ2lzdHJ5IH0gZnJvbSAnLi9yZWdpc3RyeSdcblxuLy8gRXZlbnQgZW52ZWxvcGUgdGhhdCB3cmFwcyBhbGwgZXZlbnRzIHdpdGggbWV0YWRhdGFcbmNvbnN0IEV2ZW50RW52ZWxvcGUgPSBTY2hlbWFzLk1hcCh7XG4gIGV2ZW50VHlwZTogU2NoZW1hcy5TdHJpbmcsXG4gIHRpbWVzdGFtcDogU2NoZW1hcy5JbnQ2NFxufSlcblxuLyoqXG4gKiBFbmNvZGUgYW4gZXZlbnQgaW50byBhIGJpbmFyeSBidWZmZXJcbiAqIEBwYXJhbSBldmVudFR5cGUgLSBUaGUgdHlwZSBvZiBldmVudCBmcm9tIHRoZSByZWdpc3RyeVxuICogQHBhcmFtIGRhdGEgLSBUaGUgZXZlbnQgZGF0YSBtYXRjaGluZyB0aGUgc2NoZW1hXG4gKiBAcGFyYW0gcmVnaXN0cnkgLSBPcHRpb25hbCBjdXN0b20gcmVnaXN0cnkgKGRlZmF1bHRzIHRvIEV2ZW50U2NoZW1hcylcbiAqIEByZXR1cm5zIEJpbmFyeSBidWZmZXIgY29udGFpbmluZyB0aGUgZW5jb2RlZCBldmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRXZlbnQ8VCBleHRlbmRzIEV2ZW50U2NoZW1hUmVnaXN0cnkgPSB0eXBlb2YgRXZlbnRTY2hlbWFzLCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+KFxuICBldmVudFR5cGU6IEssXG4gIGRhdGE6IEV2ZW50VHlwZXM8VD5bS10sXG4gIHJlZ2lzdHJ5OiBUID0gRXZlbnRTY2hlbWFzIGFzIFRcbik6IFVpbnQ4QXJyYXkge1xuICBjb25zdCBidWZmZXIgPSBuZXcgUmVhZFdyaXRlQnl0ZUJ1ZmZlcigpXG5cbiAgLy8gV3JpdGUgZW52ZWxvcGUgd2l0aCBldmVudCB0eXBlIGFuZCB0aW1lc3RhbXBcbiAgRXZlbnRFbnZlbG9wZS5zZXJpYWxpemUoXG4gICAge1xuICAgICAgZXZlbnRUeXBlOiBldmVudFR5cGUgYXMgc3RyaW5nLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gICAgfSxcbiAgICBidWZmZXJcbiAgKVxuXG4gIC8vIEdldCB0aGUgc2NoZW1hIGZvciB0aGlzIGV2ZW50IHR5cGVcbiAgY29uc3Qgc2NoZW1hID0gcmVnaXN0cnlbZXZlbnRUeXBlXVxuICBpZiAoIXNjaGVtYSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBldmVudCB0eXBlOiAke1N0cmluZyhldmVudFR5cGUpfWApXG4gIH1cblxuICAvLyBXcml0ZSB0aGUgdHlwZWQgcGF5bG9hZFxuICBzY2hlbWEuc2VyaWFsaXplKGRhdGEsIGJ1ZmZlcilcblxuICByZXR1cm4gYnVmZmVyLnRvQmluYXJ5KClcbn1cblxuLyoqXG4gKiBEZWNvZGUgYSBiaW5hcnkgYnVmZmVyIGludG8gYW4gZXZlbnRcbiAqIEBwYXJhbSBkYXRhIC0gQmluYXJ5IGJ1ZmZlciBjb250YWluaW5nIHRoZSBlbmNvZGVkIGV2ZW50XG4gKiBAcGFyYW0gcmVnaXN0cnkgLSBPcHRpb25hbCBjdXN0b20gcmVnaXN0cnkgKGRlZmF1bHRzIHRvIEV2ZW50U2NoZW1hcylcbiAqIEByZXR1cm5zIERlY29kZWQgZXZlbnQgd2l0aCB0eXBlLCBwYXlsb2FkLCBhbmQgdGltZXN0YW1wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVFdmVudDxUIGV4dGVuZHMgRXZlbnRTY2hlbWFSZWdpc3RyeSA9IHR5cGVvZiBFdmVudFNjaGVtYXM+KFxuICBkYXRhOiBVaW50OEFycmF5LFxuICByZWdpc3RyeTogVCA9IEV2ZW50U2NoZW1hcyBhcyBUXG4pOiB7XG4gIGV2ZW50VHlwZToga2V5b2YgVFxuICBwYXlsb2FkOiBFdmVudFR5cGVzPFQ+W2tleW9mIFRdXG4gIHRpbWVzdGFtcDogbnVtYmVyXG59IHtcbiAgY29uc3QgYnVmZmVyID0gbmV3IFJlYWRXcml0ZUJ5dGVCdWZmZXIoKVxuICBidWZmZXIud3JpdGVCdWZmZXIoZGF0YSwgZmFsc2UpXG5cbiAgLy8gUmVhZCBlbnZlbG9wZVxuICBjb25zdCBlbnZlbG9wZSA9IEV2ZW50RW52ZWxvcGUuZGVzZXJpYWxpemUoYnVmZmVyKVxuICBjb25zdCBldmVudFR5cGUgPSBlbnZlbG9wZS5ldmVudFR5cGUgYXMga2V5b2YgVFxuXG4gIC8vIEdldCB0aGUgc2NoZW1hIGZvciB0aGlzIGV2ZW50IHR5cGVcbiAgY29uc3Qgc2NoZW1hID0gcmVnaXN0cnlbZXZlbnRUeXBlXVxuICBpZiAoIXNjaGVtYSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBldmVudCB0eXBlOiAke1N0cmluZyhldmVudFR5cGUpfWApXG4gIH1cblxuICAvLyBSZWFkIHRoZSB0eXBlZCBwYXlsb2FkXG4gIGNvbnN0IHBheWxvYWQgPSBzY2hlbWEuZGVzZXJpYWxpemUoYnVmZmVyKVxuXG4gIHJldHVybiB7XG4gICAgZXZlbnRUeXBlLFxuICAgIHBheWxvYWQsXG4gICAgdGltZXN0YW1wOiBlbnZlbG9wZS50aW1lc3RhbXBcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGlmIGFuIGV2ZW50IHR5cGUgZXhpc3RzIGluIHRoZSByZWdpc3RyeVxuICogQHBhcmFtIGV2ZW50VHlwZSAtIFRoZSBldmVudCB0eXBlIHRvIGNoZWNrXG4gKiBAcGFyYW0gcmVnaXN0cnkgLSBPcHRpb25hbCBjdXN0b20gcmVnaXN0cnkgKGRlZmF1bHRzIHRvIEV2ZW50U2NoZW1hcylcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IHR5cGUgZXhpc3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRXZlbnRUeXBlPFQgZXh0ZW5kcyBFdmVudFNjaGVtYVJlZ2lzdHJ5ID0gdHlwZW9mIEV2ZW50U2NoZW1hcz4oXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuICByZWdpc3RyeTogVCA9IEV2ZW50U2NoZW1hcyBhcyBUXG4pOiBldmVudFR5cGUgaXMgRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+IHtcbiAgcmV0dXJuIGV2ZW50VHlwZSBpbiByZWdpc3RyeVxufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ISchema } from '@dcl/ecs';
|
|
2
|
+
export type EventSchemaRegistry = Record<string, ISchema>;
|
|
3
|
+
export type EventTypes<T extends EventSchemaRegistry = EventSchemaRegistry> = {
|
|
4
|
+
[K in keyof T]: T[K] extends ISchema<infer U> ? U : never;
|
|
5
|
+
};
|
|
6
|
+
export type RegisteredEvents = EventSchemaRegistry;
|
|
7
|
+
export declare const EventSchemas: EventSchemaRegistry;
|
|
8
|
+
export type ValidateEventRegistry<T extends EventSchemaRegistry> = T;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Default empty registry
|
|
2
|
+
export const EventSchemas = {};
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV0d29yay9ldmVudHMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEseUJBQXlCO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxFQUFzQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJ0BkY2wvZWNzJ1xuXG4vLyBCYXNlIHR5cGUgZm9yIGV2ZW50IHNjaGVtYSByZWdpc3RyeVxuZXhwb3J0IHR5cGUgRXZlbnRTY2hlbWFSZWdpc3RyeSA9IFJlY29yZDxzdHJpbmcsIElTY2hlbWE+XG5cbi8vIFR5cGUgZXh0cmFjdGlvbiBmcm9tIHNjaGVtYXNcbmV4cG9ydCB0eXBlIEV2ZW50VHlwZXM8VCBleHRlbmRzIEV2ZW50U2NoZW1hUmVnaXN0cnkgPSBFdmVudFNjaGVtYVJlZ2lzdHJ5PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBJU2NoZW1hPGluZmVyIFU+ID8gVSA6IG5ldmVyXG59XG5cbi8vIEdsb2JhbCBpbnRlcmZhY2UgdGhhdCB1c2VycyBjYW4gYXVnbWVudCB3aXRoIHRoZWlyIG93biBldmVudHNcbmV4cG9ydCB0eXBlIFJlZ2lzdGVyZWRFdmVudHMgPSBFdmVudFNjaGVtYVJlZ2lzdHJ5XG5cbi8vIERlZmF1bHQgZW1wdHkgcmVnaXN0cnlcbmV4cG9ydCBjb25zdCBFdmVudFNjaGVtYXMgPSB7fSBhcyBSZWdpc3RlcmVkRXZlbnRzXG5cbi8vIEhlbHBlciB0byBlbnN1cmUgdXNlciBldmVudHMgY29uZm9ybSB0byB0aGUgcmVnaXN0cnkgdHlwZVxuZXhwb3J0IHR5cGUgVmFsaWRhdGVFdmVudFJlZ2lzdHJ5PFQgZXh0ZW5kcyBFdmVudFNjaGVtYVJlZ2lzdHJ5PiA9IFRcbiJdfQ==
|
package/network/index.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
declare
|
|
2
|
-
|
|
1
|
+
export declare function isServer(): boolean;
|
|
2
|
+
declare const getChildren: (parent: import("@dcl/ecs").Entity) => Iterable<import("@dcl/ecs").Entity>, syncEntity: (entityId: import("@dcl/ecs").Entity, componentIds: number[], entityEnumId?: number | undefined) => void, parentEntity: (entity: import("@dcl/ecs").Entity, parent: import("@dcl/ecs").Entity) => void, getParent: (child: import("@dcl/ecs").Entity) => import("@dcl/ecs").Entity | undefined, myProfile: import("./message-bus-sync").IProfile, removeParent: (entity: import("@dcl/ecs").Entity) => void, getFirstChild: (entity: import("@dcl/ecs").Entity) => import("@dcl/ecs").Entity, isStateSyncronized: () => boolean, binaryMessageBus: {
|
|
3
|
+
on: <K extends import("./binary-message-bus").CommsMessage>(message: K, callback: (value: Uint8Array, sender: string) => void) => void;
|
|
4
|
+
emit: <K_1 extends import("./binary-message-bus").CommsMessage>(message: K_1, value: Uint8Array, toPeerAddress?: string[] | undefined) => void;
|
|
5
|
+
__processMessages: (messages: Uint8Array[]) => void;
|
|
6
|
+
}, eventBus: import("./events/implementation").Room<import("./events").EventSchemaRegistry>;
|
|
7
|
+
export { registerMessages, getRoom } from './events';
|
|
8
|
+
export { getFirstChild, getChildren, syncEntity, parentEntity, getParent, myProfile, removeParent, isStateSyncronized, binaryMessageBus, eventBus };
|
package/network/index.js
CHANGED
|
@@ -2,7 +2,20 @@ import { sendBinary } from '~system/CommunicationsController';
|
|
|
2
2
|
import { engine } from '@dcl/ecs';
|
|
3
3
|
import { addSyncTransport } from './message-bus-sync';
|
|
4
4
|
import { getUserData } from '~system/UserIdentity';
|
|
5
|
+
import { isServer as isServerApi } from '~system/EngineApi';
|
|
6
|
+
import { Atom } from '../atom';
|
|
7
|
+
// Create isServer atom for consistent state
|
|
8
|
+
const isServerAtom = Atom(false);
|
|
9
|
+
void isServerApi({}).then((response) => {
|
|
10
|
+
isServerAtom.swap(!!response.isServer);
|
|
11
|
+
});
|
|
12
|
+
// Helper function to check if running on server
|
|
13
|
+
export function isServer() {
|
|
14
|
+
return isServerAtom.getOrNull() ?? false;
|
|
15
|
+
}
|
|
5
16
|
// initialize sync transport for sdk engine
|
|
6
|
-
const { getChildren, syncEntity, parentEntity, getParent, myProfile, removeParent, getFirstChild, isStateSyncronized } = addSyncTransport(engine, sendBinary, getUserData);
|
|
7
|
-
export
|
|
8
|
-
|
|
17
|
+
const { getChildren, syncEntity, parentEntity, getParent, myProfile, removeParent, getFirstChild, isStateSyncronized, binaryMessageBus, eventBus } = addSyncTransport(engine, sendBinary, getUserData, isServerApi, 'network');
|
|
18
|
+
// Re-export the room messaging system
|
|
19
|
+
export { registerMessages, getRoom } from './events';
|
|
20
|
+
export { getFirstChild, getChildren, syncEntity, parentEntity, getParent, myProfile, removeParent, isStateSyncronized, binaryMessageBus, eventBus };
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV0d29yay9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDbEQsT0FBTyxFQUFFLFFBQVEsSUFBSSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBRTlCLDRDQUE0QztBQUM1QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQVUsS0FBSyxDQUFDLENBQUE7QUFDekMsS0FBSyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7SUFDckMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQ3hDLENBQUMsQ0FBQyxDQUFBO0FBRUYsZ0RBQWdEO0FBQ2hELE1BQU0sVUFBVSxRQUFRO0lBQ3RCLE9BQU8sWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLEtBQUssQ0FBQTtBQUMxQyxDQUFDO0FBRUQsMkNBQTJDO0FBQzNDLE1BQU0sRUFDSixXQUFXLEVBQ1gsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1QsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUE7QUFFN0Usc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFcEQsT0FBTyxFQUNMLGFBQWEsRUFDYixXQUFXLEVBQ1gsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDVCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2VuZEJpbmFyeSB9IGZyb20gJ35zeXN0ZW0vQ29tbXVuaWNhdGlvbnNDb250cm9sbGVyJ1xuaW1wb3J0IHsgZW5naW5lIH0gZnJvbSAnQGRjbC9lY3MnXG5pbXBvcnQgeyBhZGRTeW5jVHJhbnNwb3J0IH0gZnJvbSAnLi9tZXNzYWdlLWJ1cy1zeW5jJ1xuaW1wb3J0IHsgZ2V0VXNlckRhdGEgfSBmcm9tICd+c3lzdGVtL1VzZXJJZGVudGl0eSdcbmltcG9ydCB7IGlzU2VydmVyIGFzIGlzU2VydmVyQXBpIH0gZnJvbSAnfnN5c3RlbS9FbmdpbmVBcGknXG5pbXBvcnQgeyBBdG9tIH0gZnJvbSAnLi4vYXRvbSdcblxuLy8gQ3JlYXRlIGlzU2VydmVyIGF0b20gZm9yIGNvbnNpc3RlbnQgc3RhdGVcbmNvbnN0IGlzU2VydmVyQXRvbSA9IEF0b208Ym9vbGVhbj4oZmFsc2UpXG52b2lkIGlzU2VydmVyQXBpKHt9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICBpc1NlcnZlckF0b20uc3dhcCghIXJlc3BvbnNlLmlzU2VydmVyKVxufSlcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHJ1bm5pbmcgb24gc2VydmVyXG5leHBvcnQgZnVuY3Rpb24gaXNTZXJ2ZXIoKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1NlcnZlckF0b20uZ2V0T3JOdWxsKCkgPz8gZmFsc2Vcbn1cblxuLy8gaW5pdGlhbGl6ZSBzeW5jIHRyYW5zcG9ydCBmb3Igc2RrIGVuZ2luZVxuY29uc3Qge1xuICBnZXRDaGlsZHJlbixcbiAgc3luY0VudGl0eSxcbiAgcGFyZW50RW50aXR5LFxuICBnZXRQYXJlbnQsXG4gIG15UHJvZmlsZSxcbiAgcmVtb3ZlUGFyZW50LFxuICBnZXRGaXJzdENoaWxkLFxuICBpc1N0YXRlU3luY3Jvbml6ZWQsXG4gIGJpbmFyeU1lc3NhZ2VCdXMsXG4gIGV2ZW50QnVzXG59ID0gYWRkU3luY1RyYW5zcG9ydChlbmdpbmUsIHNlbmRCaW5hcnksIGdldFVzZXJEYXRhLCBpc1NlcnZlckFwaSwgJ25ldHdvcmsnKVxuXG4vLyBSZS1leHBvcnQgdGhlIHJvb20gbWVzc2FnaW5nIHN5c3RlbVxuZXhwb3J0IHsgcmVnaXN0ZXJNZXNzYWdlcywgZ2V0Um9vbSB9IGZyb20gJy4vZXZlbnRzJ1xuXG5leHBvcnQge1xuICBnZXRGaXJzdENoaWxkLFxuICBnZXRDaGlsZHJlbixcbiAgc3luY0VudGl0eSxcbiAgcGFyZW50RW50aXR5LFxuICBnZXRQYXJlbnQsXG4gIG15UHJvZmlsZSxcbiAgcmVtb3ZlUGFyZW50LFxuICBpc1N0YXRlU3luY3Jvbml6ZWQsXG4gIGJpbmFyeU1lc3NhZ2VCdXMsXG4gIGV2ZW50QnVzXG59XG4iXX0=
|
|
@@ -1,14 +1,27 @@
|
|
|
1
1
|
/// <reference types="@dcl/js-runtime" />
|
|
2
2
|
import { IEngine } from '@dcl/ecs';
|
|
3
3
|
import { type SendBinaryRequest, type SendBinaryResponse } from '~system/CommunicationsController';
|
|
4
|
+
import { CommsMessage } from './binary-message-bus';
|
|
4
5
|
import { GetUserDataRequest, GetUserDataResponse } from '~system/UserIdentity';
|
|
6
|
+
import { IsServerRequest, IsServerResponse } from '~system/EngineApi';
|
|
7
|
+
import { Atom } from '../atom';
|
|
8
|
+
import { Room } from './events/implementation';
|
|
5
9
|
export type IProfile = {
|
|
6
10
|
networkId: number;
|
|
7
11
|
userId: string;
|
|
8
12
|
};
|
|
9
|
-
export declare
|
|
13
|
+
export declare const AUTH_SERVER_PEER_ID = "authoritative-server";
|
|
14
|
+
export declare const DEBUG_NETWORK_MESSAGES: () => any;
|
|
15
|
+
export declare function addSyncTransport(engine: IEngine, sendBinary: (msg: SendBinaryRequest) => Promise<SendBinaryResponse>, getUserData: (value: GetUserDataRequest) => Promise<GetUserDataResponse>, isServerFn: (request: IsServerRequest) => Promise<IsServerResponse>, name: string): {
|
|
10
16
|
myProfile: IProfile;
|
|
11
17
|
isStateSyncronized: () => boolean;
|
|
18
|
+
binaryMessageBus: {
|
|
19
|
+
on: <K extends CommsMessage>(message: K, callback: (value: Uint8Array, sender: string) => void) => void;
|
|
20
|
+
emit: <K_1 extends CommsMessage>(message: K_1, value: Uint8Array, toPeerAddress?: string[] | undefined) => void;
|
|
21
|
+
__processMessages: (messages: Uint8Array[]) => void;
|
|
22
|
+
};
|
|
23
|
+
eventBus: Room<import("./events").EventSchemaRegistry>;
|
|
24
|
+
isRoomReadyAtom: Atom<boolean>;
|
|
12
25
|
syncEntity: (entityId: import("@dcl/ecs").Entity, componentIds: number[], entityEnumId?: number | undefined) => void;
|
|
13
26
|
getChildren: (parent: import("@dcl/ecs").Entity) => Iterable<import("@dcl/ecs").Entity>;
|
|
14
27
|
getParent: (child: import("@dcl/ecs").Entity) => import("@dcl/ecs").Entity | undefined;
|