@dcl/sdk-commands 7.30.1 → 7.30.2-37807847179.commit-24c42ea

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 (67) hide show
  1. package/dist/commands/sdk-server-logs/index.d.ts +24 -0
  2. package/dist/commands/sdk-server-logs/index.js +313 -0
  3. package/dist/commands/sdk-server-logs/index.js.map +1 -0
  4. package/dist/commands/start/dcl-env.d.ts +16 -0
  5. package/dist/commands/start/dcl-env.js +51 -0
  6. package/dist/commands/start/dcl-env.js.map +1 -0
  7. package/dist/commands/start/index.d.ts +1 -0
  8. package/dist/commands/start/index.js +24 -6
  9. package/dist/commands/start/index.js.map +1 -1
  10. package/dist/commands/start/multiplayer-server.d.ts +35 -0
  11. package/dist/commands/start/multiplayer-server.js +244 -0
  12. package/dist/commands/start/multiplayer-server.js.map +1 -0
  13. package/dist/commands/start/server/routes.d.ts +1 -1
  14. package/dist/commands/start/server/routes.js +6 -2
  15. package/dist/commands/start/server/routes.js.map +1 -1
  16. package/dist/commands/start/server/runtime-env.d.ts +84 -0
  17. package/dist/commands/start/server/runtime-env.js +415 -0
  18. package/dist/commands/start/server/runtime-env.js.map +1 -0
  19. package/dist/commands/start/server/storage-service.d.ts +8 -0
  20. package/dist/commands/start/server/storage-service.js +243 -0
  21. package/dist/commands/start/server/storage-service.js.map +1 -0
  22. package/dist/commands/start/utils.d.ts +32 -0
  23. package/dist/commands/start/utils.js +72 -0
  24. package/dist/commands/start/utils.js.map +1 -1
  25. package/dist/commands/storage/env.d.ts +5 -0
  26. package/dist/commands/storage/env.js +86 -0
  27. package/dist/commands/storage/env.js.map +1 -0
  28. package/dist/commands/storage/index.d.ts +26 -0
  29. package/dist/commands/storage/index.js +142 -0
  30. package/dist/commands/storage/index.js.map +1 -0
  31. package/dist/commands/storage/player.d.ts +5 -0
  32. package/dist/commands/storage/player.js +143 -0
  33. package/dist/commands/storage/player.js.map +1 -0
  34. package/dist/commands/storage/scene.d.ts +5 -0
  35. package/dist/commands/storage/scene.js +105 -0
  36. package/dist/commands/storage/scene.js.map +1 -0
  37. package/dist/commands/storage/shared.d.ts +62 -0
  38. package/dist/commands/storage/shared.js +260 -0
  39. package/dist/commands/storage/shared.js.map +1 -0
  40. package/dist/commands/storage/types.d.ts +56 -0
  41. package/dist/commands/storage/types.js +23 -0
  42. package/dist/commands/storage/types.js.map +1 -0
  43. package/dist/components/analytics.d.ts +75 -1
  44. package/dist/components/analytics.js +3 -2
  45. package/dist/components/analytics.js.map +1 -1
  46. package/dist/logic/auth-chain-headers.d.ts +11 -0
  47. package/dist/logic/auth-chain-headers.js +25 -0
  48. package/dist/logic/auth-chain-headers.js.map +1 -0
  49. package/dist/logic/bundle.js +31 -0
  50. package/dist/logic/bundle.js.map +1 -1
  51. package/dist/logic/config.d.ts +1 -0
  52. package/dist/logic/config.js +7 -0
  53. package/dist/logic/config.js.map +1 -1
  54. package/dist/logic/error.d.ts +1 -1
  55. package/dist/logic/error.js.map +1 -1
  56. package/dist/logic/exec.d.ts +1 -0
  57. package/dist/logic/exec.js +2 -2
  58. package/dist/logic/exec.js.map +1 -1
  59. package/dist/logic/lang.js +1 -1
  60. package/dist/logic/lsd-realm.d.ts +5 -0
  61. package/dist/logic/lsd-realm.js +28 -0
  62. package/dist/logic/lsd-realm.js.map +1 -0
  63. package/dist/logic/project-files.js +2 -0
  64. package/dist/logic/project-files.js.map +1 -1
  65. package/dist/logic/scene-validations.d.ts +8 -1
  66. package/dist/logic/scene-validations.js.map +1 -1
  67. package/package.json +3 -3
@@ -0,0 +1,415 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StoreLockLostError = exports.StorageLimitExceededError = exports.STORAGE_LIMITS = void 0;
7
+ exports.loadServerStorage = loadServerStorage;
8
+ exports.saveServerStorage = saveServerStorage;
9
+ exports.loadEnvFile = loadEnvFile;
10
+ exports.getEnvStorage = getEnvStorage;
11
+ exports.getMergedEnv = getMergedEnv;
12
+ exports.setEnvValue = setEnvValue;
13
+ exports.deleteEnvValue = deleteEnvValue;
14
+ exports.getWorldStorage = getWorldStorage;
15
+ exports.getWorldValue = getWorldValue;
16
+ exports.getPlayerStorage = getPlayerStorage;
17
+ exports.setWorldValue = setWorldValue;
18
+ exports.deleteWorldValue = deleteWorldValue;
19
+ exports.getPlayerValue = getPlayerValue;
20
+ exports.setPlayerValue = setPlayerValue;
21
+ exports.deletePlayerValue = deletePlayerValue;
22
+ const path_1 = __importDefault(require("path"));
23
+ // Find the sdk-commands package root by resolving its package.json
24
+ const SDK_COMMANDS_ROOT = path_1.default.dirname(require.resolve('@dcl/sdk-commands/package.json'));
25
+ const RUNTIME_DATA_DIR = path_1.default.join(SDK_COMMANDS_ROOT, '.runtime-data');
26
+ const SERVER_STORAGE_FILE = 'server-storage.json';
27
+ function createDefaultStorage() {
28
+ return {
29
+ env: {},
30
+ world: {},
31
+ players: {}
32
+ };
33
+ }
34
+ const isPlainObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
35
+ function bucket(value) {
36
+ return isPlainObject(value) ? value : {};
37
+ }
38
+ // Plain indexing would resolve `constructor` or `__proto__` through Object.prototype.
39
+ const hasOwn = (record, key) => Object.prototype.hasOwnProperty.call(record, key);
40
+ function getOwn(record, key) {
41
+ return hasOwn(record, key) ? record[key] : undefined;
42
+ }
43
+ function setOwn(record, key, value) {
44
+ Object.defineProperty(record, key, { value, enumerable: true, configurable: true, writable: true });
45
+ }
46
+ /** Older previews stored checksummed addresses; the lowercase bucket wins a conflicting key. */
47
+ function mergePlayerBuckets(players) {
48
+ const merged = {};
49
+ const addresses = Object.keys(players);
50
+ const lowercaseFirst = [
51
+ ...addresses.filter((address) => address === address.toLowerCase()),
52
+ ...addresses.filter((address) => address !== address.toLowerCase())
53
+ ];
54
+ for (const address of lowercaseFirst) {
55
+ const target = address.toLowerCase();
56
+ let values = getOwn(merged, target);
57
+ if (!values) {
58
+ values = {};
59
+ setOwn(merged, target, values);
60
+ }
61
+ for (const [key, value] of Object.entries(bucket(getOwn(players, address)))) {
62
+ if (!hasOwn(values, key))
63
+ setOwn(values, key, value);
64
+ }
65
+ }
66
+ return merged;
67
+ }
68
+ /** The deployed service's defaults, in bytes; totals are per world, or per player. */
69
+ exports.STORAGE_LIMITS = {
70
+ env: { maxValueSizeBytes: 10240, maxTotalSizeBytes: 262144 },
71
+ world: { maxValueSizeBytes: 524288, maxTotalSizeBytes: 10485760 },
72
+ player: { maxValueSizeBytes: 102400, maxTotalSizeBytes: 1048576 }
73
+ };
74
+ class StorageLimitExceededError extends Error {
75
+ }
76
+ exports.StorageLimitExceededError = StorageLimitExceededError;
77
+ /** Env values are stored raw, not as JSON. */
78
+ const byteSize = (value) => Buffer.byteLength(String(value), 'utf-8');
79
+ function assertWithinLimits(values, key, value, limits, measure) {
80
+ const size = measure(value);
81
+ if (size > limits.maxValueSizeBytes) {
82
+ throw new StorageLimitExceededError(`Value size (${size} bytes) exceeds the maximum allowed size (${limits.maxValueSizeBytes} bytes)`);
83
+ }
84
+ const total = Object.values(values).reduce((sum, stored) => sum + measure(stored), 0);
85
+ const existing = hasOwn(values, key) ? measure(values[key]) : 0;
86
+ if (total - existing + size > limits.maxTotalSizeBytes) {
87
+ throw new StorageLimitExceededError(`Total storage size would exceed the maximum allowed (${limits.maxTotalSizeBytes} bytes)`);
88
+ }
89
+ }
90
+ const jsonSize = (value) => Buffer.byteLength(JSON.stringify(value), 'utf-8');
91
+ let storeLock = Promise.resolve();
92
+ const LOCK_TIMEOUT_MS = 30000;
93
+ const LOCK_RETRY_MS = 20;
94
+ /** The token of the lock file this process holds, checked before every commit. */
95
+ let heldLockToken;
96
+ /** The lock was removed or replaced while this process held it; nothing was written. */
97
+ class StoreLockLostError extends Error {
98
+ }
99
+ exports.StoreLockLostError = StoreLockLostError;
100
+ const randomToken = () => Math.random().toString(36).slice(2, 10);
101
+ /** EPERM means the process exists but belongs to another user. */
102
+ function isAlive(pid) {
103
+ try {
104
+ process.kill(pid, 0);
105
+ return true;
106
+ }
107
+ catch (error) {
108
+ return error?.code === 'EPERM';
109
+ }
110
+ }
111
+ async function readLock(components, lockPath) {
112
+ try {
113
+ return await components.fs.readFile(lockPath, 'utf-8');
114
+ }
115
+ catch (error) {
116
+ if (error?.code === 'ENOENT')
117
+ return undefined;
118
+ throw error;
119
+ }
120
+ }
121
+ /** The store is shared by every preview process using this sdk-commands installation. */
122
+ function withStoreLock(components, task) {
123
+ const locked = () => withLockFile(components, task);
124
+ const run = storeLock.then(locked, locked);
125
+ storeLock = run.then(() => undefined, () => undefined);
126
+ return run;
127
+ }
128
+ /**
129
+ * The lock holds `<pid>:<token>` and only its creator releases it. It is never taken over: without an
130
+ * atomic compare-and-remove, a takeover could revoke a live owner. A lock left by a crashed preview
131
+ * has to be deleted by hand.
132
+ */
133
+ async function withLockFile(components, task) {
134
+ await ensureRuntimeDir(components);
135
+ const lockPath = `${storagePath()}.lock`;
136
+ const token = `${process.pid}:${randomToken()}`;
137
+ const deadline = Date.now() + LOCK_TIMEOUT_MS;
138
+ for (;;) {
139
+ try {
140
+ await components.fs.writeFile(lockPath, token, { flag: 'wx' });
141
+ break;
142
+ }
143
+ catch (error) {
144
+ if (error?.code !== 'EEXIST')
145
+ throw error;
146
+ }
147
+ const holder = await readLock(components, lockPath);
148
+ if (holder === undefined)
149
+ continue;
150
+ const pid = Number(holder.split(':')[0]);
151
+ if (Number.isInteger(pid) && pid > 0 && !isAlive(pid)) {
152
+ throw new Error(`${lockPath} is held by process ${pid}, which is no longer running. Delete it once no preview is running.`);
153
+ }
154
+ if (Date.now() > deadline) {
155
+ throw new Error(`Timed out waiting for ${lockPath}. If no preview is running, delete it.`);
156
+ }
157
+ await new Promise((resolve) => setTimeout(resolve, LOCK_RETRY_MS));
158
+ }
159
+ heldLockToken = token;
160
+ try {
161
+ return await task();
162
+ }
163
+ finally {
164
+ heldLockToken = undefined;
165
+ if ((await readLock(components, lockPath).catch(() => undefined)) === token) {
166
+ await components.fs.unlink(lockPath).catch(() => undefined);
167
+ }
168
+ }
169
+ }
170
+ /**
171
+ * Ensures the runtime data directory exists.
172
+ */
173
+ async function ensureRuntimeDir(components) {
174
+ try {
175
+ const exists = await components.fs.directoryExists(RUNTIME_DATA_DIR);
176
+ if (!exists) {
177
+ await components.fs.mkdir(RUNTIME_DATA_DIR, { recursive: true });
178
+ }
179
+ }
180
+ catch (error) {
181
+ components.logger.error(`Failed to create runtime data directory: ${error}`);
182
+ }
183
+ }
184
+ const storagePath = () => path_1.default.join(RUNTIME_DATA_DIR, SERVER_STORAGE_FILE);
185
+ /** The store as read, or `null` when the file exists but does not hold a JSON object. */
186
+ async function readStore(components) {
187
+ // fileExists() answers false for any access failure, so only ENOENT from the read itself means absent.
188
+ let content;
189
+ try {
190
+ content = await components.fs.readFile(storagePath(), 'utf-8');
191
+ }
192
+ catch (error) {
193
+ if (error?.code === 'ENOENT')
194
+ return createDefaultStorage();
195
+ throw error;
196
+ }
197
+ let parsed;
198
+ try {
199
+ parsed = JSON.parse(content);
200
+ }
201
+ catch (error) {
202
+ if (!(error instanceof SyntaxError))
203
+ throw error;
204
+ return null;
205
+ }
206
+ if (!isPlainObject(parsed))
207
+ return null;
208
+ return {
209
+ env: bucket(parsed.env),
210
+ world: bucket(parsed.world),
211
+ players: mergePlayerBuckets(bucket(parsed.players))
212
+ };
213
+ }
214
+ /** The caller holds the store lock. A corrupt file is kept aside for recovery. */
215
+ async function loadStoreLocked(components) {
216
+ const storage = await readStore(components);
217
+ if (storage)
218
+ return storage;
219
+ const asidePath = `${storagePath()}.corrupt-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
220
+ components.logger.error(`${SERVER_STORAGE_FILE} does not hold a JSON object; moving it to ${asidePath}`);
221
+ try {
222
+ await components.fs.rename(storagePath(), asidePath);
223
+ }
224
+ catch (error) {
225
+ if (error?.code !== 'ENOENT')
226
+ throw error;
227
+ }
228
+ return createDefaultStorage();
229
+ }
230
+ /** Only a missing file is an empty store; any other read failure throws. */
231
+ async function loadServerStorage(components) {
232
+ return (await readStore(components)) ?? withStoreLock(components, () => loadStoreLocked(components));
233
+ }
234
+ /**
235
+ * Saves all server-side storage data to server-storage.json.
236
+ */
237
+ async function saveServerStorage(components, data) {
238
+ await ensureRuntimeDir(components);
239
+ const tmpPath = `${storagePath()}.${process.pid}.${randomToken()}.tmp`;
240
+ await components.fs.writeFile(tmpPath, JSON.stringify(data, null, 2));
241
+ // Fence: a save whose lock was removed or replaced must not commit.
242
+ if (heldLockToken !== undefined && (await readLock(components, `${storagePath()}.lock`)) !== heldLockToken) {
243
+ await components.fs.unlink(tmpPath).catch(() => undefined);
244
+ throw new StoreLockLostError(`The ${SERVER_STORAGE_FILE} lock was removed or replaced during the write; nothing was saved`);
245
+ }
246
+ await components.fs.rename(tmpPath, storagePath());
247
+ }
248
+ /**
249
+ * Loads environment variables from a .env file in the project directory.
250
+ * Returns a Map of key-value pairs.
251
+ */
252
+ async function loadEnvFile(components, projectDirectory) {
253
+ const envMap = new Map();
254
+ const envPath = path_1.default.join(projectDirectory, '.env');
255
+ let content;
256
+ try {
257
+ content = await components.fs.readFile(envPath, 'utf-8');
258
+ }
259
+ catch (error) {
260
+ if (error?.code === 'ENOENT')
261
+ return envMap;
262
+ throw error;
263
+ }
264
+ for (const line of content.split('\n')) {
265
+ const trimmed = line.trim();
266
+ if (!trimmed || trimmed.startsWith('#')) {
267
+ continue;
268
+ }
269
+ const equalIndex = trimmed.indexOf('=');
270
+ if (equalIndex > 0) {
271
+ const key = trimmed.slice(0, equalIndex).trim();
272
+ let value = trimmed.slice(equalIndex + 1).trim();
273
+ if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
274
+ value = value.slice(1, -1);
275
+ }
276
+ envMap.set(key, value);
277
+ }
278
+ }
279
+ return envMap;
280
+ }
281
+ /**
282
+ * Gets runtime environment variables.
283
+ */
284
+ async function getEnvStorage(components) {
285
+ const storage = await loadServerStorage(components);
286
+ return storage.env;
287
+ }
288
+ /**
289
+ * Gets merged environment variables.
290
+ * Runtime values (from server-storage.json) override .env values.
291
+ */
292
+ async function getMergedEnv(components, projectDirectory) {
293
+ const envFile = await loadEnvFile(components, projectDirectory);
294
+ const runtimeEnv = await getEnvStorage(components);
295
+ // Runtime overrides .env
296
+ for (const [key, value] of Object.entries(runtimeEnv)) {
297
+ envFile.set(key, value);
298
+ }
299
+ return envFile;
300
+ }
301
+ /**
302
+ * Sets a runtime environment variable.
303
+ */
304
+ async function setEnvValue(components, key, value) {
305
+ return withStoreLock(components, async () => {
306
+ const storage = await loadStoreLocked(components);
307
+ assertWithinLimits(storage.env, key, value, exports.STORAGE_LIMITS.env, byteSize);
308
+ setOwn(storage.env, key, value);
309
+ await saveServerStorage(components, storage);
310
+ });
311
+ }
312
+ /**
313
+ * Deletes a runtime environment variable.
314
+ * Returns true if key existed and was deleted, false otherwise.
315
+ */
316
+ async function deleteEnvValue(components, key) {
317
+ return withStoreLock(components, async () => {
318
+ const storage = await loadStoreLocked(components);
319
+ if (!hasOwn(storage.env, key)) {
320
+ return false;
321
+ }
322
+ delete storage.env[key];
323
+ await saveServerStorage(components, storage);
324
+ return true;
325
+ });
326
+ }
327
+ /**
328
+ * Gets all world storage data.
329
+ */
330
+ async function getWorldStorage(components) {
331
+ const storage = await loadServerStorage(components);
332
+ return storage.world;
333
+ }
334
+ /**
335
+ * Gets a value from world storage.
336
+ */
337
+ async function getWorldValue(components, key) {
338
+ const storage = await loadServerStorage(components);
339
+ return getOwn(storage.world, key);
340
+ }
341
+ /**
342
+ * Gets all storage data for a player, empty when the player has none.
343
+ */
344
+ async function getPlayerStorage(components, address) {
345
+ const storage = await loadServerStorage(components);
346
+ return getOwn(storage.players, address.toLowerCase()) ?? {};
347
+ }
348
+ /**
349
+ * Sets a value in world storage.
350
+ */
351
+ async function setWorldValue(components, key, value) {
352
+ return withStoreLock(components, async () => {
353
+ const storage = await loadStoreLocked(components);
354
+ assertWithinLimits(storage.world, key, value, exports.STORAGE_LIMITS.world, jsonSize);
355
+ setOwn(storage.world, key, value);
356
+ await saveServerStorage(components, storage);
357
+ });
358
+ }
359
+ /**
360
+ * Deletes a value from world storage.
361
+ * Returns true if key existed and was deleted, false otherwise.
362
+ */
363
+ async function deleteWorldValue(components, key) {
364
+ return withStoreLock(components, async () => {
365
+ const storage = await loadStoreLocked(components);
366
+ if (!hasOwn(storage.world, key)) {
367
+ return false;
368
+ }
369
+ delete storage.world[key];
370
+ await saveServerStorage(components, storage);
371
+ return true;
372
+ });
373
+ }
374
+ /**
375
+ * Gets a value from a player's storage.
376
+ */
377
+ async function getPlayerValue(components, address, key) {
378
+ const storage = await loadServerStorage(components);
379
+ const values = getOwn(storage.players, address.toLowerCase());
380
+ return values ? getOwn(values, key) : undefined;
381
+ }
382
+ /**
383
+ * Sets a value in a player's storage.
384
+ */
385
+ async function setPlayerValue(components, address, key, value) {
386
+ return withStoreLock(components, async () => {
387
+ const storage = await loadStoreLocked(components);
388
+ const lowercased = address.toLowerCase();
389
+ let values = getOwn(storage.players, lowercased);
390
+ if (!values) {
391
+ values = {};
392
+ setOwn(storage.players, lowercased, values);
393
+ }
394
+ assertWithinLimits(values, key, value, exports.STORAGE_LIMITS.player, jsonSize);
395
+ setOwn(values, key, value);
396
+ await saveServerStorage(components, storage);
397
+ });
398
+ }
399
+ /**
400
+ * Deletes a value from a player's storage.
401
+ * Returns true if key existed and was deleted, false otherwise.
402
+ */
403
+ async function deletePlayerValue(components, address, key) {
404
+ return withStoreLock(components, async () => {
405
+ const storage = await loadStoreLocked(components);
406
+ const values = getOwn(storage.players, address.toLowerCase());
407
+ if (!values || !hasOwn(values, key)) {
408
+ return false;
409
+ }
410
+ delete values[key];
411
+ await saveServerStorage(components, storage);
412
+ return true;
413
+ });
414
+ }
415
+ //# sourceMappingURL=runtime-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-env.js","sourceRoot":"","sources":["../../../../src/commands/start/server/runtime-env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Router } from '@well-known-components/http-server';
2
+ import { PreviewComponents } from '../types';
3
+ import { CliComponents } from '../../../components';
4
+ import { Workspace } from '../../../logic/workspace-validations';
5
+ /**
6
+ * Sets up storage-related endpoints for environment variables, scene storage, and player storage.
7
+ */
8
+ export declare function setupStorageEndpoints(components: CliComponents, router: Router<PreviewComponents>, workspace: Workspace): void;