@dcl/sdk 7.4.18-8817414291.commit-3236fa6 → 7.4.19-8818968750.commit-6d2ec97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/internal/transports/rendererTransport.js +1 -1
- package/observables.d.ts +1 -252
- package/observables.js +148 -10
- package/package.json +6 -6
- package/players/index.js +1 -1
- package/src/internal/transports/rendererTransport.ts +0 -1
- package/src/observables.ts +163 -303
- package/src/players/index.ts +1 -0
|
@@ -37,4 +37,4 @@ export function createRendererTransport(engineApi) {
|
|
|
37
37
|
};
|
|
38
38
|
return rendererTransport;
|
|
39
39
|
}
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXJUcmFuc3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJuYWwvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQTtBQU9oRixNQUFNLFVBQVUsdUJBQXVCLENBQUMsU0FBZ0M7SUFDdEUsS0FBSyxVQUFVLGNBQWMsQ0FBQyxPQUFtQjtRQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQTtRQUNGLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckQsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQy9CLEtBQUssTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtvQkFDckMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2lCQUN2QzthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBYztRQUNuQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDaEIsSUFBSTtnQkFDRixNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQTthQUM5QjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLHlDQUF5QztnQkFDekMsc0NBQXNDO2dCQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNwQixRQUFRLENBQUE7YUFDVDtRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsT0FBeUI7WUFDOUIsa0RBQWtEO1lBQ2xEO1lBQ0UsOENBQThDO1lBQzdDLE9BQWUsQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLEVBQ25EO2dCQUNBLE9BQU8sS0FBSyxDQUFBO2FBQ2I7WUFFRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDbEIsQ0FBQztRQUNELElBQUksRUFBRSxVQUFVO0tBQ2pCLENBQUE7SUFFRCxPQUFPLGlCQUFpQixDQUFBO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc3BvcnQsIFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IE1BWF9TVEFUSUNfQ09NUE9ORU5UIH0gZnJvbSAnQGRjbC9lY3MvZGlzdC9jb21wb25lbnRzL2NvbXBvbmVudC1udW1iZXInXG5pbXBvcnQgdHlwZSB7IENyZHRTZW5kVG9SZW5kZXJlclJlcXVlc3QsIENyZHRTZW5kVG9SZXNwb25zZSB9IGZyb20gJ35zeXN0ZW0vRW5naW5lQXBpJ1xuXG5leHBvcnQgdHlwZSBFbmdpbmVBcGlGb3JUcmFuc3BvcnQgPSB7XG4gIGNyZHRTZW5kVG9SZW5kZXJlcihib2R5OiBDcmR0U2VuZFRvUmVuZGVyZXJSZXF1ZXN0KTogUHJvbWlzZTxDcmR0U2VuZFRvUmVzcG9uc2U+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZW5kZXJlclRyYW5zcG9ydChlbmdpbmVBcGk6IEVuZ2luZUFwaUZvclRyYW5zcG9ydCk6IFRyYW5zcG9ydCB7XG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRUb1JlbmRlcmVyKG1lc3NhZ2U6IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGVuZ2luZUFwaS5jcmR0U2VuZFRvUmVuZGVyZXIoe1xuICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSlcbiAgICB9KVxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoKSB7XG4gICAgICBpZiAocmVuZGVyZXJUcmFuc3BvcnQub25tZXNzYWdlKSB7XG4gICAgICAgIGZvciAoY29uc3QgYnl0ZUFycmF5IG9mIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICByZW5kZXJlclRyYW5zcG9ydC5vbm1lc3NhZ2UoYnl0ZUFycmF5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVuZGVyZXJUcmFuc3BvcnQ6IFRyYW5zcG9ydCA9IHtcbiAgICBhc3luYyBzZW5kKG1lc3NhZ2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHNlbmRUb1JlbmRlcmVyKG1lc3NhZ2UpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSBjb25zb2xlLmVycm9yIG9mIHRoZSBzY2VuZVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBkZWJ1Z2dlclxuICAgICAgfVxuICAgIH0sXG4gICAgZmlsdGVyKG1lc3NhZ2U6IFRyYW5zcG9ydE1lc3NhZ2UpIHtcbiAgICAgIC8vIE9ubHkgc2VuZCByZW5kZXJlciBjb21wb25lbnRzIChQcm90byBHZW5lcmF0ZWQpXG4gICAgICBpZiAoXG4gICAgICAgIC8vIGZpbHRlciBvdXQgbWVzc2FnZXMgZm9yIG5vbi1jb3JlIGNvbXBvbmVudHNcbiAgICAgICAgKG1lc3NhZ2UgYXMgYW55KS5jb21wb25lbnRJZCA+IE1BWF9TVEFUSUNfQ09NUE9ORU5UXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIW1lc3NhZ2VcbiAgICB9LFxuICAgIHR5cGU6ICdyZW5kZXJlcidcbiAgfVxuXG4gIHJldHVybiByZW5kZXJlclRyYW5zcG9ydFxufVxuIl19
|
package/observables.d.ts
CHANGED
|
@@ -1,222 +1,15 @@
|
|
|
1
1
|
import { Observable } from './internal/Observable';
|
|
2
|
-
import {
|
|
3
|
-
/** @public */
|
|
4
|
-
export type InputEventResult = {
|
|
5
|
-
/** Origin of the ray, relative to the scene */
|
|
6
|
-
origin: Vector3Type;
|
|
7
|
-
/** Direction vector of the ray (normalized) */
|
|
8
|
-
direction: Vector3Type;
|
|
9
|
-
/** ID of the pointer that triggered the event */
|
|
10
|
-
buttonId: number;
|
|
11
|
-
/** Does this pointer event hit any object? */
|
|
12
|
-
hit?: {
|
|
13
|
-
/** Length of the ray */
|
|
14
|
-
length: number;
|
|
15
|
-
/** If the ray hits a mesh the intersection point will be this */
|
|
16
|
-
hitPoint: Vector3Type;
|
|
17
|
-
/** If the mesh has a name, it will be assigned to meshName */
|
|
18
|
-
meshName: string;
|
|
19
|
-
/** Normal of the hit */
|
|
20
|
-
normal: Vector3Type;
|
|
21
|
-
/** Normal of the hit, in world space */
|
|
22
|
-
worldNormal: Vector3Type;
|
|
23
|
-
/** Hit entity ID if any */
|
|
24
|
-
entityId: unknown;
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
/** @public */
|
|
28
|
-
export type GlobalInputEventResult = InputEventResult & {
|
|
29
|
-
/**
|
|
30
|
-
* DOWN = 0,
|
|
31
|
-
* UP = 1
|
|
32
|
-
*/
|
|
33
|
-
type: 0 | 1;
|
|
34
|
-
};
|
|
35
|
-
/** @public */
|
|
36
|
-
export type RaycastResponsePayload<T> = {
|
|
37
|
-
queryId: string;
|
|
38
|
-
queryType: string;
|
|
39
|
-
payload: T;
|
|
40
|
-
};
|
|
41
|
-
/** @public */
|
|
42
|
-
export type GizmoDragEndEvent = {
|
|
43
|
-
type: 'gizmoDragEnded';
|
|
44
|
-
transforms: Array<{
|
|
45
|
-
position: Vector3Type;
|
|
46
|
-
rotation: QuaternionType;
|
|
47
|
-
scale: Vector3Type;
|
|
48
|
-
entityId: unknown;
|
|
49
|
-
}>;
|
|
50
|
-
};
|
|
51
|
-
/** @public */
|
|
52
|
-
export type GizmoSelectedEvent = {
|
|
53
|
-
type: 'gizmoSelected';
|
|
54
|
-
gizmoType: 'MOVE' | 'ROTATE' | 'SCALE' | 'NONE';
|
|
55
|
-
entities: string[];
|
|
56
|
-
};
|
|
2
|
+
import { Vector3Type } from '@dcl/ecs';
|
|
57
3
|
/** @public */
|
|
58
4
|
export type IEventNames = keyof IEvents;
|
|
59
|
-
/** @public */
|
|
60
|
-
export type EngineEvent<T extends IEventNames = IEventNames, V = IEvents[T]> = {
|
|
61
|
-
/** eventName */
|
|
62
|
-
type: T;
|
|
63
|
-
data: Readonly<V>;
|
|
64
|
-
};
|
|
65
5
|
/**
|
|
66
6
|
* @public
|
|
67
7
|
* Note: Don't use `on` prefix for IEvents to avoid redundancy with `event.on("onEventName")` syntax.
|
|
68
8
|
*/
|
|
69
9
|
export interface IEvents {
|
|
70
|
-
/**
|
|
71
|
-
* `positionChanged` is triggered when the position of the camera changes
|
|
72
|
-
* This event is throttled to 10 times per second.
|
|
73
|
-
*/
|
|
74
|
-
positionChanged: {
|
|
75
|
-
/** Camera position relative to the base parcel of the scene */
|
|
76
|
-
position: Vector3Type;
|
|
77
|
-
/** Camera position, this is a absolute world position */
|
|
78
|
-
cameraPosition: Vector3Type;
|
|
79
|
-
/** Eye height, in meters. */
|
|
80
|
-
playerHeight: number;
|
|
81
|
-
};
|
|
82
|
-
/**
|
|
83
|
-
* `rotationChanged` is triggered when the rotation of the camera changes.
|
|
84
|
-
* This event is throttled to 10 times per second.
|
|
85
|
-
*/
|
|
86
|
-
rotationChanged: {
|
|
87
|
-
/** Degree vector. Same as entities */
|
|
88
|
-
rotation: Vector3Type;
|
|
89
|
-
/** Rotation quaternion, useful in some scenarios. */
|
|
90
|
-
quaternion: QuaternionType;
|
|
91
|
-
};
|
|
92
|
-
/**
|
|
93
|
-
* `cameraModeChanged` is triggered when the user changes the camera mode
|
|
94
|
-
*/
|
|
95
|
-
cameraModeChanged: {
|
|
96
|
-
/**
|
|
97
|
-
* FIRST_PERSON = 0,
|
|
98
|
-
* THIRD_PERSON = 1,
|
|
99
|
-
* FREE_CAMERA = 2
|
|
100
|
-
*/
|
|
101
|
-
cameraMode: 0 | 1 | 2;
|
|
102
|
-
};
|
|
103
|
-
/**
|
|
104
|
-
* `idleStateChanged` is triggered when the user not moves for a defined period of time
|
|
105
|
-
*/
|
|
106
|
-
idleStateChanged: {
|
|
107
|
-
isIdle: boolean;
|
|
108
|
-
};
|
|
109
10
|
playerExpression: {
|
|
110
11
|
expressionId: string;
|
|
111
12
|
};
|
|
112
|
-
/**
|
|
113
|
-
* `pointerUp` is triggered when the user releases an input pointer.
|
|
114
|
-
* It could be a VR controller, a touch screen or the mouse.
|
|
115
|
-
*/
|
|
116
|
-
pointerUp: InputEventResult;
|
|
117
|
-
/**
|
|
118
|
-
* `pointerDown` is triggered when the user press an input pointer.
|
|
119
|
-
* It could be a VR controller, a touch screen or the mouse.
|
|
120
|
-
*/
|
|
121
|
-
pointerDown: InputEventResult;
|
|
122
|
-
/**
|
|
123
|
-
* `pointerEvent` is triggered when the user press or releases an input pointer.
|
|
124
|
-
* It could be a VR controller, a touch screen or the mouse.
|
|
125
|
-
*
|
|
126
|
-
* @deprecated use actionButtonEvent instead
|
|
127
|
-
*/
|
|
128
|
-
pointerEvent: GlobalInputEventResult;
|
|
129
|
-
/**
|
|
130
|
-
* `actionButtonEvent` is triggered when the user press or releases an input pointer.
|
|
131
|
-
* It could be a VR controller, a touch screen or the mouse.
|
|
132
|
-
*
|
|
133
|
-
* This event is exactly the same as `pointerEvent` but the logic in the ECS had an unsolvable
|
|
134
|
-
* condition that required us to create this new event to handle more cases for new buttons.
|
|
135
|
-
*/
|
|
136
|
-
actionButtonEvent: GlobalInputEventResult;
|
|
137
|
-
/**
|
|
138
|
-
* `raycastResponse` is triggered in response to a raycast query
|
|
139
|
-
*/
|
|
140
|
-
raycastResponse: RaycastResponsePayload<any>;
|
|
141
|
-
/**
|
|
142
|
-
* `chatMessage` is triggered when the user sends a message through chat entity.
|
|
143
|
-
*/
|
|
144
|
-
chatMessage: {
|
|
145
|
-
id: string;
|
|
146
|
-
sender: string;
|
|
147
|
-
message: string;
|
|
148
|
-
isCommand: boolean;
|
|
149
|
-
};
|
|
150
|
-
/**
|
|
151
|
-
* `onChange` is triggered when an entity changes its own internal state.
|
|
152
|
-
* Dispatched by the `ui-*` entities when their value is changed. It triggers a callback.
|
|
153
|
-
* Notice: Only entities with ID will be listening for click events.
|
|
154
|
-
*/
|
|
155
|
-
onChange: {
|
|
156
|
-
value?: any;
|
|
157
|
-
/** ID of the pointer that triggered the event */
|
|
158
|
-
pointerId?: number;
|
|
159
|
-
};
|
|
160
|
-
/**
|
|
161
|
-
* `onEnter` is triggered when the user hits the "Enter" key from the keyboard
|
|
162
|
-
* Used principally by the Chat internal scene
|
|
163
|
-
*/
|
|
164
|
-
onEnter: unknown;
|
|
165
|
-
/**
|
|
166
|
-
* `onPointerLock` is triggered when the user clicks the world canvas and the
|
|
167
|
-
* pointer locks to it so the pointer moves the camera
|
|
168
|
-
*/
|
|
169
|
-
onPointerLock: {
|
|
170
|
-
locked?: boolean;
|
|
171
|
-
};
|
|
172
|
-
/**
|
|
173
|
-
* `onAnimationEnd` is triggered when an animation clip gets finish
|
|
174
|
-
*/
|
|
175
|
-
onAnimationEnd: {
|
|
176
|
-
clipName: string;
|
|
177
|
-
};
|
|
178
|
-
/**
|
|
179
|
-
* `onFocus` is triggered when an entity focus is active.
|
|
180
|
-
* Dispatched by the `ui-input` and `ui-password` entities when the value is changed.
|
|
181
|
-
* It triggers a callback.
|
|
182
|
-
*
|
|
183
|
-
* Notice: Only entities with ID will be listening for click events.
|
|
184
|
-
*/
|
|
185
|
-
onFocus: {
|
|
186
|
-
/** ID of the entitiy of the event */
|
|
187
|
-
entityId: unknown;
|
|
188
|
-
/** ID of the pointer that triggered the event */
|
|
189
|
-
pointerId: number;
|
|
190
|
-
};
|
|
191
|
-
/**
|
|
192
|
-
* `onBlur` is triggered when an entity loses its focus.
|
|
193
|
-
* Dispatched by the `ui-input` and `ui-password` entities when the value is changed.
|
|
194
|
-
* It triggers a callback.
|
|
195
|
-
*
|
|
196
|
-
* Notice: Only entities with ID will be listening for click events.
|
|
197
|
-
*/
|
|
198
|
-
onBlur: {
|
|
199
|
-
/** ID of the entitiy of the event */
|
|
200
|
-
entityId: unknown;
|
|
201
|
-
/** ID of the pointer that triggered the event */
|
|
202
|
-
pointerId: number;
|
|
203
|
-
};
|
|
204
|
-
/** The onClick event is only used for UI elements */
|
|
205
|
-
onClick: {
|
|
206
|
-
entityId: unknown;
|
|
207
|
-
};
|
|
208
|
-
/**
|
|
209
|
-
* This event gets triggered when an entity leaves the scene fences.
|
|
210
|
-
*/
|
|
211
|
-
entityOutOfScene: {
|
|
212
|
-
entityId: unknown;
|
|
213
|
-
};
|
|
214
|
-
/**
|
|
215
|
-
* This event gets triggered when an entity enters the scene fences.
|
|
216
|
-
*/
|
|
217
|
-
entityBackInScene: {
|
|
218
|
-
entityId: unknown;
|
|
219
|
-
};
|
|
220
13
|
/**
|
|
221
14
|
* This event gets triggered when the user enters the scene
|
|
222
15
|
*/
|
|
@@ -240,46 +33,6 @@ export interface IEvents {
|
|
|
240
33
|
* This is triggered once the scene should start.
|
|
241
34
|
*/
|
|
242
35
|
sceneStart: unknown;
|
|
243
|
-
/**
|
|
244
|
-
* This is triggered once the builder scene is loaded.
|
|
245
|
-
*/
|
|
246
|
-
builderSceneStart: unknown;
|
|
247
|
-
/**
|
|
248
|
-
* This is triggered once the builder scene is unloaded.
|
|
249
|
-
*/
|
|
250
|
-
builderSceneUnloaded: unknown;
|
|
251
|
-
/**
|
|
252
|
-
* After checking entities outside the fences, if any is outside, this event
|
|
253
|
-
* will be triggered with all the entities outside the scene.
|
|
254
|
-
*/
|
|
255
|
-
entitiesOutOfBoundaries: {
|
|
256
|
-
entities: string[];
|
|
257
|
-
};
|
|
258
|
-
uuidEvent: {
|
|
259
|
-
uuid: string;
|
|
260
|
-
payload: any;
|
|
261
|
-
};
|
|
262
|
-
onTextSubmit: {
|
|
263
|
-
text: string;
|
|
264
|
-
};
|
|
265
|
-
metricsUpdate: {
|
|
266
|
-
given: Record<string, number>;
|
|
267
|
-
limit: Record<string, number>;
|
|
268
|
-
};
|
|
269
|
-
limitsExceeded: {
|
|
270
|
-
given: Record<string, number>;
|
|
271
|
-
limit: Record<string, number>;
|
|
272
|
-
};
|
|
273
|
-
/** For gizmos */
|
|
274
|
-
gizmoEvent: GizmoDragEndEvent | GizmoSelectedEvent;
|
|
275
|
-
externalAction: {
|
|
276
|
-
type: string;
|
|
277
|
-
[key: string]: any;
|
|
278
|
-
};
|
|
279
|
-
stateEvent: {
|
|
280
|
-
type: string;
|
|
281
|
-
payload: any;
|
|
282
|
-
};
|
|
283
36
|
/** This is triggered at least for each videoStatus change */
|
|
284
37
|
videoEvent: {
|
|
285
38
|
componentId: string;
|
|
@@ -320,10 +73,6 @@ export interface IEvents {
|
|
|
320
73
|
distance: number;
|
|
321
74
|
};
|
|
322
75
|
};
|
|
323
|
-
/** Triggered when pointer start hovering an entities' shape */
|
|
324
|
-
pointerHoverEnter: unknown;
|
|
325
|
-
/** Triggered when pointer stop hovering an entities' shape */
|
|
326
|
-
pointerHoverExit: unknown;
|
|
327
76
|
}
|
|
328
77
|
/**
|
|
329
78
|
* These events are triggered after your character enters the scene.
|
package/observables.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Observable } from './internal/Observable';
|
|
2
|
+
import { AvatarBase, AvatarEmoteCommand, AvatarEquippedData, PlayerIdentityData, PointerEventsResult, RealmInfo, engine } from '@dcl/ecs';
|
|
2
3
|
import { subscribe } from '~system/EngineApi';
|
|
3
|
-
|
|
4
|
+
import players from './players';
|
|
4
5
|
/**
|
|
5
6
|
* @internal
|
|
6
7
|
* This function generates a callback that is passed to the Observable
|
|
@@ -8,7 +9,12 @@ let subscribeFunction = subscribe;
|
|
|
8
9
|
*/
|
|
9
10
|
function createSubscriber(eventName) {
|
|
10
11
|
return () => {
|
|
11
|
-
|
|
12
|
+
if (eventName === 'comms' || globalThis.__OBSERVABLES_FALLBACK_SUPPORT) {
|
|
13
|
+
subscribe({ eventId: eventName }).catch(console.error);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
SDK7ComponentsObservable?.subscribe(eventName);
|
|
17
|
+
}
|
|
12
18
|
};
|
|
13
19
|
}
|
|
14
20
|
/**
|
|
@@ -77,13 +83,6 @@ export const onPlayerClickedObservable = new Observable(createSubscriber('player
|
|
|
77
83
|
* @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed.
|
|
78
84
|
*/
|
|
79
85
|
export const onCommsMessage = new Observable(createSubscriber('comms'));
|
|
80
|
-
/**
|
|
81
|
-
* @internal
|
|
82
|
-
* Used for testing purpose
|
|
83
|
-
*/
|
|
84
|
-
export function setSubscribeFunction(fn) {
|
|
85
|
-
subscribeFunction = fn;
|
|
86
|
-
}
|
|
87
86
|
/**
|
|
88
87
|
* @internal
|
|
89
88
|
* @deprecated this is an OLD API.
|
|
@@ -144,4 +143,143 @@ export async function pollEvents(sendBatch) {
|
|
|
144
143
|
}
|
|
145
144
|
}
|
|
146
145
|
}
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvb2JzZXJ2YWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBRWxELE9BQU8sRUFBdUMsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFbEYsSUFBSSxpQkFBaUIsR0FBcUIsU0FBUyxDQUFBO0FBNFhuRDs7OztHQUlHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFpQjtJQUN6QyxPQUFPLEdBQUcsRUFBRTtRQUNWLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRSxDQUFDLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksVUFBVSxDQUEwQixnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQy9HOzs4TUFFOE07QUFDOU0sTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFBO0FBRWxEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLFVBQVUsQ0FBMEIsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQTtBQUUvRzs7OE1BRThNO0FBQzlNLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxzQkFBc0IsQ0FBQTtBQUVsRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxVQUFVLENBQXdCLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7QUFFM0c7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxVQUFVLENBQ3hELGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQ3JDLENBQUE7QUFF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QkFDTjtnQkFDRCxLQUFLLGdCQUFnQixDQUFDLENBQUM7b0JBQ3JCLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxJQUFpQyxDQUFDLENBQUE7b0JBQzNFLE1BQUs7aUJBQ047Z0JBQ0QsS0FBSyxlQUFlLENBQUMsQ0FBQztvQkFDcEIseUJBQXlCLENBQUMsZUFBZSxDQUFDLElBQWdDLENBQUMsQ0FBQTtvQkFDM0UsTUFBSztpQkFDTjtnQkFDRCxLQUFLLE9BQU8sQ0FBQyxDQUFDO29CQUNaLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBd0IsQ0FBQyxDQUFBO29CQUN4RCxNQUFLO2lCQUNOO2FBQ0Y7U0FDRjtLQUNGO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuL2ludGVybmFsL09ic2VydmFibGUnXG5pbXBvcnQgeyBRdWF0ZXJuaW9uVHlwZSwgVmVjdG9yM1R5cGUgfSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IE1hbnlFbnRpdHlBY3Rpb24sIFNlbmRCYXRjaFJlc3BvbnNlLCBzdWJzY3JpYmUgfSBmcm9tICd+c3lzdGVtL0VuZ2luZUFwaSdcblxubGV0IHN1YnNjcmliZUZ1bmN0aW9uOiB0eXBlb2Ygc3Vic2NyaWJlID0gc3Vic2NyaWJlXG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBJbnB1dEV2ZW50UmVzdWx0ID0ge1xuICAvKiogT3JpZ2luIG9mIHRoZSByYXksIHJlbGF0aXZlIHRvIHRoZSBzY2VuZSAqL1xuICBvcmlnaW46IFZlY3RvcjNUeXBlXG4gIC8qKiBEaXJlY3Rpb24gdmVjdG9yIG9mIHRoZSByYXkgKG5vcm1hbGl6ZWQpICovXG4gIGRpcmVjdGlvbjogVmVjdG9yM1R5cGVcbiAgLyoqIElEIG9mIHRoZSBwb2ludGVyIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudCAqL1xuICBidXR0b25JZDogbnVtYmVyXG4gIC8qKiBEb2VzIHRoaXMgcG9pbnRlciBldmVudCBoaXQgYW55IG9iamVjdD8gKi9cbiAgaGl0Pzoge1xuICAgIC8qKiBMZW5ndGggb2YgdGhlIHJheSAqL1xuICAgIGxlbmd0aDogbnVtYmVyXG4gICAgLyoqIElmIHRoZSByYXkgaGl0cyBhIG1lc2ggdGhlIGludGVyc2VjdGlvbiBwb2ludCB3aWxsIGJlIHRoaXMgKi9cbiAgICBoaXRQb2ludDogVmVjdG9yM1R5cGVcbiAgICAvKiogSWYgdGhlIG1lc2ggaGFzIGEgbmFtZSwgaXQgd2lsbCBiZSBhc3NpZ25lZCB0byBtZXNoTmFtZSAqL1xuICAgIG1lc2hOYW1lOiBzdHJpbmdcbiAgICAvKiogTm9ybWFsIG9mIHRoZSBoaXQgKi9cbiAgICBub3JtYWw6IFZlY3RvcjNUeXBlXG4gICAgLyoqIE5vcm1hbCBvZiB0aGUgaGl0LCBpbiB3b3JsZCBzcGFjZSAqL1xuICAgIHdvcmxkTm9ybWFsOiBWZWN0b3IzVHlwZVxuICAgIC8qKiBIaXQgZW50aXR5IElEIGlmIGFueSAqL1xuICAgIGVudGl0eUlkOiB1bmtub3duXG4gIH1cbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIEdsb2JhbElucHV0RXZlbnRSZXN1bHQgPSBJbnB1dEV2ZW50UmVzdWx0ICYge1xuICAvKipcbiAgICogRE9XTiA9IDAsXG4gICAqIFVQID0gMVxuICAgKi9cbiAgdHlwZTogMCB8IDFcbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIFJheWNhc3RSZXNwb25zZVBheWxvYWQ8VD4gPSB7XG4gIHF1ZXJ5SWQ6IHN0cmluZ1xuICBxdWVyeVR5cGU6IHN0cmluZ1xuICBwYXlsb2FkOiBUXG59XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBHaXptb0RyYWdFbmRFdmVudCA9IHtcbiAgdHlwZTogJ2dpem1vRHJhZ0VuZGVkJ1xuICB0cmFuc2Zvcm1zOiBBcnJheTx7XG4gICAgcG9zaXRpb246IFZlY3RvcjNUeXBlXG4gICAgcm90YXRpb246IFF1YXRlcm5pb25UeXBlXG4gICAgc2NhbGU6IFZlY3RvcjNUeXBlXG4gICAgZW50aXR5SWQ6IHVua25vd25cbiAgfT5cbn1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIEdpem1vU2VsZWN0ZWRFdmVudCA9IHtcbiAgdHlwZTogJ2dpem1vU2VsZWN0ZWQnXG4gIGdpem1vVHlwZTogJ01PVkUnIHwgJ1JPVEFURScgfCAnU0NBTEUnIHwgJ05PTkUnXG4gIGVudGl0aWVzOiBzdHJpbmdbXVxufVxuXG4vLy8gLS0tIEVWRU5UUyAtLS1cblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCB0eXBlIElFdmVudE5hbWVzID0ga2V5b2YgSUV2ZW50c1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IHR5cGUgRW5naW5lRXZlbnQ8VCBleHRlbmRzIElFdmVudE5hbWVzID0gSUV2ZW50TmFtZXMsIFYgPSBJRXZlbnRzW1RdPiA9IHtcbiAgLyoqIGV2ZW50TmFtZSAqL1xuICB0eXBlOiBUXG4gIGRhdGE6IFJlYWRvbmx5PFY+XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICogTm90ZTogRG9uJ3QgdXNlIGBvbmAgcHJlZml4IGZvciBJRXZlbnRzIHRvIGF2b2lkIHJlZHVuZGFuY3kgd2l0aCBgZXZlbnQub24oXCJvbkV2ZW50TmFtZVwiKWAgc3ludGF4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudHMge1xuICAvKipcbiAgICogYHBvc2l0aW9uQ2hhbmdlZGAgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgY2hhbmdlc1xuICAgKiBUaGlzIGV2ZW50IGlzIHRocm90dGxlZCB0byAxMCB0aW1lcyBwZXIgc2Vjb25kLlxuICAgKi9cbiAgcG9zaXRpb25DaGFuZ2VkOiB7XG4gICAgLyoqIENhbWVyYSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgYmFzZSBwYXJjZWwgb2YgdGhlIHNjZW5lICovXG4gICAgcG9zaXRpb246IFZlY3RvcjNUeXBlXG5cbiAgICAvKiogQ2FtZXJhIHBvc2l0aW9uLCB0aGlzIGlzIGEgYWJzb2x1dGUgd29ybGQgcG9zaXRpb24gKi9cbiAgICBjYW1lcmFQb3NpdGlvbjogVmVjdG9yM1R5cGVcblxuICAgIC8qKiBFeWUgaGVpZ2h0LCBpbiBtZXRlcnMuICovXG4gICAgcGxheWVySGVpZ2h0OiBudW1iZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBgcm90YXRpb25DaGFuZ2VkYCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgcm90YXRpb24gb2YgdGhlIGNhbWVyYSBjaGFuZ2VzLlxuICAgKiBUaGlzIGV2ZW50IGlzIHRocm90dGxlZCB0byAxMCB0aW1lcyBwZXIgc2Vjb25kLlxuICAgKi9cbiAgcm90YXRpb25DaGFuZ2VkOiB7XG4gICAgLyoqIERlZ3JlZSB2ZWN0b3IuIFNhbWUgYXMgZW50aXRpZXMgKi9cbiAgICByb3RhdGlvbjogVmVjdG9yM1R5cGVcbiAgICAvKiogUm90YXRpb24gcXVhdGVybmlvbiwgdXNlZnVsIGluIHNvbWUgc2NlbmFyaW9zLiAqL1xuICAgIHF1YXRlcm5pb246IFF1YXRlcm5pb25UeXBlXG4gIH1cblxuICAvKipcbiAgICogYGNhbWVyYU1vZGVDaGFuZ2VkYCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBjYW1lcmEgbW9kZVxuICAgKi9cbiAgY2FtZXJhTW9kZUNoYW5nZWQ6IHtcbiAgICAvKipcbiAgICAgKiBGSVJTVF9QRVJTT04gPSAwLFxuICAgICAqIFRISVJEX1BFUlNPTiA9IDEsXG4gICAgICogRlJFRV9DQU1FUkEgPSAyXG4gICAgICovXG4gICAgY2FtZXJhTW9kZTogMCB8IDEgfCAyXG4gIH1cblxuICAvKipcbiAgICogYGlkbGVTdGF0ZUNoYW5nZWRgIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIG5vdCBtb3ZlcyBmb3IgYSBkZWZpbmVkIHBlcmlvZCBvZiB0aW1lXG4gICAqL1xuICBpZGxlU3RhdGVDaGFuZ2VkOiB7XG4gICAgaXNJZGxlOiBib29sZWFuXG4gIH1cblxuICBwbGF5ZXJFeHByZXNzaW9uOiB7XG4gICAgZXhwcmVzc2lvbklkOiBzdHJpbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBgcG9pbnRlclVwYCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciByZWxlYXNlcyBhbiBpbnB1dCBwb2ludGVyLlxuICAgKiBJdCBjb3VsZCBiZSBhIFZSIGNvbnRyb2xsZXIsIGEgdG91Y2ggc2NyZWVuIG9yIHRoZSBtb3VzZS5cbiAgICovXG4gIHBvaW50ZXJVcDogSW5wdXRFdmVudFJlc3VsdFxuXG4gIC8qKlxuICAgKiBgcG9pbnRlckRvd25gIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIHByZXNzIGFuIGlucHV0IHBvaW50ZXIuXG4gICAqIEl0IGNvdWxkIGJlIGEgVlIgY29udHJvbGxlciwgYSB0b3VjaCBzY3JlZW4gb3IgdGhlIG1vdXNlLlxuICAgKi9cbiAgcG9pbnRlckRvd246IElucHV0RXZlbnRSZXN1bHRcblxuICAvKipcbiAgICogYHBvaW50ZXJFdmVudGAgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgcHJlc3Mgb3IgcmVsZWFzZXMgYW4gaW5wdXQgcG9pbnRlci5cbiAgICogSXQgY291bGQgYmUgYSBWUiBjb250cm9sbGVyLCBhIHRvdWNoIHNjcmVlbiBvciB0aGUgbW91c2UuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBhY3Rpb25CdXR0b25FdmVudCBpbnN0ZWFkXG4gICAqL1xuICBwb2ludGVyRXZlbnQ6IEdsb2JhbElucHV0RXZlbnRSZXN1bHRcblxuICAvKipcbiAgICogYGFjdGlvbkJ1dHRvbkV2ZW50YCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBwcmVzcyBvciByZWxlYXNlcyBhbiBpbnB1dCBwb2ludGVyLlxuICAgKiBJdCBjb3VsZCBiZSBhIFZSIGNvbnRyb2xsZXIsIGEgdG91Y2ggc2NyZWVuIG9yIHRoZSBtb3VzZS5cbiAgICpcbiAgICogVGhpcyBldmVudCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGBwb2ludGVyRXZlbnRgIGJ1dCB0aGUgbG9naWMgaW4gdGhlIEVDUyBoYWQgYW4gdW5zb2x2YWJsZVxuICAgKiBjb25kaXRpb24gdGhhdCByZXF1aXJlZCB1cyB0byBjcmVhdGUgdGhpcyBuZXcgZXZlbnQgdG8gaGFuZGxlIG1vcmUgY2FzZXMgZm9yIG5ldyBidXR0b25zLlxuICAgKi9cbiAgYWN0aW9uQnV0dG9uRXZlbnQ6IEdsb2JhbElucHV0RXZlbnRSZXN1bHRcblxuICAvKipcbiAgICogYHJheWNhc3RSZXNwb25zZWAgaXMgdHJpZ2dlcmVkIGluIHJlc3BvbnNlIHRvIGEgcmF5Y2FzdCBxdWVyeVxuICAgKi9cbiAgcmF5Y2FzdFJlc3BvbnNlOiBSYXljYXN0UmVzcG9uc2VQYXlsb2FkPGFueT5cblxuICAvKipcbiAgICogYGNoYXRNZXNzYWdlYCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBzZW5kcyBhIG1lc3NhZ2UgdGhyb3VnaCBjaGF0IGVudGl0eS5cbiAgICovXG4gIGNoYXRNZXNzYWdlOiB7XG4gICAgaWQ6IHN0cmluZ1xuICAgIHNlbmRlcjogc3RyaW5nXG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaXNDb21tYW5kOiBib29sZWFuXG4gIH1cblxuICAvKipcbiAgICogYG9uQ2hhbmdlYCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBlbnRpdHkgY2hhbmdlcyBpdHMgb3duIGludGVybmFsIHN0YXRlLlxuICAgKiBEaXNwYXRjaGVkIGJ5IHRoZSBgdWktKmAgZW50aXRpZXMgd2hlbiB0aGVpciB2YWx1ZSBpcyBjaGFuZ2VkLiBJdCB0cmlnZ2VycyBhIGNhbGxiYWNrLlxuICAgKiBOb3RpY2U6IE9ubHkgZW50aXRpZXMgd2l0aCBJRCB3aWxsIGJlIGxpc3RlbmluZyBmb3IgY2xpY2sgZXZlbnRzLlxuICAgKi9cbiAgb25DaGFuZ2U6IHtcbiAgICB2YWx1ZT86IGFueVxuICAgIC8qKiBJRCBvZiB0aGUgcG9pbnRlciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQgKi9cbiAgICBwb2ludGVySWQ/OiBudW1iZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBgb25FbnRlcmAgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgaGl0cyB0aGUgXCJFbnRlclwiIGtleSBmcm9tIHRoZSBrZXlib2FyZFxuICAgKiBVc2VkIHByaW5jaXBhbGx5IGJ5IHRoZSBDaGF0IGludGVybmFsIHNjZW5lXG4gICAqL1xuICBvbkVudGVyOiB1bmtub3duXG5cbiAgLyoqXG4gICAqIGBvblBvaW50ZXJMb2NrYCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIHdvcmxkIGNhbnZhcyBhbmQgdGhlXG4gICAqIHBvaW50ZXIgbG9ja3MgdG8gaXQgc28gdGhlIHBvaW50ZXIgbW92ZXMgdGhlIGNhbWVyYVxuICAgKi9cbiAgb25Qb2ludGVyTG9jazoge1xuICAgIGxvY2tlZD86IGJvb2xlYW5cbiAgfVxuXG4gIC8qKlxuICAgKiBgb25BbmltYXRpb25FbmRgIGlzIHRyaWdnZXJlZCB3aGVuIGFuIGFuaW1hdGlvbiBjbGlwIGdldHMgZmluaXNoXG4gICAqL1xuICBvbkFuaW1hdGlvbkVuZDoge1xuICAgIGNsaXBOYW1lOiBzdHJpbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBgb25Gb2N1c2AgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gZW50aXR5IGZvY3VzIGlzIGFjdGl2ZS5cbiAgICogRGlzcGF0Y2hlZCBieSB0aGUgYHVpLWlucHV0YCBhbmQgYHVpLXBhc3N3b3JkYCBlbnRpdGllcyB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKiBJdCB0cmlnZ2VycyBhIGNhbGxiYWNrLlxuICAgKlxuICAgKiBOb3RpY2U6IE9ubHkgZW50aXRpZXMgd2l0aCBJRCB3aWxsIGJlIGxpc3RlbmluZyBmb3IgY2xpY2sgZXZlbnRzLlxuICAgKi9cbiAgb25Gb2N1czoge1xuICAgIC8qKiBJRCBvZiB0aGUgZW50aXRpeSBvZiB0aGUgZXZlbnQgKi9cbiAgICBlbnRpdHlJZDogdW5rbm93blxuICAgIC8qKiBJRCBvZiB0aGUgcG9pbnRlciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQgKi9cbiAgICBwb2ludGVySWQ6IG51bWJlclxuICB9XG5cbiAgLyoqXG4gICAqIGBvbkJsdXJgIGlzIHRyaWdnZXJlZCB3aGVuIGFuIGVudGl0eSBsb3NlcyBpdHMgZm9jdXMuXG4gICAqIERpc3BhdGNoZWQgYnkgdGhlIGB1aS1pbnB1dGAgYW5kIGB1aS1wYXNzd29yZGAgZW50aXRpZXMgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICogIEl0IHRyaWdnZXJzIGEgY2FsbGJhY2suXG4gICAqXG4gICAqIE5vdGljZTogT25seSBlbnRpdGllcyB3aXRoIElEIHdpbGwgYmUgbGlzdGVuaW5nIGZvciBjbGljayBldmVudHMuXG4gICAqL1xuICBvbkJsdXI6IHtcbiAgICAvKiogSUQgb2YgdGhlIGVudGl0aXkgb2YgdGhlIGV2ZW50ICovXG4gICAgZW50aXR5SWQ6IHVua25vd25cbiAgICAvKiogSUQgb2YgdGhlIHBvaW50ZXIgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50ICovXG4gICAgcG9pbnRlcklkOiBudW1iZXJcbiAgfVxuXG4gIC8qKiBUaGUgb25DbGljayBldmVudCBpcyBvbmx5IHVzZWQgZm9yIFVJIGVsZW1lbnRzICovXG4gIG9uQ2xpY2s6IHtcbiAgICBlbnRpdHlJZDogdW5rbm93blxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiBhbiBlbnRpdHkgbGVhdmVzIHRoZSBzY2VuZSBmZW5jZXMuXG4gICAqL1xuICBlbnRpdHlPdXRPZlNjZW5lOiB7XG4gICAgZW50aXR5SWQ6IHVua25vd25cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGdldHMgdHJpZ2dlcmVkIHdoZW4gYW4gZW50aXR5IGVudGVycyB0aGUgc2NlbmUgZmVuY2VzLlxuICAgKi9cbiAgZW50aXR5QmFja0luU2NlbmU6IHtcbiAgICBlbnRpdHlJZDogdW5rbm93blxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBlbnRlcnMgdGhlIHNjZW5lXG4gICAqL1xuICBvbkVudGVyU2NlbmU6IHtcbiAgICB1c2VySWQ6IHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBsZWF2ZXMgdGhlIHNjZW5lXG4gICAqL1xuICBvbkxlYXZlU2NlbmU6IHtcbiAgICB1c2VySWQ6IHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2V0cyB0cmlnZ2VyZWQgYWZ0ZXIgcmVjZWl2aW5nIGEgY29tbXMgbWVzc2FnZS5cbiAgICovXG4gIGNvbW1zOiB7XG4gICAgc2VuZGVyOiBzdHJpbmdcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRyaWdnZXJlZCBvbmNlIHRoZSBzY2VuZSBzaG91bGQgc3RhcnQuXG4gICAqL1xuICBzY2VuZVN0YXJ0OiB1bmtub3duXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgdHJpZ2dlcmVkIG9uY2UgdGhlIGJ1aWxkZXIgc2NlbmUgaXMgbG9hZGVkLlxuICAgKi9cbiAgYnVpbGRlclNjZW5lU3RhcnQ6IHVua25vd25cblxuICAvKipcbiAgICogVGhpcyBpcyB0cmlnZ2VyZWQgb25jZSB0aGUgYnVpbGRlciBzY2VuZSBpcyB1bmxvYWRlZC5cbiAgICovXG4gIGJ1aWxkZXJTY2VuZVVubG9hZGVkOiB1bmtub3duXG5cbiAgLyoqXG4gICAqIEFmdGVyIGNoZWNraW5nIGVudGl0aWVzIG91dHNpZGUgdGhlIGZlbmNlcywgaWYgYW55IGlzIG91dHNpZGUsIHRoaXMgZXZlbnRcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQgd2l0aCBhbGwgdGhlIGVudGl0aWVzIG91dHNpZGUgdGhlIHNjZW5lLlxuICAgKi9cbiAgZW50aXRpZXNPdXRPZkJvdW5kYXJpZXM6IHtcbiAgICBlbnRpdGllczogc3RyaW5nW11cbiAgfVxuXG4gIHV1aWRFdmVudDoge1xuICAgIHV1aWQ6IHN0cmluZ1xuICAgIHBheWxvYWQ6IGFueVxuICB9XG5cbiAgb25UZXh0U3VibWl0OiB7XG4gICAgdGV4dDogc3RyaW5nXG4gIH1cblxuICBtZXRyaWNzVXBkYXRlOiB7XG4gICAgZ2l2ZW46IFJlY29yZDxzdHJpbmcsIG51bWJlcj5cbiAgICBsaW1pdDogUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuICB9XG5cbiAgbGltaXRzRXhjZWVkZWQ6IHtcbiAgICBnaXZlbjogUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuICAgIGxpbWl0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+XG4gIH1cblxuICAvKiogRm9yIGdpem1vcyAqL1xuICBnaXptb0V2ZW50OiBHaXptb0RyYWdFbmRFdmVudCB8IEdpem1vU2VsZWN0ZWRFdmVudFxuXG4gIGV4dGVybmFsQWN0aW9uOiB7XG4gICAgdHlwZTogc3RyaW5nXG4gICAgW2tleTogc3RyaW5nXTogYW55XG4gIH1cblxuICBzdGF0ZUV2ZW50OiB7XG4gICAgdHlwZTogc3RyaW5nXG4gICAgcGF5bG9hZDogYW55XG4gIH1cblxuICAvKiogVGhpcyBpcyB0cmlnZ2VyZWQgYXQgbGVhc3QgZm9yIGVhY2ggdmlkZW9TdGF0dXMgY2hhbmdlICovXG4gIHZpZGVvRXZlbnQ6IHtcbiAgICBjb21wb25lbnRJZDogc3RyaW5nXG4gICAgdmlkZW9DbGlwSWQ6IHN0cmluZ1xuICAgIC8qKiBTdGF0dXMsIGNhbiBiZSBOT05FID0gMCwgRVJST1IgPSAxLCBMT0FESU5HID0gMiwgUkVBRFkgPSAzLCBQTEFZSU5HID0gNCxCVUZGRVJJTkcgPSA1ICovXG4gICAgdmlkZW9TdGF0dXM6IG51bWJlclxuICAgIC8qKiBDdXJyZW50IG9mZnNldCBwb3NpdGlvbiBpbiBzZWNvbmRzICovXG4gICAgY3VycmVudE9mZnNldDogbnVtYmVyXG4gICAgLyoqIFZpZGVvIGxlbmd0aCBpbiBzZWNvbmRzLiBDYW4gYmUgLTEgKi9cbiAgICB0b3RhbFZpZGVvTGVuZ3RoOiBudW1iZXJcbiAgfVxuXG4gIC8qKiBUaGlzIGlzIHRyaWdnZXIgZXZlcnl0aW1lIGEgcHJvZmlsZSBpcyBjaGFuZ2VkICovXG4gIHByb2ZpbGVDaGFuZ2VkOiB7XG4gICAgZXRoQWRkcmVzczogc3RyaW5nXG4gICAgdmVyc2lvbjogbnVtYmVyXG4gIH1cblxuICAvKiogVHJpZ2dlcmVkIHdoZW4gcGVlcidzIGF2YXRhciBpcyBjb25uZWN0ZWQgYW5kIHZpc2libGUgKi9cbiAgcGxheWVyQ29ubmVjdGVkOiB7XG4gICAgdXNlcklkOiBzdHJpbmdcbiAgfVxuXG4gIC8qKiBUcmlnZ2VyZWQgd2hlbiBwZWVyIGRpc2Nvbm5lY3QgYW5kL29yIGl0IGF2YXRhciBpcyBzZXQgaW52aXNpYmxlIGJ5IGNvbW1zICovXG4gIHBsYXllckRpc2Nvbm5lY3RlZDoge1xuICAgIHVzZXJJZDogc3RyaW5nXG4gIH1cblxuICAvKiogVHJpZ2dlcmVkIHdoZW4gY3VycmVudCByZWFsbSBvciBpc2xhbmQgY2hhbmdlcyAqL1xuICBvblJlYWxtQ2hhbmdlZDoge1xuICAgIGRvbWFpbjogc3RyaW5nXG4gICAgcm9vbTogc3RyaW5nXG4gICAgc2VydmVyTmFtZTogc3RyaW5nXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZ1xuICB9XG5cbiAgLyoqIFRyaWdnZXJlZCB3aGVuIG90aGVyIHBsYXllcidzIGF2YXRhciBpcyBjbGlja2VkICovXG4gIHBsYXllckNsaWNrZWQ6IHtcbiAgICB1c2VySWQ6IHN0cmluZ1xuICAgIHJheToge1xuICAgICAgb3JpZ2luOiBWZWN0b3IzVHlwZVxuICAgICAgZGlyZWN0aW9uOiBWZWN0b3IzVHlwZVxuICAgICAgZGlzdGFuY2U6IG51bWJlclxuICAgIH1cbiAgfVxuXG4gIC8qKiBUcmlnZ2VyZWQgd2hlbiBwb2ludGVyIHN0YXJ0IGhvdmVyaW5nIGFuIGVudGl0aWVzJyBzaGFwZSAqL1xuICBwb2ludGVySG92ZXJFbnRlcjogdW5rbm93blxuXG4gIC8qKiBUcmlnZ2VyZWQgd2hlbiBwb2ludGVyIHN0b3AgaG92ZXJpbmcgYW4gZW50aXRpZXMnIHNoYXBlICovXG4gIHBvaW50ZXJIb3ZlckV4aXQ6IHVua25vd25cbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgY2FsbGJhY2sgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIE9ic2VydmFibGVcbiAqIGNvbnN0cnVjdG9yIHRvIHN1YnNjcmliZSB0byB0aGUgZXZlbnRzIG9mIHRoZSBEZWNlbnRyYWxhbmRJbnRlcmZhY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3Vic2NyaWJlcihldmVudE5hbWU6IHN0cmluZykge1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHN1YnNjcmliZUZ1bmN0aW9uKHsgZXZlbnRJZDogZXZlbnROYW1lIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpXG4gIH1cbn1cblxuLyoqXG4gKiBUaGVzZSBldmVudHMgYXJlIHRyaWdnZXJlZCBhZnRlciB5b3VyIGNoYXJhY3RlciBlbnRlcnMgdGhlIHNjZW5lLlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uRW50ZXJTY2VuZU9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydvbkVudGVyU2NlbmUnXT4oY3JlYXRlU3Vic2NyaWJlcignb25FbnRlclNjZW5lJykpXG4vKiogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuIFVzZSBvbkVudGVyU2NlbmVPYnNlcnZhYmxlIGluc3RlYWQuICovXG5leHBvcnQgY29uc3Qgb25FbnRlclNjZW5lID0gb25FbnRlclNjZW5lT2JzZXJ2YWJsZVxuXG4vKipcbiAqIFRoZXNlIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIGFmdGVyIHlvdXIgY2hhcmFjdGVyIGxlYXZlcyB0aGUgc2NlbmUuXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ29uTGVhdmVTY2VuZSddPihjcmVhdGVTdWJzY3JpYmVyKCdvbkxlYXZlU2NlbmUnKSlcblxuLyoqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLiBVc2Ugb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZSBpbnN0ZWFkLiAqL1xuZXhwb3J0IGNvbnN0IG9uTGVhdmVTY2VuZSA9IG9uTGVhdmVTY2VuZU9ic2VydmFibGVcblxuLyoqXG4gKiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBhZnRlciBhbGwgdGhlIHJlc291cmNlcyBvZiB0aGUgc2NlbmUgd2VyZSBsb2FkZWQgKG1vZGVscywgdGV4dHVyZXMsIGV0Yy4uLilcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblNjZW5lUmVhZHlPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1snc2NlbmVTdGFydCddPihjcmVhdGVTdWJzY3JpYmVyKCdzY2VuZVN0YXJ0JykpXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUGxheWVyRXhwcmVzc2lvbk9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydwbGF5ZXJFeHByZXNzaW9uJ10+KFxuICBjcmVhdGVTdWJzY3JpYmVyKCdwbGF5ZXJFeHByZXNzaW9uJylcbilcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25WaWRlb0V2ZW50ID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1sndmlkZW9FdmVudCddPihjcmVhdGVTdWJzY3JpYmVyKCd2aWRlb0V2ZW50JykpXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUHJvZmlsZUNoYW5nZWQgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydwcm9maWxlQ2hhbmdlZCddPihjcmVhdGVTdWJzY3JpYmVyKCdwcm9maWxlQ2hhbmdlZCcpKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblBsYXllckNvbm5lY3RlZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydwbGF5ZXJDb25uZWN0ZWQnXT4oXG4gIGNyZWF0ZVN1YnNjcmliZXIoJ3BsYXllckNvbm5lY3RlZCcpXG4pXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUGxheWVyRGlzY29ubmVjdGVkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ3BsYXllckRpc2Nvbm5lY3RlZCddPihcbiAgY3JlYXRlU3Vic2NyaWJlcigncGxheWVyRGlzY29ubmVjdGVkJylcbilcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25SZWFsbUNoYW5nZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1snb25SZWFsbUNoYW5nZWQnXT4oY3JlYXRlU3Vic2NyaWJlcignb25SZWFsbUNoYW5nZWQnKSlcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25QbGF5ZXJDbGlja2VkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ3BsYXllckNsaWNrZWQnXT4oY3JlYXRlU3Vic2NyaWJlcigncGxheWVyQ2xpY2tlZCcpKVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uQ29tbXNNZXNzYWdlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1snY29tbXMnXT4oY3JlYXRlU3Vic2NyaWJlcignY29tbXMnKSlcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U3Vic2NyaWJlRnVuY3Rpb24oZm46IChldmVudDogeyBldmVudElkOiBzdHJpbmcgfSkgPT4gUHJvbWlzZTxhbnk+KSB7XG4gIHN1YnNjcmliZUZ1bmN0aW9uID0gZm5cbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBkZXByZWNhdGVkIHRoaXMgaXMgYW4gT0xEIEFQSS5cbiAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgU0RLNiBzZW5kQmF0Y2ggdG8gcG9sbCBldmVudHMgZnJvbSB0aGUgcmVuZGVyZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBvbGxFdmVudHMoc2VuZEJhdGNoOiAoYm9keTogTWFueUVudGl0eUFjdGlvbikgPT4gUHJvbWlzZTxTZW5kQmF0Y2hSZXNwb25zZT4pIHtcbiAgY29uc3QgeyBldmVudHMgfSA9IGF3YWl0IHNlbmRCYXRjaCh7IGFjdGlvbnM6IFtdIH0pXG4gIGZvciAoY29uc3QgZSBvZiBldmVudHMpIHtcbiAgICBpZiAoZS5nZW5lcmljKSB7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShlLmdlbmVyaWMuZXZlbnREYXRhKVxuICAgICAgc3dpdGNoIChlLmdlbmVyaWMuZXZlbnRJZCkge1xuICAgICAgICBjYXNlICdvbkVudGVyU2NlbmUnOiB7XG4gICAgICAgICAgb25FbnRlclNjZW5lT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZGF0YSBhcyBJRXZlbnRzWydvbkVudGVyU2NlbmUnXSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ29uTGVhdmVTY2VuZSc6IHtcbiAgICAgICAgICBvbkxlYXZlU2NlbmVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhkYXRhIGFzIElFdmVudHNbJ29uTGVhdmVTY2VuZSddKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnc2NlbmVTdGFydCc6IHtcbiAgICAgICAgICBvblNjZW5lUmVhZHlPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhkYXRhIGFzIElFdmVudHNbJ3NjZW5lU3RhcnQnXSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3BsYXllckV4cHJlc3Npb24nOiB7XG4gICAgICAgICAgb25QbGF5ZXJFeHByZXNzaW9uT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZGF0YSBhcyBJRXZlbnRzWydwbGF5ZXJFeHByZXNzaW9uJ10pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICd2aWRlb0V2ZW50Jzoge1xuICAgICAgICAgIGNvbnN0IHZpZGVvRGF0YSA9IGRhdGEgYXMgSUV2ZW50c1sndmlkZW9FdmVudCddXG4gICAgICAgICAgb25WaWRlb0V2ZW50Lm5vdGlmeU9ic2VydmVycyh2aWRlb0RhdGEpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdwcm9maWxlQ2hhbmdlZCc6IHtcbiAgICAgICAgICBvblByb2ZpbGVDaGFuZ2VkLm5vdGlmeU9ic2VydmVycyhkYXRhIGFzIElFdmVudHNbJ3Byb2ZpbGVDaGFuZ2VkJ10pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdwbGF5ZXJDb25uZWN0ZWQnOiB7XG4gICAgICAgICAgb25QbGF5ZXJDb25uZWN0ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhkYXRhIGFzIElFdmVudHNbJ3BsYXllckNvbm5lY3RlZCddKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAncGxheWVyRGlzY29ubmVjdGVkJzoge1xuICAgICAgICAgIG9uUGxheWVyRGlzY29ubmVjdGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZGF0YSBhcyBJRXZlbnRzWydwbGF5ZXJEaXNjb25uZWN0ZWQnXSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ29uUmVhbG1DaGFuZ2VkJzoge1xuICAgICAgICAgIG9uUmVhbG1DaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoZGF0YSBhcyBJRXZlbnRzWydvblJlYWxtQ2hhbmdlZCddKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAncGxheWVyQ2xpY2tlZCc6IHtcbiAgICAgICAgICBvblBsYXllckNsaWNrZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhkYXRhIGFzIElFdmVudHNbJ3BsYXllckNsaWNrZWQnXSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2NvbW1zJzoge1xuICAgICAgICAgIG9uQ29tbXNNZXNzYWdlLm5vdGlmeU9ic2VydmVycyhkYXRhIGFzIElFdmVudHNbJ2NvbW1zJ10pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
146
|
+
const SDK7ComponentsObservable = processObservables();
|
|
147
|
+
function processObservables() {
|
|
148
|
+
if (globalThis.__OBSERVABLES_FALLBACK_SUPPORT)
|
|
149
|
+
return;
|
|
150
|
+
const subscriptions = new Set();
|
|
151
|
+
function subscribe(eventName) {
|
|
152
|
+
if (subscriptions.has(eventName))
|
|
153
|
+
return;
|
|
154
|
+
switch (eventName) {
|
|
155
|
+
case 'playerClicked': {
|
|
156
|
+
subscribePlayerClick();
|
|
157
|
+
}
|
|
158
|
+
case 'onEnterScene':
|
|
159
|
+
case 'playerConnected': {
|
|
160
|
+
subscribeEnterScene();
|
|
161
|
+
}
|
|
162
|
+
case 'onLeaveScene':
|
|
163
|
+
case 'playerDisconnected': {
|
|
164
|
+
subscribeLeaveScene();
|
|
165
|
+
}
|
|
166
|
+
case 'onRealmChanged': {
|
|
167
|
+
subscribeRealmChange();
|
|
168
|
+
}
|
|
169
|
+
case 'playerExpression': {
|
|
170
|
+
subscribePlayerExpression();
|
|
171
|
+
}
|
|
172
|
+
case 'profileChanged': {
|
|
173
|
+
subscribeProfileChange();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
subscriptions.add(eventName);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* PLAYER ENTER/CONNECTED observable
|
|
180
|
+
*/
|
|
181
|
+
function subscribeEnterScene() {
|
|
182
|
+
players.onEnterScene((player) => {
|
|
183
|
+
if (subscriptions.has('onEnterScene')) {
|
|
184
|
+
onEnterSceneObservable.notifyObservers({ userId: player.userId });
|
|
185
|
+
}
|
|
186
|
+
if (subscriptions.has('playerConnected')) {
|
|
187
|
+
onPlayerConnectedObservable.notifyObservers({ userId: player.userId });
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* PLAYER LEAVE/DISCONNECTED observable
|
|
193
|
+
*/
|
|
194
|
+
function subscribeLeaveScene() {
|
|
195
|
+
players.onLeaveScene((userId) => {
|
|
196
|
+
if (subscriptions.has('onLeaveScene')) {
|
|
197
|
+
onLeaveSceneObservable.notifyObservers({ userId });
|
|
198
|
+
}
|
|
199
|
+
if (subscriptions.has('playerDisconnected')) {
|
|
200
|
+
onPlayerDisconnectedObservable.notifyObservers({ userId });
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* REALM CHANGE observable
|
|
206
|
+
*/
|
|
207
|
+
function subscribeRealmChange() {
|
|
208
|
+
RealmInfo.onChange(engine.RootEntity, (value) => {
|
|
209
|
+
if (value) {
|
|
210
|
+
onRealmChangedObservable.notifyObservers({
|
|
211
|
+
domain: value.baseUrl,
|
|
212
|
+
displayName: value.realmName,
|
|
213
|
+
room: value.room ?? '',
|
|
214
|
+
serverName: value.realmName
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* PLAYER/AVATAR CLICKED observable
|
|
221
|
+
*/
|
|
222
|
+
function subscribePlayerClick() {
|
|
223
|
+
const playerEntities = new Set();
|
|
224
|
+
engine.addSystem(() => {
|
|
225
|
+
for (const [entity] of engine.getEntitiesWith(PlayerIdentityData)) {
|
|
226
|
+
if (playerEntities.has(entity))
|
|
227
|
+
return;
|
|
228
|
+
playerEntities.add(entity);
|
|
229
|
+
PointerEventsResult.onChange(entity, (data) => {
|
|
230
|
+
if (data?.hit) {
|
|
231
|
+
onPlayerClickedObservable.notifyObservers({
|
|
232
|
+
userId: PlayerIdentityData.getOrNull(entity)?.address ?? '',
|
|
233
|
+
ray: {
|
|
234
|
+
direction: data.hit.direction,
|
|
235
|
+
distance: data.hit.length,
|
|
236
|
+
origin: data.hit.globalOrigin
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Player expression observable
|
|
246
|
+
*/
|
|
247
|
+
function subscribePlayerExpression() {
|
|
248
|
+
AvatarEmoteCommand.onChange(engine.PlayerEntity, (value) => {
|
|
249
|
+
onPlayerExpressionObservable.notifyObservers({ expressionId: value?.emoteUrn ?? '' });
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* PROFILE CHANGE observable
|
|
254
|
+
*/
|
|
255
|
+
function subscribeProfileChange() {
|
|
256
|
+
AvatarBase.onChange(engine.PlayerEntity, () => {
|
|
257
|
+
if (!profileAddress)
|
|
258
|
+
return;
|
|
259
|
+
onProfileChanged.notifyObservers({ ethAddress: profileAddress, version: 0 });
|
|
260
|
+
});
|
|
261
|
+
AvatarEquippedData.onChange(engine.PlayerEntity, () => {
|
|
262
|
+
if (!profileAddress)
|
|
263
|
+
return;
|
|
264
|
+
onProfileChanged.notifyObservers({ ethAddress: profileAddress, version: 0 });
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
// Flag to call once the scene is initalized.
|
|
268
|
+
let sceneReady = false;
|
|
269
|
+
let profileAddress;
|
|
270
|
+
function observableSystem() {
|
|
271
|
+
if (sceneReady && profileAddress) {
|
|
272
|
+
return engine.removeSystem(observableSystem);
|
|
273
|
+
}
|
|
274
|
+
if (!sceneReady) {
|
|
275
|
+
sceneReady = true;
|
|
276
|
+
onSceneReadyObservable.notifyObservers({});
|
|
277
|
+
}
|
|
278
|
+
if (profileAddress)
|
|
279
|
+
return;
|
|
280
|
+
profileAddress = PlayerIdentityData.getOrNull(engine.PlayerEntity)?.address;
|
|
281
|
+
}
|
|
282
|
+
engine.addSystem(observableSystem);
|
|
283
|
+
return { subscribe };
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvb2JzZXJ2YWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2xELE9BQU8sRUFDTCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUVsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLFNBQVMsRUFFVCxNQUFNLEVBQ1AsTUFBTSxVQUFVLENBQUE7QUFDakIsT0FBTyxFQUF1QyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNsRixPQUFPLE9BQU8sTUFBTSxXQUFXLENBQUE7QUEwRi9COzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFNBQXdCO0lBQ2hELE9BQU8sR0FBRyxFQUFFO1FBQ1YsSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFLLFVBQWtCLENBQUMsOEJBQThCLEVBQUU7WUFDL0UsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUN2RDthQUFNO1lBQ0wsd0JBQXdCLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1NBQy9DO0lBQ0gsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLFVBQVUsQ0FBMEIsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQTtBQUMvRzs7OE1BRThNO0FBQzlNLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxzQkFBc0IsQ0FBQTtBQUVsRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxVQUFVLENBQTBCLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7QUFFL0c7OzhNQUU4TTtBQUM5TSxNQUFNLENBQUMs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QzdDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLFVBQVUsR0FBRyxJQUFJLENBQUE7WUFDakIsc0JBQXNCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQzNDO1FBQ0QsSUFBSSxjQUFjO1lBQUUsT0FBTTtRQUMxQixjQUFjLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUE7SUFDN0UsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUVsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUE7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuL2ludGVybmFsL09ic2VydmFibGUnXG5pbXBvcnQge1xuICBBdmF0YXJCYXNlLFxuICBBdmF0YXJFbW90ZUNvbW1hbmQsXG4gIEF2YXRhckVxdWlwcGVkRGF0YSxcbiAgRW50aXR5LFxuICBQbGF5ZXJJZGVudGl0eURhdGEsXG4gIFBvaW50ZXJFdmVudHNSZXN1bHQsXG4gIFJlYWxtSW5mbyxcbiAgVmVjdG9yM1R5cGUsXG4gIGVuZ2luZVxufSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IE1hbnlFbnRpdHlBY3Rpb24sIFNlbmRCYXRjaFJlc3BvbnNlLCBzdWJzY3JpYmUgfSBmcm9tICd+c3lzdGVtL0VuZ2luZUFwaSdcbmltcG9ydCBwbGF5ZXJzIGZyb20gJy4vcGxheWVycydcblxuLy8vIC0tLSBFVkVOVFMgLS0tXG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgdHlwZSBJRXZlbnROYW1lcyA9IGtleW9mIElFdmVudHNcblxuLyoqXG4gKiBAcHVibGljXG4gKiBOb3RlOiBEb24ndCB1c2UgYG9uYCBwcmVmaXggZm9yIElFdmVudHMgdG8gYXZvaWQgcmVkdW5kYW5jeSB3aXRoIGBldmVudC5vbihcIm9uRXZlbnROYW1lXCIpYCBzeW50YXguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUV2ZW50cyB7XG4gIHBsYXllckV4cHJlc3Npb246IHtcbiAgICBleHByZXNzaW9uSWQ6IHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBlbnRlcnMgdGhlIHNjZW5lXG4gICAqL1xuICBvbkVudGVyU2NlbmU6IHtcbiAgICB1c2VySWQ6IHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBsZWF2ZXMgdGhlIHNjZW5lXG4gICAqL1xuICBvbkxlYXZlU2NlbmU6IHtcbiAgICB1c2VySWQ6IHN0cmluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgZ2V0cyB0cmlnZ2VyZWQgYWZ0ZXIgcmVjZWl2aW5nIGEgY29tbXMgbWVzc2FnZS5cbiAgICovXG4gIGNvbW1zOiB7XG4gICAgc2VuZGVyOiBzdHJpbmdcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRyaWdnZXJlZCBvbmNlIHRoZSBzY2VuZSBzaG91bGQgc3RhcnQuXG4gICAqL1xuICBzY2VuZVN0YXJ0OiB1bmtub3duXG5cbiAgLyoqIFRoaXMgaXMgdHJpZ2dlcmVkIGF0IGxlYXN0IGZvciBlYWNoIHZpZGVvU3RhdHVzIGNoYW5nZSAqL1xuICB2aWRlb0V2ZW50OiB7XG4gICAgY29tcG9uZW50SWQ6IHN0cmluZ1xuICAgIHZpZGVvQ2xpcElkOiBzdHJpbmdcbiAgICAvKiogU3RhdHVzLCBjYW4gYmUgTk9ORSA9IDAsIEVSUk9SID0gMSwgTE9BRElORyA9IDIsIFJFQURZID0gMywgUExBWUlORyA9IDQsQlVGRkVSSU5HID0gNSAqL1xuICAgIHZpZGVvU3RhdHVzOiBudW1iZXJcbiAgICAvKiogQ3VycmVudCBvZmZzZXQgcG9zaXRpb24gaW4gc2Vjb25kcyAqL1xuICAgIGN1cnJlbnRPZmZzZXQ6IG51bWJlclxuICAgIC8qKiBWaWRlbyBsZW5ndGggaW4gc2Vjb25kcy4gQ2FuIGJlIC0xICovXG4gICAgdG90YWxWaWRlb0xlbmd0aDogbnVtYmVyXG4gIH1cblxuICAvKiogVGhpcyBpcyB0cmlnZ2VyIGV2ZXJ5dGltZSBhIHByb2ZpbGUgaXMgY2hhbmdlZCAqL1xuICBwcm9maWxlQ2hhbmdlZDoge1xuICAgIGV0aEFkZHJlc3M6IHN0cmluZ1xuICAgIHZlcnNpb246IG51bWJlclxuICB9XG5cbiAgLyoqIFRyaWdnZXJlZCB3aGVuIHBlZXIncyBhdmF0YXIgaXMgY29ubmVjdGVkIGFuZCB2aXNpYmxlICovXG4gIHBsYXllckNvbm5lY3RlZDoge1xuICAgIHVzZXJJZDogc3RyaW5nXG4gIH1cblxuICAvKiogVHJpZ2dlcmVkIHdoZW4gcGVlciBkaXNjb25uZWN0IGFuZC9vciBpdCBhdmF0YXIgaXMgc2V0IGludmlzaWJsZSBieSBjb21tcyAqL1xuICBwbGF5ZXJEaXNjb25uZWN0ZWQ6IHtcbiAgICB1c2VySWQ6IHN0cmluZ1xuICB9XG5cbiAgLyoqIFRyaWdnZXJlZCB3aGVuIGN1cnJlbnQgcmVhbG0gb3IgaXNsYW5kIGNoYW5nZXMgKi9cbiAgb25SZWFsbUNoYW5nZWQ6IHtcbiAgICBkb21haW46IHN0cmluZ1xuICAgIHJvb206IHN0cmluZ1xuICAgIHNlcnZlck5hbWU6IHN0cmluZ1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmdcbiAgfVxuXG4gIC8qKiBUcmlnZ2VyZWQgd2hlbiBvdGhlciBwbGF5ZXIncyBhdmF0YXIgaXMgY2xpY2tlZCAqL1xuICBwbGF5ZXJDbGlja2VkOiB7XG4gICAgdXNlcklkOiBzdHJpbmdcbiAgICByYXk6IHtcbiAgICAgIG9yaWdpbjogVmVjdG9yM1R5cGVcbiAgICAgIGRpcmVjdGlvbjogVmVjdG9yM1R5cGVcbiAgICAgIGRpc3RhbmNlOiBudW1iZXJcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgY2FsbGJhY2sgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIE9ic2VydmFibGVcbiAqIGNvbnN0cnVjdG9yIHRvIHN1YnNjcmliZSB0byB0aGUgZXZlbnRzIG9mIHRoZSBEZWNlbnRyYWxhbmRJbnRlcmZhY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3Vic2NyaWJlcihldmVudE5hbWU6IGtleW9mIElFdmVudHMpIHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoZXZlbnROYW1lID09PSAnY29tbXMnIHx8IChnbG9iYWxUaGlzIGFzIGFueSkuX19PQlNFUlZBQkxFU19GQUxMQkFDS19TVVBQT1JUKSB7XG4gICAgICBzdWJzY3JpYmUoeyBldmVudElkOiBldmVudE5hbWUgfSkuY2F0Y2goY29uc29sZS5lcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgU0RLN0NvbXBvbmVudHNPYnNlcnZhYmxlPy5zdWJzY3JpYmUoZXZlbnROYW1lKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZXNlIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIGFmdGVyIHlvdXIgY2hhcmFjdGVyIGVudGVycyB0aGUgc2NlbmUuXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25FbnRlclNjZW5lT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ29uRW50ZXJTY2VuZSddPihjcmVhdGVTdWJzY3JpYmVyKCdvbkVudGVyU2NlbmUnKSlcbi8qKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC4gVXNlIG9uRW50ZXJTY2VuZU9ic2VydmFibGUgaW5zdGVhZC4gKi9cbmV4cG9ydCBjb25zdCBvbkVudGVyU2NlbmUgPSBvbkVudGVyU2NlbmVPYnNlcnZhYmxlXG5cbi8qKlxuICogVGhlc2UgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgYWZ0ZXIgeW91ciBjaGFyYWN0ZXIgbGVhdmVzIHRoZSBzY2VuZS5cbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvbkxlYXZlU2NlbmVPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1snb25MZWF2ZVNjZW5lJ10+KGNyZWF0ZVN1YnNjcmliZXIoJ29uTGVhdmVTY2VuZScpKVxuXG4vKiogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuIFVzZSBvbkxlYXZlU2NlbmVPYnNlcnZhYmxlIGluc3RlYWQuICovXG5leHBvcnQgY29uc3Qgb25MZWF2ZVNjZW5lID0gb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZVxuXG4vKipcbiAqIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIGFmdGVyIGFsbCB0aGUgcmVzb3VyY2VzIG9mIHRoZSBzY2VuZSB3ZXJlIGxvYWRlZCAobW9kZWxzLCB0ZXh0dXJlcywgZXRjLi4uKVxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uU2NlbmVSZWFkeU9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydzY2VuZVN0YXJ0J10+KGNyZWF0ZVN1YnNjcmliZXIoJ3NjZW5lU3RhcnQnKSlcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25QbGF5ZXJFeHByZXNzaW9uT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ3BsYXllckV4cHJlc3Npb24nXT4oXG4gIGNyZWF0ZVN1YnNjcmliZXIoJ3BsYXllckV4cHJlc3Npb24nKVxuKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblZpZGVvRXZlbnQgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWyd2aWRlb0V2ZW50J10+KGNyZWF0ZVN1YnNjcmliZXIoJ3ZpZGVvRXZlbnQnKSlcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25Qcm9maWxlQ2hhbmdlZCA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ3Byb2ZpbGVDaGFuZ2VkJ10+KGNyZWF0ZVN1YnNjcmliZXIoJ3Byb2ZpbGVDaGFuZ2VkJykpXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUGxheWVyQ29ubmVjdGVkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ3BsYXllckNvbm5lY3RlZCddPihcbiAgY3JlYXRlU3Vic2NyaWJlcigncGxheWVyQ29ubmVjdGVkJylcbilcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25QbGF5ZXJEaXNjb25uZWN0ZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1sncGxheWVyRGlzY29ubmVjdGVkJ10+KFxuICBjcmVhdGVTdWJzY3JpYmVyKCdwbGF5ZXJEaXNjb25uZWN0ZWQnKVxuKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblJlYWxtQ2hhbmdlZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydvblJlYWxtQ2hhbmdlZCddPihjcmVhdGVTdWJzY3JpYmVyKCdvblJlYWxtQ2hhbmdlZCcpKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblBsYXllckNsaWNrZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1sncGxheWVyQ2xpY2tlZCddPihjcmVhdGVTdWJzY3JpYmVyKCdwbGF5ZXJDbGlja2VkJykpXG5cbi8qKlxuICogQGludGVybmFsXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25Db21tc01lc3NhZ2UgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydjb21tcyddPihjcmVhdGVTdWJzY3JpYmVyKCdjb21tcycpKVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQGRlcHJlY2F0ZWQgdGhpcyBpcyBhbiBPTEQgQVBJLlxuICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBTREs2IHNlbmRCYXRjaCB0byBwb2xsIGV2ZW50cyBmcm9tIHRoZSByZW5kZXJlclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcG9sbEV2ZW50cyhzZW5kQmF0Y2g6IChib2R5OiBNYW55RW50aXR5QWN0aW9uKSA9PiBQcm9taXNlPFNlbmRCYXRjaFJlc3BvbnNlPikge1xuICBjb25zdCB7IGV2ZW50cyB9ID0gYXdhaXQgc2VuZEJhdGNoKHsgYWN0aW9uczogW10gfSlcbiAgZm9yIChjb25zdCBlIG9mIGV2ZW50cykge1xuICAgIGlmIChlLmdlbmVyaWMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGUuZ2VuZXJpYy5ldmVudERhdGEpXG4gICAgICBzd2l0Y2ggKGUuZ2VuZXJpYy5ldmVudElkKSB7XG4gICAgICAgIGNhc2UgJ29uRW50ZXJTY2VuZSc6IHtcbiAgICAgICAgICBvbkVudGVyU2NlbmVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhkYXRhIGFzIElFdmVudHNbJ29uRW50ZXJTY2VuZSddKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnb25MZWF2ZVNjZW5lJzoge1xuICAgICAgICAgIG9uTGVhdmVTY2VuZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGRhdGEgYXMgSUV2ZW50c1snb25MZWF2ZVNjZW5lJ10pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdzY2VuZVN0YXJ0Jzoge1xuICAgICAgICAgIG9uU2NlbmVSZWFkeU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGRhdGEgYXMgSUV2ZW50c1snc2NlbmVTdGFydCddKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAncGxheWVyRXhwcmVzc2lvbic6IHtcbiAgICAgICAgICBvblBsYXllckV4cHJlc3Npb25PYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhkYXRhIGFzIElFdmVudHNbJ3BsYXllckV4cHJlc3Npb24nXSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3ZpZGVvRXZlbnQnOiB7XG4gICAgICAgICAgY29uc3QgdmlkZW9EYXRhID0gZGF0YSBhcyBJRXZlbnRzWyd2aWRlb0V2ZW50J11cbiAgICAgICAgICBvblZpZGVvRXZlbnQubm90aWZ5T2JzZXJ2ZXJzKHZpZGVvRGF0YSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3Byb2ZpbGVDaGFuZ2VkJzoge1xuICAgICAgICAgIG9uUHJvZmlsZUNoYW5nZWQubm90aWZ5T2JzZXJ2ZXJzKGRhdGEgYXMgSUV2ZW50c1sncHJvZmlsZUNoYW5nZWQnXSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3BsYXllckNvbm5lY3RlZCc6IHtcbiAgICAgICAgICBvblBsYXllckNvbm5lY3RlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGRhdGEgYXMgSUV2ZW50c1sncGxheWVyQ29ubmVjdGVkJ10pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdwbGF5ZXJEaXNjb25uZWN0ZWQnOiB7XG4gICAgICAgICAgb25QbGF5ZXJEaXNjb25uZWN0ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhkYXRhIGFzIElFdmVudHNbJ3BsYXllckRpc2Nvbm5lY3RlZCddKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnb25SZWFsbUNoYW5nZWQnOiB7XG4gICAgICAgICAgb25SZWFsbUNoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhkYXRhIGFzIElFdmVudHNbJ29uUmVhbG1DaGFuZ2VkJ10pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdwbGF5ZXJDbGlja2VkJzoge1xuICAgICAgICAgIG9uUGxheWVyQ2xpY2tlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKGRhdGEgYXMgSUV2ZW50c1sncGxheWVyQ2xpY2tlZCddKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnY29tbXMnOiB7XG4gICAgICAgICAgb25Db21tc01lc3NhZ2Uubm90aWZ5T2JzZXJ2ZXJzKGRhdGEgYXMgSUV2ZW50c1snY29tbXMnXSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IFNESzdDb21wb25lbnRzT2JzZXJ2YWJsZSA9IHByb2Nlc3NPYnNlcnZhYmxlcygpXG5mdW5jdGlvbiBwcm9jZXNzT2JzZXJ2YWJsZXMoKSB7XG4gIGlmICgoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fT0JTRVJWQUJMRVNfRkFMTEJBQ0tfU1VQUE9SVCkgcmV0dXJuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBuZXcgU2V0PGtleW9mIElFdmVudHM+KClcblxuICBmdW5jdGlvbiBzdWJzY3JpYmUoZXZlbnROYW1lOiBrZXlvZiBJRXZlbnRzKSB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbnMuaGFzKGV2ZW50TmFtZSkpIHJldHVyblxuICAgIHN3aXRjaCAoZXZlbnROYW1lKSB7XG4gICAgICBjYXNlICdwbGF5ZXJDbGlja2VkJzoge1xuICAgICAgICBzdWJzY3JpYmVQbGF5ZXJDbGljaygpXG4gICAgICB9XG4gICAgICBjYXNlICdvbkVudGVyU2NlbmUnOlxuICAgICAgY2FzZSAncGxheWVyQ29ubmVjdGVkJzoge1xuICAgICAgICBzdWJzY3JpYmVFbnRlclNjZW5lKClcbiAgICAgIH1cbiAgICAgIGNhc2UgJ29uTGVhdmVTY2VuZSc6XG4gICAgICBjYXNlICdwbGF5ZXJEaXNjb25uZWN0ZWQnOiB7XG4gICAgICAgIHN1YnNjcmliZUxlYXZlU2NlbmUoKVxuICAgICAgfVxuICAgICAgY2FzZSAnb25SZWFsbUNoYW5nZWQnOiB7XG4gICAgICAgIHN1YnNjcmliZVJlYWxtQ2hhbmdlKClcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3BsYXllckV4cHJlc3Npb24nOiB7XG4gICAgICAgIHN1YnNjcmliZVBsYXllckV4cHJlc3Npb24oKVxuICAgICAgfVxuICAgICAgY2FzZSAncHJvZmlsZUNoYW5nZWQnOiB7XG4gICAgICAgIHN1YnNjcmliZVByb2ZpbGVDaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cbiAgICBzdWJzY3JpcHRpb25zLmFkZChldmVudE5hbWUpXG4gIH1cbiAgLyoqXG4gICAqIFBMQVlFUiBFTlRFUi9DT05ORUNURUQgb2JzZXJ2YWJsZVxuICAgKi9cbiAgZnVuY3Rpb24gc3Vic2NyaWJlRW50ZXJTY2VuZSgpIHtcbiAgICBwbGF5ZXJzLm9uRW50ZXJTY2VuZSgocGxheWVyKSA9PiB7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9ucy5oYXMoJ29uRW50ZXJTY2VuZScpKSB7XG4gICAgICAgIG9uRW50ZXJTY2VuZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHsgdXNlcklkOiBwbGF5ZXIudXNlcklkIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChzdWJzY3JpcHRpb25zLmhhcygncGxheWVyQ29ubmVjdGVkJykpIHtcbiAgICAgICAgb25QbGF5ZXJDb25uZWN0ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7IHVzZXJJZDogcGxheWVyLnVzZXJJZCB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgLyoqXG4gICAqIFBMQVlFUiBMRUFWRS9ESVNDT05ORUNURUQgb2JzZXJ2YWJsZVxuICAgKi9cbiAgZnVuY3Rpb24gc3Vic2NyaWJlTGVhdmVTY2VuZSgpIHtcbiAgICBwbGF5ZXJzLm9uTGVhdmVTY2VuZSgodXNlcklkKSA9PiB7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9ucy5oYXMoJ29uTGVhdmVTY2VuZScpKSB7XG4gICAgICAgIG9uTGVhdmVTY2VuZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKHsgdXNlcklkIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChzdWJzY3JpcHRpb25zLmhhcygncGxheWVyRGlzY29ubmVjdGVkJykpIHtcbiAgICAgICAgb25QbGF5ZXJEaXNjb25uZWN0ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7IHVzZXJJZCB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgLyoqXG4gICAqIFJFQUxNIENIQU5HRSBvYnNlcnZhYmxlXG4gICAqL1xuICBmdW5jdGlvbiBzdWJzY3JpYmVSZWFsbUNoYW5nZSgpIHtcbiAgICBSZWFsbUluZm8ub25DaGFuZ2UoZW5naW5lLlJvb3RFbnRpdHksICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIG9uUmVhbG1DaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe1xuICAgICAgICAgIGRvbWFpbjogdmFsdWUuYmFzZVVybCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogdmFsdWUucmVhbG1OYW1lLFxuICAgICAgICAgIHJvb206IHZhbHVlLnJvb20gPz8gJycsXG4gICAgICAgICAgc2VydmVyTmFtZTogdmFsdWUucmVhbG1OYW1lXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICAvKipcbiAgICogUExBWUVSL0FWQVRBUiBDTElDS0VEIG9ic2VydmFibGVcbiAgICovXG4gIGZ1bmN0aW9uIHN1YnNjcmliZVBsYXllckNsaWNrKCkge1xuICAgIGNvbnN0IHBsYXllckVudGl0aWVzID0gbmV3IFNldDxFbnRpdHk+KClcbiAgICBlbmdpbmUuYWRkU3lzdGVtKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZW5naW5lLmdldEVudGl0aWVzV2l0aChQbGF5ZXJJZGVudGl0eURhdGEpKSB7XG4gICAgICAgIGlmIChwbGF5ZXJFbnRpdGllcy5oYXMoZW50aXR5KSkgcmV0dXJuXG4gICAgICAgIHBsYXllckVudGl0aWVzLmFkZChlbnRpdHkpXG5cbiAgICAgICAgUG9pbnRlckV2ZW50c1Jlc3VsdC5vbkNoYW5nZShlbnRpdHksIChkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGE/LmhpdCkge1xuICAgICAgICAgICAgb25QbGF5ZXJDbGlja2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoe1xuICAgICAgICAgICAgICB1c2VySWQ6IFBsYXllcklkZW50aXR5RGF0YS5nZXRPck51bGwoZW50aXR5KT8uYWRkcmVzcyA/PyAnJyxcbiAgICAgICAgICAgICAgcmF5OiB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBkYXRhLmhpdC5kaXJlY3Rpb24hLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBkYXRhLmhpdC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgb3JpZ2luOiBkYXRhLmhpdC5nbG9iYWxPcmlnaW4hXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUGxheWVyIGV4cHJlc3Npb24gb2JzZXJ2YWJsZVxuICAgKi9cbiAgZnVuY3Rpb24gc3Vic2NyaWJlUGxheWVyRXhwcmVzc2lvbigpIHtcbiAgICBBdmF0YXJFbW90ZUNvbW1hbmQub25DaGFuZ2UoZW5naW5lLlBsYXllckVudGl0eSwgKHZhbHVlKSA9PiB7XG4gICAgICBvblBsYXllckV4cHJlc3Npb25PYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7IGV4cHJlc3Npb25JZDogdmFsdWU/LmVtb3RlVXJuID8/ICcnIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBQUk9GSUxFIENIQU5HRSBvYnNlcnZhYmxlXG4gICAqL1xuICBmdW5jdGlvbiBzdWJzY3JpYmVQcm9maWxlQ2hhbmdlKCkge1xuICAgIEF2YXRhckJhc2Uub25DaGFuZ2UoZW5naW5lLlBsYXllckVudGl0eSwgKCkgPT4ge1xuICAgICAgaWYgKCFwcm9maWxlQWRkcmVzcykgcmV0dXJuXG4gICAgICBvblByb2ZpbGVDaGFuZ2VkLm5vdGlmeU9ic2VydmVycyh7IGV0aEFkZHJlc3M6IHByb2ZpbGVBZGRyZXNzLCB2ZXJzaW9uOiAwIH0pXG4gICAgfSlcblxuICAgIEF2YXRhckVxdWlwcGVkRGF0YS5vbkNoYW5nZShlbmdpbmUuUGxheWVyRW50aXR5LCAoKSA9PiB7XG4gICAgICBpZiAoIXByb2ZpbGVBZGRyZXNzKSByZXR1cm5cbiAgICAgIG9uUHJvZmlsZUNoYW5nZWQubm90aWZ5T2JzZXJ2ZXJzKHsgZXRoQWRkcmVzczogcHJvZmlsZUFkZHJlc3MsIHZlcnNpb246IDAgfSlcbiAgICB9KVxuICB9XG5cbiAgLy8gRmxhZyB0byBjYWxsIG9uY2UgdGhlIHNjZW5lIGlzIGluaXRhbGl6ZWQuXG4gIGxldCBzY2VuZVJlYWR5ID0gZmFsc2VcbiAgbGV0IHByb2ZpbGVBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICBmdW5jdGlvbiBvYnNlcnZhYmxlU3lzdGVtKCkge1xuICAgIGlmIChzY2VuZVJlYWR5ICYmIHByb2ZpbGVBZGRyZXNzKSB7XG4gICAgICByZXR1cm4gZW5naW5lLnJlbW92ZVN5c3RlbShvYnNlcnZhYmxlU3lzdGVtKVxuICAgIH1cbiAgICBpZiAoIXNjZW5lUmVhZHkpIHtcbiAgICAgIHNjZW5lUmVhZHkgPSB0cnVlXG4gICAgICBvblNjZW5lUmVhZHlPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyh7fSlcbiAgICB9XG4gICAgaWYgKHByb2ZpbGVBZGRyZXNzKSByZXR1cm5cbiAgICBwcm9maWxlQWRkcmVzcyA9IFBsYXllcklkZW50aXR5RGF0YS5nZXRPck51bGwoZW5naW5lLlBsYXllckVudGl0eSk/LmFkZHJlc3NcbiAgfVxuXG4gIGVuZ2luZS5hZGRTeXN0ZW0ob2JzZXJ2YWJsZVN5c3RlbSlcblxuICByZXR1cm4geyBzdWJzY3JpYmUgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dcl/sdk",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "7.4.
|
|
4
|
+
"version": "7.4.19-8818968750.commit-6d2ec97",
|
|
5
5
|
"author": "Decentraland",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@dcl/ecs": "7.4.
|
|
7
|
+
"@dcl/ecs": "7.4.19-8818968750.commit-6d2ec97",
|
|
8
8
|
"@dcl/ecs-math": "2.0.2",
|
|
9
9
|
"@dcl/explorer": "1.0.161749-20240401171209.commit-d6d28f4",
|
|
10
|
-
"@dcl/js-runtime": "7.4.
|
|
11
|
-
"@dcl/react-ecs": "7.4.
|
|
12
|
-
"@dcl/sdk-commands": "7.4.
|
|
10
|
+
"@dcl/js-runtime": "7.4.19-8818968750.commit-6d2ec97",
|
|
11
|
+
"@dcl/react-ecs": "7.4.19-8818968750.commit-6d2ec97",
|
|
12
|
+
"@dcl/sdk-commands": "7.4.19-8818968750.commit-6d2ec97",
|
|
13
13
|
"text-encoding": "0.7.0"
|
|
14
14
|
},
|
|
15
15
|
"keywords": [],
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
},
|
|
36
36
|
"types": "./index.d.ts",
|
|
37
37
|
"typings": "./index.d.ts",
|
|
38
|
-
"commit": "
|
|
38
|
+
"commit": "6d2ec97a241339671c7b75c6971003d24d3fe233"
|
|
39
39
|
}
|
package/players/index.js
CHANGED
|
@@ -75,4 +75,4 @@ const players = definePlayerHelper(engine);
|
|
|
75
75
|
const { getPlayer, onEnterScene, onLeaveScene } = players;
|
|
76
76
|
export { getPlayer, onEnterScene, onLeaveScene };
|
|
77
77
|
export default players;
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGxheWVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtDLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqRSxPQUFPLEVBQ0wsa0JBQWtCLElBQUksdUJBQXVCLEVBQzdDLFVBQVUsSUFBSSxnQkFBZ0IsRUFDOUIsa0JBQWtCLElBQUksd0JBQXdCLEVBRzlDLFNBQVMsSUFBSSxlQUFlLEVBQzdCLE1BQU0sMEJBQTBCLENBQUE7QUFnQmpDLFNBQVMsa0JBQWtCLENBQUMsTUFBZTtJQUN6QyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDekMsTUFBTSxrQkFBa0IsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMxRCxNQUFNLGtCQUFrQixHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzNELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzNDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO0lBRWhELElBQUksY0FBYyxHQUFxRCxTQUFTLENBQUE7SUFDaEYsSUFBSSxjQUFjLEdBQTJDLFNBQVMsQ0FBQTtJQUV0RSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNwQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUNsRixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssY0FBYyxDQUFDLElBQUk7WUFBRSxPQUFNO1FBRWxELEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSSxPQUFPLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHksIElFbmdpbmUsIFRyYW5zZm9ybVR5cGUsIGVuZ2luZSB9IGZyb20gJ0BkY2wvZWNzJ1xuaW1wb3J0IHtcbiAgUGxheWVySWRlbnRpdHlEYXRhIGFzIGRlZmluZVBsYXllcklkZW5pdHlEYXRhLFxuICBBdmF0YXJCYXNlIGFzIGRlZmluZUF2YXRhckJhc2UsXG4gIEF2YXRhckVxdWlwcGVkRGF0YSBhcyBkZWZpbmVBdmF0YXJFcXVpcHBlZERhdGEsXG4gIFBCQXZhdGFyQmFzZSxcbiAgUEJBdmF0YXJFcXVpcHBlZERhdGEsXG4gIFRyYW5zZm9ybSBhcyBkZWZpbmVUcmFuc2Zvcm1cbn0gZnJvbSAnQGRjbC9lY3MvZGlzdC9jb21wb25lbnRzJ1xuXG50eXBlIEdldFBsYXllckRhdGFSZXEgPSB7XG4gIHVzZXJJZDogc3RyaW5nXG59XG50eXBlIEdldFBsYXllckRhdGFSZXMgPSB7XG4gIGVudGl0eTogRW50aXR5XG4gIG5hbWU6IHN0cmluZ1xuICBpc0d1ZXN0OiBib29sZWFuXG4gIHVzZXJJZDogc3RyaW5nXG4gIGF2YXRhcj86IFBCQXZhdGFyQmFzZVxuICB3ZWFyYWJsZXM6IFBCQXZhdGFyRXF1aXBwZWREYXRhWyd3ZWFyYWJsZVVybnMnXVxuICBlbW90ZXM6IFBCQXZhdGFyRXF1aXBwZWREYXRhWydlbW90ZVVybnMnXVxuICBwb3NpdGlvbjogVHJhbnNmb3JtVHlwZVsncG9zaXRpb24nXSB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBkZWZpbmVQbGF5ZXJIZWxwZXIoZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IFRyYW5zZm9ybSA9IGRlZmluZVRyYW5zZm9ybShlbmdpbmUpXG4gIGNvbnN0IFBsYXllcklkZW50aXR5RGF0YSA9IGRlZmluZVBsYXllcklkZW5pdHlEYXRhKGVuZ2luZSlcbiAgY29uc3QgQXZhdGFyRXF1aXBwZWREYXRhID0gZGVmaW5lQXZhdGFyRXF1aXBwZWREYXRhKGVuZ2luZSlcbiAgY29uc3QgQXZhdGFyQmFzZSA9IGRlZmluZUF2YXRhckJhc2UoZW5naW5lKVxuICBjb25zdCBwbGF5ZXJFbnRpdGllcyA9IG5ldyBNYXA8RW50aXR5LCBzdHJpbmc+KClcblxuICBsZXQgb25FbnRlclNjZW5lQ2I6ICgocGxheWVyOiBHZXRQbGF5ZXJEYXRhUmVzKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICBsZXQgb25MZWF2ZVNjZW5lQ2I6ICgodXNlcklkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgZW5naW5lLmFkZFN5c3RlbSgoKSA9PiB7XG4gICAgY29uc3QgcGxheWVycyA9IEFycmF5LmZyb20oZW5naW5lLmdldEVudGl0aWVzV2l0aChQbGF5ZXJJZGVudGl0eURhdGEsIEF2YXRhckJhc2UpKVxuICAgIGlmIChwbGF5ZXJzLmxlbmd0aCA9PT0gcGxheWVyRW50aXRpZXMuc2l6ZSkgcmV0dXJuXG5cbiAgICBmb3IgKGNvbnN0IFtlbnRpdHksIGlkZW50aXR5XSBvZiBwbGF5ZXJzKSB7XG4gICAgICBpZiAoIXBsYXllckVudGl0aWVzLmhhcyhlbnRpdHkpKSB7XG4gICAgICAgIHBsYXllckVudGl0aWVzLnNldChlbnRpdHksIGlkZW50aXR5LmFkZHJlc3MpXG5cbiAgICAgICAgLy8gQ2FsbCBvbkVudGVyIGNhbGxiYWNrXG4gICAgICAgIGlmIChvbkVudGVyU2NlbmVDYikge1xuICAgICAgICAgIG9uRW50ZXJTY2VuZUNiKGdldFBsYXllcih7IHVzZXJJZDogaWRlbnRpdHkuYWRkcmVzcyB9KSEpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgY2hhbmdlcy9yZW1vdmUgY2FsbGJhY2tzXG4gICAgICAgIEF2YXRhckJhc2Uub25DaGFuZ2UoZW50aXR5LCAodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoIXZhbHVlICYmIG9uTGVhdmVTY2VuZUNiICYmIHBsYXllckVudGl0aWVzLmdldChlbnRpdHkpKSB7XG4gICAgICAgICAgICBvbkxlYXZlU2NlbmVDYihwbGF5ZXJFbnRpdGllcy5nZXQoZW50aXR5KSEpXG4gICAgICAgICAgICBwbGF5ZXJFbnRpdGllcy5kZWxldGUoZW50aXR5KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBvbkVudGVyU2NlbmUoY2I6IChwbGF5ZXI6IEdldFBsYXllckRhdGFSZXMpID0+IHZvaWQpIHtcbiAgICAgIG9uRW50ZXJTY2VuZUNiID0gY2JcbiAgICB9LFxuICAgIG9uTGVhdmVTY2VuZShjYjogKHVzZXJJZDogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgICBvbkxlYXZlU2NlbmVDYiA9IGNiXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpbmZvIG9mIHRoZSBwbGF5ZXIgaWYgaXQncyBpbiB0aGUgc2NlbmUuXG4gICAgICovXG4gICAgZ2V0UGxheWVyKHVzZXI/OiBHZXRQbGF5ZXJEYXRhUmVxKTogR2V0UGxheWVyRGF0YVJlcyB8IG51bGwge1xuICAgICAgZnVuY3Rpb24gZ2V0RW50aXR5KCkge1xuICAgICAgICBpZiAoIXVzZXI/LnVzZXJJZCkgcmV0dXJuIGVuZ2luZS5QbGF5ZXJFbnRpdHlcbiAgICAgICAgZm9yIChjb25zdCBbZW50aXR5LCBkYXRhXSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKFBsYXllcklkZW50aXR5RGF0YSkpIHtcbiAgICAgICAgICBpZiAoZGF0YS5hZGRyZXNzID09PSB1c2VyLnVzZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGVudGl0eVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXJFbnRpdHkgPSBnZXRFbnRpdHkoKVxuICAgICAgaWYgKCF1c2VyRW50aXR5KSByZXR1cm4gbnVsbFxuXG4gICAgICBjb25zdCBwbGF5ZXJEYXRhID0gUGxheWVySWRlbnRpdHlEYXRhLmdldE9yTnVsbCh1c2VyRW50aXR5KVxuICAgICAgY29uc3QgYXZhdGFyRGF0YSA9IEF2YXRhckJhc2UuZ2V0T3JOdWxsKHVzZXJFbnRpdHkpXG4gICAgICBjb25zdCB3ZWFyYWJsZXNEYXRhID0gQXZhdGFyRXF1aXBwZWREYXRhLmdldE9yTnVsbCh1c2VyRW50aXR5KVxuXG4gICAgICBpZiAoIXBsYXllckRhdGEgJiYgIWF2YXRhckRhdGEgJiYgIXdlYXJhYmxlc0RhdGEpIHJldHVybiBudWxsXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGl0eTogdXNlckVudGl0eSxcbiAgICAgICAgbmFtZTogYXZhdGFyRGF0YT8ubmFtZSA/PyAnJyxcbiAgICAgICAgaXNHdWVzdDogISFwbGF5ZXJEYXRhPy5pc0d1ZXN0ID8/IGZhbHNlLFxuICAgICAgICB1c2VySWQ6IHBsYXllckRhdGE/LmFkZHJlc3MgPz8gJycsXG4gICAgICAgIGF2YXRhcjogYXZhdGFyRGF0YSA/PyB1bmRlZmluZWQsXG4gICAgICAgIHdlYXJhYmxlczogd2VhcmFibGVzRGF0YT8ud2VhcmFibGVVcm5zID8/IFtdLFxuICAgICAgICBlbW90ZXM6IHdlYXJhYmxlc0RhdGE/LmVtb3RlVXJucyA/PyBbXSxcbiAgICAgICAgcG9zaXRpb246IFRyYW5zZm9ybS5nZXRPck51bGwodXNlckVudGl0eSk/LnBvc2l0aW9uXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHBsYXllcnMgPSBkZWZpbmVQbGF5ZXJIZWxwZXIoZW5naW5lKVxuY29uc3QgeyBnZXRQbGF5ZXIsIG9uRW50ZXJTY2VuZSwgb25MZWF2ZVNjZW5lIH0gPSBwbGF5ZXJzXG5cbmV4cG9ydCB7IGdldFBsYXllciwgb25FbnRlclNjZW5lLCBvbkxlYXZlU2NlbmUgfVxuZXhwb3J0IGRlZmF1bHQgcGxheWVyc1xuIl19
|
|
@@ -11,7 +11,6 @@ export function createRendererTransport(engineApi: EngineApiForTransport): Trans
|
|
|
11
11
|
const response = await engineApi.crdtSendToRenderer({
|
|
12
12
|
data: new Uint8Array(message)
|
|
13
13
|
})
|
|
14
|
-
|
|
15
14
|
if (response && response.data && response.data.length) {
|
|
16
15
|
if (rendererTransport.onmessage) {
|
|
17
16
|
for (const byteArray of response.data) {
|
package/src/observables.ts
CHANGED
|
@@ -1,257 +1,32 @@
|
|
|
1
1
|
import { Observable } from './internal/Observable'
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
AvatarBase,
|
|
4
|
+
AvatarEmoteCommand,
|
|
5
|
+
AvatarEquippedData,
|
|
6
|
+
Entity,
|
|
7
|
+
PlayerIdentityData,
|
|
8
|
+
PointerEventsResult,
|
|
9
|
+
RealmInfo,
|
|
10
|
+
Vector3Type,
|
|
11
|
+
engine
|
|
12
|
+
} from '@dcl/ecs'
|
|
3
13
|
import { ManyEntityAction, SendBatchResponse, subscribe } from '~system/EngineApi'
|
|
4
|
-
|
|
5
|
-
let subscribeFunction: typeof subscribe = subscribe
|
|
6
|
-
|
|
7
|
-
/** @public */
|
|
8
|
-
export type InputEventResult = {
|
|
9
|
-
/** Origin of the ray, relative to the scene */
|
|
10
|
-
origin: Vector3Type
|
|
11
|
-
/** Direction vector of the ray (normalized) */
|
|
12
|
-
direction: Vector3Type
|
|
13
|
-
/** ID of the pointer that triggered the event */
|
|
14
|
-
buttonId: number
|
|
15
|
-
/** Does this pointer event hit any object? */
|
|
16
|
-
hit?: {
|
|
17
|
-
/** Length of the ray */
|
|
18
|
-
length: number
|
|
19
|
-
/** If the ray hits a mesh the intersection point will be this */
|
|
20
|
-
hitPoint: Vector3Type
|
|
21
|
-
/** If the mesh has a name, it will be assigned to meshName */
|
|
22
|
-
meshName: string
|
|
23
|
-
/** Normal of the hit */
|
|
24
|
-
normal: Vector3Type
|
|
25
|
-
/** Normal of the hit, in world space */
|
|
26
|
-
worldNormal: Vector3Type
|
|
27
|
-
/** Hit entity ID if any */
|
|
28
|
-
entityId: unknown
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/** @public */
|
|
33
|
-
export type GlobalInputEventResult = InputEventResult & {
|
|
34
|
-
/**
|
|
35
|
-
* DOWN = 0,
|
|
36
|
-
* UP = 1
|
|
37
|
-
*/
|
|
38
|
-
type: 0 | 1
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/** @public */
|
|
42
|
-
export type RaycastResponsePayload<T> = {
|
|
43
|
-
queryId: string
|
|
44
|
-
queryType: string
|
|
45
|
-
payload: T
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** @public */
|
|
49
|
-
export type GizmoDragEndEvent = {
|
|
50
|
-
type: 'gizmoDragEnded'
|
|
51
|
-
transforms: Array<{
|
|
52
|
-
position: Vector3Type
|
|
53
|
-
rotation: QuaternionType
|
|
54
|
-
scale: Vector3Type
|
|
55
|
-
entityId: unknown
|
|
56
|
-
}>
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/** @public */
|
|
60
|
-
export type GizmoSelectedEvent = {
|
|
61
|
-
type: 'gizmoSelected'
|
|
62
|
-
gizmoType: 'MOVE' | 'ROTATE' | 'SCALE' | 'NONE'
|
|
63
|
-
entities: string[]
|
|
64
|
-
}
|
|
14
|
+
import players from './players'
|
|
65
15
|
|
|
66
16
|
/// --- EVENTS ---
|
|
67
17
|
|
|
68
18
|
/** @public */
|
|
69
19
|
export type IEventNames = keyof IEvents
|
|
70
20
|
|
|
71
|
-
/** @public */
|
|
72
|
-
export type EngineEvent<T extends IEventNames = IEventNames, V = IEvents[T]> = {
|
|
73
|
-
/** eventName */
|
|
74
|
-
type: T
|
|
75
|
-
data: Readonly<V>
|
|
76
|
-
}
|
|
77
|
-
|
|
78
21
|
/**
|
|
79
22
|
* @public
|
|
80
23
|
* Note: Don't use `on` prefix for IEvents to avoid redundancy with `event.on("onEventName")` syntax.
|
|
81
24
|
*/
|
|
82
25
|
export interface IEvents {
|
|
83
|
-
/**
|
|
84
|
-
* `positionChanged` is triggered when the position of the camera changes
|
|
85
|
-
* This event is throttled to 10 times per second.
|
|
86
|
-
*/
|
|
87
|
-
positionChanged: {
|
|
88
|
-
/** Camera position relative to the base parcel of the scene */
|
|
89
|
-
position: Vector3Type
|
|
90
|
-
|
|
91
|
-
/** Camera position, this is a absolute world position */
|
|
92
|
-
cameraPosition: Vector3Type
|
|
93
|
-
|
|
94
|
-
/** Eye height, in meters. */
|
|
95
|
-
playerHeight: number
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* `rotationChanged` is triggered when the rotation of the camera changes.
|
|
100
|
-
* This event is throttled to 10 times per second.
|
|
101
|
-
*/
|
|
102
|
-
rotationChanged: {
|
|
103
|
-
/** Degree vector. Same as entities */
|
|
104
|
-
rotation: Vector3Type
|
|
105
|
-
/** Rotation quaternion, useful in some scenarios. */
|
|
106
|
-
quaternion: QuaternionType
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* `cameraModeChanged` is triggered when the user changes the camera mode
|
|
111
|
-
*/
|
|
112
|
-
cameraModeChanged: {
|
|
113
|
-
/**
|
|
114
|
-
* FIRST_PERSON = 0,
|
|
115
|
-
* THIRD_PERSON = 1,
|
|
116
|
-
* FREE_CAMERA = 2
|
|
117
|
-
*/
|
|
118
|
-
cameraMode: 0 | 1 | 2
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* `idleStateChanged` is triggered when the user not moves for a defined period of time
|
|
123
|
-
*/
|
|
124
|
-
idleStateChanged: {
|
|
125
|
-
isIdle: boolean
|
|
126
|
-
}
|
|
127
|
-
|
|
128
26
|
playerExpression: {
|
|
129
27
|
expressionId: string
|
|
130
28
|
}
|
|
131
29
|
|
|
132
|
-
/**
|
|
133
|
-
* `pointerUp` is triggered when the user releases an input pointer.
|
|
134
|
-
* It could be a VR controller, a touch screen or the mouse.
|
|
135
|
-
*/
|
|
136
|
-
pointerUp: InputEventResult
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* `pointerDown` is triggered when the user press an input pointer.
|
|
140
|
-
* It could be a VR controller, a touch screen or the mouse.
|
|
141
|
-
*/
|
|
142
|
-
pointerDown: InputEventResult
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* `pointerEvent` is triggered when the user press or releases an input pointer.
|
|
146
|
-
* It could be a VR controller, a touch screen or the mouse.
|
|
147
|
-
*
|
|
148
|
-
* @deprecated use actionButtonEvent instead
|
|
149
|
-
*/
|
|
150
|
-
pointerEvent: GlobalInputEventResult
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* `actionButtonEvent` is triggered when the user press or releases an input pointer.
|
|
154
|
-
* It could be a VR controller, a touch screen or the mouse.
|
|
155
|
-
*
|
|
156
|
-
* This event is exactly the same as `pointerEvent` but the logic in the ECS had an unsolvable
|
|
157
|
-
* condition that required us to create this new event to handle more cases for new buttons.
|
|
158
|
-
*/
|
|
159
|
-
actionButtonEvent: GlobalInputEventResult
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* `raycastResponse` is triggered in response to a raycast query
|
|
163
|
-
*/
|
|
164
|
-
raycastResponse: RaycastResponsePayload<any>
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* `chatMessage` is triggered when the user sends a message through chat entity.
|
|
168
|
-
*/
|
|
169
|
-
chatMessage: {
|
|
170
|
-
id: string
|
|
171
|
-
sender: string
|
|
172
|
-
message: string
|
|
173
|
-
isCommand: boolean
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* `onChange` is triggered when an entity changes its own internal state.
|
|
178
|
-
* Dispatched by the `ui-*` entities when their value is changed. It triggers a callback.
|
|
179
|
-
* Notice: Only entities with ID will be listening for click events.
|
|
180
|
-
*/
|
|
181
|
-
onChange: {
|
|
182
|
-
value?: any
|
|
183
|
-
/** ID of the pointer that triggered the event */
|
|
184
|
-
pointerId?: number
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* `onEnter` is triggered when the user hits the "Enter" key from the keyboard
|
|
189
|
-
* Used principally by the Chat internal scene
|
|
190
|
-
*/
|
|
191
|
-
onEnter: unknown
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* `onPointerLock` is triggered when the user clicks the world canvas and the
|
|
195
|
-
* pointer locks to it so the pointer moves the camera
|
|
196
|
-
*/
|
|
197
|
-
onPointerLock: {
|
|
198
|
-
locked?: boolean
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* `onAnimationEnd` is triggered when an animation clip gets finish
|
|
203
|
-
*/
|
|
204
|
-
onAnimationEnd: {
|
|
205
|
-
clipName: string
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* `onFocus` is triggered when an entity focus is active.
|
|
210
|
-
* Dispatched by the `ui-input` and `ui-password` entities when the value is changed.
|
|
211
|
-
* It triggers a callback.
|
|
212
|
-
*
|
|
213
|
-
* Notice: Only entities with ID will be listening for click events.
|
|
214
|
-
*/
|
|
215
|
-
onFocus: {
|
|
216
|
-
/** ID of the entitiy of the event */
|
|
217
|
-
entityId: unknown
|
|
218
|
-
/** ID of the pointer that triggered the event */
|
|
219
|
-
pointerId: number
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* `onBlur` is triggered when an entity loses its focus.
|
|
224
|
-
* Dispatched by the `ui-input` and `ui-password` entities when the value is changed.
|
|
225
|
-
* It triggers a callback.
|
|
226
|
-
*
|
|
227
|
-
* Notice: Only entities with ID will be listening for click events.
|
|
228
|
-
*/
|
|
229
|
-
onBlur: {
|
|
230
|
-
/** ID of the entitiy of the event */
|
|
231
|
-
entityId: unknown
|
|
232
|
-
/** ID of the pointer that triggered the event */
|
|
233
|
-
pointerId: number
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
/** The onClick event is only used for UI elements */
|
|
237
|
-
onClick: {
|
|
238
|
-
entityId: unknown
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* This event gets triggered when an entity leaves the scene fences.
|
|
243
|
-
*/
|
|
244
|
-
entityOutOfScene: {
|
|
245
|
-
entityId: unknown
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* This event gets triggered when an entity enters the scene fences.
|
|
250
|
-
*/
|
|
251
|
-
entityBackInScene: {
|
|
252
|
-
entityId: unknown
|
|
253
|
-
}
|
|
254
|
-
|
|
255
30
|
/**
|
|
256
31
|
* This event gets triggered when the user enters the scene
|
|
257
32
|
*/
|
|
@@ -279,56 +54,6 @@ export interface IEvents {
|
|
|
279
54
|
*/
|
|
280
55
|
sceneStart: unknown
|
|
281
56
|
|
|
282
|
-
/**
|
|
283
|
-
* This is triggered once the builder scene is loaded.
|
|
284
|
-
*/
|
|
285
|
-
builderSceneStart: unknown
|
|
286
|
-
|
|
287
|
-
/**
|
|
288
|
-
* This is triggered once the builder scene is unloaded.
|
|
289
|
-
*/
|
|
290
|
-
builderSceneUnloaded: unknown
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* After checking entities outside the fences, if any is outside, this event
|
|
294
|
-
* will be triggered with all the entities outside the scene.
|
|
295
|
-
*/
|
|
296
|
-
entitiesOutOfBoundaries: {
|
|
297
|
-
entities: string[]
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
uuidEvent: {
|
|
301
|
-
uuid: string
|
|
302
|
-
payload: any
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
onTextSubmit: {
|
|
306
|
-
text: string
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
metricsUpdate: {
|
|
310
|
-
given: Record<string, number>
|
|
311
|
-
limit: Record<string, number>
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
limitsExceeded: {
|
|
315
|
-
given: Record<string, number>
|
|
316
|
-
limit: Record<string, number>
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
/** For gizmos */
|
|
320
|
-
gizmoEvent: GizmoDragEndEvent | GizmoSelectedEvent
|
|
321
|
-
|
|
322
|
-
externalAction: {
|
|
323
|
-
type: string
|
|
324
|
-
[key: string]: any
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
stateEvent: {
|
|
328
|
-
type: string
|
|
329
|
-
payload: any
|
|
330
|
-
}
|
|
331
|
-
|
|
332
57
|
/** This is triggered at least for each videoStatus change */
|
|
333
58
|
videoEvent: {
|
|
334
59
|
componentId: string
|
|
@@ -374,12 +99,6 @@ export interface IEvents {
|
|
|
374
99
|
distance: number
|
|
375
100
|
}
|
|
376
101
|
}
|
|
377
|
-
|
|
378
|
-
/** Triggered when pointer start hovering an entities' shape */
|
|
379
|
-
pointerHoverEnter: unknown
|
|
380
|
-
|
|
381
|
-
/** Triggered when pointer stop hovering an entities' shape */
|
|
382
|
-
pointerHoverExit: unknown
|
|
383
102
|
}
|
|
384
103
|
|
|
385
104
|
/**
|
|
@@ -387,9 +106,13 @@ export interface IEvents {
|
|
|
387
106
|
* This function generates a callback that is passed to the Observable
|
|
388
107
|
* constructor to subscribe to the events of the DecentralandInterface
|
|
389
108
|
*/
|
|
390
|
-
function createSubscriber(eventName:
|
|
109
|
+
function createSubscriber(eventName: keyof IEvents) {
|
|
391
110
|
return () => {
|
|
392
|
-
|
|
111
|
+
if (eventName === 'comms' || (globalThis as any).__OBSERVABLES_FALLBACK_SUPPORT) {
|
|
112
|
+
subscribe({ eventId: eventName }).catch(console.error)
|
|
113
|
+
} else {
|
|
114
|
+
SDK7ComponentsObservable?.subscribe(eventName)
|
|
115
|
+
}
|
|
393
116
|
}
|
|
394
117
|
}
|
|
395
118
|
|
|
@@ -477,14 +200,6 @@ export const onPlayerClickedObservable = new Observable<IEvents['playerClicked']
|
|
|
477
200
|
*/
|
|
478
201
|
export const onCommsMessage = new Observable<IEvents['comms']>(createSubscriber('comms'))
|
|
479
202
|
|
|
480
|
-
/**
|
|
481
|
-
* @internal
|
|
482
|
-
* Used for testing purpose
|
|
483
|
-
*/
|
|
484
|
-
export function setSubscribeFunction(fn: (event: { eventId: string }) => Promise<any>) {
|
|
485
|
-
subscribeFunction = fn
|
|
486
|
-
}
|
|
487
|
-
|
|
488
203
|
/**
|
|
489
204
|
* @internal
|
|
490
205
|
* @deprecated this is an OLD API.
|
|
@@ -545,3 +260,148 @@ export async function pollEvents(sendBatch: (body: ManyEntityAction) => Promise<
|
|
|
545
260
|
}
|
|
546
261
|
}
|
|
547
262
|
}
|
|
263
|
+
|
|
264
|
+
const SDK7ComponentsObservable = processObservables()
|
|
265
|
+
function processObservables() {
|
|
266
|
+
if ((globalThis as any).__OBSERVABLES_FALLBACK_SUPPORT) return
|
|
267
|
+
const subscriptions = new Set<keyof IEvents>()
|
|
268
|
+
|
|
269
|
+
function subscribe(eventName: keyof IEvents) {
|
|
270
|
+
if (subscriptions.has(eventName)) return
|
|
271
|
+
switch (eventName) {
|
|
272
|
+
case 'playerClicked': {
|
|
273
|
+
subscribePlayerClick()
|
|
274
|
+
}
|
|
275
|
+
case 'onEnterScene':
|
|
276
|
+
case 'playerConnected': {
|
|
277
|
+
subscribeEnterScene()
|
|
278
|
+
}
|
|
279
|
+
case 'onLeaveScene':
|
|
280
|
+
case 'playerDisconnected': {
|
|
281
|
+
subscribeLeaveScene()
|
|
282
|
+
}
|
|
283
|
+
case 'onRealmChanged': {
|
|
284
|
+
subscribeRealmChange()
|
|
285
|
+
}
|
|
286
|
+
case 'playerExpression': {
|
|
287
|
+
subscribePlayerExpression()
|
|
288
|
+
}
|
|
289
|
+
case 'profileChanged': {
|
|
290
|
+
subscribeProfileChange()
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
subscriptions.add(eventName)
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* PLAYER ENTER/CONNECTED observable
|
|
297
|
+
*/
|
|
298
|
+
function subscribeEnterScene() {
|
|
299
|
+
players.onEnterScene((player) => {
|
|
300
|
+
if (subscriptions.has('onEnterScene')) {
|
|
301
|
+
onEnterSceneObservable.notifyObservers({ userId: player.userId })
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
if (subscriptions.has('playerConnected')) {
|
|
305
|
+
onPlayerConnectedObservable.notifyObservers({ userId: player.userId })
|
|
306
|
+
}
|
|
307
|
+
})
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* PLAYER LEAVE/DISCONNECTED observable
|
|
311
|
+
*/
|
|
312
|
+
function subscribeLeaveScene() {
|
|
313
|
+
players.onLeaveScene((userId) => {
|
|
314
|
+
if (subscriptions.has('onLeaveScene')) {
|
|
315
|
+
onLeaveSceneObservable.notifyObservers({ userId })
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
if (subscriptions.has('playerDisconnected')) {
|
|
319
|
+
onPlayerDisconnectedObservable.notifyObservers({ userId })
|
|
320
|
+
}
|
|
321
|
+
})
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* REALM CHANGE observable
|
|
325
|
+
*/
|
|
326
|
+
function subscribeRealmChange() {
|
|
327
|
+
RealmInfo.onChange(engine.RootEntity, (value) => {
|
|
328
|
+
if (value) {
|
|
329
|
+
onRealmChangedObservable.notifyObservers({
|
|
330
|
+
domain: value.baseUrl,
|
|
331
|
+
displayName: value.realmName,
|
|
332
|
+
room: value.room ?? '',
|
|
333
|
+
serverName: value.realmName
|
|
334
|
+
})
|
|
335
|
+
}
|
|
336
|
+
})
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* PLAYER/AVATAR CLICKED observable
|
|
340
|
+
*/
|
|
341
|
+
function subscribePlayerClick() {
|
|
342
|
+
const playerEntities = new Set<Entity>()
|
|
343
|
+
engine.addSystem(() => {
|
|
344
|
+
for (const [entity] of engine.getEntitiesWith(PlayerIdentityData)) {
|
|
345
|
+
if (playerEntities.has(entity)) return
|
|
346
|
+
playerEntities.add(entity)
|
|
347
|
+
|
|
348
|
+
PointerEventsResult.onChange(entity, (data) => {
|
|
349
|
+
if (data?.hit) {
|
|
350
|
+
onPlayerClickedObservable.notifyObservers({
|
|
351
|
+
userId: PlayerIdentityData.getOrNull(entity)?.address ?? '',
|
|
352
|
+
ray: {
|
|
353
|
+
direction: data.hit.direction!,
|
|
354
|
+
distance: data.hit.length,
|
|
355
|
+
origin: data.hit.globalOrigin!
|
|
356
|
+
}
|
|
357
|
+
})
|
|
358
|
+
}
|
|
359
|
+
})
|
|
360
|
+
}
|
|
361
|
+
})
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Player expression observable
|
|
366
|
+
*/
|
|
367
|
+
function subscribePlayerExpression() {
|
|
368
|
+
AvatarEmoteCommand.onChange(engine.PlayerEntity, (value) => {
|
|
369
|
+
onPlayerExpressionObservable.notifyObservers({ expressionId: value?.emoteUrn ?? '' })
|
|
370
|
+
})
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* PROFILE CHANGE observable
|
|
375
|
+
*/
|
|
376
|
+
function subscribeProfileChange() {
|
|
377
|
+
AvatarBase.onChange(engine.PlayerEntity, () => {
|
|
378
|
+
if (!profileAddress) return
|
|
379
|
+
onProfileChanged.notifyObservers({ ethAddress: profileAddress, version: 0 })
|
|
380
|
+
})
|
|
381
|
+
|
|
382
|
+
AvatarEquippedData.onChange(engine.PlayerEntity, () => {
|
|
383
|
+
if (!profileAddress) return
|
|
384
|
+
onProfileChanged.notifyObservers({ ethAddress: profileAddress, version: 0 })
|
|
385
|
+
})
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
// Flag to call once the scene is initalized.
|
|
389
|
+
let sceneReady = false
|
|
390
|
+
let profileAddress: string | undefined
|
|
391
|
+
|
|
392
|
+
function observableSystem() {
|
|
393
|
+
if (sceneReady && profileAddress) {
|
|
394
|
+
return engine.removeSystem(observableSystem)
|
|
395
|
+
}
|
|
396
|
+
if (!sceneReady) {
|
|
397
|
+
sceneReady = true
|
|
398
|
+
onSceneReadyObservable.notifyObservers({})
|
|
399
|
+
}
|
|
400
|
+
if (profileAddress) return
|
|
401
|
+
profileAddress = PlayerIdentityData.getOrNull(engine.PlayerEntity)?.address
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
engine.addSystem(observableSystem)
|
|
405
|
+
|
|
406
|
+
return { subscribe }
|
|
407
|
+
}
|
package/src/players/index.ts
CHANGED
|
@@ -28,6 +28,7 @@ function definePlayerHelper(engine: IEngine) {
|
|
|
28
28
|
const AvatarEquippedData = defineAvatarEquippedData(engine)
|
|
29
29
|
const AvatarBase = defineAvatarBase(engine)
|
|
30
30
|
const playerEntities = new Map<Entity, string>()
|
|
31
|
+
|
|
31
32
|
let onEnterSceneCb: ((player: GetPlayerDataRes) => void) | undefined = undefined
|
|
32
33
|
let onLeaveSceneCb: ((userId: string) => void) | undefined = undefined
|
|
33
34
|
|