@dcl/sdk 7.25.1-30310486734.commit-5ffe873 → 7.25.1-30391610123.commit-26cb925

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 (78) hide show
  1. package/composite-provider.js +4 -9
  2. package/internal/utf8.d.ts +15 -0
  3. package/internal/utf8.js +172 -0
  4. package/network/binary-message-bus.d.ts +3 -6
  5. package/network/binary-message-bus.js +5 -9
  6. package/network/index.d.ts +2 -8
  7. package/network/index.js +3 -16
  8. package/network/message-bus-sync.d.ts +1 -14
  9. package/network/message-bus-sync.js +103 -161
  10. package/network/state.js +5 -3
  11. package/package.json +6 -7
  12. package/src/composite-provider.ts +3 -10
  13. package/src/internal/utf8.ts +167 -0
  14. package/src/network/binary-message-bus.ts +4 -9
  15. package/src/network/index.ts +3 -40
  16. package/src/network/message-bus-sync.ts +110 -174
  17. package/src/network/state.ts +4 -3
  18. package/src/text-codec.ts +59 -12
  19. package/text-codec.d.ts +23 -8
  20. package/text-codec.js +55 -13
  21. package/atom.d.ts +0 -19
  22. package/atom.js +0 -83
  23. package/future.d.ts +0 -8
  24. package/future.js +0 -26
  25. package/network/chunking.d.ts +0 -5
  26. package/network/chunking.js +0 -38
  27. package/network/events/implementation.d.ts +0 -93
  28. package/network/events/implementation.js +0 -221
  29. package/network/events/index.d.ts +0 -42
  30. package/network/events/index.js +0 -43
  31. package/network/events/protocol.d.ts +0 -27
  32. package/network/events/protocol.js +0 -66
  33. package/network/events/registry.d.ts +0 -8
  34. package/network/events/registry.js +0 -3
  35. package/network/server/index.d.ts +0 -14
  36. package/network/server/index.js +0 -219
  37. package/network/server/utils.d.ts +0 -18
  38. package/network/server/utils.js +0 -135
  39. package/server/env-var.d.ts +0 -15
  40. package/server/env-var.js +0 -31
  41. package/server/index.d.ts +0 -2
  42. package/server/index.js +0 -3
  43. package/server/storage/constants.d.ts +0 -79
  44. package/server/storage/constants.js +0 -19
  45. package/server/storage/index.d.ts +0 -45
  46. package/server/storage/index.js +0 -51
  47. package/server/storage/player.d.ts +0 -45
  48. package/server/storage/player.js +0 -198
  49. package/server/storage/scene.d.ts +0 -40
  50. package/server/storage/scene.js +0 -188
  51. package/server/storage/value-cache.d.ts +0 -1
  52. package/server/storage/value-cache.js +0 -52
  53. package/server/storage/write-queue.d.ts +0 -1
  54. package/server/storage/write-queue.js +0 -71
  55. package/server/storage-url.d.ts +0 -13
  56. package/server/storage-url.js +0 -42
  57. package/server/utils.d.ts +0 -35
  58. package/server/utils.js +0 -61
  59. package/src/atom.ts +0 -98
  60. package/src/ethereum-provider/text-encoding.d.ts +0 -4
  61. package/src/future.ts +0 -38
  62. package/src/network/chunking.ts +0 -45
  63. package/src/network/events/implementation.ts +0 -271
  64. package/src/network/events/index.ts +0 -48
  65. package/src/network/events/protocol.ts +0 -94
  66. package/src/network/events/registry.ts +0 -18
  67. package/src/network/server/index.ts +0 -301
  68. package/src/network/server/utils.ts +0 -189
  69. package/src/server/env-var.ts +0 -36
  70. package/src/server/index.ts +0 -12
  71. package/src/server/storage/constants.ts +0 -111
  72. package/src/server/storage/index.ts +0 -74
  73. package/src/server/storage/player.ts +0 -289
  74. package/src/server/storage/scene.ts +0 -270
  75. package/src/server/storage/value-cache.ts +0 -92
  76. package/src/server/storage/write-queue.ts +0 -131
  77. package/src/server/storage-url.ts +0 -49
  78. package/src/server/utils.ts +0 -76
@@ -1,221 +0,0 @@
1
- import { CommsMessage } from '../binary-message-bus';
2
- import { AUTH_SERVER_PEER_ID } from '../message-bus-sync';
3
- import { encodeEvent, decodeEvent } from './protocol';
4
- import { future } from '../../future';
5
- export class Room {
6
- constructor(_engine, binaryMessageBus, isServerFn, isRoomReadyAtom) {
7
- this.listeners = new Map();
8
- this.isServerFuture = future();
9
- this.messageQueue = [];
10
- this.isProcessingQueue = false;
11
- void isServerFn.deref().then(($) => this.isServerFuture.resolve($));
12
- this.binaryMessageBus = binaryMessageBus;
13
- this.isRoomReadyAtom = isRoomReadyAtom;
14
- // Subscribe to room readiness changes to flush queue
15
- this.isRoomReadyAtom.observable.add((isReady) => {
16
- if (isReady && this.messageQueue.length > 0) {
17
- void this.flushMessageQueue();
18
- }
19
- });
20
- // Listen for CUSTOM_EVENT messages
21
- binaryMessageBus.on(CommsMessage.CUSTOM_EVENT, (data, sender) => {
22
- try {
23
- const { eventType, payload } = decodeEvent(data, globalEventRegistry);
24
- const callbacks = this.listeners.get(eventType);
25
- if (callbacks) {
26
- callbacks.forEach(async (cb) => {
27
- if (await this.isServerFuture) {
28
- // Server handlers receive sender context
29
- cb(payload, { from: sender });
30
- }
31
- else if (sender === AUTH_SERVER_PEER_ID) {
32
- // Client only processes events from authoritative server
33
- cb(payload);
34
- }
35
- });
36
- }
37
- }
38
- catch (error) {
39
- console.error('[EventBus] Failed to decode event:', error);
40
- }
41
- });
42
- }
43
- /**
44
- * Flush queued messages when room becomes ready
45
- */
46
- async flushMessageQueue() {
47
- if (this.isProcessingQueue || this.messageQueue.length === 0)
48
- return;
49
- this.isProcessingQueue = true;
50
- // Copy and clear the queue to avoid mutation during iteration
51
- const messages = [...this.messageQueue];
52
- this.messageQueue.length = 0;
53
- // Re-send all queued messages
54
- for (const message of messages) {
55
- await this.send(message.eventType, message.data, message.options);
56
- }
57
- this.isProcessingQueue = false;
58
- }
59
- /**
60
- * Send an event
61
- * @param eventType - The type of event from the registry
62
- * @param data - The event data matching the schema
63
- * @param options - Optional send options (server only)
64
- *
65
- * Messages are automatically queued if the room is not ready and sent once connected.
66
- */
67
- async send(eventType, data, options) {
68
- try {
69
- const isRoomReady = this.isRoomReadyAtom.getOrNull() ?? false;
70
- // If room is not ready, queue the message with original params
71
- if (!isRoomReady) {
72
- this.messageQueue.push({
73
- eventType,
74
- data,
75
- options
76
- });
77
- return;
78
- }
79
- // Room is ready, send immediately
80
- const buffer = encodeEvent(eventType, data, globalEventRegistry);
81
- if (await this.isServerFuture) {
82
- // Server can send to specific clients or broadcast
83
- this.binaryMessageBus.emit(CommsMessage.CUSTOM_EVENT, buffer, options?.to);
84
- }
85
- else {
86
- // Client always sends to authoritative server
87
- this.binaryMessageBus.emit(CommsMessage.CUSTOM_EVENT, buffer);
88
- }
89
- }
90
- catch (error) {
91
- console.error(`[EventBus] Failed to send event '${String(eventType)}':`, error);
92
- }
93
- }
94
- /**
95
- * Listen for an event
96
- * @param eventType - The type of event to listen for
97
- * @param callback - Callback to handle the event
98
- * @returns Unsubscribe function
99
- */
100
- onMessage(eventType, callback) {
101
- if (!this.listeners.has(eventType)) {
102
- this.listeners.set(eventType, new Set());
103
- }
104
- const callbacks = this.listeners.get(eventType);
105
- callbacks.add(callback);
106
- // Return unsubscribe function
107
- return () => {
108
- callbacks.delete(callback);
109
- if (callbacks.size === 0) {
110
- this.listeners.delete(eventType);
111
- }
112
- };
113
- }
114
- /**
115
- * Remove all listeners for a specific event type
116
- * @param eventType - The type of event to clear listeners for
117
- */
118
- clear(eventType) {
119
- if (eventType) {
120
- this.listeners.delete(eventType);
121
- }
122
- else {
123
- this.listeners.clear();
124
- }
125
- }
126
- /**
127
- * Get the number of listeners for an event type
128
- * @param eventType - The type of event to check
129
- * @returns Number of registered listeners
130
- */
131
- listenerCount(eventType) {
132
- return this.listeners.get(eventType)?.size ?? 0;
133
- }
134
- /**
135
- * Check if the room is ready to send messages
136
- * @returns true if messages will be sent immediately, false if they will be queued
137
- */
138
- isReady() {
139
- return this.isRoomReadyAtom.getOrNull() ?? false;
140
- }
141
- /**
142
- * Subscribe to room readiness changes
143
- * @param callback - Called when room becomes ready or disconnected
144
- * @returns Unsubscribe function
145
- *
146
- * @example
147
- * ```ts
148
- * const unsubscribe = room.onReady((isReady) => {
149
- * if (isReady) {
150
- * console.log('Room connected!')
151
- * } else {
152
- * console.log('Room disconnected')
153
- * }
154
- * })
155
- *
156
- * // Later: unsubscribe()
157
- * ```
158
- */
159
- onReady(callback) {
160
- const observer = this.isRoomReadyAtom.observable.add((isReady) => {
161
- callback(isReady);
162
- });
163
- return () => {
164
- if (observer) {
165
- this.isRoomReadyAtom.observable.remove(observer);
166
- }
167
- };
168
- }
169
- }
170
- // Global registry for user-defined events
171
- const globalEventRegistry = {};
172
- /**
173
- * Get the global event registry (internal use)
174
- * @internal
175
- */
176
- export function getEventRegistry() {
177
- return globalEventRegistry;
178
- }
179
- // Global room instance (created by addSyncTransport)
180
- let globalRoom = null;
181
- /**
182
- * Set the global room instance (internal use)
183
- * @internal
184
- */
185
- export function setGlobalRoom(roomInstance) {
186
- globalRoom = roomInstance;
187
- }
188
- /**
189
- * Register message schemas for use with the room
190
- * Call this before main() to define your custom messages
191
- * @param messages - Object containing your message schemas
192
- * @returns Typed room instance for your registered messages
193
- */
194
- export function registerMessages(messages) {
195
- Object.assign(globalEventRegistry, messages);
196
- if (!globalRoom) {
197
- throw new Error('Room not initialized. Make sure the SDK network transport is initialized.');
198
- }
199
- // Update the room registry
200
- ;
201
- globalRoom.registry = globalEventRegistry;
202
- return globalRoom;
203
- }
204
- /**
205
- * Get a typed version of the global room
206
- * Use this when you want the room with your specific message types
207
- *
208
- * @example
209
- * ```typescript
210
- * const MyMessages = { ... }
211
- * registerMessages(MyMessages) // Register first
212
- * const room = getRoom<typeof MyMessages>() // Then get typed version
213
- * ```
214
- */
215
- export function getRoom() {
216
- if (!globalRoom) {
217
- throw new Error('Room not initialized. Make sure the SDK network transport is initialized.');
218
- }
219
- return globalRoom;
220
- }
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wbGVtZW50YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV0d29yay9ldmVudHMvaW1wbGVtZW50YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3BELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRXpELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXJELE9BQU8sRUFBRSxNQUFNLEVBQVcsTUFBTSxjQUFjLENBQUE7QUEyQjlDLE1BQU0sT0FBTyxJQUFJO0lBUWYsWUFBWSxPQUFnQixFQUFFLGdCQUFxQixFQUFFLFVBQXlCLEVBQUUsZUFBOEI7UUFQdEcsY0FBUyxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFBO1FBRXZELG1CQUFjLEdBQXFCLE1BQU0sRUFBRSxDQUFBO1FBRTNDLGlCQUFZLEdBQXVCLEVBQUUsQ0FBQTtRQUNyQyxzQkFBaUIsR0FBRyxLQUFLLENBQUE7UUFHL0IsS0FBSyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRW5FLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQTtRQUN4QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQTtRQUV0QyxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDOUMsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO2FBQzlCO1FBQ0gs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TSxVQUFVLE9BQU87SUFDckIsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsMkVBQTJFLENBQUMsQ0FBQTtLQUM3RjtJQUNELE9BQU8sVUFBZ0MsQ0FBQTtBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUVuZ2luZSB9IGZyb20gJ0BkY2wvZWNzJ1xuaW1wb3J0IHsgQ29tbXNNZXNzYWdlIH0gZnJvbSAnLi4vYmluYXJ5LW1lc3NhZ2UtYnVzJ1xuaW1wb3J0IHsgQVVUSF9TRVJWRVJfUEVFUl9JRCB9IGZyb20gJy4uL21lc3NhZ2UtYnVzLXN5bmMnXG5pbXBvcnQgeyBFdmVudFR5cGVzLCBFdmVudFNjaGVtYVJlZ2lzdHJ5IH0gZnJvbSAnLi9yZWdpc3RyeSdcbmltcG9ydCB7IGVuY29kZUV2ZW50LCBkZWNvZGVFdmVudCB9IGZyb20gJy4vcHJvdG9jb2wnXG5pbXBvcnQgeyBBdG9tIH0gZnJvbSAnLi4vLi4vYXRvbSdcbmltcG9ydCB7IGZ1dHVyZSwgSUZ1dHVyZSB9IGZyb20gJy4uLy4uL2Z1dHVyZSdcblxuLy8gQ29udGV4dCBwcm92aWRlZCB0byBzZXJ2ZXItc2lkZSBldmVudCBoYW5kbGVyc1xuZXhwb3J0IHR5cGUgRXZlbnRDb250ZXh0ID0ge1xuICBmcm9tOiBzdHJpbmdcbn1cblxuLy8gRXZlbnQgY2FsbGJhY2sgdHlwZSAtIHNlcnZlciBnZXRzIGNvbnRleHQsIGNsaWVudCBkb2Vzbid0XG5leHBvcnQgdHlwZSBFdmVudENhbGxiYWNrPFQ+ID0gKGRhdGE6IFQsIGNvbnRleHQ/OiBFdmVudENvbnRleHQpID0+IHZvaWRcblxuLy8gT3B0aW9ucyBmb3Igc2VuZGluZyBldmVudHNcbmV4cG9ydCB0eXBlIFNlbmRPcHRpb25zID0ge1xuICB0bz86IHN0cmluZ1tdIC8vIFRhcmdldCBzcGVjaWZpYyBwZWVycyAoc2VydmVyIG9ubHkpXG59XG5cbi8qKlxuICogUm9vbSBwcm92aWRlcyB0eXBlLXNhZmUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGNsaWVudHMgYW5kIHNlcnZlclxuICogVXNlcyBiaW5hcnkgc2VyaWFsaXphdGlvbiB3aXRoIFNjaGVtYSBkZWZpbml0aW9ucyBmb3IgZWZmaWNpZW5jeVxuICovXG50eXBlIFF1ZXVlZE1lc3NhZ2U8VCBleHRlbmRzIEV2ZW50U2NoZW1hUmVnaXN0cnkgPSBFdmVudFNjaGVtYVJlZ2lzdHJ5PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IHtcbiAgICBldmVudFR5cGU6IEtcbiAgICBkYXRhOiBFdmVudFR5cGVzPFQ+W0tdXG4gICAgb3B0aW9ucz86IFNlbmRPcHRpb25zXG4gIH1cbn1ba2V5b2YgVF1cblxuZXhwb3J0IGNsYXNzIFJvb208VCBleHRlbmRzIEV2ZW50U2NoZW1hUmVnaXN0cnkgPSBFdmVudFNjaGVtYVJlZ2lzdHJ5PiB7XG4gIHByaXZhdGUgbGlzdGVuZXJzID0gbmV3IE1hcDxrZXlvZiBULCBTZXQ8RXZlbnRDYWxsYmFjazxhbnk+Pj4oKVxuICBwcml2YXRlIGJpbmFyeU1lc3NhZ2VCdXM6IGFueVxuICBwcml2YXRlIGlzU2VydmVyRnV0dXJlOiBJRnV0dXJlPGJvb2xlYW4+ID0gZnV0dXJlKClcbiAgcHJpdmF0ZSBpc1Jvb21SZWFkeUF0b206IEF0b208Ym9vbGVhbj5cbiAgcHJpdmF0ZSBtZXNzYWdlUXVldWU6IFF1ZXVlZE1lc3NhZ2U8VD5bXSA9IFtdXG4gIHByaXZhdGUgaXNQcm9jZXNzaW5nUXVldWUgPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKF9lbmdpbmU6IElFbmdpbmUsIGJpbmFyeU1lc3NhZ2VCdXM6IGFueSwgaXNTZXJ2ZXJGbjogQXRvbTxib29sZWFuPiwgaXNSb29tUmVhZHlBdG9tOiBBdG9tPGJvb2xlYW4+KSB7XG4gICAgdm9pZCBpc1NlcnZlckZuLmRlcmVmKCkudGhlbigoJCkgPT4gdGhpcy5pc1NlcnZlckZ1dHVyZS5yZXNvbHZlKCQpKVxuXG4gICAgdGhpcy5iaW5hcnlNZXNzYWdlQnVzID0gYmluYXJ5TWVzc2FnZUJ1c1xuICAgIHRoaXMuaXNSb29tUmVhZHlBdG9tID0gaXNSb29tUmVhZHlBdG9tXG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gcm9vbSByZWFkaW5lc3MgY2hhbmdlcyB0byBmbHVzaCBxdWV1ZVxuICAgIHRoaXMuaXNSb29tUmVhZHlBdG9tLm9ic2VydmFibGUuYWRkKChpc1JlYWR5KSA9PiB7XG4gICAgICBpZiAoaXNSZWFkeSAmJiB0aGlzLm1lc3NhZ2VRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZvaWQgdGhpcy5mbHVzaE1lc3NhZ2VRdWV1ZSgpXG4gICAgICB9XG4gICAgfSlcbiAgICAvLyBMaXN0ZW4gZm9yIENVU1RPTV9FVkVOVCBtZXNzYWdlc1xuICAgIGJpbmFyeU1lc3NhZ2VCdXMub24oQ29tbXNNZXNzYWdlLkNVU1RPTV9FVkVOVCwgKGRhdGE6IFVpbnQ4QXJyYXksIHNlbmRlcjogc3RyaW5nKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGV2ZW50VHlwZSwgcGF5bG9hZCB9ID0gZGVjb2RlRXZlbnQoZGF0YSwgZ2xvYmFsRXZlbnRSZWdpc3RyeSlcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5saXN0ZW5lcnMuZ2V0KGV2ZW50VHlwZSlcblxuICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgICAgY2FsbGJhY2tzLmZvckVhY2goYXN5bmMgKGNiKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5pc1NlcnZlckZ1dHVyZSkge1xuICAgICAgICAgICAgICAvLyBTZXJ2ZXIgaGFuZGxlcnMgcmVjZWl2ZSBzZW5kZXIgY29udGV4dFxuICAgICAgICAgICAgICBjYihwYXlsb2FkLCB7IGZyb206IHNlbmRlciB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZW5kZXIgPT09IEFVVEhfU0VSVkVSX1BFRVJfSUQpIHtcbiAgICAgICAgICAgICAgLy8gQ2xpZW50IG9ubHkgcHJvY2Vzc2VzIGV2ZW50cyBmcm9tIGF1dGhvcml0YXRpdmUgc2VydmVyXG4gICAgICAgICAgICAgIGNiKHBheWxvYWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0V2ZW50QnVzXSBGYWlsZWQgdG8gZGVjb2RlIGV2ZW50OicsIGVycm9yKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggcXVldWVkIG1lc3NhZ2VzIHdoZW4gcm9vbSBiZWNvbWVzIHJlYWR5XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZsdXNoTWVzc2FnZVF1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzUHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMubWVzc2FnZVF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG5cbiAgICB0aGlzLmlzUHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZVxuXG4gICAgLy8gQ29weSBhbmQgY2xlYXIgdGhlIHF1ZXVlIHRvIGF2b2lkIG11dGF0aW9uIGR1cmluZyBpdGVyYXRpb25cbiAgICBjb25zdCBtZXNzYWdlcyA9IFsuLi50aGlzLm1lc3NhZ2VRdWV1ZV1cbiAgICB0aGlzLm1lc3NhZ2VRdWV1ZS5sZW5ndGggPSAwXG5cbiAgICAvLyBSZS1zZW5kIGFsbCBxdWV1ZWQgbWVzc2FnZXNcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZChtZXNzYWdlLmV2ZW50VHlwZSwgbWVzc2FnZS5kYXRhLCBtZXNzYWdlLm9wdGlvbnMpXG4gICAgfVxuXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhbiBldmVudFxuICAgKiBAcGFyYW0gZXZlbnRUeXBlIC0gVGhlIHR5cGUgb2YgZXZlbnQgZnJvbSB0aGUgcmVnaXN0cnlcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgZXZlbnQgZGF0YSBtYXRjaGluZyB0aGUgc2NoZW1hXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgc2VuZCBvcHRpb25zIChzZXJ2ZXIgb25seSlcbiAgICpcbiAgICogTWVzc2FnZXMgYXJlIGF1dG9tYXRpY2FsbHkgcXVldWVkIGlmIHRoZSByb29tIGlzIG5vdCByZWFkeSBhbmQgc2VudCBvbmNlIGNvbm5lY3RlZC5cbiAgICovXG4gIGFzeW5jIHNlbmQ8SyBleHRlbmRzIGtleW9mIFQ+KGV2ZW50VHlwZTogSywgZGF0YTogRXZlbnRUeXBlczxUPltLXSwgb3B0aW9ucz86IFNlbmRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlzUm9vbVJlYWR5ID0gdGhpcy5pc1Jvb21SZWFkeUF0b20uZ2V0T3JOdWxsKCkgPz8gZmFsc2VcblxuICAgICAgLy8gSWYgcm9vbSBpcyBub3QgcmVhZHksIHF1ZXVlIHRoZSBtZXNzYWdlIHdpdGggb3JpZ2luYWwgcGFyYW1zXG4gICAgICBpZiAoIWlzUm9vbVJlYWR5KSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVF1ZXVlLnB1c2goe1xuICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFJvb20gaXMgcmVhZHksIHNlbmQgaW1tZWRpYXRlbHlcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGVuY29kZUV2ZW50KGV2ZW50VHlwZSBhcyBzdHJpbmcsIGRhdGEsIGdsb2JhbEV2ZW50UmVnaXN0cnkpXG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmlzU2VydmVyRnV0dXJlKSB7XG4gICAgICAgIC8vIFNlcnZlciBjYW4gc2VuZCB0byBzcGVjaWZpYyBjbGllbnRzIG9yIGJyb2FkY2FzdFxuICAgICAgICB0aGlzLmJpbmFyeU1lc3NhZ2VCdXMuZW1pdChDb21tc01lc3NhZ2UuQ1VTVE9NX0VWRU5ULCBidWZmZXIsIG9wdGlvbnM/LnRvKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xpZW50IGFsd2F5cyBzZW5kcyB0byBhdXRob3JpdGF0aXZlIHNlcnZlclxuICAgICAgICB0aGlzLmJpbmFyeU1lc3NhZ2VCdXMuZW1pdChDb21tc01lc3NhZ2UuQ1VTVE9NX0VWRU5ULCBidWZmZXIpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtFdmVudEJ1c10gRmFpbGVkIHRvIHNlbmQgZXZlbnQgJyR7U3RyaW5nKGV2ZW50VHlwZSl9JzpgLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGZvciBhbiBldmVudFxuICAgKiBAcGFyYW0gZXZlbnRUeXBlIC0gVGhlIHR5cGUgb2YgZXZlbnQgdG8gbGlzdGVuIGZvclxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBoYW5kbGUgdGhlIGV2ZW50XG4gICAqIEByZXR1cm5zIFVuc3Vic2NyaWJlIGZ1bmN0aW9uXG4gICAqL1xuICBvbk1lc3NhZ2U8SyBleHRlbmRzIGtleW9mIFQ+KGV2ZW50VHlwZTogSywgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2s8RXZlbnRUeXBlczxUPltLXT4pOiAoKSA9PiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmhhcyhldmVudFR5cGUpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5zZXQoZXZlbnRUeXBlLCBuZXcgU2V0KCkpXG4gICAgfVxuXG4gICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5saXN0ZW5lcnMuZ2V0KGV2ZW50VHlwZSkhXG4gICAgY2FsbGJhY2tzLmFkZChjYWxsYmFjaylcblxuICAgIC8vIFJldHVybiB1bnN1YnNjcmliZSBmdW5jdGlvblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjYWxsYmFja3MuZGVsZXRlKGNhbGxiYWNrKVxuICAgICAgaWYgKGNhbGxiYWNrcy5zaXplID09PSAwKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLmRlbGV0ZShldmVudFR5cGUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzIGZvciBhIHNwZWNpZmljIGV2ZW50IHR5cGVcbiAgICogQHBhcmFtIGV2ZW50VHlwZSAtIFRoZSB0eXBlIG9mIGV2ZW50IHRvIGNsZWFyIGxpc3RlbmVycyBmb3JcbiAgICovXG4gIGNsZWFyPEsgZXh0ZW5kcyBrZXlvZiBUPihldmVudFR5cGU/OiBLKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50VHlwZSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGV2ZW50VHlwZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuY2xlYXIoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlciBvZiBsaXN0ZW5lcnMgZm9yIGFuIGV2ZW50IHR5cGVcbiAgICogQHBhcmFtIGV2ZW50VHlwZSAtIFRoZSB0eXBlIG9mIGV2ZW50IHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIE51bWJlciBvZiByZWdpc3RlcmVkIGxpc3RlbmVyc1xuICAgKi9cbiAgbGlzdGVuZXJDb3VudDxLIGV4dGVuZHMga2V5b2YgVD4oZXZlbnRUeXBlOiBLKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lcnMuZ2V0KGV2ZW50VHlwZSk/LnNpemUgPz8gMFxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSByb29tIGlzIHJlYWR5IHRvIHNlbmQgbWVzc2FnZXNcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBtZXNzYWdlcyB3aWxsIGJlIHNlbnQgaW1tZWRpYXRlbHksIGZhbHNlIGlmIHRoZXkgd2lsbCBiZSBxdWV1ZWRcbiAgICovXG4gIGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb29tUmVhZHlBdG9tLmdldE9yTnVsbCgpID8/IGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHJvb20gcmVhZGluZXNzIGNoYW5nZXNcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGVkIHdoZW4gcm9vbSBiZWNvbWVzIHJlYWR5IG9yIGRpc2Nvbm5lY3RlZFxuICAgKiBAcmV0dXJucyBVbnN1YnNjcmliZSBmdW5jdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBjb25zdCB1bnN1YnNjcmliZSA9IHJvb20ub25SZWFkeSgoaXNSZWFkeSkgPT4ge1xuICAgKiAgIGlmIChpc1JlYWR5KSB7XG4gICAqICAgICBjb25zb2xlLmxvZygnUm9vbSBjb25uZWN0ZWQhJylcbiAgICogICB9IGVsc2Uge1xuICAgKiAgICAgY29uc29sZS5sb2coJ1Jvb20gZGlzY29ubmVjdGVkJylcbiAgICogICB9XG4gICAqIH0pXG4gICAqXG4gICAqIC8vIExhdGVyOiB1bnN1YnNjcmliZSgpXG4gICAqIGBgYFxuICAgKi9cbiAgb25SZWFkeShjYWxsYmFjazogKGlzUmVhZHk6IGJvb2xlYW4pID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IHRoaXMuaXNSb29tUmVhZHlBdG9tLm9ic2VydmFibGUuYWRkKChpc1JlYWR5KSA9PiB7XG4gICAgICBjYWxsYmFjayhpc1JlYWR5KVxuICAgIH0pXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuaXNSb29tUmVhZHlBdG9tLm9ic2VydmFibGUucmVtb3ZlKG9ic2VydmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBHbG9iYWwgcmVnaXN0cnkgZm9yIHVzZXItZGVmaW5lZCBldmVudHNcbmNvbnN0IGdsb2JhbEV2ZW50UmVnaXN0cnk6IEV2ZW50U2NoZW1hUmVnaXN0cnkgPSB7fVxuXG4vKipcbiAqIEdldCB0aGUgZ2xvYmFsIGV2ZW50IHJlZ2lzdHJ5IChpbnRlcm5hbCB1c2UpXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50UmVnaXN0cnkoKTogRXZlbnRTY2hlbWFSZWdpc3RyeSB7XG4gIHJldHVybiBnbG9iYWxFdmVudFJlZ2lzdHJ5XG59XG5cbi8vIEdsb2JhbCByb29tIGluc3RhbmNlIChjcmVhdGVkIGJ5IGFkZFN5bmNUcmFuc3BvcnQpXG5sZXQgZ2xvYmFsUm9vbTogUm9vbSB8IG51bGwgPSBudWxsXG5cbi8qKlxuICogU2V0IHRoZSBnbG9iYWwgcm9vbSBpbnN0YW5jZSAoaW50ZXJuYWwgdXNlKVxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRHbG9iYWxSb29tKHJvb21JbnN0YW5jZTogUm9vbSk6IHZvaWQge1xuICBnbG9iYWxSb29tID0gcm9vbUluc3RhbmNlXG59XG5cbi8qKlxuICogUmVnaXN0ZXIgbWVzc2FnZSBzY2hlbWFzIGZvciB1c2Ugd2l0aCB0aGUgcm9vbVxuICogQ2FsbCB0aGlzIGJlZm9yZSBtYWluKCkgdG8gZGVmaW5lIHlvdXIgY3VzdG9tIG1lc3NhZ2VzXG4gKiBAcGFyYW0gbWVzc2FnZXMgLSBPYmplY3QgY29udGFpbmluZyB5b3VyIG1lc3NhZ2Ugc2NoZW1hc1xuICogQHJldHVybnMgVHlwZWQgcm9vbSBpbnN0YW5jZSBmb3IgeW91ciByZWdpc3RlcmVkIG1lc3NhZ2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlck1lc3NhZ2VzPFQgZXh0ZW5kcyBFdmVudFNjaGVtYVJlZ2lzdHJ5PihtZXNzYWdlczogVCk6IFJvb208VD4ge1xuICBPYmplY3QuYXNzaWduKGdsb2JhbEV2ZW50UmVnaXN0cnksIG1lc3NhZ2VzKVxuICBpZiAoIWdsb2JhbFJvb20pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb20gbm90IGluaXRpYWxpemVkLiBNYWtlIHN1cmUgdGhlIFNESyBuZXR3b3JrIHRyYW5zcG9ydCBpcyBpbml0aWFsaXplZC4nKVxuICB9XG4gIC8vIFVwZGF0ZSB0aGUgcm9vbSByZWdpc3RyeVxuICA7KGdsb2JhbFJvb20gYXMgYW55KS5yZWdpc3RyeSA9IGdsb2JhbEV2ZW50UmVnaXN0cnlcbiAgcmV0dXJuIGdsb2JhbFJvb20gYXMgdW5rbm93biBhcyBSb29tPFQ+XG59XG5cbi8qKlxuICogR2V0IGEgdHlwZWQgdmVyc2lvbiBvZiB0aGUgZ2xvYmFsIHJvb21cbiAqIFVzZSB0aGlzIHdoZW4geW91IHdhbnQgdGhlIHJvb20gd2l0aCB5b3VyIHNwZWNpZmljIG1lc3NhZ2UgdHlwZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgTXlNZXNzYWdlcyA9IHsgLi4uIH1cbiAqIHJlZ2lzdGVyTWVzc2FnZXMoTXlNZXNzYWdlcykgLy8gUmVnaXN0ZXIgZmlyc3RcbiAqIGNvbnN0IHJvb20gPSBnZXRSb29tPHR5cGVvZiBNeU1lc3NhZ2VzPigpIC8vIFRoZW4gZ2V0IHR5cGVkIHZlcnNpb25cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9vbTxUIGV4dGVuZHMgRXZlbnRTY2hlbWFSZWdpc3RyeT4oKTogUm9vbTxUPiB7XG4gIGlmICghZ2xvYmFsUm9vbSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUm9vbSBub3QgaW5pdGlhbGl6ZWQuIE1ha2Ugc3VyZSB0aGUgU0RLIG5ldHdvcmsgdHJhbnNwb3J0IGlzIGluaXRpYWxpemVkLicpXG4gIH1cbiAgcmV0dXJuIGdsb2JhbFJvb20gYXMgdW5rbm93biBhcyBSb29tPFQ+XG59XG4iXX0=
@@ -1,42 +0,0 @@
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 };
@@ -1,43 +0,0 @@
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==
@@ -1,27 +0,0 @@
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>;
@@ -1,66 +0,0 @@
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
@@ -1,8 +0,0 @@
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;
@@ -1,3 +0,0 @@
1
- // Default empty registry
2
- export const EventSchemas = {};
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV0d29yay9ldmVudHMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEseUJBQXlCO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxFQUFzQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJ0BkY2wvZWNzJ1xuXG4vLyBCYXNlIHR5cGUgZm9yIGV2ZW50IHNjaGVtYSByZWdpc3RyeVxuZXhwb3J0IHR5cGUgRXZlbnRTY2hlbWFSZWdpc3RyeSA9IFJlY29yZDxzdHJpbmcsIElTY2hlbWE+XG5cbi8vIFR5cGUgZXh0cmFjdGlvbiBmcm9tIHNjaGVtYXNcbmV4cG9ydCB0eXBlIEV2ZW50VHlwZXM8VCBleHRlbmRzIEV2ZW50U2NoZW1hUmVnaXN0cnkgPSBFdmVudFNjaGVtYVJlZ2lzdHJ5PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBJU2NoZW1hPGluZmVyIFU+ID8gVSA6IG5ldmVyXG59XG5cbi8vIEdsb2JhbCBpbnRlcmZhY2UgdGhhdCB1c2VycyBjYW4gYXVnbWVudCB3aXRoIHRoZWlyIG93biBldmVudHNcbmV4cG9ydCB0eXBlIFJlZ2lzdGVyZWRFdmVudHMgPSBFdmVudFNjaGVtYVJlZ2lzdHJ5XG5cbi8vIERlZmF1bHQgZW1wdHkgcmVnaXN0cnlcbmV4cG9ydCBjb25zdCBFdmVudFNjaGVtYXMgPSB7fSBhcyBSZWdpc3RlcmVkRXZlbnRzXG5cbi8vIEhlbHBlciB0byBlbnN1cmUgdXNlciBldmVudHMgY29uZm9ybSB0byB0aGUgcmVnaXN0cnkgdHlwZVxuZXhwb3J0IHR5cGUgVmFsaWRhdGVFdmVudFJlZ2lzdHJ5PFQgZXh0ZW5kcyBFdmVudFNjaGVtYVJlZ2lzdHJ5PiA9IFRcbiJdfQ==
@@ -1,14 +0,0 @@
1
- import { IEngine, Entity } from '@dcl/ecs';
2
- import * as utils from './utils';
3
- import { type BinaryMessageBus } from '../binary-message-bus';
4
- export declare const LIVEKIT_MAX_SIZE = 12;
5
- export interface ServerValidationConfig {
6
- engine: IEngine;
7
- binaryMessageBus: ReturnType<typeof BinaryMessageBus>;
8
- }
9
- export declare function createServerValidator(config: ServerValidationConfig): {
10
- findExistingNetworkEntity: (message: utils.NetworkMessage) => Entity | null;
11
- processClientMessages: (value: Uint8Array, sender: string, forceCorrections?: boolean) => Uint8Array;
12
- processServerMessages: (value: Uint8Array, sender: string) => Uint8Array;
13
- convertRegularToNetworkMessage: (regularMessage: Uint8Array) => Uint8Array[];
14
- };