@dcl/sdk 7.29.1-36041177279.commit-502e633 → 7.29.1-36591934525.commit-48aa9b5

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 (80) hide show
  1. package/explorer-ui/index.d.ts +118 -0
  2. package/explorer-ui/index.js +235 -0
  3. package/internal/transports/rendererTransport.js +2 -5
  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 +3 -16
  9. package/network/message-bus-sync.js +103 -161
  10. package/network/state.js +5 -3
  11. package/package.json +6 -6
  12. package/src/explorer-ui/index.ts +398 -0
  13. package/src/internal/transports/rendererTransport.ts +1 -4
  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 +112 -176
  17. package/src/network/state.ts +4 -3
  18. package/atom.d.ts +0 -19
  19. package/atom.js +0 -83
  20. package/future.d.ts +0 -8
  21. package/future.js +0 -26
  22. package/network/chunking.d.ts +0 -5
  23. package/network/chunking.js +0 -38
  24. package/network/events/implementation.d.ts +0 -93
  25. package/network/events/implementation.js +0 -221
  26. package/network/events/index.d.ts +0 -42
  27. package/network/events/index.js +0 -43
  28. package/network/events/protocol.d.ts +0 -27
  29. package/network/events/protocol.js +0 -66
  30. package/network/events/registry.d.ts +0 -8
  31. package/network/events/registry.js +0 -3
  32. package/network/server/index.d.ts +0 -14
  33. package/network/server/index.js +0 -219
  34. package/network/server/utils.d.ts +0 -18
  35. package/network/server/utils.js +0 -135
  36. package/server/env-var.d.ts +0 -15
  37. package/server/env-var.js +0 -31
  38. package/server/index.d.ts +0 -2
  39. package/server/index.js +0 -3
  40. package/server/storage/constants.d.ts +0 -80
  41. package/server/storage/constants.js +0 -19
  42. package/server/storage/error-message.d.ts +0 -1
  43. package/server/storage/error-message.js +0 -9
  44. package/server/storage/index.d.ts +0 -54
  45. package/server/storage/index.js +0 -60
  46. package/server/storage/player.d.ts +0 -60
  47. package/server/storage/player.js +0 -244
  48. package/server/storage/scene.d.ts +0 -55
  49. package/server/storage/scene.js +0 -232
  50. package/server/storage/serialize.d.ts +0 -1
  51. package/server/storage/serialize.js +0 -135
  52. package/server/storage/value-cache.d.ts +0 -1
  53. package/server/storage/value-cache.js +0 -67
  54. package/server/storage/write-queue.d.ts +0 -1
  55. package/server/storage/write-queue.js +0 -113
  56. package/server/storage-url.d.ts +0 -13
  57. package/server/storage-url.js +0 -42
  58. package/server/utils.d.ts +0 -35
  59. package/server/utils.js +0 -69
  60. package/src/atom.ts +0 -98
  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 -112
  72. package/src/server/storage/error-message.ts +0 -8
  73. package/src/server/storage/index.ts +0 -83
  74. package/src/server/storage/player.ts +0 -345
  75. package/src/server/storage/scene.ts +0 -324
  76. package/src/server/storage/serialize.ts +0 -132
  77. package/src/server/storage/value-cache.ts +0 -119
  78. package/src/server/storage/write-queue.ts +0 -174
  79. package/src/server/storage-url.ts +0 -49
  80. package/src/server/utils.ts +0 -83
@@ -0,0 +1,118 @@
1
+ /// <reference types="@dcl/js-runtime" />
2
+ import { ExplorerUi, GrowOnlyValueSetComponentDefinition, PBExplorerItemPurchaseResult, PBExplorerUiEventsResult } from '@dcl/ecs';
3
+ import { OpenExplorerUiResult } from '~system/RestrictedActions';
4
+ export { ExplorerUi, OpenExplorerUiResult };
5
+ /** @public */
6
+ export type CorrelatedEvent = {
7
+ timestamp: number;
8
+ requestId: number;
9
+ };
10
+ /**
11
+ * A named stream of events that this helper can collect and stop on.
12
+ * @public
13
+ */
14
+ export type Channel<N extends string = string, T extends CorrelatedEvent = CorrelatedEvent> = {
15
+ readonly name: N;
16
+ readonly component: GrowOnlyValueSetComponentDefinition<T>;
17
+ };
18
+ /** @public */
19
+ export type AnyChannel = Channel<string, any>;
20
+ /**
21
+ * Wraps a grow-only result component as a {@link Channel}. The name must be unique within a scene.
22
+ * @public
23
+ */
24
+ export declare function channel<N extends string, T extends CorrelatedEvent>(name: N, component: GrowOnlyValueSetComponentDefinition<T>): Channel<N, T>;
25
+ /** Panel lifecycle events: opened and closed. @public */
26
+ export declare const ExplorerUiEvents: Channel<'explorerUi', PBExplorerUiEventsResult>;
27
+ /** Outcome of an `EU_ITEM_PURCHASE` flow: purchased, dismissed or failed. @public */
28
+ export declare const ItemPurchase: Channel<'itemPurchase', PBExplorerItemPurchaseResult>;
29
+ /**
30
+ * The `$case` names of a channel's event union.
31
+ * @public
32
+ */
33
+ export type CaseOf<C extends AnyChannel> = C extends Channel<any, infer T> ? Extract<T[keyof T], {
34
+ $case: string;
35
+ }>['$case'] : never;
36
+ /** @public */
37
+ export type Variant<C extends AnyChannel = AnyChannel, K extends string = string> = {
38
+ readonly channel: C;
39
+ readonly $case: K;
40
+ };
41
+ /** @public */
42
+ export declare function variant<C extends AnyChannel, K extends CaseOf<C>>(ch: C, $case: K): Variant<C, K>;
43
+ /**
44
+ * What ends the wait before the panel closes: any event on a channel, or one `$case` of it.
45
+ * @public
46
+ */
47
+ export type StopCondition = AnyChannel | Variant;
48
+ /** @public */
49
+ export type Collected<C> = C extends Channel<infer N, infer T> ? {
50
+ channel: N;
51
+ event: T;
52
+ } : never;
53
+ /**
54
+ * How the wait ended.
55
+ * - `closed`: the panel this call opened was closed.
56
+ * - `matched`: `until` fired first, so the panel may still be on screen.
57
+ * - `notOpened`: this call did not open anything. `openResult` says why.
58
+ * - `timedOut`: `timeoutMs` elapsed first.
59
+ *
60
+ * `events` always holds everything collected, the event that stopped the wait included.
61
+ * @public
62
+ */
63
+ export type WaitOutcome<C extends readonly AnyChannel[]> = {
64
+ $case: 'closed';
65
+ events: readonly Collected<C[number]>[];
66
+ } | {
67
+ $case: 'matched';
68
+ events: readonly Collected<C[number]>[];
69
+ } | {
70
+ $case: 'notOpened';
71
+ openResult: OpenExplorerUiResult;
72
+ } | {
73
+ $case: 'timedOut';
74
+ events: readonly Collected<C[number]>[];
75
+ };
76
+ /** @public */
77
+ export type WaitOptions<C extends readonly AnyChannel[]> = {
78
+ /** Channels whose events land in `events`. Defaults to none. */
79
+ collect?: C;
80
+ /** Stops the wait early. The panel closing always stops it regardless. */
81
+ until?: StopCondition;
82
+ /**
83
+ * Bounds the wait, in milliseconds. On expiry the promise resolves with `$case: 'timedOut'`.
84
+ * No default, because a panel can stay open for minutes. Without it, an explorer that opens
85
+ * a panel and then emits no `closed` leaves the promise pending for the scene's whole life.
86
+ */
87
+ timeoutMs?: number;
88
+ };
89
+ /** @public */
90
+ export type OpenExplorerUiRequest = {
91
+ ui: Exclude<ExplorerUi, ExplorerUi.EU_ITEM_PURCHASE>;
92
+ itemPurchase?: undefined;
93
+ } | {
94
+ ui: ExplorerUi.EU_ITEM_PURCHASE;
95
+ itemPurchase: {
96
+ urn: string;
97
+ };
98
+ };
99
+ /**
100
+ * Signature of {@link openExplorerUiAndWait}. The second overload takes a bare `ui`, so a
101
+ * computed panel value needs no narrowing.
102
+ * @public
103
+ */
104
+ export interface OpenExplorerUiAndWait {
105
+ <const C extends readonly AnyChannel[] = []>(request: OpenExplorerUiRequest, options?: WaitOptions<C>): Promise<WaitOutcome<C>>;
106
+ (ui: Exclude<ExplorerUi, ExplorerUi.EU_ITEM_PURCHASE>): Promise<WaitOutcome<[]>>;
107
+ }
108
+ /**
109
+ * Opens an explorer panel and waits for the session it started. The wait ends when the panel
110
+ * closes. See {@link WaitOptions} to collect events, to stop earlier or to bound the wait.
111
+ *
112
+ * Every lifecycle outcome resolves, see {@link WaitOutcome}. The promise rejects only when an
113
+ * event cannot be attributed to a call at all: an explorer too old to echo `request_id`
114
+ * paired with a panel that can coexist with another one.
115
+ *
116
+ * @public
117
+ */
118
+ export declare const openExplorerUiAndWait: OpenExplorerUiAndWait;
@@ -0,0 +1,235 @@
1
+ import { engine, ExplorerItemPurchaseResult, ExplorerUi, ExplorerUiEventsResult } from '@dcl/ecs';
2
+ import { openExplorerUi, OpenExplorerUiResult } from '~system/RestrictedActions';
3
+ export { ExplorerUi, OpenExplorerUiResult };
4
+ // What an explorer that does not echo request_id, or a user-initiated action, leaves on the wire.
5
+ const UNCORRELATED = 0;
6
+ // Panels that can be on screen next to another panel. The `ui` field alone cannot attribute
7
+ // their events, so an event on one of these panels must carry a request_id.
8
+ const CONCURRENT_PANELS = [7 /* ExplorerUi.EU_ITEM_PURCHASE */];
9
+ /**
10
+ * Wraps a grow-only result component as a {@link Channel}. The name must be unique within a scene.
11
+ * @public
12
+ */
13
+ export function channel(name, component) {
14
+ return { name, component };
15
+ }
16
+ /** Panel lifecycle events: opened and closed. @public */
17
+ export const ExplorerUiEvents = /* @__PURE__ */ channel('explorerUi', ExplorerUiEventsResult);
18
+ /** Outcome of an `EU_ITEM_PURCHASE` flow: purchased, dismissed or failed. @public */
19
+ export const ItemPurchase = /* @__PURE__ */ channel('itemPurchase', ExplorerItemPurchaseResult);
20
+ /** @public */
21
+ export function variant(ch, $case) {
22
+ return { channel: ch, $case };
23
+ }
24
+ /** @internal exposed for tests */
25
+ export const EXPLORER_UI_WAIT_TIMEOUT_SYSTEM = 'explorer-ui-wait-timeout';
26
+ // Lowest priority sorts this system last, so when it removes itself mid-tick it splices the
27
+ // last element of the array the engine is iterating and skips no other system.
28
+ const TIMEOUT_SYSTEM_PRIORITY = Number.MIN_SAFE_INTEGER;
29
+ // ts-proto renders a `oneof` as one wrapper property `{ $case, [$case]: value }`. Finding that
30
+ // property by shape keeps the helper independent of the name each message gave it: `event` on
31
+ // one message, `status` on another.
32
+ function caseOf(event) {
33
+ for (const key of Object.keys(event)) {
34
+ const value = event[key];
35
+ if (value && typeof value === 'object' && typeof value.$case === 'string') {
36
+ return value.$case;
37
+ }
38
+ }
39
+ return undefined;
40
+ }
41
+ function normalizeStop(stop) {
42
+ return '$case' in stop ? { channel: stop.channel, $case: stop.$case } : { channel: stop, $case: undefined };
43
+ }
44
+ /** @internal test seam. The production instance is {@link openExplorerUiAndWait}. */
45
+ export function create(deps) {
46
+ const { engine: engineInstance, openExplorerUi: openExplorerUiFn, explorerUiEvents } = deps;
47
+ const root = engineInstance.RootEntity;
48
+ const sessions = new Map();
49
+ // Keyed by name, so two wrappers around the same component arm one listener, not two.
50
+ const armed = new Map();
51
+ // Starts at 1 so a minted id never collides with UNCORRELATED.
52
+ let nextRequestId = 1;
53
+ let timeoutSystemAdded = false;
54
+ function arm(ch) {
55
+ const bound = armed.get(ch.name);
56
+ if (bound) {
57
+ if (bound !== ch.component) {
58
+ throw new Error(`openExplorerUiAndWait: channel name '${ch.name}' is already bound to a different component. ` +
59
+ `Channel names identify a stream, so they have to be unique within a scene.`);
60
+ }
61
+ return;
62
+ }
63
+ armed.set(ch.name, ch.component);
64
+ const name = ch.name;
65
+ // onChange has no unsubscribe, so one listener per channel lives for the engine's lifetime.
66
+ ch.component.onChange(root, (value) => {
67
+ // `undefined` arrives on DELETE_ENTITY. Otherwise `value` is one appended element,
68
+ // not the whole set.
69
+ if (value)
70
+ deliver(name, value);
71
+ });
72
+ }
73
+ function attribute(session, name, event) {
74
+ if (event.requestId === session.requestId)
75
+ return 'yes';
76
+ if (event.requestId !== UNCORRELATED)
77
+ return 'no';
78
+ // Only the lifecycle channel carries a second discriminator, `ui`, and it identifies a
79
+ // session only while panels cannot coexist. A second call for the same panel is answered
80
+ // WAS_ALREADY_OPEN, so at most one session per non-concurrent panel is ever live.
81
+ if (session.correlationRequired || name !== explorerUiEvents.name)
82
+ return 'ambiguous';
83
+ return event.ui === session.ui ? 'yes' : 'no';
84
+ }
85
+ function deliver(name, event) {
86
+ // Settling deletes from `sessions` mid-iteration, which a Map tolerates. Nothing adds.
87
+ for (const session of sessions.values()) {
88
+ if (!session.watched.has(name))
89
+ continue;
90
+ const attribution = attribute(session, name, event);
91
+ if (attribution === 'no')
92
+ continue;
93
+ if (attribution === 'ambiguous') {
94
+ failSession(session, new Error(`openExplorerUiAndWait: got a '${name}' event with no request_id, and nothing else identifies ` +
95
+ `the call it belongs to. This explorer does not echo OpenExplorerUiRequest.request_id.`));
96
+ continue;
97
+ }
98
+ accept(session, name, event);
99
+ }
100
+ }
101
+ function accept(session, name, event) {
102
+ if (session.collect.has(name))
103
+ session.events.push({ channel: name, event });
104
+ // The close is terminal and wins over `until`, because `matched` would tell the caller
105
+ // that the panel is still on screen.
106
+ if (name === explorerUiEvents.name && caseOf(event) === 'closed') {
107
+ settleSession(session, { $case: 'closed', events: session.events });
108
+ return;
109
+ }
110
+ const until = session.until;
111
+ if (!until || until.channel !== name)
112
+ return;
113
+ if (until.$case === undefined || until.$case === caseOf(event)) {
114
+ settleSession(session, { $case: 'matched', events: session.events });
115
+ }
116
+ }
117
+ function settleSession(session, outcome) {
118
+ if (session.settled)
119
+ return;
120
+ session.settled = true;
121
+ sessions.delete(session.requestId);
122
+ session.settle(outcome);
123
+ maybeRemoveTimeoutSystem();
124
+ }
125
+ function failSession(session, error) {
126
+ if (session.settled)
127
+ return;
128
+ session.settled = true;
129
+ sessions.delete(session.requestId);
130
+ session.fail(error);
131
+ maybeRemoveTimeoutSystem();
132
+ }
133
+ function hasTimedSession() {
134
+ for (const session of sessions.values()) {
135
+ if (session.timeoutMs !== undefined)
136
+ return true;
137
+ }
138
+ return false;
139
+ }
140
+ function maybeRemoveTimeoutSystem() {
141
+ if (!timeoutSystemAdded || hasTimedSession())
142
+ return;
143
+ timeoutSystemAdded = false;
144
+ engineInstance.removeSystem(EXPLORER_UI_WAIT_TIMEOUT_SYSTEM);
145
+ }
146
+ function ensureTimeoutSystem() {
147
+ if (timeoutSystemAdded)
148
+ return;
149
+ timeoutSystemAdded = true;
150
+ // The scene runtime has no timers, so elapsed time is accumulated from the engine's dt.
151
+ engineInstance.addSystem((dt) => {
152
+ for (const session of sessions.values()) {
153
+ if (session.timeoutMs === undefined)
154
+ continue;
155
+ session.elapsedMs += dt * 1000;
156
+ if (session.elapsedMs >= session.timeoutMs) {
157
+ settleSession(session, { $case: 'timedOut', events: session.events });
158
+ }
159
+ }
160
+ maybeRemoveTimeoutSystem();
161
+ }, TIMEOUT_SYSTEM_PRIORITY, EXPLORER_UI_WAIT_TIMEOUT_SYSTEM);
162
+ }
163
+ async function openExplorerUiAndWait(request, options) {
164
+ const { ui, itemPurchase } = typeof request === 'number' ? { ui: request, itemPurchase: undefined } : request;
165
+ const requestId = nextRequestId++;
166
+ const collect = options?.collect ?? [];
167
+ const collectNames = new Set();
168
+ for (const ch of collect)
169
+ collectNames.add(ch.name);
170
+ const stop = options?.until ? normalizeStop(options.until) : undefined;
171
+ const watched = new Set(collectNames);
172
+ watched.add(explorerUiEvents.name);
173
+ if (stop)
174
+ watched.add(stop.channel.name);
175
+ // Armed before the RPC, because events can land while the RPC is in flight. A listener
176
+ // that is already up is what makes replaying the accumulated set unnecessary.
177
+ arm(explorerUiEvents);
178
+ for (const ch of collect)
179
+ arm(ch);
180
+ if (stop)
181
+ arm(stop.channel);
182
+ let settle;
183
+ let fail;
184
+ const outcome = new Promise((resolve, reject) => {
185
+ settle = resolve;
186
+ fail = reject;
187
+ });
188
+ const session = {
189
+ requestId,
190
+ ui,
191
+ correlationRequired: CONCURRENT_PANELS.includes(ui),
192
+ collect: collectNames,
193
+ watched,
194
+ until: stop ? { channel: stop.channel.name, $case: stop.$case } : undefined,
195
+ events: [],
196
+ timeoutMs: options?.timeoutMs,
197
+ elapsedMs: 0,
198
+ settled: false,
199
+ settle,
200
+ fail
201
+ };
202
+ sessions.set(requestId, session);
203
+ if (session.timeoutMs !== undefined)
204
+ ensureTimeoutSystem();
205
+ try {
206
+ const { openResult } = await openExplorerUiFn({ ui, requestId, itemPurchase });
207
+ // This call opened nothing, so no event carrying this request id is coming.
208
+ if (openResult !== OpenExplorerUiResult.OPENED) {
209
+ settleSession(session, { $case: 'notOpened', openResult });
210
+ }
211
+ }
212
+ catch (error) {
213
+ // Routed through the session rather than rethrown, so that `outcome` is never left
214
+ // pending and unobserved.
215
+ failSession(session, error);
216
+ }
217
+ return outcome;
218
+ }
219
+ // The implementation takes both argument forms and is blind to `collect`. The cast is what
220
+ // gives callers the two overloads that relate them.
221
+ return { openExplorerUiAndWait: openExplorerUiAndWait };
222
+ }
223
+ const helper = /* @__PURE__ */ create({ engine, openExplorerUi, explorerUiEvents: ExplorerUiEvents });
224
+ /**
225
+ * Opens an explorer panel and waits for the session it started. The wait ends when the panel
226
+ * closes. See {@link WaitOptions} to collect events, to stop earlier or to bound the wait.
227
+ *
228
+ * Every lifecycle outcome resolves, see {@link WaitOutcome}. The promise rejects only when an
229
+ * event cannot be attributed to a call at all: an explorer too old to echo `request_id`
230
+ * paired with a panel that can coexist with another one.
231
+ *
232
+ * @public
233
+ */
234
+ export const openExplorerUiAndWait = helper.openExplorerUiAndWait;
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXhwbG9yZXItdWkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE1BQU0sRUFDTiwwQkFBMEIsRUFDMUIsVUFBVSxFQUNWLHNCQUFzQixFQUt2QixNQUFNLFVBQVUsQ0FBQTtBQUNqQixPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxDQUFBO0FBRTNDLGtHQUFrRztBQUNsRyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUE7QUFFdEIsNEZBQTRGO0FBQzVGLDRFQUE0RTtBQUM1RSxNQUFNLGlCQUFpQixHQUEwQixxQ0FBNkIsQ0FBQTtBQW9COUU7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FDckIsSUFBTyxFQUNQLFNBQWlEO0lBRWpELE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUE7QUFDNUIsQ0FBQztBQUVELHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBb0QsZUFBZSxDQUFDLE9BQU8sQ0FDdEcsWUFBWSxFQUNaLHNCQUFzQixDQUN2QixDQUFBO0FBRUQscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBMEQsZUFBZSxDQUFDLE9BQU8sQ0FDeEcsY0FBYyxFQUNkLDBCQUEwQixDQUMzQixDQUFBO0FBZUQsY0FBYztBQUNkLE1BQU0sVUFBVSxPQUFPLENBQTRDLEVBQUssRUFBRSxLQUFRO0lBQ2hGLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFBO0FBQy9CLENBQUM7QUEyREQsa0NBQWtDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLDBCQUEwQixDQUFBO0FBRXpFLDRGQUE0RjtBQUM1RiwrRUFBK0U7QUFDL0UsTUFBTSx1QkFB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QUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtBQUVyRzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBMEIsTUFBTSxDQUFDLHFCQUFxQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZW5naW5lLFxuICBFeHBsb3Jlckl0ZW1QdXJjaGFzZVJlc3VsdCxcbiAgRXhwbG9yZXJVaSxcbiAgRXhwbG9yZXJVaUV2ZW50c1Jlc3VsdCxcbiAgR3Jvd09ubHlWYWx1ZVNldENvbXBvbmVudERlZmluaXRpb24sXG4gIElFbmdpbmUsXG4gIFBCRXhwbG9yZXJJdGVtUHVyY2hhc2VSZXN1bHQsXG4gIFBCRXhwbG9yZXJVaUV2ZW50c1Jlc3VsdFxufSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IG9wZW5FeHBsb3JlclVpLCBPcGVuRXhwbG9yZXJVaVJlc3VsdCB9IGZyb20gJ35zeXN0ZW0vUmVzdHJpY3RlZEFjdGlvbnMnXG5cbmV4cG9ydCB7IEV4cGxvcmVyVWksIE9wZW5FeHBsb3JlclVpUmVzdWx0IH1cblxuLy8gV2hhdCBhbiBleHBsb3JlciB0aGF0IGRvZXMgbm90IGVjaG8gcmVxdWVzdF9pZCwgb3IgYSB1c2VyLWluaXRpYXRlZCBhY3Rpb24sIGxlYXZlcyBvbiB0aGUgd2lyZS5cbmNvbnN0IFVOQ09SUkVMQVRFRCA9IDBcblxuLy8gUGFuZWxzIHRoYXQgY2FuIGJlIG9uIHNjcmVlbiBuZXh0IHRvIGFub3RoZXIgcGFuZWwuIFRoZSBgdWlgIGZpZWxkIGFsb25lIGNhbm5vdCBhdHRyaWJ1dGVcbi8vIHRoZWlyIGV2ZW50cywgc28gYW4gZXZlbnQgb24gb25lIG9mIHRoZXNlIHBhbmVscyBtdXN0IGNhcnJ5IGEgcmVxdWVzdF9pZC5cbmNvbnN0IENPTkNVUlJFTlRfUEFORUxTOiByZWFkb25seSBFeHBsb3JlclVpW10gPSBbRXhwbG9yZXJVaS5FVV9JVEVNX1BVUkNIQVNFXVxuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IHR5cGUgQ29ycmVsYXRlZEV2ZW50ID0ge1xuICB0aW1lc3RhbXA6IG51bWJlclxuICByZXF1ZXN0SWQ6IG51bWJlclxufVxuXG4vKipcbiAqIEEgbmFtZWQgc3RyZWFtIG9mIGV2ZW50cyB0aGF0IHRoaXMgaGVscGVyIGNhbiBjb2xsZWN0IGFuZCBzdG9wIG9uLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBDaGFubmVsPE4gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFQgZXh0ZW5kcyBDb3JyZWxhdGVkRXZlbnQgPSBDb3JyZWxhdGVkRXZlbnQ+ID0ge1xuICByZWFkb25seSBuYW1lOiBOXG4gIHJlYWRvbmx5IGNvbXBvbmVudDogR3Jvd09ubHlWYWx1ZVNldENvbXBvbmVudERlZmluaXRpb248VD5cbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIEFueUNoYW5uZWwgPSBDaGFubmVsPHN0cmluZywgYW55PlxuXG4vKipcbiAqIFdyYXBzIGEgZ3Jvdy1vbmx5IHJlc3VsdCBjb21wb25lbnQgYXMgYSB7QGxpbmsgQ2hhbm5lbH0uIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHNjZW5lLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbm5lbDxOIGV4dGVuZHMgc3RyaW5nLCBUIGV4dGVuZHMgQ29ycmVsYXRlZEV2ZW50PihcbiAgbmFtZTogTixcbiAgY29tcG9uZW50OiBHcm93T25seVZhbHVlU2V0Q29tcG9uZW50RGVmaW5pdGlvbjxUPlxuKTogQ2hhbm5lbDxOLCBUPiB7XG4gIHJldHVybiB7IG5hbWUsIGNvbXBvbmVudCB9XG59XG5cbi8qKiBQYW5lbCBsaWZlY3ljbGUgZXZlbnRzOiBvcGVuZWQgYW5kIGNsb3NlZC4gQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEV4cGxvcmVyVWlFdmVudHM6IENoYW5uZWw8J2V4cGxvcmVyVWknLCBQQkV4cGxvcmVyVWlFdmVudHNSZXN1bHQ+ID0gLyogQF9fUFVSRV9fICovIGNoYW5uZWwoXG4gICdleHBsb3JlclVpJyxcbiAgRXhwbG9yZXJVaUV2ZW50c1Jlc3VsdFxuKVxuXG4vKiogT3V0Y29tZSBvZiBhbiBgRVVfSVRFTV9QVVJDSEFTRWAgZmxvdzogcHVyY2hhc2VkLCBkaXNtaXNzZWQgb3IgZmFpbGVkLiBAcHVibGljICovXG5leHBvcnQgY29uc3QgSXRlbVB1cmNoYXNlOiBDaGFubmVsPCdpdGVtUHVyY2hhc2UnLCBQQkV4cGxvcmVySXRlbVB1cmNoYXNlUmVzdWx0PiA9IC8qIEBfX1BVUkVfXyAqLyBjaGFubmVsKFxuICAnaXRlbVB1cmNoYXNlJyxcbiAgRXhwbG9yZXJJdGVtUHVyY2hhc2VSZXN1bHRcbilcblxuLyoqXG4gKiBUaGUgYCRjYXNlYCBuYW1lcyBvZiBhIGNoYW5uZWwncyBldmVudCB1bmlvbi5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQ2FzZU9mPEMgZXh0ZW5kcyBBbnlDaGFubmVsPiA9XG4gIEMgZXh0ZW5kcyBDaGFubmVsPGFueSwgaW5mZXIgVD4gPyBFeHRyYWN0PFRba2V5b2YgVF0sIHsgJGNhc2U6IHN0cmluZyB9PlsnJGNhc2UnXSA6IG5ldmVyXG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBWYXJpYW50PEMgZXh0ZW5kcyBBbnlDaGFubmVsID0gQW55Q2hhbm5lbCwgSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSB7XG4gIHJlYWRvbmx5IGNoYW5uZWw6IENcbiAgcmVhZG9ubHkgJGNhc2U6IEtcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYW50PEMgZXh0ZW5kcyBBbnlDaGFubmVsLCBLIGV4dGVuZHMgQ2FzZU9mPEM+PihjaDogQywgJGNhc2U6IEspOiBWYXJpYW50PEMsIEs+IHtcbiAgcmV0dXJuIHsgY2hhbm5lbDogY2gsICRjYXNlIH1cbn1cblxuLyoqXG4gKiBXaGF0IGVuZHMgdGhlIHdhaXQgYmVmb3JlIHRoZSBwYW5lbCBjbG9zZXM6IGFueSBldmVudCBvbiBhIGNoYW5uZWwsIG9yIG9uZSBgJGNhc2VgIG9mIGl0LlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBTdG9wQ29uZGl0aW9uID0gQW55Q2hhbm5lbCB8IFZhcmlhbnRcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIENvbGxlY3RlZDxDPiA9IEMgZXh0ZW5kcyBDaGFubmVsPGluZmVyIE4sIGluZmVyIFQ+ID8geyBjaGFubmVsOiBOOyBldmVudDogVCB9IDogbmV2ZXJcblxuLyoqXG4gKiBIb3cgdGhlIHdhaXQgZW5kZWQuXG4gKiAtIGBjbG9zZWRgOiB0aGUgcGFuZWwgdGhpcyBjYWxsIG9wZW5lZCB3YXMgY2xvc2VkLlxuICogLSBgbWF0Y2hlZGA6IGB1bnRpbGAgZmlyZWQgZmlyc3QsIHNvIHRoZSBwYW5lbCBtYXkgc3RpbGwgYmUgb24gc2NyZWVuLlxuICogLSBgbm90T3BlbmVkYDogdGhpcyBjYWxsIGRpZCBub3Qgb3BlbiBhbnl0aGluZy4gYG9wZW5SZXN1bHRgIHNheXMgd2h5LlxuICogLSBgdGltZWRPdXRgOiBgdGltZW91dE1zYCBlbGFwc2VkIGZpcnN0LlxuICpcbiAqIGBldmVudHNgIGFsd2F5cyBob2xkcyBldmVyeXRoaW5nIGNvbGxlY3RlZCwgdGhlIGV2ZW50IHRoYXQgc3RvcHBlZCB0aGUgd2FpdCBpbmNsdWRlZC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgV2FpdE91dGNvbWU8QyBleHRlbmRzIHJlYWRvbmx5IEFueUNoYW5uZWxbXT4gPVxuICB8IHsgJGNhc2U6ICdjbG9zZWQnOyBldmVudHM6IHJlYWRvbmx5IENvbGxlY3RlZDxDW251bWJlcl0+W10gfVxuICB8IHsgJGNhc2U6ICdtYXRjaGVkJzsgZXZlbnRzOiByZWFkb25seSBDb2xsZWN0ZWQ8Q1tudW1iZXJdPltdIH1cbiAgfCB7ICRjYXNlOiAnbm90T3BlbmVkJzsgb3BlblJlc3VsdDogT3BlbkV4cGxvcmVyVWlSZXN1bHQgfVxuICB8IHsgJGNhc2U6ICd0aW1lZE91dCc7IGV2ZW50czogcmVhZG9ubHkgQ29sbGVjdGVkPENbbnVtYmVyXT5bXSB9XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBXYWl0T3B0aW9uczxDIGV4dGVuZHMgcmVhZG9ubHkgQW55Q2hhbm5lbFtdPiA9IHtcbiAgLyoqIENoYW5uZWxzIHdob3NlIGV2ZW50cyBsYW5kIGluIGBldmVudHNgLiBEZWZhdWx0cyB0byBub25lLiAqL1xuICBjb2xsZWN0PzogQ1xuICAvKiogU3RvcHMgdGhlIHdhaXQgZWFybHkuIFRoZSBwYW5lbCBjbG9zaW5nIGFsd2F5cyBzdG9wcyBpdCByZWdhcmRsZXNzLiAqL1xuICB1bnRpbD86IFN0b3BDb25kaXRpb25cbiAgLyoqXG4gICAqIEJvdW5kcyB0aGUgd2FpdCwgaW4gbWlsbGlzZWNvbmRzLiBPbiBleHBpcnkgdGhlIHByb21pc2UgcmVzb2x2ZXMgd2l0aCBgJGNhc2U6ICd0aW1lZE91dCdgLlxuICAgKiBObyBkZWZhdWx0LCBiZWNhdXNlIGEgcGFuZWwgY2FuIHN0YXkgb3BlbiBmb3IgbWludXRlcy4gV2l0aG91dCBpdCwgYW4gZXhwbG9yZXIgdGhhdCBvcGVuc1xuICAgKiBhIHBhbmVsIGFuZCB0aGVuIGVtaXRzIG5vIGBjbG9zZWRgIGxlYXZlcyB0aGUgcHJvbWlzZSBwZW5kaW5nIGZvciB0aGUgc2NlbmUncyB3aG9sZSBsaWZlLlxuICAgKi9cbiAgdGltZW91dE1zPzogbnVtYmVyXG59XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBPcGVuRXhwbG9yZXJVaVJlcXVlc3QgPVxuICB8IHsgdWk6IEV4Y2x1ZGU8RXhwbG9yZXJVaSwgRXhwbG9yZXJVaS5FVV9JVEVNX1BVUkNIQVNFPjsgaXRlbVB1cmNoYXNlPzogdW5kZWZpbmVkIH1cbiAgfCB7IHVpOiBFeHBsb3JlclVpLkVVX0lURU1fUFVSQ0hBU0U7IGl0ZW1QdXJjaGFzZTogeyB1cm46IHN0cmluZyB9IH1cblxuLyoqXG4gKiBTaWduYXR1cmUgb2Yge0BsaW5rIG9wZW5FeHBsb3JlclVpQW5kV2FpdH0uIFRoZSBzZWNvbmQgb3ZlcmxvYWQgdGFrZXMgYSBiYXJlIGB1aWAsIHNvIGFcbiAqIGNvbXB1dGVkIHBhbmVsIHZhbHVlIG5lZWRzIG5vIG5hcnJvd2luZy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuRXhwbG9yZXJVaUFuZFdhaXQge1xuICA8Y29uc3QgQyBleHRlbmRzIHJlYWRvbmx5IEFueUNoYW5uZWxbXSA9IFtdPihcbiAgICByZXF1ZXN0OiBPcGVuRXhwbG9yZXJVaVJlcXVlc3QsXG4gICAgb3B0aW9ucz86IFdhaXRPcHRpb25zPEM+XG4gICk6IFByb21pc2U8V2FpdE91dGNvbWU8Qz4+XG4gICh1aTogRXhjbHVkZTxFeHBsb3JlclVpLCBFeHBsb3JlclVpLkVVX0lURU1fUFVSQ0hBU0U+KTogUHJvbWlzZTxXYWl0T3V0Y29tZTxbXT4+XG59XG5cbi8qKiBAaW50ZXJuYWwgZXhwb3NlZCBmb3IgdGVzdHMgKi9cbmV4cG9ydCBjb25zdCBFWFBMT1JFUl9VSV9XQUlUX1RJTUVPVVRfU1lTVEVNID0gJ2V4cGxvcmVyLXVpLXdhaXQtdGltZW91dCdcblxuLy8gTG93ZXN0IHByaW9yaXR5IHNvcnRzIHRoaXMgc3lzdGVtIGxhc3QsIHNvIHdoZW4gaXQgcmVtb3ZlcyBpdHNlbGYgbWlkLXRpY2sgaXQgc3BsaWNlcyB0aGVcbi8vIGxhc3QgZWxlbWVudCBvZiB0aGUgYXJyYXkgdGhlIGVuZ2luZSBpcyBpdGVyYXRpbmcgYW5kIHNraXBzIG5vIG90aGVyIHN5c3RlbS5cbmNvbnN0IFRJTUVPVVRfU1lTVEVNX1BSSU9SSVRZID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJcblxudHlwZSBPcGVuRXhwbG9yZXJVaUZuID0gKGJvZHk6IHtcbiAgdWk6IEV4cGxvcmVyVWlcbiAgcmVxdWVzdElkPzogbnVtYmVyXG4gIGl0ZW1QdXJjaGFzZT86IHsgdXJuOiBzdHJpbmcgfVxufSkgPT4gUHJvbWlzZTx7IG9wZW5SZXN1bHQ6IE9wZW5FeHBsb3JlclVpUmVzdWx0IH0+XG5cbnR5cGUgQ29sbGVjdGVkRXZlbnQgPSB7IGNoYW5uZWw6IHN0cmluZzsgZXZlbnQ6IENvcnJlbGF0ZWRFdmVudCB9XG5cbnR5cGUgU2Vzc2lvbiA9IHtcbiAgcmVxdWVzdElkOiBudW1iZXJcbiAgdWk6IEV4cGxvcmVyVWlcbiAgY29ycmVsYXRpb25SZXF1aXJlZDogYm9vbGVhblxuICBjb2xsZWN0OiBSZWFkb25seVNldDxzdHJpbmc+XG4gIHdhdGNoZWQ6IFJlYWRvbmx5U2V0PHN0cmluZz5cbiAgdW50aWw6IHsgY2hhbm5lbDogc3RyaW5nOyAkY2FzZTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfCB1bmRlZmluZWRcbiAgZXZlbnRzOiBDb2xsZWN0ZWRFdmVudFtdXG4gIHRpbWVvdXRNczogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGVsYXBzZWRNczogbnVtYmVyXG4gIHNldHRsZWQ6IGJvb2xlYW5cbiAgc2V0dGxlOiAob3V0Y29tZTogV2FpdE91dGNvbWU8bmV2ZXJbXT4pID0+IHZvaWRcbiAgZmFpbDogKGVycm9yOiBFcnJvcikgPT4gdm9pZFxufVxuXG50eXBlIEF0dHJpYnV0aW9uID0gJ3llcycgfCAnbm8nIHwgJ2FtYmlndW91cydcblxuLy8gdHMtcHJvdG8gcmVuZGVycyBhIGBvbmVvZmAgYXMgb25lIHdyYXBwZXIgcHJvcGVydHkgYHsgJGNhc2UsIFskY2FzZV06IHZhbHVlIH1gLiBGaW5kaW5nIHRoYXRcbi8vIHByb3BlcnR5IGJ5IHNoYXBlIGtlZXBzIHRoZSBoZWxwZXIgaW5kZXBlbmRlbnQgb2YgdGhlIG5hbWUgZWFjaCBtZXNzYWdlIGdhdmUgaXQ6IGBldmVudGAgb25cbi8vIG9uZSBtZXNzYWdlLCBgc3RhdHVzYCBvbiBhbm90aGVyLlxuZnVuY3Rpb24gY2FzZU9mKGV2ZW50OiBDb3JyZWxhdGVkRXZlbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhldmVudCkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mICh2YWx1ZSBhcyB7ICRjYXNlPzogdW5rbm93biB9KS4kY2FzZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAodmFsdWUgYXMgeyAkY2FzZTogc3RyaW5nIH0pLiRjYXNlXG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU3RvcChzdG9wOiBTdG9wQ29uZGl0aW9uKTogeyBjaGFubmVsOiBBbnlDaGFubmVsOyAkY2FzZTogc3RyaW5nIHwgdW5kZWZpbmVkIH0ge1xuICByZXR1cm4gJyRjYXNlJyBpbiBzdG9wID8geyBjaGFubmVsOiBzdG9wLmNoYW5uZWwsICRjYXNlOiBzdG9wLiRjYXNlIH0gOiB7IGNoYW5uZWw6IHN0b3AsICRjYXNlOiB1bmRlZmluZWQgfVxufVxuXG4vKiogQGludGVybmFsIHRlc3Qgc2VhbS4gVGhlIHByb2R1Y3Rpb24gaW5zdGFuY2UgaXMge0BsaW5rIG9wZW5FeHBsb3JlclVpQW5kV2FpdH0uICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKGRlcHM6IHtcbiAgZW5naW5lOiBJRW5naW5lXG4gIG9wZW5FeHBsb3JlclVpOiBPcGVuRXhwbG9yZXJVaUZuXG4gIGV4cGxvcmVyVWlFdmVudHM6IENoYW5uZWw8J2V4cGxvcmVyVWknLCBQQkV4cGxvcmVyVWlFdmVudHNSZXN1bHQ+XG59KSB7XG4gIGNvbnN0IHsgZW5naW5lOiBlbmdpbmVJbnN0YW5jZSwgb3BlbkV4cGxvcmVyVWk6IG9wZW5FeHBsb3JlclVpRm4sIGV4cGxvcmVyVWlFdmVudHMgfSA9IGRlcHNcbiAgY29uc3Qgcm9vdCA9IGVuZ2luZUluc3RhbmNlLlJvb3RFbnRpdHlcblxuICBjb25zdCBzZXNzaW9ucyA9IG5ldyBNYXA8bnVtYmVyLCBTZXNzaW9uPigpXG4gIC8vIEtleWVkIGJ5IG5hbWUsIHNvIHR3byB3cmFwcGVycyBhcm91bmQgdGhlIHNhbWUgY29tcG9uZW50IGFybSBvbmUgbGlzdGVuZXIsIG5vdCB0d28uXG4gIGNvbnN0IGFybWVkID0gbmV3IE1hcDxzdHJpbmcsIEdyb3dPbmx5VmFsdWVTZXRDb21wb25lbnREZWZpbml0aW9uPGFueT4+KClcbiAgLy8gU3RhcnRzIGF0IDEgc28gYSBtaW50ZWQgaWQgbmV2ZXIgY29sbGlkZXMgd2l0aCBVTkNPUlJFTEFURUQuXG4gIGxldCBuZXh0UmVxdWVzdElkID0gMVxuICBsZXQgdGltZW91dFN5c3RlbUFkZGVkID0gZmFsc2VcblxuICBmdW5jdGlvbiBhcm0oY2g6IEFueUNoYW5uZWwpIHtcbiAgICBjb25zdCBib3VuZCA9IGFybWVkLmdldChjaC5uYW1lKVxuICAgIGlmIChib3VuZCkge1xuICAgICAgaWYgKGJvdW5kICE9PSBjaC5jb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBvcGVuRXhwbG9yZXJVaUFuZFdhaXQ6IGNoYW5uZWwgbmFtZSAnJHtjaC5uYW1lfScgaXMgYWxyZWFkeSBib3VuZCB0byBhIGRpZmZlcmVudCBjb21wb25lbnQuIGAgK1xuICAgICAgICAgICAgYENoYW5uZWwgbmFtZXMgaWRlbnRpZnkgYSBzdHJlYW0sIHNvIHRoZXkgaGF2ZSB0byBiZSB1bmlxdWUgd2l0aGluIGEgc2NlbmUuYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgYXJtZWQuc2V0KGNoLm5hbWUsIGNoLmNvbXBvbmVudClcbiAgICBjb25zdCBuYW1lID0gY2gubmFtZVxuICAgIC8vIG9uQ2hhbmdlIGhhcyBubyB1bnN1YnNjcmliZSwgc28gb25lIGxpc3RlbmVyIHBlciBjaGFubmVsIGxpdmVzIGZvciB0aGUgZW5naW5lJ3MgbGlmZXRpbWUuXG4gICAgY2guY29tcG9uZW50Lm9uQ2hhbmdlKHJvb3QsICh2YWx1ZTogQ29ycmVsYXRlZEV2ZW50IHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAvLyBgdW5kZWZpbmVkYCBhcnJpdmVzIG9uIERFTEVURV9FTlRJVFkuIE90aGVyd2lzZSBgdmFsdWVgIGlzIG9uZSBhcHBlbmRlZCBlbGVtZW50LFxuICAgICAgLy8gbm90IHRoZSB3aG9sZSBzZXQuXG4gICAgICBpZiAodmFsdWUpIGRlbGl2ZXIobmFtZSwgdmFsdWUpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJpYnV0ZShzZXNzaW9uOiBTZXNzaW9uLCBuYW1lOiBzdHJpbmcsIGV2ZW50OiBDb3JyZWxhdGVkRXZlbnQpOiBBdHRyaWJ1dGlvbiB7XG4gICAgaWYgKGV2ZW50LnJlcXVlc3RJZCA9PT0gc2Vzc2lvbi5yZXF1ZXN0SWQpIHJldHVybiAneWVzJ1xuICAgIGlmIChldmVudC5yZXF1ZXN0SWQgIT09IFVOQ09SUkVMQVRFRCkgcmV0dXJuICdubydcbiAgICAvLyBPbmx5IHRoZSBsaWZlY3ljbGUgY2hhbm5lbCBjYXJyaWVzIGEgc2Vjb25kIGRpc2NyaW1pbmF0b3IsIGB1aWAsIGFuZCBpdCBpZGVudGlmaWVzIGFcbiAgICAvLyBzZXNzaW9uIG9ubHkgd2hpbGUgcGFuZWxzIGNhbm5vdCBjb2V4aXN0LiBBIHNlY29uZCBjYWxsIGZvciB0aGUgc2FtZSBwYW5lbCBpcyBhbnN3ZXJlZFxuICAgIC8vIFdBU19BTFJFQURZX09QRU4sIHNvIGF0IG1vc3Qgb25lIHNlc3Npb24gcGVyIG5vbi1jb25jdXJyZW50IHBhbmVsIGlzIGV2ZXIgbGl2ZS5cbiAgICBpZiAoc2Vzc2lvbi5jb3JyZWxhdGlvblJlcXVpcmVkIHx8IG5hbWUgIT09IGV4cGxvcmVyVWlFdmVudHMubmFtZSkgcmV0dXJuICdhbWJpZ3VvdXMnXG4gICAgcmV0dXJuIChldmVudCBhcyBQQkV4cGxvcmVyVWlFdmVudHNSZXN1bHQpLnVpID09PSBzZXNzaW9uLnVpID8gJ3llcycgOiAnbm8nXG4gIH1cblxuICBmdW5jdGlvbiBkZWxpdmVyKG5hbWU6IHN0cmluZywgZXZlbnQ6IENvcnJlbGF0ZWRFdmVudCkge1xuICAgIC8vIFNldHRsaW5nIGRlbGV0ZXMgZnJvbSBgc2Vzc2lvbnNgIG1pZC1pdGVyYXRpb24sIHdoaWNoIGEgTWFwIHRvbGVyYXRlcy4gTm90aGluZyBhZGRzLlxuICAgIGZvciAoY29uc3Qgc2Vzc2lvbiBvZiBzZXNzaW9ucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKCFzZXNzaW9uLndhdGNoZWQuaGFzKG5hbWUpKSBjb250aW51ZVxuICAgICAgY29uc3QgYXR0cmlidXRpb24gPSBhdHRyaWJ1dGUoc2Vzc2lvbiwgbmFtZSwgZXZlbnQpXG4gICAgICBpZiAoYXR0cmlidXRpb24gPT09ICdubycpIGNvbnRpbnVlXG4gICAgICBpZiAoYXR0cmlidXRpb24gPT09ICdhbWJpZ3VvdXMnKSB7XG4gICAgICAgIGZhaWxTZXNzaW9uKFxuICAgICAgICAgIHNlc3Npb24sXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYG9wZW5FeHBsb3JlclVpQW5kV2FpdDogZ290IGEgJyR7bmFtZX0nIGV2ZW50IHdpdGggbm8gcmVxdWVzdF9pZCwgYW5kIG5vdGhpbmcgZWxzZSBpZGVudGlmaWVzIGAgK1xuICAgICAgICAgICAgICBgdGhlIGNhbGwgaXQgYmVsb25ncyB0by4gVGhpcyBleHBsb3JlciBkb2VzIG5vdCBlY2hvIE9wZW5FeHBsb3JlclVpUmVxdWVzdC5yZXF1ZXN0X2lkLmBcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGFjY2VwdChzZXNzaW9uLCBuYW1lLCBldmVudClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhY2NlcHQoc2Vzc2lvbjogU2Vzc2lvbiwgbmFtZTogc3RyaW5nLCBldmVudDogQ29ycmVsYXRlZEV2ZW50KSB7XG4gICAgaWYgKHNlc3Npb24uY29sbGVjdC5oYXMobmFtZSkpIHNlc3Npb24uZXZlbnRzLnB1c2goeyBjaGFubmVsOiBuYW1lLCBldmVudCB9KVxuXG4gICAgLy8gVGhlIGNsb3NlIGlzIHRlcm1pbmFsIGFuZCB3aW5zIG92ZXIgYHVudGlsYCwgYmVjYXVzZSBgbWF0Y2hlZGAgd291bGQgdGVsbCB0aGUgY2FsbGVyXG4gICAgLy8gdGhhdCB0aGUgcGFuZWwgaXMgc3RpbGwgb24gc2NyZWVuLlxuICAgIGlmIChuYW1lID09PSBleHBsb3JlclVpRXZlbnRzLm5hbWUgJiYgY2FzZU9mKGV2ZW50KSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHNldHRsZVNlc3Npb24oc2Vzc2lvbiwgeyAkY2FzZTogJ2Nsb3NlZCcsIGV2ZW50czogc2Vzc2lvbi5ldmVudHMgYXMgbmV2ZXJbXSB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdW50aWwgPSBzZXNzaW9uLnVudGlsXG4gICAgaWYgKCF1bnRpbCB8fCB1bnRpbC5jaGFubmVsICE9PSBuYW1lKSByZXR1cm5cbiAgICBpZiAodW50aWwuJGNhc2UgPT09IHVuZGVmaW5lZCB8fCB1bnRpbC4kY2FzZSA9PT0gY2FzZU9mKGV2ZW50KSkge1xuICAgICAgc2V0dGxlU2Vzc2lvbihzZXNzaW9uLCB7ICRjYXNlOiAnbWF0Y2hlZCcsIGV2ZW50czogc2Vzc2lvbi5ldmVudHMgYXMgbmV2ZXJbXSB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRsZVNlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbiwgb3V0Y29tZTogV2FpdE91dGNvbWU8bmV2ZXJbXT4pIHtcbiAgICBpZiAoc2Vzc2lvbi5zZXR0bGVkKSByZXR1cm5cbiAgICBzZXNzaW9uLnNldHRsZWQgPSB0cnVlXG4gICAgc2Vzc2lvbnMuZGVsZXRlKHNlc3Npb24ucmVxdWVzdElkKVxuICAgIHNlc3Npb24uc2V0dGxlKG91dGNvbWUpXG4gICAgbWF5YmVSZW1vdmVUaW1lb3V0U3lzdGVtKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZhaWxTZXNzaW9uKHNlc3Npb246IFNlc3Npb24sIGVycm9yOiBFcnJvcikge1xuICAgIGlmIChzZXNzaW9uLnNldHRsZWQpIHJldHVyblxuICAgIHNlc3Npb24uc2V0dGxlZCA9IHRydWVcbiAgICBzZXNzaW9ucy5kZWxldGUoc2Vzc2lvbi5yZXF1ZXN0SWQpXG4gICAgc2Vzc2lvbi5mYWlsKGVycm9yKVxuICAgIG1heWJlUmVtb3ZlVGltZW91dFN5c3RlbSgpXG4gIH1cblxuICBmdW5jdGlvbiBoYXNUaW1lZFNlc3Npb24oKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBzZXNzaW9uIG9mIHNlc3Npb25zLnZhbHVlcygpKSB7XG4gICAgICBpZiAoc2Vzc2lvbi50aW1lb3V0TXMgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBtYXliZVJlbW92ZVRpbWVvdXRTeXN0ZW0oKSB7XG4gICAgaWYgKCF0aW1lb3V0U3lzdGVtQWRkZWQgfHwgaGFzVGltZWRTZXNzaW9uKCkpIHJldHVyblxuICAgIHRpbWVvdXRTeXN0ZW1BZGRlZCA9IGZhbHNlXG4gICAgZW5naW5lSW5zdGFuY2UucmVtb3ZlU3lzdGVtKEVYUExPUkVSX1VJX1dBSVRfVElNRU9VVF9TWVNURU0pXG4gIH1cblxuICBmdW5jdGlvbiBlbnN1cmVUaW1lb3V0U3lzdGVtKCkge1xuICAgIGlmICh0aW1lb3V0U3lzdGVtQWRkZWQpIHJldHVyblxuICAgIHRpbWVvdXRTeXN0ZW1BZGRlZCA9IHRydWVcbiAgICAvLyBUaGUgc2NlbmUgcnVudGltZSBoYXMgbm8gdGltZXJzLCBzbyBlbGFwc2VkIHRpbWUgaXMgYWNjdW11bGF0ZWQgZnJvbSB0aGUgZW5naW5lJ3MgZHQuXG4gICAgZW5naW5lSW5zdGFuY2UuYWRkU3lzdGVtKFxuICAgICAgKGR0OiBudW1iZXIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBzZXNzaW9uIG9mIHNlc3Npb25zLnZhbHVlcygpKSB7XG4gICAgICAgICAgaWYgKHNlc3Npb24udGltZW91dE1zID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG4gICAgICAgICAgc2Vzc2lvbi5lbGFwc2VkTXMgKz0gZHQgKiAxMDAwXG4gICAgICAgICAgaWYgKHNlc3Npb24uZWxhcHNlZE1zID49IHNlc3Npb24udGltZW91dE1zKSB7XG4gICAgICAgICAgICBzZXR0bGVTZXNzaW9uKHNlc3Npb24sIHsgJGNhc2U6ICd0aW1lZE91dCcsIGV2ZW50czogc2Vzc2lvbi5ldmVudHMgYXMgbmV2ZXJbXSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtYXliZVJlbW92ZVRpbWVvdXRTeXN0ZW0oKVxuICAgICAgfSxcbiAgICAgIFRJTUVPVVRfU1lTVEVNX1BSSU9SSVRZLFxuICAgICAgRVhQTE9SRVJfVUlfV0FJVF9USU1FT1VUX1NZU1RFTVxuICAgIClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW5FeHBsb3JlclVpQW5kV2FpdChcbiAgICByZXF1ZXN0OiBPcGVuRXhwbG9yZXJVaVJlcXVlc3QgfCBFeGNsdWRlPEV4cGxvcmVyVWksIEV4cGxvcmVyVWkuRVVfSVRFTV9QVVJDSEFTRT4sXG4gICAgb3B0aW9ucz86IFdhaXRPcHRpb25zPHJlYWRvbmx5IEFueUNoYW5uZWxbXT5cbiAgKTogUHJvbWlzZTxXYWl0T3V0Y29tZTxuZXZlcltdPj4ge1xuICAgIGNvbnN0IHsgdWksIGl0ZW1QdXJjaGFzZSB9ID0gdHlwZW9mIHJlcXVlc3QgPT09ICdudW1iZXInID8geyB1aTogcmVxdWVzdCwgaXRlbVB1cmNoYXNlOiB1bmRlZmluZWQgfSA6IHJlcXVlc3RcbiAgICBjb25zdCByZXF1ZXN0SWQgPSBuZXh0UmVxdWVzdElkKytcblxuICAgIGNvbnN0IGNvbGxlY3QgPSBvcHRpb25zPy5jb2xsZWN0ID8/IFtdXG4gICAgY29uc3QgY29sbGVjdE5hbWVzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgICBmb3IgKGNvbnN0IGNoIG9mIGNvbGxlY3QpIGNvbGxlY3ROYW1lcy5hZGQoY2gubmFtZSlcblxuICAgIGNvbnN0IHN0b3AgPSBvcHRpb25zPy51bnRpbCA/IG5vcm1hbGl6ZVN0b3Aob3B0aW9ucy51bnRpbCkgOiB1bmRlZmluZWRcbiAgICBjb25zdCB3YXRjaGVkID0gbmV3IFNldDxzdHJpbmc+KGNvbGxlY3ROYW1lcylcbiAgICB3YXRjaGVkLmFkZChleHBsb3JlclVpRXZlbnRzLm5hbWUpXG4gICAgaWYgKHN0b3ApIHdhdGNoZWQuYWRkKHN0b3AuY2hhbm5lbC5uYW1lKVxuXG4gICAgLy8gQXJtZWQgYmVmb3JlIHRoZSBSUEMsIGJlY2F1c2UgZXZlbnRzIGNhbiBsYW5kIHdoaWxlIHRoZSBSUEMgaXMgaW4gZmxpZ2h0LiBBIGxpc3RlbmVyXG4gICAgLy8gdGhhdCBpcyBhbHJlYWR5IHVwIGlzIHdoYXQgbWFrZXMgcmVwbGF5aW5nIHRoZSBhY2N1bXVsYXRlZCBzZXQgdW5uZWNlc3NhcnkuXG4gICAgYXJtKGV4cGxvcmVyVWlFdmVudHMpXG4gICAgZm9yIChjb25zdCBjaCBvZiBjb2xsZWN0KSBhcm0oY2gpXG4gICAgaWYgKHN0b3ApIGFybShzdG9wLmNoYW5uZWwpXG5cbiAgICBsZXQgc2V0dGxlITogKG91dGNvbWU6IFdhaXRPdXRjb21lPG5ldmVyW10+KSA9PiB2b2lkXG4gICAgbGV0IGZhaWwhOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkXG4gICAgY29uc3Qgb3V0Y29tZSA9IG5ldyBQcm9taXNlPFdhaXRPdXRjb21lPG5ldmVyW10+PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXR0bGUgPSByZXNvbHZlXG4gICAgICBmYWlsID0gcmVqZWN0XG4gICAgfSlcblxuICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb24gPSB7XG4gICAgICByZXF1ZXN0SWQsXG4gICAgICB1aSxcbiAgICAgIGNvcnJlbGF0aW9uUmVxdWlyZWQ6IENPTkNVUlJFTlRfUEFORUxTLmluY2x1ZGVzKHVpKSxcbiAgICAgIGNvbGxlY3Q6IGNvbGxlY3ROYW1lcyxcbiAgICAgIHdhdGNoZWQsXG4gICAgICB1bnRpbDogc3RvcCA/IHsgY2hhbm5lbDogc3RvcC5jaGFubmVsLm5hbWUsICRjYXNlOiBzdG9wLiRjYXNlIH0gOiB1bmRlZmluZWQsXG4gICAgICBldmVudHM6IFtdLFxuICAgICAgdGltZW91dE1zOiBvcHRpb25zPy50aW1lb3V0TXMsXG4gICAgICBlbGFwc2VkTXM6IDAsXG4gICAgICBzZXR0bGVkOiBmYWxzZSxcbiAgICAgIHNldHRsZSxcbiAgICAgIGZhaWxcbiAgICB9XG4gICAgc2Vzc2lvbnMuc2V0KHJlcXVlc3RJZCwgc2Vzc2lvbilcbiAgICBpZiAoc2Vzc2lvbi50aW1lb3V0TXMgIT09IHVuZGVmaW5lZCkgZW5zdXJlVGltZW91dFN5c3RlbSgpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBvcGVuUmVzdWx0IH0gPSBhd2FpdCBvcGVuRXhwbG9yZXJVaUZuKHsgdWksIHJlcXVlc3RJZCwgaXRlbVB1cmNoYXNlIH0pXG4gICAgICAvLyBUaGlzIGNhbGwgb3BlbmVkIG5vdGhpbmcsIHNvIG5vIGV2ZW50IGNhcnJ5aW5nIHRoaXMgcmVxdWVzdCBpZCBpcyBjb21pbmcuXG4gICAgICBpZiAob3BlblJlc3VsdCAhPT0gT3BlbkV4cGxvcmVyVWlSZXN1bHQuT1BFTkVEKSB7XG4gICAgICAgIHNldHRsZVNlc3Npb24oc2Vzc2lvbiwgeyAkY2FzZTogJ25vdE9wZW5lZCcsIG9wZW5SZXN1bHQgfSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gUm91dGVkIHRocm91Z2ggdGhlIHNlc3Npb24gcmF0aGVyIHRoYW4gcmV0aHJvd24sIHNvIHRoYXQgYG91dGNvbWVgIGlzIG5ldmVyIGxlZnRcbiAgICAgIC8vIHBlbmRpbmcgYW5kIHVub2JzZXJ2ZWQuXG4gICAgICBmYWlsU2Vzc2lvbihzZXNzaW9uLCBlcnJvciBhcyBFcnJvcilcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0Y29tZVxuICB9XG5cbiAgLy8gVGhlIGltcGxlbWVudGF0aW9uIHRha2VzIGJvdGggYXJndW1lbnQgZm9ybXMgYW5kIGlzIGJsaW5kIHRvIGBjb2xsZWN0YC4gVGhlIGNhc3QgaXMgd2hhdFxuICAvLyBnaXZlcyBjYWxsZXJzIHRoZSB0d28gb3ZlcmxvYWRzIHRoYXQgcmVsYXRlIHRoZW0uXG4gIHJldHVybiB7IG9wZW5FeHBsb3JlclVpQW5kV2FpdDogb3BlbkV4cGxvcmVyVWlBbmRXYWl0IGFzIE9wZW5FeHBsb3JlclVpQW5kV2FpdCB9XG59XG5cbmNvbnN0IGhlbHBlciA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGUoeyBlbmdpbmUsIG9wZW5FeHBsb3JlclVpLCBleHBsb3JlclVpRXZlbnRzOiBFeHBsb3JlclVpRXZlbnRzIH0pXG5cbi8qKlxuICogT3BlbnMgYW4gZXhwbG9yZXIgcGFuZWwgYW5kIHdhaXRzIGZvciB0aGUgc2Vzc2lvbiBpdCBzdGFydGVkLiBUaGUgd2FpdCBlbmRzIHdoZW4gdGhlIHBhbmVsXG4gKiBjbG9zZXMuIFNlZSB7QGxpbmsgV2FpdE9wdGlvbnN9IHRvIGNvbGxlY3QgZXZlbnRzLCB0byBzdG9wIGVhcmxpZXIgb3IgdG8gYm91bmQgdGhlIHdhaXQuXG4gKlxuICogRXZlcnkgbGlmZWN5Y2xlIG91dGNvbWUgcmVzb2x2ZXMsIHNlZSB7QGxpbmsgV2FpdE91dGNvbWV9LiBUaGUgcHJvbWlzZSByZWplY3RzIG9ubHkgd2hlbiBhblxuICogZXZlbnQgY2Fubm90IGJlIGF0dHJpYnV0ZWQgdG8gYSBjYWxsIGF0IGFsbDogYW4gZXhwbG9yZXIgdG9vIG9sZCB0byBlY2hvIGByZXF1ZXN0X2lkYFxuICogcGFpcmVkIHdpdGggYSBwYW5lbCB0aGF0IGNhbiBjb2V4aXN0IHdpdGggYW5vdGhlciBvbmUuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgb3BlbkV4cGxvcmVyVWlBbmRXYWl0OiBPcGVuRXhwbG9yZXJVaUFuZFdhaXQgPSBoZWxwZXIub3BlbkV4cGxvcmVyVWlBbmRXYWl0XG4iXX0=
@@ -33,11 +33,8 @@ export function createRendererTransport(engineApi) {
33
33
  }
34
34
  return !!message;
35
35
  },
36
- type: 'renderer',
37
- // The renderer/host is the authority for reserved-range entities (avatars,
38
- // root/player/camera): it is the only transport allowed to mutate or delete them.
39
- allowReservedEntities: true
36
+ type: 'renderer'
40
37
  };
41
38
  return rendererTransport;
42
39
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXJUcmFuc3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJuYWwvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQTtBQU9oRixNQUFNLFVBQVUsdUJBQXVCLENBQUMsU0FBZ0M7SUFDdEUsS0FBSyxVQUFVLGNBQWMsQ0FBQyxPQUFtQjtRQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQTtRQUNGLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckQsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQy9CLEtBQUssTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtvQkFDckMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2lCQUN2QzthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBYztRQUNuQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDaEIsSUFBSTtnQkFDRixNQUFNLGNBQWMsQ0FBQyxPQUFxQixDQUFDLENBQUE7YUFDNUM7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCx5Q0FBeUM7Z0JBQ3pDLHNDQUFzQztnQkFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDcEIsUUFBUSxDQUFBO2FBQ1Q7UUFDSCxDQUFDO1FBQ0QsTUFBTSxDQUFDLE9BQXlCO1lBQzlCLGtEQUFrRDtZQUNsRDtZQUNFLDhDQUE4QztZQUM3QyxPQUFlLENBQUMsV0FBVyxHQUFHLG9CQUFvQixFQUNuRDtnQkFDQSxPQUFPLEtBQUssQ0FBQTthQUNiO1lBQ0QsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFBO1FBQ2xCLENBQUM7UUFDRCxJQUFJLEVBQUUsVUFBVTtRQUNoQiwyRUFBMkU7UUFDM0Usa0ZBQWtGO1FBQ2xGLHFCQUFxQixFQUFFLElBQUk7S0FDNUIsQ0FBQTtJQUVELE9BQU8saUJBQWlCLENBQUE7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zcG9ydCwgVHJhbnNwb3J0TWVzc2FnZSB9IGZyb20gJ0BkY2wvZWNzJ1xuaW1wb3J0IHsgTUFYX1NUQVRJQ19DT01QT05FTlQgfSBmcm9tICdAZGNsL2Vjcy9kaXN0L2NvbXBvbmVudHMvY29tcG9uZW50LW51bWJlcidcbmltcG9ydCB0eXBlIHsgQ3JkdFNlbmRUb1JlbmRlcmVyUmVxdWVzdCwgQ3JkdFNlbmRUb1Jlc3BvbnNlIH0gZnJvbSAnfnN5c3RlbS9FbmdpbmVBcGknXG5cbmV4cG9ydCB0eXBlIEVuZ2luZUFwaUZvclRyYW5zcG9ydCA9IHtcbiAgY3JkdFNlbmRUb1JlbmRlcmVyKGJvZHk6IENyZHRTZW5kVG9SZW5kZXJlclJlcXVlc3QpOiBQcm9taXNlPENyZHRTZW5kVG9SZXNwb25zZT5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0KGVuZ2luZUFwaTogRW5naW5lQXBpRm9yVHJhbnNwb3J0KTogVHJhbnNwb3J0IHtcbiAgYXN5bmMgZnVuY3Rpb24gc2VuZFRvUmVuZGVyZXIobWVzc2FnZTogVWludDhBcnJheSkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZW5naW5lQXBpLmNyZHRTZW5kVG9SZW5kZXJlcih7XG4gICAgICBkYXRhOiBuZXcgVWludDhBcnJheShtZXNzYWdlKVxuICAgIH0pXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGgpIHtcbiAgICAgIGlmIChyZW5kZXJlclRyYW5zcG9ydC5vbm1lc3NhZ2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBieXRlQXJyYXkgb2YgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIHJlbmRlcmVyVHJhbnNwb3J0Lm9ubWVzc2FnZShieXRlQXJyYXkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZW5kZXJlclRyYW5zcG9ydDogVHJhbnNwb3J0ID0ge1xuICAgIGFzeW5jIHNlbmQobWVzc2FnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc2VuZFRvUmVuZGVyZXIobWVzc2FnZSBhcyBVaW50OEFycmF5KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgY29uc29sZS5lcnJvciBvZiB0aGUgc2NlbmVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgZGVidWdnZXJcbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbHRlcihtZXNzYWdlOiBUcmFuc3BvcnRNZXNzYWdlKSB7XG4gICAgICAvLyBPbmx5IHNlbmQgcmVuZGVyZXIgY29tcG9uZW50cyAoUHJvdG8gR2VuZXJhdGVkKVxuICAgICAgaWYgKFxuICAgICAgICAvLyBmaWx0ZXIgb3V0IG1lc3NhZ2VzIGZvciBub24tY29yZSBjb21wb25lbnRzXG4gICAgICAgIChtZXNzYWdlIGFzIGFueSkuY29tcG9uZW50SWQgPiBNQVhfU1RBVElDX0NPTVBPTkVOVFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgcmV0dXJuICEhbWVzc2FnZVxuICAgIH0sXG4gICAgdHlwZTogJ3JlbmRlcmVyJyxcbiAgICAvLyBUaGUgcmVuZGVyZXIvaG9zdCBpcyB0aGUgYXV0aG9yaXR5IGZvciByZXNlcnZlZC1yYW5nZSBlbnRpdGllcyAoYXZhdGFycyxcbiAgICAvLyByb290L3BsYXllci9jYW1lcmEpOiBpdCBpcyB0aGUgb25seSB0cmFuc3BvcnQgYWxsb3dlZCB0byBtdXRhdGUgb3IgZGVsZXRlIHRoZW0uXG4gICAgYWxsb3dSZXNlcnZlZEVudGl0aWVzOiB0cnVlXG4gIH1cblxuICByZXR1cm4gcmVuZGVyZXJUcmFuc3BvcnRcbn1cbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXJUcmFuc3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJuYWwvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQTtBQU9oRixNQUFNLFVBQVUsdUJBQXVCLENBQUMsU0FBZ0M7SUFDdEUsS0FBSyxVQUFVLGNBQWMsQ0FBQyxPQUFtQjtRQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQTtRQUNGLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckQsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQy9CLEtBQUssTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtvQkFDckMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2lCQUN2QzthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBYztRQUNuQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDaEIsSUFBSTtnQkFDRixNQUFNLGNBQWMsQ0FBQyxPQUFxQixDQUFDLENBQUE7YUFDNUM7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCx5Q0FBeUM7Z0JBQ3pDLHNDQUFzQztnQkFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDcEIsUUFBUSxDQUFBO2FBQ1Q7UUFDSCxDQUFDO1FBQ0QsTUFBTSxDQUFDLE9BQXlCO1lBQzlCLGtEQUFrRDtZQUNsRDtZQUNFLDhDQUE4QztZQUM3QyxPQUFlLENBQUMsV0FBVyxHQUFHLG9CQUFvQixFQUNuRDtnQkFDQSxPQUFPLEtBQUssQ0FBQTthQUNiO1lBQ0QsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFBO1FBQ2xCLENBQUM7UUFDRCxJQUFJLEVBQUUsVUFBVTtLQUNqQixDQUFBO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQTtBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNwb3J0LCBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnQGRjbC9lY3MnXG5pbXBvcnQgeyBNQVhfU1RBVElDX0NPTVBPTkVOVCB9IGZyb20gJ0BkY2wvZWNzL2Rpc3QvY29tcG9uZW50cy9jb21wb25lbnQtbnVtYmVyJ1xuaW1wb3J0IHR5cGUgeyBDcmR0U2VuZFRvUmVuZGVyZXJSZXF1ZXN0LCBDcmR0U2VuZFRvUmVzcG9uc2UgfSBmcm9tICd+c3lzdGVtL0VuZ2luZUFwaSdcblxuZXhwb3J0IHR5cGUgRW5naW5lQXBpRm9yVHJhbnNwb3J0ID0ge1xuICBjcmR0U2VuZFRvUmVuZGVyZXIoYm9keTogQ3JkdFNlbmRUb1JlbmRlcmVyUmVxdWVzdCk6IFByb21pc2U8Q3JkdFNlbmRUb1Jlc3BvbnNlPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQoZW5naW5lQXBpOiBFbmdpbmVBcGlGb3JUcmFuc3BvcnQpOiBUcmFuc3BvcnQge1xuICBhc3luYyBmdW5jdGlvbiBzZW5kVG9SZW5kZXJlcihtZXNzYWdlOiBVaW50OEFycmF5KSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBlbmdpbmVBcGkuY3JkdFNlbmRUb1JlbmRlcmVyKHtcbiAgICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KG1lc3NhZ2UpXG4gICAgfSlcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCkge1xuICAgICAgaWYgKHJlbmRlcmVyVHJhbnNwb3J0Lm9ubWVzc2FnZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGJ5dGVBcnJheSBvZiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgcmVuZGVyZXJUcmFuc3BvcnQub25tZXNzYWdlKGJ5dGVBcnJheSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlbmRlcmVyVHJhbnNwb3J0OiBUcmFuc3BvcnQgPSB7XG4gICAgYXN5bmMgc2VuZChtZXNzYWdlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZW5kVG9SZW5kZXJlcihtZXNzYWdlIGFzIFVpbnQ4QXJyYXkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSBjb25zb2xlLmVycm9yIG9mIHRoZSBzY2VuZVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBkZWJ1Z2dlclxuICAgICAgfVxuICAgIH0sXG4gICAgZmlsdGVyKG1lc3NhZ2U6IFRyYW5zcG9ydE1lc3NhZ2UpIHtcbiAgICAgIC8vIE9ubHkgc2VuZCByZW5kZXJlciBjb21wb25lbnRzIChQcm90byBHZW5lcmF0ZWQpXG4gICAgICBpZiAoXG4gICAgICAgIC8vIGZpbHRlciBvdXQgbWVzc2FnZXMgZm9yIG5vbi1jb3JlIGNvbXBvbmVudHNcbiAgICAgICAgKG1lc3NhZ2UgYXMgYW55KS5jb21wb25lbnRJZCA+IE1BWF9TVEFUSUNfQ09NUE9ORU5UXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICByZXR1cm4gISFtZXNzYWdlXG4gICAgfSxcbiAgICB0eXBlOiAncmVuZGVyZXInXG4gIH1cblxuICByZXR1cm4gcmVuZGVyZXJUcmFuc3BvcnRcbn1cbiJdfQ==
@@ -1,10 +1,7 @@
1
1
  export declare enum CommsMessage {
2
- CRDT = 7,
3
- REQ_CRDT_STATE = 8,
4
- RES_CRDT_STATE = 9,
5
- CRDT_SERVER = 4,
6
- CRDT_AUTHORITATIVE = 5,
7
- CUSTOM_EVENT = 6
2
+ CRDT = 1,
3
+ REQ_CRDT_STATE = 2,
4
+ RES_CRDT_STATE = 3
8
5
  }
9
6
  export declare function BinaryMessageBus<T extends CommsMessage>(send: (message: Uint8Array, toPeerAddress?: string[]) => void): {
10
7
  on: <K extends T>(message: K, callback: (value: Uint8Array, sender: string) => void) => void;
@@ -1,12 +1,9 @@
1
1
  import { ReadWriteByteBuffer } from '@dcl/ecs/dist/serialization/ByteBuffer';
2
2
  export var CommsMessage;
3
3
  (function (CommsMessage) {
4
- CommsMessage[CommsMessage["CRDT"] = 7] = "CRDT";
5
- CommsMessage[CommsMessage["REQ_CRDT_STATE"] = 8] = "REQ_CRDT_STATE";
6
- CommsMessage[CommsMessage["RES_CRDT_STATE"] = 9] = "RES_CRDT_STATE";
7
- CommsMessage[CommsMessage["CRDT_SERVER"] = 4] = "CRDT_SERVER";
8
- CommsMessage[CommsMessage["CRDT_AUTHORITATIVE"] = 5] = "CRDT_AUTHORITATIVE";
9
- CommsMessage[CommsMessage["CUSTOM_EVENT"] = 6] = "CUSTOM_EVENT";
4
+ CommsMessage[CommsMessage["CRDT"] = 1] = "CRDT";
5
+ CommsMessage[CommsMessage["REQ_CRDT_STATE"] = 2] = "REQ_CRDT_STATE";
6
+ CommsMessage[CommsMessage["RES_CRDT_STATE"] = 3] = "RES_CRDT_STATE";
10
7
  })(CommsMessage || (CommsMessage = {}));
11
8
  export function BinaryMessageBus(send) {
12
9
  const mapping = new Map();
@@ -20,9 +17,8 @@ export function BinaryMessageBus(send) {
20
17
  __processMessages: (messages) => {
21
18
  for (const message of messages) {
22
19
  const commsMsg = decodeCommsMessage(message);
23
- if (!commsMsg) {
20
+ if (!commsMsg)
24
21
  continue;
25
- }
26
22
  const { sender, messageType, data } = commsMsg;
27
23
  const fn = mapping.get(messageType);
28
24
  if (fn)
@@ -69,4 +65,4 @@ export function encodeString(s) {
69
65
  buffer.writeUtf8String(s);
70
66
  return buffer.readBuffer();
71
67
  }
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LW1lc3NhZ2UtYnVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25ldHdvcmsvYmluYXJ5LW1lc3NhZ2UtYnVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBRTVFLE1BQU0sQ0FBTixJQUFZLFlBT1g7QUFQRCxXQUFZLFlBQVk7SUFDdEIsK0NBQVEsQ0FBQTtJQUNSLG1FQUFrQixDQUFBO0lBQ2xCLG1FQUFrQixDQUFBO0lBQ2xCLDZEQUFlLENBQUE7SUFDZiwyRUFBc0IsQ0FBQTtJQUN0QiwrREFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBUFcsWUFBWSxLQUFaLFlBQVksUUFPdkI7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLElBQTZEO0lBRTdELE1BQU0sT0FBTyxHQUF3RCxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzlFLE9BQU87UUFDTCxFQUFFLEVBQUUsQ0FBYyxPQUFVLEVBQUUsUUFBcUQsRUFBRSxFQUFFO1lBQ3JGLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBYyxPQUFVLEVBQUUsS0FBaUIsRUFBRSxhQUF3QixFQUFFLEVBQUU7WUFDN0UsSUFBSSxDQUFDLGlCQUFpQixDQUFJLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUMzRCxDQUFDO1FBQ0QsaUJBQWlCLEVBQUUsQ0FBQyxRQUFzQixFQUFFLEVBQUU7WUFDNUMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7Z0JBQzlCLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFJLE9BQU8sQ0FBQyxDQUFBO2dCQUMvQyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNiLFNBQVE7aUJBQ1Q7Z0JBQ0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFBO2dCQUM5QyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUNuQyxJQUFJLEVBQUU7b0JBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTthQUN6QjtRQUNILENBQUM7S0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBeUIsV0FBYyxFQUFFLE9BQW1CO0lBQzNGLE1BQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDbEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7SUFDdEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDbkIsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxJQUFnQjtJQUVoQixJQUFJO1FBQ0YsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQ2QsTUFBTSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDMUMsTUFBTSxJQUFJLENBQUMsQ0FBQTtRQUNYLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMvRCxNQUFNLElBQUksWUFBWSxDQUFBO1FBQ3RCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFNLENBQUE7UUFDOUMsTUFBTSxJQUFJLENBQUMsQ0FBQTtRQUNYLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFbEMsT0FBTztZQUNMLE1BQU07WUFDTixXQUFXO1lBQ1gsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFBO0tBQ0Y7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUE7S0FDMUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFnQjtJQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUE7SUFDeEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDOUIsT0FBTyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUE7QUFDaEMsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBUztJQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUE7SUFDeEMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN6QixPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQTtBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhZFdyaXRlQnl0ZUJ1ZmZlciB9IGZyb20gJ0BkY2wvZWNzL2Rpc3Qvc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuXG5leHBvcnQgZW51bSBDb21tc01lc3NhZ2Uge1xuICBDUkRUID0gNyxcbiAgUkVRX0NSRFRfU1RBVEUgPSA4LFxuICBSRVNfQ1JEVF9TVEFURSA9IDksXG4gIENSRFRfU0VSVkVSID0gNCxcbiAgQ1JEVF9BVVRIT1JJVEFUSVZFID0gNSxcbiAgQ1VTVE9NX0VWRU5UID0gNlxufVxuXG5leHBvcnQgZnVuY3Rpb24gQmluYXJ5TWVzc2FnZUJ1czxUIGV4dGVuZHMgQ29tbXNNZXNzYWdlPihcbiAgc2VuZDogKG1lc3NhZ2U6IFVpbnQ4QXJyYXksIHRvUGVlckFkZHJlc3M/OiBzdHJpbmdbXSkgPT4gdm9pZFxuKSB7XG4gIGNvbnN0IG1hcHBpbmc6IE1hcDxULCAodmFsdWU6IFVpbnQ4QXJyYXksIHNlbmRlcjogc3RyaW5nKSA9PiB2b2lkPiA9IG5ldyBNYXAoKVxuICByZXR1cm4ge1xuICAgIG9uOiA8SyBleHRlbmRzIFQ+KG1lc3NhZ2U6IEssIGNhbGxiYWNrOiAodmFsdWU6IFVpbnQ4QXJyYXksIHNlbmRlcjogc3RyaW5nKSA9PiB2b2lkKSA9PiB7XG4gICAgICBtYXBwaW5nLnNldChtZXNzYWdlLCBjYWxsYmFjaylcbiAgICB9LFxuICAgIGVtaXQ6IDxLIGV4dGVuZHMgVD4obWVzc2FnZTogSywgdmFsdWU6IFVpbnQ4QXJyYXksIHRvUGVlckFkZHJlc3M/OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgc2VuZChjcmFmdENvbW1zTWVzc2FnZTxUPihtZXNzYWdlLCB2YWx1ZSksIHRvUGVlckFkZHJlc3MpXG4gICAgfSxcbiAgICBfX3Byb2Nlc3NNZXNzYWdlczogKG1lc3NhZ2VzOiBVaW50OEFycmF5W10pID0+IHtcbiAgICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgICBjb25zdCBjb21tc01zZyA9IGRlY29kZUNvbW1zTWVzc2FnZTxUPihtZXNzYWdlKVxuICAgICAgICBpZiAoIWNvbW1zTXNnKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNlbmRlciwgbWVzc2FnZVR5cGUsIGRhdGEgfSA9IGNvbW1zTXNnXG4gICAgICAgIGNvbnN0IGZuID0gbWFwcGluZy5nZXQobWVzc2FnZVR5cGUpXG4gICAgICAgIGlmIChmbikgZm4oZGF0YSwgc2VuZGVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JhZnRDb21tc01lc3NhZ2U8VCBleHRlbmRzIENvbW1zTWVzc2FnZT4obWVzc2FnZVR5cGU6IFQsIHBheWxvYWQ6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHtcbiAgY29uc3QgbXNnID0gbmV3IFVpbnQ4QXJyYXkocGF5bG9hZC5ieXRlTGVuZ3RoICsgMSlcbiAgbXNnLnNldChbbWVzc2FnZVR5cGVdKVxuICBtc2cuc2V0KHBheWxvYWQsIDEpXG4gIHJldHVybiBtc2dcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUNvbW1zTWVzc2FnZTxUIGV4dGVuZHMgQ29tbXNNZXNzYWdlPihcbiAgZGF0YTogVWludDhBcnJheVxuKTogeyBzZW5kZXI6IHN0cmluZzsgbWVzc2FnZVR5cGU6IFQ7IGRhdGE6IFVpbnQ4QXJyYXkgfSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgbGV0IG9mZnNldCA9IDBcbiAgICBjb25zdCByID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSlcbiAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KHIuYnVmZmVyKVxuICAgIGNvbnN0IHNlbmRlckxlbmd0aCA9IHZpZXcuZ2V0VWludDgob2Zmc2V0KVxuICAgIG9mZnNldCArPSAxXG4gICAgY29uc3Qgc2VuZGVyID0gZGVjb2RlU3RyaW5nKGRhdGEuc3ViYXJyYXkoMSwgc2VuZGVyTGVuZ3RoICsgMSkpXG4gICAgb2Zmc2V0ICs9IHNlbmRlckxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2VUeXBlID0gdmlldy5nZXRVaW50OChvZmZzZXQpIGFzIFRcbiAgICBvZmZzZXQgKz0gMVxuICAgIGNvbnN0IG1lc3NhZ2UgPSByLnN1YmFycmF5KG9mZnNldClcblxuICAgIHJldHVybiB7XG4gICAgICBzZW5kZXIsXG4gICAgICBtZXNzYWdlVHlwZSxcbiAgICAgIGRhdGE6IG1lc3NhZ2VcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIENvbW1zIG1lc3NhZ2UnLCBlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVTdHJpbmcoZGF0YTogVWludDhBcnJheSk6IHN0cmluZyB7XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBSZWFkV3JpdGVCeXRlQnVmZmVyKClcbiAgYnVmZmVyLndyaXRlQnVmZmVyKGRhdGEsIHRydWUpXG4gIHJldHVybiBidWZmZXIucmVhZFV0ZjhTdHJpbmcoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU3RyaW5nKHM6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICBjb25zdCBidWZmZXIgPSBuZXcgUmVhZFdyaXRlQnl0ZUJ1ZmZlcigpXG4gIGJ1ZmZlci53cml0ZVV0ZjhTdHJpbmcocylcbiAgcmV0dXJuIGJ1ZmZlci5yZWFkQnVmZmVyKClcbn1cbiJdfQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LW1lc3NhZ2UtYnVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25ldHdvcmsvYmluYXJ5LW1lc3NhZ2UtYnVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBRTVFLE1BQU0sQ0FBTixJQUFZLFlBSVg7QUFKRCxXQUFZLFlBQVk7SUFDdEIsK0NBQVEsQ0FBQTtJQUNSLG1FQUFrQixDQUFBO0lBQ2xCLG1FQUFrQixDQUFBO0FBQ3BCLENBQUMsRUFKVyxZQUFZLEtBQVosWUFBWSxRQUl2QjtBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsSUFBNkQ7SUFFN0QsTUFBTSxPQUFPLEdBQXdELElBQUksR0FBRyxFQUFFLENBQUE7SUFDOUUsT0FBTztRQUNMLEVBQUUsRUFBRSxDQUFjLE9BQVUsRUFBRSxRQUFxRCxFQUFFLEVBQUU7WUFDckYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDaEMsQ0FBQztRQUNELElBQUksRUFBRSxDQUFjLE9BQVUsRUFBRSxLQUFpQixFQUFFLGFBQXdCLEVBQUUsRUFBRTtZQUM3RSxJQUFJLENBQUMsaUJBQWlCLENBQUksT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQzNELENBQUM7UUFDRCxpQkFBaUIsRUFBRSxDQUFDLFFBQXNCLEVBQUUsRUFBRTtZQUM1QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRTtnQkFDOUIsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUksT0FBTyxDQUFDLENBQUE7Z0JBQy9DLElBQUksQ0FBQyxRQUFRO29CQUFFLFNBQVE7Z0JBQ3ZCLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQTtnQkFDOUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDbkMsSUFBSSxFQUFFO29CQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7YUFDekI7UUFDSCxDQUFDO0tBQ0YsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQXlCLFdBQWMsRUFBRSxPQUFtQjtJQUMzRixNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ2xELEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO0lBQ3RCLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ25CLE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsSUFBZ0I7SUFFaEIsSUFBSTtRQUNGLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUNkLE1BQU0sQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzFDLE1BQU0sSUFBSSxDQUFDLENBQUE7UUFDWCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDL0QsTUFBTSxJQUFJLFlBQVksQ0FBQTtRQUN0QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBTSxDQUFBO1FBQzlDLE1BQU0sSUFBSSxDQUFDLENBQUE7UUFDWCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRWxDLE9BQU87WUFDTCxNQUFNO1lBQ04sV0FBVztZQUNYLElBQUksRUFBRSxPQUFPO1NBQ2QsQ0FBQTtLQUNGO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFBO0tBQzFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBZ0I7SUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFBO0lBQ3hDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzlCLE9BQU8sTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFBO0FBQ2hDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLENBQVM7SUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFBO0lBQ3hDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekIsT0FBTyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUE7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlYWRXcml0ZUJ5dGVCdWZmZXIgfSBmcm9tICdAZGNsL2Vjcy9kaXN0L3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcblxuZXhwb3J0IGVudW0gQ29tbXNNZXNzYWdlIHtcbiAgQ1JEVCA9IDEsXG4gIFJFUV9DUkRUX1NUQVRFID0gMixcbiAgUkVTX0NSRFRfU1RBVEUgPSAzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCaW5hcnlNZXNzYWdlQnVzPFQgZXh0ZW5kcyBDb21tc01lc3NhZ2U+KFxuICBzZW5kOiAobWVzc2FnZTogVWludDhBcnJheSwgdG9QZWVyQWRkcmVzcz86IHN0cmluZ1tdKSA9PiB2b2lkXG4pIHtcbiAgY29uc3QgbWFwcGluZzogTWFwPFQsICh2YWx1ZTogVWludDhBcnJheSwgc2VuZGVyOiBzdHJpbmcpID0+IHZvaWQ+ID0gbmV3IE1hcCgpXG4gIHJldHVybiB7XG4gICAgb246IDxLIGV4dGVuZHMgVD4obWVzc2FnZTogSywgY2FsbGJhY2s6ICh2YWx1ZTogVWludDhBcnJheSwgc2VuZGVyOiBzdHJpbmcpID0+IHZvaWQpID0+IHtcbiAgICAgIG1hcHBpbmcuc2V0KG1lc3NhZ2UsIGNhbGxiYWNrKVxuICAgIH0sXG4gICAgZW1pdDogPEsgZXh0ZW5kcyBUPihtZXNzYWdlOiBLLCB2YWx1ZTogVWludDhBcnJheSwgdG9QZWVyQWRkcmVzcz86IHN0cmluZ1tdKSA9PiB7XG4gICAgICBzZW5kKGNyYWZ0Q29tbXNNZXNzYWdlPFQ+KG1lc3NhZ2UsIHZhbHVlKSwgdG9QZWVyQWRkcmVzcylcbiAgICB9LFxuICAgIF9fcHJvY2Vzc01lc3NhZ2VzOiAobWVzc2FnZXM6IFVpbnQ4QXJyYXlbXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGNvbW1zTXNnID0gZGVjb2RlQ29tbXNNZXNzYWdlPFQ+KG1lc3NhZ2UpXG4gICAgICAgIGlmICghY29tbXNNc2cpIGNvbnRpbnVlXG4gICAgICAgIGNvbnN0IHsgc2VuZGVyLCBtZXNzYWdlVHlwZSwgZGF0YSB9ID0gY29tbXNNc2dcbiAgICAgICAgY29uc3QgZm4gPSBtYXBwaW5nLmdldChtZXNzYWdlVHlwZSlcbiAgICAgICAgaWYgKGZuKSBmbihkYXRhLCBzZW5kZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmFmdENvbW1zTWVzc2FnZTxUIGV4dGVuZHMgQ29tbXNNZXNzYWdlPihtZXNzYWdlVHlwZTogVCwgcGF5bG9hZDogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICBjb25zdCBtc2cgPSBuZXcgVWludDhBcnJheShwYXlsb2FkLmJ5dGVMZW5ndGggKyAxKVxuICBtc2cuc2V0KFttZXNzYWdlVHlwZV0pXG4gIG1zZy5zZXQocGF5bG9hZCwgMSlcbiAgcmV0dXJuIG1zZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlQ29tbXNNZXNzYWdlPFQgZXh0ZW5kcyBDb21tc01lc3NhZ2U+KFxuICBkYXRhOiBVaW50OEFycmF5XG4pOiB7IHNlbmRlcjogc3RyaW5nOyBtZXNzYWdlVHlwZTogVDsgZGF0YTogVWludDhBcnJheSB9IHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBsZXQgb2Zmc2V0ID0gMFxuICAgIGNvbnN0IHIgPSBuZXcgVWludDhBcnJheShkYXRhKVxuICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoci5idWZmZXIpXG4gICAgY29uc3Qgc2VuZGVyTGVuZ3RoID0gdmlldy5nZXRVaW50OChvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IDFcbiAgICBjb25zdCBzZW5kZXIgPSBkZWNvZGVTdHJpbmcoZGF0YS5zdWJhcnJheSgxLCBzZW5kZXJMZW5ndGggKyAxKSlcbiAgICBvZmZzZXQgKz0gc2VuZGVyTGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZVR5cGUgPSB2aWV3LmdldFVpbnQ4KG9mZnNldCkgYXMgVFxuICAgIG9mZnNldCArPSAxXG4gICAgY29uc3QgbWVzc2FnZSA9IHIuc3ViYXJyYXkob2Zmc2V0KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbmRlcixcbiAgICAgIG1lc3NhZ2VUeXBlLFxuICAgICAgZGF0YTogbWVzc2FnZVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgQ29tbXMgbWVzc2FnZScsIGUpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0cmluZyhkYXRhOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgY29uc3QgYnVmZmVyID0gbmV3IFJlYWRXcml0ZUJ5dGVCdWZmZXIoKVxuICBidWZmZXIud3JpdGVCdWZmZXIoZGF0YSwgdHJ1ZSlcbiAgcmV0dXJuIGJ1ZmZlci5yZWFkVXRmOFN0cmluZygpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVTdHJpbmcoczogc3RyaW5nKTogVWludDhBcnJheSB7XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBSZWFkV3JpdGVCeXRlQnVmZmVyKClcbiAgYnVmZmVyLndyaXRlVXRmOFN0cmluZyhzKVxuICByZXR1cm4gYnVmZmVyLnJlYWRCdWZmZXIoKVxufVxuIl19
@@ -1,8 +1,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 };
1
+ 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;
2
+ export { getFirstChild, getChildren, syncEntity, parentEntity, getParent, myProfile, removeParent, isStateSyncronized };
package/network/index.js CHANGED
@@ -2,20 +2,7 @@ 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
- }
16
5
  // initialize sync transport for sdk engine
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=
6
+ const { getChildren, syncEntity, parentEntity, getParent, myProfile, removeParent, getFirstChild, isStateSyncronized } = addSyncTransport(engine, sendBinary, getUserData);
7
+ export { getFirstChild, getChildren, syncEntity, parentEntity, getParent, myProfile, removeParent, isStateSyncronized };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV0d29yay9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbEQsMkNBQTJDO0FBQzNDLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsR0FDcEgsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQTtBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZW5kQmluYXJ5IH0gZnJvbSAnfnN5c3RlbS9Db21tdW5pY2F0aW9uc0NvbnRyb2xsZXInXG5pbXBvcnQgeyBlbmdpbmUgfSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IGFkZFN5bmNUcmFuc3BvcnQgfSBmcm9tICcuL21lc3NhZ2UtYnVzLXN5bmMnXG5pbXBvcnQgeyBnZXRVc2VyRGF0YSB9IGZyb20gJ35zeXN0ZW0vVXNlcklkZW50aXR5J1xuXG4vLyBpbml0aWFsaXplIHN5bmMgdHJhbnNwb3J0IGZvciBzZGsgZW5naW5lXG5jb25zdCB7IGdldENoaWxkcmVuLCBzeW5jRW50aXR5LCBwYXJlbnRFbnRpdHksIGdldFBhcmVudCwgbXlQcm9maWxlLCByZW1vdmVQYXJlbnQsIGdldEZpcnN0Q2hpbGQsIGlzU3RhdGVTeW5jcm9uaXplZCB9ID1cbiAgYWRkU3luY1RyYW5zcG9ydChlbmdpbmUsIHNlbmRCaW5hcnksIGdldFVzZXJEYXRhKVxuXG5leHBvcnQgeyBnZXRGaXJzdENoaWxkLCBnZXRDaGlsZHJlbiwgc3luY0VudGl0eSwgcGFyZW50RW50aXR5LCBnZXRQYXJlbnQsIG15UHJvZmlsZSwgcmVtb3ZlUGFyZW50LCBpc1N0YXRlU3luY3Jvbml6ZWQgfVxuIl19
@@ -1,27 +1,14 @@
1
1
  /// <reference types="@dcl/js-runtime" />
2
2
  import { IEngine } from '@dcl/ecs';
3
- import type { SendBinaryRequest, SendBinaryResponse } from '~system/CommunicationsController';
4
- import { CommsMessage } from './binary-message-bus';
5
- import type { GetUserDataRequest, GetUserDataResponse } from '~system/UserIdentity';
6
- import { IsServerRequest, IsServerResponse } from '~system/EngineApi';
7
- import { Atom } from '../atom';
8
- import { Room } from './events/implementation';
3
+ import { type SendBinaryRequest, type SendBinaryResponse } from '~system/CommunicationsController';
4
+ import { GetUserDataRequest, GetUserDataResponse } from '~system/UserIdentity';
9
5
  export type IProfile = {
10
6
  networkId: number;
11
7
  userId: string;
12
8
  };
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): {
9
+ export declare function addSyncTransport(engine: IEngine, sendBinary: (msg: SendBinaryRequest) => Promise<SendBinaryResponse>, getUserData: (value: GetUserDataRequest) => Promise<GetUserDataResponse>): {
16
10
  myProfile: IProfile;
17
11
  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>;
25
12
  syncEntity: (entityId: import("@dcl/ecs").Entity, componentIds: number[], entityEnumId?: number | undefined) => void;
26
13
  getChildren: (parent: import("@dcl/ecs").Entity) => Iterable<import("@dcl/ecs").Entity>;
27
14
  getParent: (child: import("@dcl/ecs").Entity) => import("@dcl/ecs").Entity | undefined;