@blcklab/anyo-player 0.5.0

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 (181) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +304 -0
  4. package/dist/createAnyoPlayer.d.ts +3 -0
  5. package/dist/createAnyoPlayer.d.ts.map +1 -0
  6. package/dist/createAnyoPlayer.js +5 -0
  7. package/dist/createAnyoPlayer.js.map +1 -0
  8. package/dist/element-define.d.ts +2 -0
  9. package/dist/element-define.d.ts.map +1 -0
  10. package/dist/element-define.js +4 -0
  11. package/dist/element-define.js.map +1 -0
  12. package/dist/element.d.ts +66 -0
  13. package/dist/element.d.ts.map +1 -0
  14. package/dist/element.js +363 -0
  15. package/dist/element.js.map +1 -0
  16. package/dist/errors.d.ts +11 -0
  17. package/dist/errors.d.ts.map +1 -0
  18. package/dist/errors.js +21 -0
  19. package/dist/errors.js.map +1 -0
  20. package/dist/index.d.ts +13 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +10 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/inputBindings.d.ts +3 -0
  25. package/dist/inputBindings.d.ts.map +1 -0
  26. package/dist/inputBindings.js +3 -0
  27. package/dist/inputBindings.js.map +1 -0
  28. package/dist/internal/AccessibilityController.d.ts +50 -0
  29. package/dist/internal/AccessibilityController.d.ts.map +1 -0
  30. package/dist/internal/AccessibilityController.js +212 -0
  31. package/dist/internal/AccessibilityController.js.map +1 -0
  32. package/dist/internal/AnyoPlayerCore.d.ts +357 -0
  33. package/dist/internal/AnyoPlayerCore.d.ts.map +1 -0
  34. package/dist/internal/AnyoPlayerCore.js +3880 -0
  35. package/dist/internal/AnyoPlayerCore.js.map +1 -0
  36. package/dist/internal/AudioController.d.ts +37 -0
  37. package/dist/internal/AudioController.d.ts.map +1 -0
  38. package/dist/internal/AudioController.js +167 -0
  39. package/dist/internal/AudioController.js.map +1 -0
  40. package/dist/internal/CaptionController.d.ts +16 -0
  41. package/dist/internal/CaptionController.d.ts.map +1 -0
  42. package/dist/internal/CaptionController.js +83 -0
  43. package/dist/internal/CaptionController.js.map +1 -0
  44. package/dist/internal/ContainerHost.d.ts +17 -0
  45. package/dist/internal/ContainerHost.d.ts.map +1 -0
  46. package/dist/internal/ContainerHost.js +110 -0
  47. package/dist/internal/ContainerHost.js.map +1 -0
  48. package/dist/internal/DesktopInputController.d.ts +80 -0
  49. package/dist/internal/DesktopInputController.d.ts.map +1 -0
  50. package/dist/internal/DesktopInputController.js +367 -0
  51. package/dist/internal/DesktopInputController.js.map +1 -0
  52. package/dist/internal/EmbeddingController.d.ts +33 -0
  53. package/dist/internal/EmbeddingController.d.ts.map +1 -0
  54. package/dist/internal/EmbeddingController.js +161 -0
  55. package/dist/internal/EmbeddingController.js.map +1 -0
  56. package/dist/internal/EventHub.d.ts +7 -0
  57. package/dist/internal/EventHub.d.ts.map +1 -0
  58. package/dist/internal/EventHub.js +27 -0
  59. package/dist/internal/EventHub.js.map +1 -0
  60. package/dist/internal/FrameworkAdapterController.d.ts +46 -0
  61. package/dist/internal/FrameworkAdapterController.d.ts.map +1 -0
  62. package/dist/internal/FrameworkAdapterController.js +165 -0
  63. package/dist/internal/FrameworkAdapterController.js.map +1 -0
  64. package/dist/internal/FullscreenController.d.ts +29 -0
  65. package/dist/internal/FullscreenController.d.ts.map +1 -0
  66. package/dist/internal/FullscreenController.js +122 -0
  67. package/dist/internal/FullscreenController.js.map +1 -0
  68. package/dist/internal/GamepadController.d.ts +54 -0
  69. package/dist/internal/GamepadController.d.ts.map +1 -0
  70. package/dist/internal/GamepadController.js +276 -0
  71. package/dist/internal/GamepadController.js.map +1 -0
  72. package/dist/internal/InputBindingsController.d.ts +34 -0
  73. package/dist/internal/InputBindingsController.d.ts.map +1 -0
  74. package/dist/internal/InputBindingsController.js +223 -0
  75. package/dist/internal/InputBindingsController.js.map +1 -0
  76. package/dist/internal/InteractionPresentationController.d.ts +38 -0
  77. package/dist/internal/InteractionPresentationController.d.ts.map +1 -0
  78. package/dist/internal/InteractionPresentationController.js +208 -0
  79. package/dist/internal/InteractionPresentationController.js.map +1 -0
  80. package/dist/internal/MapController.d.ts +16 -0
  81. package/dist/internal/MapController.d.ts.map +1 -0
  82. package/dist/internal/MapController.js +68 -0
  83. package/dist/internal/MapController.js.map +1 -0
  84. package/dist/internal/PerformanceController.d.ts +94 -0
  85. package/dist/internal/PerformanceController.d.ts.map +1 -0
  86. package/dist/internal/PerformanceController.js +455 -0
  87. package/dist/internal/PerformanceController.js.map +1 -0
  88. package/dist/internal/PlayerCameraController.d.ts +79 -0
  89. package/dist/internal/PlayerCameraController.d.ts.map +1 -0
  90. package/dist/internal/PlayerCameraController.js +551 -0
  91. package/dist/internal/PlayerCameraController.js.map +1 -0
  92. package/dist/internal/ResponsiveController.d.ts +37 -0
  93. package/dist/internal/ResponsiveController.d.ts.map +1 -0
  94. package/dist/internal/ResponsiveController.js +143 -0
  95. package/dist/internal/ResponsiveController.js.map +1 -0
  96. package/dist/internal/RuntimeFactory.d.ts +42 -0
  97. package/dist/internal/RuntimeFactory.d.ts.map +1 -0
  98. package/dist/internal/RuntimeFactory.js +93 -0
  99. package/dist/internal/RuntimeFactory.js.map +1 -0
  100. package/dist/internal/ScreenshotController.d.ts +8 -0
  101. package/dist/internal/ScreenshotController.d.ts.map +1 -0
  102. package/dist/internal/ScreenshotController.js +47 -0
  103. package/dist/internal/ScreenshotController.js.map +1 -0
  104. package/dist/internal/SessionController.d.ts +44 -0
  105. package/dist/internal/SessionController.d.ts.map +1 -0
  106. package/dist/internal/SessionController.js +411 -0
  107. package/dist/internal/SessionController.js.map +1 -0
  108. package/dist/internal/SourceResolver.d.ts +31 -0
  109. package/dist/internal/SourceResolver.d.ts.map +1 -0
  110. package/dist/internal/SourceResolver.js +362 -0
  111. package/dist/internal/SourceResolver.js.map +1 -0
  112. package/dist/internal/StateMachine.d.ts +10 -0
  113. package/dist/internal/StateMachine.d.ts.map +1 -0
  114. package/dist/internal/StateMachine.js +35 -0
  115. package/dist/internal/StateMachine.js.map +1 -0
  116. package/dist/internal/StyleController.d.ts +14 -0
  117. package/dist/internal/StyleController.d.ts.map +1 -0
  118. package/dist/internal/StyleController.js +116 -0
  119. package/dist/internal/StyleController.js.map +1 -0
  120. package/dist/internal/TelemetryController.d.ts +28 -0
  121. package/dist/internal/TelemetryController.d.ts.map +1 -0
  122. package/dist/internal/TelemetryController.js +113 -0
  123. package/dist/internal/TelemetryController.js.map +1 -0
  124. package/dist/internal/TouchInputController.d.ts +73 -0
  125. package/dist/internal/TouchInputController.d.ts.map +1 -0
  126. package/dist/internal/TouchInputController.js +379 -0
  127. package/dist/internal/TouchInputController.js.map +1 -0
  128. package/dist/internal/VfxController.d.ts +11 -0
  129. package/dist/internal/VfxController.d.ts.map +1 -0
  130. package/dist/internal/VfxController.js +23 -0
  131. package/dist/internal/VfxController.js.map +1 -0
  132. package/dist/internal/ViewPreferenceController.d.ts +40 -0
  133. package/dist/internal/ViewPreferenceController.d.ts.map +1 -0
  134. package/dist/internal/ViewPreferenceController.js +132 -0
  135. package/dist/internal/ViewPreferenceController.js.map +1 -0
  136. package/dist/internal/VisibilityController.d.ts +26 -0
  137. package/dist/internal/VisibilityController.d.ts.map +1 -0
  138. package/dist/internal/VisibilityController.js +62 -0
  139. package/dist/internal/VisibilityController.js.map +1 -0
  140. package/dist/internal/XRController.d.ts +42 -0
  141. package/dist/internal/XRController.d.ts.map +1 -0
  142. package/dist/internal/XRController.js +169 -0
  143. package/dist/internal/XRController.js.map +1 -0
  144. package/dist/internal/sourceUrls.d.ts +6 -0
  145. package/dist/internal/sourceUrls.d.ts.map +1 -0
  146. package/dist/internal/sourceUrls.js +79 -0
  147. package/dist/internal/sourceUrls.js.map +1 -0
  148. package/dist/react.d.ts +44 -0
  149. package/dist/react.d.ts.map +1 -0
  150. package/dist/react.js +115 -0
  151. package/dist/react.js.map +1 -0
  152. package/dist/session.d.ts +3 -0
  153. package/dist/session.d.ts.map +1 -0
  154. package/dist/session.js +3 -0
  155. package/dist/session.js.map +1 -0
  156. package/dist/styleText.d.ts +2 -0
  157. package/dist/styleText.d.ts.map +1 -0
  158. package/dist/styleText.js +2 -0
  159. package/dist/styleText.js.map +1 -0
  160. package/dist/styles.css +573 -0
  161. package/dist/types.d.ts +1476 -0
  162. package/dist/types.d.ts.map +1 -0
  163. package/dist/types.js +2 -0
  164. package/dist/types.js.map +1 -0
  165. package/dist/ui/PlayerUI.d.ts +193 -0
  166. package/dist/ui/PlayerUI.d.ts.map +1 -0
  167. package/dist/ui/PlayerUI.js +1201 -0
  168. package/dist/ui/PlayerUI.js.map +1 -0
  169. package/dist/vue.d.ts +97 -0
  170. package/dist/vue.d.ts.map +1 -0
  171. package/dist/vue.js +126 -0
  172. package/dist/vue.js.map +1 -0
  173. package/dist/worldCache.d.ts +16 -0
  174. package/dist/worldCache.d.ts.map +1 -0
  175. package/dist/worldCache.js +46 -0
  176. package/dist/worldCache.js.map +1 -0
  177. package/dist/worldSources.d.ts +19 -0
  178. package/dist/worldSources.d.ts.map +1 -0
  179. package/dist/worldSources.js +51 -0
  180. package/dist/worldSources.js.map +1 -0
  181. package/package.json +114 -0
@@ -0,0 +1,411 @@
1
+ import { AnyoPlayerError } from '../errors.js';
2
+ import { ANYO_PLAYER_SESSION_FORMAT, ANYO_PLAYER_SESSION_VERSION } from '../session.js';
3
+ const FORBIDDEN_KEYS = new Set(['__proto__', 'prototype', 'constructor']);
4
+ function isRecord(value) {
5
+ return Boolean(value && typeof value === 'object' && !Array.isArray(value));
6
+ }
7
+ function assertSafeJson(value, context, seen = new WeakSet()) {
8
+ if (value === null || typeof value === 'string' || typeof value === 'boolean')
9
+ return;
10
+ if (typeof value === 'number') {
11
+ if (!Number.isFinite(value))
12
+ throw new TypeError(`${context} must contain only finite numbers.`);
13
+ return;
14
+ }
15
+ if (typeof value !== 'object')
16
+ throw new TypeError(`${context} must be JSON-compatible.`);
17
+ if (seen.has(value))
18
+ throw new TypeError(`${context} must not contain circular references.`);
19
+ seen.add(value);
20
+ if (Array.isArray(value)) {
21
+ value.forEach((entry, index) => assertSafeJson(entry, `${context}[${index}]`, seen));
22
+ }
23
+ else {
24
+ for (const [key, entry] of Object.entries(value)) {
25
+ if (FORBIDDEN_KEYS.has(key))
26
+ throw new TypeError(`${context} contains forbidden key "${key}".`);
27
+ assertSafeJson(entry, `${context}.${key}`, seen);
28
+ }
29
+ }
30
+ seen.delete(value);
31
+ }
32
+ function validateDataPath(path) {
33
+ if (typeof path !== 'string' || path.trim() === '')
34
+ throw new TypeError('Session data paths must not be empty.');
35
+ const normalized = path.trim().replace(/\[(\d+)\]/g, '.$1');
36
+ if (/\[[^\]]*\]/.test(normalized))
37
+ throw new TypeError(`Malformed session data path "${path}".`);
38
+ const parts = normalized.split('.').map(part => part.trim()).filter(Boolean);
39
+ if (parts.length === 0)
40
+ throw new TypeError('Session data paths must not be empty.');
41
+ for (const part of parts) {
42
+ if (FORBIDDEN_KEYS.has(part))
43
+ throw new TypeError(`Unsafe session data path "${path}".`);
44
+ }
45
+ return parts.join('.');
46
+ }
47
+ function vector3(value, context) {
48
+ if (!Array.isArray(value) || value.length !== 3)
49
+ throw new TypeError(`${context} must be a three-number array.`);
50
+ const result = value.map(Number);
51
+ if (result.some(entry => !Number.isFinite(entry)))
52
+ throw new TypeError(`${context} must contain finite numbers.`);
53
+ return [result[0], result[1], result[2]];
54
+ }
55
+ function finiteNumber(value, context) {
56
+ if (typeof value !== 'number' || !Number.isFinite(value))
57
+ throw new TypeError(`${context} must be a finite number.`);
58
+ return value;
59
+ }
60
+ function nullableString(value, context) {
61
+ if (value === null)
62
+ return null;
63
+ if (typeof value !== 'string')
64
+ throw new TypeError(`${context} must be a string or null.`);
65
+ return value;
66
+ }
67
+ function optionalString(value, context) {
68
+ if (value === undefined)
69
+ return undefined;
70
+ if (typeof value !== 'string' || value.trim() === '')
71
+ throw new TypeError(`${context} must be a non-empty string.`);
72
+ return value;
73
+ }
74
+ function normalizeDataEntries(value) {
75
+ if (value === undefined)
76
+ return [];
77
+ if (!Array.isArray(value))
78
+ throw new TypeError('Session data must be an array.');
79
+ const seen = new Set();
80
+ return value.map((entry, index) => {
81
+ if (!isRecord(entry))
82
+ throw new TypeError(`Session data entry ${index} must be an object.`);
83
+ const path = validateDataPath(String(entry.path ?? ''));
84
+ if (seen.has(path))
85
+ throw new TypeError(`Session data path "${path}" is duplicated.`);
86
+ seen.add(path);
87
+ assertSafeJson(entry.value, `Session data entry ${index}`);
88
+ return { path, value: structuredClone(entry.value) };
89
+ });
90
+ }
91
+ function cloneMetadata(value) {
92
+ if (value === undefined)
93
+ return undefined;
94
+ if (!isRecord(value))
95
+ throw new TypeError('Session metadata must be an object.');
96
+ assertSafeJson(value, 'Session metadata');
97
+ return structuredClone(value);
98
+ }
99
+ function resolveBrowserStorage(container) {
100
+ try {
101
+ const view = container.ownerDocument?.defaultView;
102
+ const candidate = view && 'localStorage' in view
103
+ ? view.localStorage
104
+ : typeof globalThis.localStorage === 'undefined' ? undefined : globalThis.localStorage;
105
+ return candidate;
106
+ }
107
+ catch {
108
+ return undefined;
109
+ }
110
+ }
111
+ function normalizedPaths(configured, captured) {
112
+ const result = [];
113
+ const seen = new Set();
114
+ for (const source of [configured ?? [], captured ?? []]) {
115
+ for (const rawPath of source) {
116
+ const path = validateDataPath(rawPath);
117
+ if (seen.has(path))
118
+ continue;
119
+ seen.add(path);
120
+ result.push(path);
121
+ }
122
+ }
123
+ return result;
124
+ }
125
+ export class SessionController {
126
+ enabled;
127
+ storageKey;
128
+ worldKey;
129
+ restoreOnLoad;
130
+ saveOnPause;
131
+ saveOnVisibilityHidden;
132
+ options;
133
+ storage;
134
+ now;
135
+ constructor(container, options, environment = {}) {
136
+ this.enabled = options !== false;
137
+ this.options = options === false ? {} : options ?? {};
138
+ this.storageKey = this.options.storageKey?.trim() || null;
139
+ this.worldKey = this.options.worldKey?.trim() || null;
140
+ this.restoreOnLoad = this.enabled && (this.options.restoreOnLoad ?? false);
141
+ this.saveOnPause = this.enabled && (this.options.saveOnPause ?? false);
142
+ this.saveOnVisibilityHidden = this.enabled && (this.options.saveOnVisibilityHidden ?? false);
143
+ this.storage = environment.storage ?? this.options.storage ?? resolveBrowserStorage(container);
144
+ this.now = environment.now ?? (() => new Date());
145
+ }
146
+ get storageAvailable() {
147
+ return Boolean(this.storage);
148
+ }
149
+ capture(context, options = {}) {
150
+ this.assertEnabled();
151
+ const cameraPosition = vector3(context.world.renderer.camera.getPosition(), 'Camera position');
152
+ const cameraRotation = context.world.renderer.camera.getRotation();
153
+ const yaw = finiteNumber(cameraRotation[0], 'Camera yaw');
154
+ const pitch = finiteNumber(cameraRotation[1], 'Camera pitch');
155
+ const data = [];
156
+ const paths = normalizedPaths(this.options.dataPaths, options.dataPaths);
157
+ if (this.options.includeAllData || options.includeAllData) {
158
+ const allData = context.world.getData();
159
+ if (isRecord(allData)) {
160
+ for (const key of Object.keys(allData).sort()) {
161
+ const path = validateDataPath(key);
162
+ if (!paths.includes(path))
163
+ paths.push(path);
164
+ }
165
+ }
166
+ }
167
+ for (const path of paths) {
168
+ const value = context.world.getData(path);
169
+ if (value === undefined)
170
+ continue;
171
+ assertSafeJson(value, `Runtime data at ${path}`);
172
+ data.push({ path, value: structuredClone(value) });
173
+ }
174
+ let xrRig;
175
+ try {
176
+ const rig = context.world.xr.getPlayerRigTransform();
177
+ xrRig = {
178
+ position: vector3(rig.position, 'XR rig position'),
179
+ yaw: finiteNumber(rig.yaw, 'XR rig yaw'),
180
+ };
181
+ }
182
+ catch {
183
+ xrRig = undefined;
184
+ }
185
+ const metadata = cloneMetadata(options.metadata);
186
+ return {
187
+ format: ANYO_PLAYER_SESSION_FORMAT,
188
+ version: ANYO_PLAYER_SESSION_VERSION,
189
+ createdAt: this.now().toISOString(),
190
+ world: {
191
+ ...(this.worldKey ? { key: this.worldKey } : {}),
192
+ documentVersion: String(context.document.version),
193
+ room: context.world.getCurrentRoom(),
194
+ },
195
+ camera: {
196
+ position: cameraPosition,
197
+ yaw,
198
+ pitch,
199
+ },
200
+ ...(xrRig ? { xrRig } : {}),
201
+ ...(data.length > 0 ? { data } : {}),
202
+ player: {
203
+ paused: context.paused,
204
+ pauseReason: context.paused ? context.pauseReason : null,
205
+ inputMode: context.inputMode,
206
+ },
207
+ ...(metadata ? { metadata } : {}),
208
+ };
209
+ }
210
+ parse(value) {
211
+ this.assertEnabled();
212
+ if (!isRecord(value))
213
+ throw new TypeError('Anyo Player session snapshot must be an object.');
214
+ if (value.format !== ANYO_PLAYER_SESSION_FORMAT)
215
+ throw new TypeError('Unsupported Anyo Player session format.');
216
+ if (value.version !== ANYO_PLAYER_SESSION_VERSION)
217
+ throw new TypeError(`Unsupported Anyo Player session version "${String(value.version)}".`);
218
+ if (typeof value.createdAt !== 'string' || Number.isNaN(Date.parse(value.createdAt))) {
219
+ throw new TypeError('Session createdAt must be a valid ISO date string.');
220
+ }
221
+ if (!isRecord(value.world))
222
+ throw new TypeError('Session world information is missing.');
223
+ if (!isRecord(value.camera))
224
+ throw new TypeError('Session camera information is missing.');
225
+ if (!isRecord(value.player))
226
+ throw new TypeError('Session player information is missing.');
227
+ const key = optionalString(value.world.key, 'Session world key');
228
+ const documentVersion = optionalString(value.world.documentVersion, 'Session document version');
229
+ if (!documentVersion)
230
+ throw new TypeError('Session document version is required.');
231
+ const room = nullableString(value.world.room, 'Session room');
232
+ const position = vector3(value.camera.position, 'Session camera position');
233
+ const yaw = finiteNumber(value.camera.yaw, 'Session camera yaw');
234
+ const pitch = finiteNumber(value.camera.pitch, 'Session camera pitch');
235
+ const paused = value.player.paused;
236
+ if (typeof paused !== 'boolean')
237
+ throw new TypeError('Session paused state must be boolean.');
238
+ const pauseReason = value.player.pauseReason === null
239
+ ? null
240
+ : value.player.pauseReason === 'user' || value.player.pauseReason === 'visibility'
241
+ ? value.player.pauseReason
242
+ : (() => { throw new TypeError('Session pause reason is invalid.'); })();
243
+ const inputMode = value.player.inputMode === null
244
+ ? null
245
+ : value.player.inputMode === 'desktop' || value.player.inputMode === 'touch' || value.player.inputMode === 'gamepad'
246
+ ? value.player.inputMode
247
+ : (() => { throw new TypeError('Session input mode is invalid.'); })();
248
+ let xrRig;
249
+ if (value.xrRig !== undefined) {
250
+ if (!isRecord(value.xrRig))
251
+ throw new TypeError('Session XR rig must be an object.');
252
+ xrRig = {
253
+ position: vector3(value.xrRig.position, 'Session XR rig position'),
254
+ yaw: finiteNumber(value.xrRig.yaw, 'Session XR rig yaw'),
255
+ };
256
+ }
257
+ const data = normalizeDataEntries(value.data);
258
+ const metadata = cloneMetadata(value.metadata);
259
+ return {
260
+ format: ANYO_PLAYER_SESSION_FORMAT,
261
+ version: ANYO_PLAYER_SESSION_VERSION,
262
+ createdAt: value.createdAt,
263
+ world: {
264
+ ...(key ? { key } : {}),
265
+ documentVersion,
266
+ room,
267
+ },
268
+ camera: { position, yaw, pitch },
269
+ ...(xrRig ? { xrRig } : {}),
270
+ ...(data.length > 0 ? { data } : {}),
271
+ player: { paused, pauseReason, inputMode },
272
+ ...(metadata ? { metadata } : {}),
273
+ };
274
+ }
275
+ async restoreWorld(context, snapshotInput, options = {}) {
276
+ this.assertEnabled();
277
+ const snapshot = this.parse(snapshotInput);
278
+ const strictWorldKey = options.strictWorldKey ?? this.options.strictWorldKey ?? true;
279
+ const strictDocumentVersion = options.strictDocumentVersion
280
+ ?? this.options.strictDocumentVersion
281
+ ?? false;
282
+ const strictRoom = options.strictRoom ?? this.options.strictRoom ?? false;
283
+ const restoreRuntimeData = options.restoreRuntimeData ?? true;
284
+ const restoreXR = options.restoreXR ?? true;
285
+ if (strictWorldKey
286
+ && this.worldKey
287
+ && this.worldKey !== snapshot.world.key) {
288
+ throw new AnyoPlayerError('PLAYER_SESSION_WORLD_MISMATCH', `Session world key "${snapshot.world.key ?? '(missing)'}" does not match "${this.worldKey}".`);
289
+ }
290
+ if (strictDocumentVersion
291
+ && String(context.document.version) !== snapshot.world.documentVersion) {
292
+ throw new AnyoPlayerError('PLAYER_SESSION_WORLD_MISMATCH', `Session document version "${snapshot.world.documentVersion}" does not match "${String(context.document.version)}".`);
293
+ }
294
+ const roomExists = snapshot.world.room
295
+ ? context.world.compiled?.roomById.has(snapshot.world.room) ?? false
296
+ : true;
297
+ if (snapshot.world.room && !roomExists && strictRoom) {
298
+ throw new AnyoPlayerError('PLAYER_SESSION_WORLD_MISMATCH', `Session room "${snapshot.world.room}" does not exist in the current world.`);
299
+ }
300
+ const previousData = (snapshot.data ?? []).map(entry => ({
301
+ path: entry.path,
302
+ value: context.world.getData(entry.path),
303
+ }));
304
+ if (restoreRuntimeData) {
305
+ let applied = 0;
306
+ try {
307
+ for (const entry of snapshot.data ?? []) {
308
+ await context.world.setData(entry.path, entry.value);
309
+ applied += 1;
310
+ }
311
+ if ((snapshot.data?.length ?? 0) > 0) {
312
+ await context.world.whenReady();
313
+ await context.world.whenIdle();
314
+ }
315
+ }
316
+ catch (error) {
317
+ for (const entry of previousData.slice(0, applied).reverse()) {
318
+ try {
319
+ await context.world.setData(entry.path, entry.value);
320
+ }
321
+ catch (rollbackError) {
322
+ context.onWarning(`Session runtime-data rollback failed at "${entry.path}": ${String(rollbackError)}`);
323
+ }
324
+ }
325
+ throw error;
326
+ }
327
+ }
328
+ context.world.renderer.camera.setPosition(snapshot.camera.position);
329
+ context.world.renderer.camera.setRotation(snapshot.camera.yaw, snapshot.camera.pitch);
330
+ if (snapshot.world.room && roomExists)
331
+ context.world.setCurrentRoom(snapshot.world.room);
332
+ else if (snapshot.world.room && !roomExists) {
333
+ context.onWarning(`Session room "${snapshot.world.room}" does not exist in the current world; the current room was preserved.`);
334
+ }
335
+ else
336
+ context.world.setCurrentRoom(null);
337
+ if (restoreXR && snapshot.xrRig) {
338
+ try {
339
+ context.world.xr.setPlayerRigTransform(snapshot.xrRig);
340
+ }
341
+ catch (error) {
342
+ context.onWarning(`Anyo Player could not restore the XR player rig: ${String(error)}`);
343
+ }
344
+ }
345
+ return snapshot;
346
+ }
347
+ async save(key, snapshot) {
348
+ this.assertEnabled();
349
+ const storage = this.requireStorage();
350
+ const resolvedKey = this.resolveKey(key);
351
+ try {
352
+ await storage.setItem(resolvedKey, JSON.stringify(snapshot));
353
+ return resolvedKey;
354
+ }
355
+ catch (cause) {
356
+ throw new AnyoPlayerError('PLAYER_SESSION_SAVE_FAILED', `Anyo Player could not save session "${resolvedKey}".`, { cause });
357
+ }
358
+ }
359
+ async load(key) {
360
+ this.assertEnabled();
361
+ const storage = this.requireStorage();
362
+ const resolvedKey = this.resolveKey(key);
363
+ let serialized;
364
+ try {
365
+ serialized = await storage.getItem(resolvedKey);
366
+ }
367
+ catch (cause) {
368
+ throw new AnyoPlayerError('PLAYER_SESSION_LOAD_FAILED', `Anyo Player could not load session "${resolvedKey}".`, { cause });
369
+ }
370
+ if (serialized === null)
371
+ return null;
372
+ try {
373
+ return { key: resolvedKey, snapshot: this.parse(JSON.parse(serialized)) };
374
+ }
375
+ catch (cause) {
376
+ if (cause instanceof AnyoPlayerError)
377
+ throw cause;
378
+ throw new AnyoPlayerError('PLAYER_SESSION_INVALID', `Stored Anyo Player session "${resolvedKey}" is invalid.`, { cause });
379
+ }
380
+ }
381
+ async clear(key) {
382
+ this.assertEnabled();
383
+ const storage = this.requireStorage();
384
+ const resolvedKey = this.resolveKey(key);
385
+ try {
386
+ await storage.removeItem(resolvedKey);
387
+ return resolvedKey;
388
+ }
389
+ catch (cause) {
390
+ throw new AnyoPlayerError('PLAYER_SESSION_SAVE_FAILED', `Anyo Player could not clear session "${resolvedKey}".`, { cause });
391
+ }
392
+ }
393
+ assertEnabled() {
394
+ if (!this.enabled)
395
+ throw new AnyoPlayerError('PLAYER_SESSION_DISABLED', 'Session support is disabled for this Anyo Player.');
396
+ }
397
+ requireStorage() {
398
+ if (!this.storage) {
399
+ throw new AnyoPlayerError('PLAYER_SESSION_STORAGE_UNAVAILABLE', 'No session storage adapter is available. Provide session.storage or a browser localStorage environment.');
400
+ }
401
+ return this.storage;
402
+ }
403
+ resolveKey(key) {
404
+ const resolved = key?.trim() || this.storageKey;
405
+ if (!resolved) {
406
+ throw new AnyoPlayerError('PLAYER_SESSION_STORAGE_UNAVAILABLE', 'A session storage key is required. Pass a key or configure session.storageKey.');
407
+ }
408
+ return resolved;
409
+ }
410
+ }
411
+ //# sourceMappingURL=SessionController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionController.js","sourceRoot":"","sources":["../../src/internal/SessionController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type WorldDocument } from '@blcklab/anyo';
2
+ import type { AnyoPlayerLoadingOptions, AnyoPlayerSource, AnyoPlayerSourceInfo } from '../types.js';
3
+ export interface ResolvedPlayerSource {
4
+ document: WorldDocument;
5
+ documentUrl?: string;
6
+ info: AnyoPlayerSourceInfo;
7
+ cleanup?: () => void;
8
+ }
9
+ export interface SourceResolverOptions {
10
+ baseUrl?: string | URL;
11
+ fetch?: typeof globalThis.fetch;
12
+ loading?: false | AnyoPlayerLoadingOptions;
13
+ }
14
+ export declare class SourceResolver {
15
+ private readonly baseUrl;
16
+ private readonly fetchImplementation;
17
+ private readonly loading;
18
+ constructor(options?: SourceResolverOptions);
19
+ resolve(source: AnyoPlayerSource, signal: AbortSignal): Promise<ResolvedPlayerSource>;
20
+ private resolveJson;
21
+ private resolveBlob;
22
+ private resolveArchive;
23
+ private resolveFileMap;
24
+ private fetchUrl;
25
+ private fromCache;
26
+ private finish;
27
+ private migrate;
28
+ private assertSize;
29
+ private abortedError;
30
+ }
31
+ //# sourceMappingURL=SourceResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourceResolver.d.ts","sourceRoot":"","sources":["../../src/internal/SourceResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAExE,OAAO,KAAK,EAOV,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EAKrB,MAAM,aAAa,CAAA;AAGpB,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,aAAa,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,oBAAoB,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IAC/B,OAAO,CAAC,EAAE,KAAK,GAAG,wBAAwB,CAAA;CAC3C;AA+JD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqC;IACzE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,OAAO,GAAE,qBAA0B;IAYzC,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAmB7E,WAAW;YAQX,WAAW;YAQX,cAAc;YAWd,cAAc;YAuCd,QAAQ;YA6CR,SAAS;IAWvB,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;CACrB"}