@dcl/sdk-commands 7.21.1-22917715332.commit-e5d969d → 7.21.1-22918726402.commit-ee210ee
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/dist/commands/code-to-composite/scene-executor.js +0 -1
- package/dist/commands/code-to-composite/scene-executor.js.map +1 -1
- package/dist/commands/deploy/utils.d.ts +2 -0
- package/dist/commands/deploy/utils.js +2 -1
- package/dist/commands/deploy/utils.js.map +1 -1
- package/dist/commands/sdk-server-logs/index.d.ts +21 -0
- package/dist/commands/sdk-server-logs/index.js +262 -0
- package/dist/commands/sdk-server-logs/index.js.map +1 -0
- package/dist/commands/start/explorer-alpha.js +4 -0
- package/dist/commands/start/explorer-alpha.js.map +1 -1
- package/dist/commands/start/hammurabi-server.d.ts +19 -0
- package/dist/commands/start/hammurabi-server.js +78 -0
- package/dist/commands/start/hammurabi-server.js.map +1 -0
- package/dist/commands/start/index.d.ts +2 -1
- package/dist/commands/start/index.js +39 -32
- package/dist/commands/start/index.js.map +1 -1
- package/dist/commands/start/server/routes.js +5 -1
- package/dist/commands/start/server/routes.js.map +1 -1
- package/dist/commands/start/server/runtime-env.d.ts +71 -0
- package/dist/commands/start/server/runtime-env.js +226 -0
- package/dist/commands/start/server/runtime-env.js.map +1 -0
- package/dist/commands/start/server/storage-service.d.ts +8 -0
- package/dist/commands/start/server/storage-service.js +156 -0
- package/dist/commands/start/server/storage-service.js.map +1 -0
- package/dist/commands/start/types.d.ts +3 -0
- package/dist/commands/start/utils.d.ts +34 -0
- package/dist/commands/start/utils.js +104 -0
- package/dist/commands/start/utils.js.map +1 -1
- package/dist/commands/storage/env.d.ts +5 -0
- package/dist/commands/storage/env.js +86 -0
- package/dist/commands/storage/env.js.map +1 -0
- package/dist/commands/storage/index.d.ts +26 -0
- package/dist/commands/storage/index.js +142 -0
- package/dist/commands/storage/index.js.map +1 -0
- package/dist/commands/storage/player.d.ts +5 -0
- package/dist/commands/storage/player.js +143 -0
- package/dist/commands/storage/player.js.map +1 -0
- package/dist/commands/storage/scene.d.ts +5 -0
- package/dist/commands/storage/scene.js +105 -0
- package/dist/commands/storage/scene.js.map +1 -0
- package/dist/commands/storage/shared.d.ts +62 -0
- package/dist/commands/storage/shared.js +249 -0
- package/dist/commands/storage/shared.js.map +1 -0
- package/dist/commands/storage/types.d.ts +56 -0
- package/dist/commands/storage/types.js +23 -0
- package/dist/commands/storage/types.js.map +1 -0
- package/dist/components/analytics.d.ts +70 -1
- package/dist/components/analytics.js +3 -2
- package/dist/components/analytics.js.map +1 -1
- package/dist/logic/auth-chain-headers.d.ts +11 -0
- package/dist/logic/auth-chain-headers.js +25 -0
- package/dist/logic/auth-chain-headers.js.map +1 -0
- package/dist/logic/bundle.js +57 -13
- package/dist/logic/bundle.js.map +1 -1
- package/dist/logic/composite.d.ts +1 -0
- package/dist/logic/composite.js +13 -1
- package/dist/logic/composite.js.map +1 -1
- package/dist/logic/config.d.ts +1 -0
- package/dist/logic/config.js +7 -0
- package/dist/logic/config.js.map +1 -1
- package/dist/logic/error.d.ts +1 -1
- package/dist/logic/error.js.map +1 -1
- package/dist/logic/exec.d.ts +1 -0
- package/dist/logic/exec.js +2 -2
- package/dist/logic/exec.js.map +1 -1
- package/dist/logic/lang.js +1 -0
- package/dist/logic/lang.js.map +1 -1
- package/dist/logic/scene-validations.d.ts +8 -1
- package/dist/logic/scene-validations.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupStorageEndpoints = setupStorageEndpoints;
|
|
4
|
+
const runtime_env_1 = require("./runtime-env");
|
|
5
|
+
/**
|
|
6
|
+
* Sets up storage-related endpoints for environment variables, scene storage, and player storage.
|
|
7
|
+
*/
|
|
8
|
+
function setupStorageEndpoints(components, router, workspace) {
|
|
9
|
+
const withKeyValidation = async (ctx, next) => {
|
|
10
|
+
if (!ctx.params.key) {
|
|
11
|
+
return { status: 400, body: { message: 'Key is required' } };
|
|
12
|
+
}
|
|
13
|
+
return next();
|
|
14
|
+
};
|
|
15
|
+
const withAddressValidation = async (ctx, next) => {
|
|
16
|
+
if (!ctx.params.address) {
|
|
17
|
+
return { status: 400, body: { message: 'Address is required' } };
|
|
18
|
+
}
|
|
19
|
+
return next();
|
|
20
|
+
};
|
|
21
|
+
// Environment variables endpoints (/env/:key)
|
|
22
|
+
router.get('/env/:key', withKeyValidation, async (ctx) => {
|
|
23
|
+
const { key } = ctx.params;
|
|
24
|
+
const envVars = await (0, runtime_env_1.getMergedEnv)(components, workspace.projects[0].workingDirectory);
|
|
25
|
+
const value = envVars.get(key);
|
|
26
|
+
if (value === undefined) {
|
|
27
|
+
return { status: 404, body: { message: `Environment variable '${key}' not found` } };
|
|
28
|
+
}
|
|
29
|
+
return { body: JSON.stringify({ value }) };
|
|
30
|
+
});
|
|
31
|
+
router.put('/env/:key', withKeyValidation, async (ctx) => {
|
|
32
|
+
const { key } = ctx.params;
|
|
33
|
+
try {
|
|
34
|
+
const bodyText = await ctx.request.text();
|
|
35
|
+
const { value } = JSON.parse(bodyText);
|
|
36
|
+
await (0, runtime_env_1.setEnvValue)(components, key, value);
|
|
37
|
+
return { status: 204 };
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
components.logger.error(`Failed to set environment variable '${key}': ${error}`);
|
|
41
|
+
return { status: 500, body: { message: `Failed to set environment variable '${key}'` } };
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
router.delete('/env/:key', withKeyValidation, async (ctx) => {
|
|
45
|
+
const { key } = ctx.params;
|
|
46
|
+
try {
|
|
47
|
+
await (0, runtime_env_1.deleteEnvValue)(components, key);
|
|
48
|
+
return { status: 204 };
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
components.logger.error(`Failed to delete environment variable '${key}': ${error}`);
|
|
52
|
+
return { status: 500, body: { message: `Failed to delete environment variable '${key}'` } };
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
// Scene Storage list endpoint (GET /values, optional ?prefix=&limit=&offset=)
|
|
56
|
+
router.get('/values', async (ctx) => {
|
|
57
|
+
const prefix = ctx.url.searchParams.get('prefix');
|
|
58
|
+
const limitParam = ctx.url.searchParams.get('limit');
|
|
59
|
+
const offsetParam = ctx.url.searchParams.get('offset');
|
|
60
|
+
const storage = await (0, runtime_env_1.loadServerStorage)(components);
|
|
61
|
+
let entries = Object.entries(storage.world).map(([key, value]) => ({ key, value }));
|
|
62
|
+
if (prefix !== null && prefix !== '') {
|
|
63
|
+
entries = entries.filter((entry) => entry.key.startsWith(prefix));
|
|
64
|
+
}
|
|
65
|
+
const total = entries.length;
|
|
66
|
+
const offset = offsetParam !== null ? Math.max(0, parseInt(offsetParam, 10) || 0) : 0;
|
|
67
|
+
const limit = limitParam !== null ? Math.max(1, parseInt(limitParam, 10) || 0) : entries.length;
|
|
68
|
+
const paginatedEntries = limit > 0 ? entries.slice(offset, offset + limit) : entries.slice(offset);
|
|
69
|
+
return { body: JSON.stringify({ data: paginatedEntries, pagination: { offset, total } }) };
|
|
70
|
+
});
|
|
71
|
+
// Scene Storage endpoints (/values/:key)
|
|
72
|
+
router.get('/values/:key', withKeyValidation, async (ctx) => {
|
|
73
|
+
const { key } = ctx.params;
|
|
74
|
+
const value = await (0, runtime_env_1.getWorldValue)(components, key);
|
|
75
|
+
if (value === undefined) {
|
|
76
|
+
return { status: 404, body: { message: `Storage key '${key}' not found` } };
|
|
77
|
+
}
|
|
78
|
+
return { body: JSON.stringify({ value }) };
|
|
79
|
+
});
|
|
80
|
+
router.put('/values/:key', withKeyValidation, async (ctx) => {
|
|
81
|
+
const { key } = ctx.params;
|
|
82
|
+
try {
|
|
83
|
+
const bodyText = await ctx.request.text();
|
|
84
|
+
const { value } = JSON.parse(bodyText);
|
|
85
|
+
await (0, runtime_env_1.setWorldValue)(components, key, value);
|
|
86
|
+
return { body: JSON.stringify({ value }) };
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
components.logger.error(`Failed to set storage value '${key}': ${error}`);
|
|
90
|
+
return { status: 500, body: { message: `Failed to set storage value '${key}'` } };
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
router.delete('/values/:key', withKeyValidation, async (ctx) => {
|
|
94
|
+
const { key } = ctx.params;
|
|
95
|
+
try {
|
|
96
|
+
await (0, runtime_env_1.deleteWorldValue)(components, key);
|
|
97
|
+
return { status: 204 };
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
components.logger.error(`Failed to delete storage value '${key}': ${error}`);
|
|
101
|
+
return { status: 500, body: { message: `Failed to delete storage value '${key}'` } };
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
// Player Storage list endpoint (GET /players/:address/values, optional ?prefix=&limit=&offset=)
|
|
105
|
+
router.get('/players/:address/values', withAddressValidation, async (ctx) => {
|
|
106
|
+
const { address } = ctx.params;
|
|
107
|
+
const prefix = ctx.url.searchParams.get('prefix');
|
|
108
|
+
const limitParam = ctx.url.searchParams.get('limit');
|
|
109
|
+
const offsetParam = ctx.url.searchParams.get('offset');
|
|
110
|
+
const storage = await (0, runtime_env_1.loadServerStorage)(components);
|
|
111
|
+
const playerData = storage.players[address] ?? {};
|
|
112
|
+
let entries = Object.entries(playerData).map(([key, value]) => ({ key, value }));
|
|
113
|
+
if (prefix !== null && prefix !== '') {
|
|
114
|
+
entries = entries.filter((entry) => entry.key.startsWith(prefix));
|
|
115
|
+
}
|
|
116
|
+
const total = entries.length;
|
|
117
|
+
const offset = offsetParam !== null ? Math.max(0, parseInt(offsetParam, 10) || 0) : 0;
|
|
118
|
+
const limit = limitParam !== null ? Math.max(1, parseInt(limitParam, 10) || 0) : entries.length;
|
|
119
|
+
const paginatedEntries = limit > 0 ? entries.slice(offset, offset + limit) : entries.slice(offset);
|
|
120
|
+
return { body: JSON.stringify({ data: paginatedEntries, pagination: { offset, total } }) };
|
|
121
|
+
});
|
|
122
|
+
// Player Storage endpoints (/players/:address/values/:key)
|
|
123
|
+
router.get('/players/:address/values/:key', withAddressValidation, withKeyValidation, async (ctx) => {
|
|
124
|
+
const { address, key } = ctx.params;
|
|
125
|
+
const value = await (0, runtime_env_1.getPlayerValue)(components, address, key);
|
|
126
|
+
if (value === undefined) {
|
|
127
|
+
return { status: 404, body: { message: `Player storage key '${key}' not found for '${address}'` } };
|
|
128
|
+
}
|
|
129
|
+
return { body: JSON.stringify({ value }) };
|
|
130
|
+
});
|
|
131
|
+
router.put('/players/:address/values/:key', withAddressValidation, withKeyValidation, async (ctx) => {
|
|
132
|
+
const { address, key } = ctx.params;
|
|
133
|
+
try {
|
|
134
|
+
const bodyText = await ctx.request.text();
|
|
135
|
+
const { value } = JSON.parse(bodyText);
|
|
136
|
+
await (0, runtime_env_1.setPlayerValue)(components, address, key, value);
|
|
137
|
+
return { body: JSON.stringify({ value }) };
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
components.logger.error(`Failed to set player storage value '${key}' for '${address}': ${error}`);
|
|
141
|
+
return { status: 500, body: { message: `Failed to set player storage value '${key}' for '${address}'` } };
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
router.delete('/players/:address/values/:key', withAddressValidation, withKeyValidation, async (ctx) => {
|
|
145
|
+
const { address, key } = ctx.params;
|
|
146
|
+
try {
|
|
147
|
+
await (0, runtime_env_1.deletePlayerValue)(components, address, key);
|
|
148
|
+
return { status: 204 };
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
components.logger.error(`Failed to delete player storage value '${key}' for '${address}': ${error}`);
|
|
152
|
+
return { status: 500, body: { message: `Failed to delete player storage value '${key}' for '${address}'` } };
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=storage-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-service.js","sourceRoot":"","sources":["../../../../src/commands/start/server/storage-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { RoomComponent } from '@dcl/mini-comms/dist/adapters/rooms';
|
|
|
4
4
|
import { WebSocketComponent } from './server/ws';
|
|
5
5
|
import { CliComponents } from '../../components';
|
|
6
6
|
import { ISignalerComponent } from '../../components/exit-signal';
|
|
7
|
+
import { ChildProcess } from 'child_process';
|
|
7
8
|
export type PreviewComponents = CliComponents & {
|
|
8
9
|
logs: ILoggerComponent;
|
|
9
10
|
server: IHttpServerComponent<PreviewComponents>;
|
|
@@ -13,4 +14,6 @@ export type PreviewComponents = CliComponents & {
|
|
|
13
14
|
rooms: RoomComponent;
|
|
14
15
|
ws: WebSocketComponent;
|
|
15
16
|
signaler: ISignalerComponent;
|
|
17
|
+
/** Authoritative Server process (@dcl/hammurabi-server) */
|
|
18
|
+
hammurabiServer?: ChildProcess;
|
|
16
19
|
};
|
|
@@ -6,3 +6,37 @@ export declare function getLanIp(): string | undefined;
|
|
|
6
6
|
* Get the full LAN URL with protocol for external device access
|
|
7
7
|
*/
|
|
8
8
|
export declare function getLanUrl(port: number | string): string | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Detects if the code is running in an Electron environment
|
|
11
|
+
*/
|
|
12
|
+
export declare function isElectronEnvironment(): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Gets the spawn environment, adding ELECTRON_RUN_AS_NODE if running in Electron
|
|
15
|
+
*/
|
|
16
|
+
export declare function getSpawnEnv(): {
|
|
17
|
+
[key: string]: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Gets the npm binary name (npm or npm.cmd on Windows)
|
|
21
|
+
*/
|
|
22
|
+
export declare function getNpmBin(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Gets the npx binary name (npx or npx.cmd on Windows)
|
|
25
|
+
*/
|
|
26
|
+
export declare function getNpxBin(): string;
|
|
27
|
+
/**
|
|
28
|
+
* Gets the npm-cli.js path in Electron environment, or null if not found
|
|
29
|
+
* Should only be called when isElectronEnvironment() returns true
|
|
30
|
+
*/
|
|
31
|
+
export declare function getElectronNpm(): string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Attempts to find npx-cli.js on disk. Works in both regular Node.js and Electron.
|
|
34
|
+
*
|
|
35
|
+
* Tries three strategies:
|
|
36
|
+
* 1. Derive from process.execPath (standard Node.js installs, nvm, etc.)
|
|
37
|
+
* 2. Look alongside the npm binary found on PATH
|
|
38
|
+
* 3. Look inside Electron's app.asar.unpacked bundled npm (e.g. Creator Hub)
|
|
39
|
+
*
|
|
40
|
+
* Returns the absolute path to npx-cli.js, or null if not found.
|
|
41
|
+
*/
|
|
42
|
+
export declare function findNpxCliJs(): string | null;
|
|
@@ -32,10 +32,24 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.getLanIp = getLanIp;
|
|
37
40
|
exports.getLanUrl = getLanUrl;
|
|
41
|
+
exports.isElectronEnvironment = isElectronEnvironment;
|
|
42
|
+
exports.getSpawnEnv = getSpawnEnv;
|
|
43
|
+
exports.getNpmBin = getNpmBin;
|
|
44
|
+
exports.getNpxBin = getNpxBin;
|
|
45
|
+
exports.getElectronNpm = getElectronNpm;
|
|
46
|
+
exports.findNpxCliJs = findNpxCliJs;
|
|
38
47
|
const os = __importStar(require("os"));
|
|
48
|
+
const fs_1 = __importDefault(require("fs"));
|
|
49
|
+
const path_1 = __importDefault(require("path"));
|
|
50
|
+
// Platform-aware binary names
|
|
51
|
+
const npmBin = /^win/.test(process.platform) ? 'npm.cmd' : 'npm';
|
|
52
|
+
const npxBin = /^win/.test(process.platform) ? 'npx.cmd' : 'npx';
|
|
39
53
|
/**
|
|
40
54
|
* Get the LAN IP address for external device access (e.g., mobile preview)
|
|
41
55
|
*/
|
|
@@ -54,4 +68,94 @@ function getLanUrl(port) {
|
|
|
54
68
|
return undefined;
|
|
55
69
|
return `http://${ip}:${port}`;
|
|
56
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Detects if the code is running in an Electron environment
|
|
73
|
+
*/
|
|
74
|
+
function isElectronEnvironment() {
|
|
75
|
+
return typeof process.versions !== 'undefined' && 'electron' in process.versions;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Gets the spawn environment, adding ELECTRON_RUN_AS_NODE if running in Electron
|
|
79
|
+
*/
|
|
80
|
+
function getSpawnEnv() {
|
|
81
|
+
if (isElectronEnvironment()) {
|
|
82
|
+
return {
|
|
83
|
+
...process.env,
|
|
84
|
+
ELECTRON_RUN_AS_NODE: '1'
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return process.env;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Gets the npm binary name (npm or npm.cmd on Windows)
|
|
91
|
+
*/
|
|
92
|
+
function getNpmBin() {
|
|
93
|
+
return npmBin;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Gets the npx binary name (npx or npx.cmd on Windows)
|
|
97
|
+
*/
|
|
98
|
+
function getNpxBin() {
|
|
99
|
+
return npxBin;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Gets the npm-cli.js path in Electron environment, or null if not found
|
|
103
|
+
* Should only be called when isElectronEnvironment() returns true
|
|
104
|
+
*/
|
|
105
|
+
function getElectronNpm() {
|
|
106
|
+
const npmPath = process.env.PATH?.split(path_1.default.delimiter)
|
|
107
|
+
.map((dir) => path_1.default.join(dir, npmBin))
|
|
108
|
+
.find((npm) => fs_1.default.existsSync(npm)) || npmBin;
|
|
109
|
+
if (fs_1.default.existsSync(npmPath)) {
|
|
110
|
+
const npmCliJs = path_1.default.join(path_1.default.dirname(npmPath), 'npm-cli.js');
|
|
111
|
+
if (fs_1.default.existsSync(npmCliJs)) {
|
|
112
|
+
return npmCliJs;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Attempts to find npx-cli.js on disk. Works in both regular Node.js and Electron.
|
|
119
|
+
*
|
|
120
|
+
* Tries three strategies:
|
|
121
|
+
* 1. Derive from process.execPath (standard Node.js installs, nvm, etc.)
|
|
122
|
+
* 2. Look alongside the npm binary found on PATH
|
|
123
|
+
* 3. Look inside Electron's app.asar.unpacked bundled npm (e.g. Creator Hub)
|
|
124
|
+
*
|
|
125
|
+
* Returns the absolute path to npx-cli.js, or null if not found.
|
|
126
|
+
*/
|
|
127
|
+
function findNpxCliJs() {
|
|
128
|
+
const execDir = path_1.default.dirname(process.execPath);
|
|
129
|
+
// Strategy 1: Derive from process.execPath
|
|
130
|
+
// Unix: {prefix}/bin/node -> {prefix}/lib/node_modules/npm/bin/npx-cli.js
|
|
131
|
+
// Windows: {prefix}/node.exe -> {prefix}/node_modules/npm/bin/npx-cli.js
|
|
132
|
+
const execPathCandidates = [
|
|
133
|
+
path_1.default.join(execDir, '..', 'lib', 'node_modules', 'npm', 'bin', 'npx-cli.js'),
|
|
134
|
+
path_1.default.join(execDir, 'node_modules', 'npm', 'bin', 'npx-cli.js')
|
|
135
|
+
];
|
|
136
|
+
for (const candidate of execPathCandidates) {
|
|
137
|
+
if (fs_1.default.existsSync(candidate)) {
|
|
138
|
+
return candidate;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Strategy 2: Find npx-cli.js next to npm on PATH
|
|
142
|
+
const npmPath = process.env.PATH?.split(path_1.default.delimiter)
|
|
143
|
+
.map((dir) => path_1.default.join(dir, npmBin))
|
|
144
|
+
.find((npm) => fs_1.default.existsSync(npm)) || npmBin;
|
|
145
|
+
if (fs_1.default.existsSync(npmPath)) {
|
|
146
|
+
const npxCliJs = path_1.default.join(path_1.default.dirname(npmPath), 'npx-cli.js');
|
|
147
|
+
if (fs_1.default.existsSync(npxCliJs)) {
|
|
148
|
+
return npxCliJs;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Strategy 3: Look in Electron's app.asar.unpacked bundled npm
|
|
152
|
+
const resourcesPath = process.resourcesPath;
|
|
153
|
+
if (resourcesPath) {
|
|
154
|
+
const npxCliJs = path_1.default.join(resourcesPath, 'app.asar.unpacked', 'node_modules', 'npm', 'bin', 'npx-cli.js');
|
|
155
|
+
if (fs_1.default.existsSync(npxCliJs)) {
|
|
156
|
+
return npxCliJs;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
57
161
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/start/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/start/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleEnv = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const error_1 = require("../../logic/error");
|
|
6
|
+
const beautiful_logs_1 = require("../../logic/beautiful-logs");
|
|
7
|
+
const shared_1 = require("./shared");
|
|
8
|
+
/**
|
|
9
|
+
* Handles environment variable operations in the server-side storage service (set, delete, clear)
|
|
10
|
+
*/
|
|
11
|
+
const handleEnv = async (action, key, options) => {
|
|
12
|
+
const { logger, analytics } = options.components;
|
|
13
|
+
const projectRoot = (0, path_1.resolve)(process.cwd(), options.args['--dir'] || '.');
|
|
14
|
+
// Common setup: validate action, workspace, and world
|
|
15
|
+
const { baseURL, worldName, baseParcel, parcels } = await (0, shared_1.setupStorageCommand)(options.components, projectRoot, action, options.args['--target'], ['set', 'delete', 'clear']);
|
|
16
|
+
// Linker dApp options
|
|
17
|
+
const linkOptions = (0, shared_1.getLinkerDappOptions)(options.args);
|
|
18
|
+
// Handle actions
|
|
19
|
+
if (action === 'set') {
|
|
20
|
+
// SET operation
|
|
21
|
+
if (!key) {
|
|
22
|
+
throw new error_1.CliError('STORAGE_MISSING_KEY', 'Missing KEY argument. Usage: storage env set KEY --value VALUE');
|
|
23
|
+
}
|
|
24
|
+
const value = options.args['--value'];
|
|
25
|
+
if (value === undefined) {
|
|
26
|
+
throw new error_1.CliError('STORAGE_MISSING_VALUE', 'Missing --value option. Usage: storage env set KEY --value VALUE');
|
|
27
|
+
}
|
|
28
|
+
logger.info(`Setting environment variable '${key}' to ${baseURL}`);
|
|
29
|
+
const url = `${baseURL}/env/${encodeURIComponent(key)}`;
|
|
30
|
+
const info = (0, shared_1.createStorageInfo)('env', 'set', url, worldName, baseParcel, parcels, key, value);
|
|
31
|
+
const result = await (0, shared_1.makeAuthenticatedRequest)(options.components, info, linkOptions, 'PUT', url, { value });
|
|
32
|
+
if (result.success) {
|
|
33
|
+
analytics.track('Storage Env Set Success', { key });
|
|
34
|
+
(0, beautiful_logs_1.printSuccess)(logger, `Environment variable '${key}' set successfully!`, '');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
analytics.track('Storage Env Set Failure', { key });
|
|
38
|
+
(0, beautiful_logs_1.printError)(logger, `Failed to set environment variable '${key}':`, new Error(result.error || 'Unknown error'));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else if (action === 'delete') {
|
|
42
|
+
// DELETE operation
|
|
43
|
+
if (!key) {
|
|
44
|
+
throw new error_1.CliError('STORAGE_MISSING_KEY', 'Missing KEY argument. Usage: storage env delete KEY');
|
|
45
|
+
}
|
|
46
|
+
logger.info(`Deleting environment variable '${key}' from ${baseURL}`);
|
|
47
|
+
const url = `${baseURL}/env/${encodeURIComponent(key)}`;
|
|
48
|
+
const info = (0, shared_1.createStorageInfo)('env', 'delete', url, worldName, baseParcel, parcels, key);
|
|
49
|
+
const result = await (0, shared_1.makeAuthenticatedRequest)(options.components, info, linkOptions, 'DELETE', url);
|
|
50
|
+
if (result.success) {
|
|
51
|
+
analytics.track('Storage Env Delete Success', { key });
|
|
52
|
+
(0, beautiful_logs_1.printSuccess)(logger, `Environment variable '${key}' deleted successfully!`, '');
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
analytics.track('Storage Env Delete Failure', { key });
|
|
56
|
+
(0, beautiful_logs_1.printError)(logger, `Failed to delete environment variable '${key}':`, new Error(result.error || 'Unknown error'));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else if (action === 'clear') {
|
|
60
|
+
// CLEAR operation
|
|
61
|
+
const hasConfirm = options.args['--confirm'];
|
|
62
|
+
if (!hasConfirm) {
|
|
63
|
+
const confirmed = await (0, shared_1.confirmAction)('Are you sure you want to delete ALL environment variables? This cannot be undone.');
|
|
64
|
+
if (!confirmed) {
|
|
65
|
+
logger.info('Operation cancelled.');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
logger.info(`Clearing all environment variables from ${baseURL}`);
|
|
70
|
+
const url = `${baseURL}/env`;
|
|
71
|
+
const info = (0, shared_1.createStorageInfo)('env', 'clear', url, worldName, baseParcel, parcels);
|
|
72
|
+
const result = await (0, shared_1.makeAuthenticatedRequest)(options.components, info, linkOptions, 'DELETE', url, undefined, {
|
|
73
|
+
'X-Confirm-Delete-All': 'true'
|
|
74
|
+
});
|
|
75
|
+
if (result.success) {
|
|
76
|
+
analytics.track('Storage Env Clear Success', {});
|
|
77
|
+
(0, beautiful_logs_1.printSuccess)(logger, 'All environment variables cleared successfully!', '');
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
analytics.track('Storage Env Clear Failure', {});
|
|
81
|
+
(0, beautiful_logs_1.printError)(logger, 'Failed to clear environment variables:', new Error(result.error || 'Unknown error'));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
exports.handleEnv = handleEnv;
|
|
86
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/commands/storage/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Result } from 'arg';
|
|
2
|
+
import { CliComponents } from '../../components';
|
|
3
|
+
export interface Options {
|
|
4
|
+
args: Result<typeof args>;
|
|
5
|
+
components: CliComponents;
|
|
6
|
+
}
|
|
7
|
+
export declare const args: {
|
|
8
|
+
'--help': BooleanConstructor;
|
|
9
|
+
'-h': string;
|
|
10
|
+
'--dir': StringConstructor;
|
|
11
|
+
'--target': StringConstructor;
|
|
12
|
+
'-t': string;
|
|
13
|
+
'--port': NumberConstructor;
|
|
14
|
+
'-p': string;
|
|
15
|
+
'--https': BooleanConstructor;
|
|
16
|
+
'--no-browser': BooleanConstructor;
|
|
17
|
+
'-b': string;
|
|
18
|
+
'--value': StringConstructor;
|
|
19
|
+
'-v': string;
|
|
20
|
+
'--address': StringConstructor;
|
|
21
|
+
'-a': string;
|
|
22
|
+
'--confirm': BooleanConstructor;
|
|
23
|
+
'-c': string;
|
|
24
|
+
};
|
|
25
|
+
export declare function help(options: Options): void;
|
|
26
|
+
export declare function main(options: Options): Promise<void>;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.args = void 0;
|
|
4
|
+
exports.help = help;
|
|
5
|
+
exports.main = main;
|
|
6
|
+
const args_1 = require("../../logic/args");
|
|
7
|
+
const analytics_1 = require("../../components/analytics");
|
|
8
|
+
const error_1 = require("../../logic/error");
|
|
9
|
+
const config_1 = require("../../logic/config");
|
|
10
|
+
const env_1 = require("./env");
|
|
11
|
+
const scene_1 = require("./scene");
|
|
12
|
+
const player_1 = require("./player");
|
|
13
|
+
exports.args = (0, args_1.declareArgs)({
|
|
14
|
+
'--help': Boolean,
|
|
15
|
+
'-h': '--help',
|
|
16
|
+
'--dir': String,
|
|
17
|
+
'--target': String,
|
|
18
|
+
'-t': '--target',
|
|
19
|
+
'--port': Number,
|
|
20
|
+
'-p': '--port',
|
|
21
|
+
'--https': Boolean,
|
|
22
|
+
'--no-browser': Boolean,
|
|
23
|
+
'-b': '--no-browser',
|
|
24
|
+
'--value': String,
|
|
25
|
+
'-v': '--value',
|
|
26
|
+
'--address': String,
|
|
27
|
+
'-a': '--address',
|
|
28
|
+
'--confirm': Boolean,
|
|
29
|
+
'-c': '--confirm'
|
|
30
|
+
});
|
|
31
|
+
const STORAGE_SERVER_ORG = 'https://storage.decentraland.org';
|
|
32
|
+
function help(options) {
|
|
33
|
+
options.components.logger.log(`
|
|
34
|
+
Usage: 'sdk-commands storage [subcommand] [action] [KEY] [options]'
|
|
35
|
+
Manages server-side storage including environment variables, scene storage, and player storage.
|
|
36
|
+
This data is stored in Decentraland's remote storage service, not in the local filesystem.
|
|
37
|
+
Requires a scene.json with worldConfiguration.name in the project directory.
|
|
38
|
+
|
|
39
|
+
Subcommands:
|
|
40
|
+
env Manage environment variables
|
|
41
|
+
scene Manage scene storage
|
|
42
|
+
player Manage player storage
|
|
43
|
+
|
|
44
|
+
Options:
|
|
45
|
+
-h, --help Displays complete help
|
|
46
|
+
-v, --value [value] The value to set for a storage key
|
|
47
|
+
-a, --address [addr] Player address (for player storage operations)
|
|
48
|
+
-c, --confirm Skip confirmation prompts for destructive operations
|
|
49
|
+
-t, --target [URL] Target storage server URL (default: ${STORAGE_SERVER_ORG})
|
|
50
|
+
--dir [path] Path to the project directory
|
|
51
|
+
-p, --port [port] Select a custom port for the linker dApp
|
|
52
|
+
-b, --no-browser Do not open a new browser window
|
|
53
|
+
--https Use HTTPS for the linker dApp
|
|
54
|
+
|
|
55
|
+
Target options:
|
|
56
|
+
- https://storage.decentraland.org (production - default)
|
|
57
|
+
- https://storage.decentraland.zone (staging)
|
|
58
|
+
- http://localhost:<port> (local development)
|
|
59
|
+
|
|
60
|
+
Environment Variables (storage env):
|
|
61
|
+
storage env set KEY --value VALUE Set an environment variable
|
|
62
|
+
storage env delete KEY Delete an environment variable
|
|
63
|
+
storage env clear --confirm Delete all environment variables
|
|
64
|
+
|
|
65
|
+
Scene Storage (storage scene):
|
|
66
|
+
storage scene set KEY --value VALUE Set a scene storage value
|
|
67
|
+
storage scene get KEY Get a scene storage value
|
|
68
|
+
storage scene delete KEY Delete a scene storage value
|
|
69
|
+
storage scene clear --confirm Delete all scene storage data
|
|
70
|
+
|
|
71
|
+
Player Storage (storage player):
|
|
72
|
+
storage player set KEY --value VALUE --address 0xABCD Set a player storage value
|
|
73
|
+
storage player get KEY --address 0xABCD Get a player storage value
|
|
74
|
+
storage player delete KEY --address 0xABCD Delete a player storage value
|
|
75
|
+
storage player clear --address 0xABCD --confirm Delete all data for a player
|
|
76
|
+
storage player clear --confirm Delete all player data (all players)
|
|
77
|
+
|
|
78
|
+
Examples:
|
|
79
|
+
- Set an environment variable:
|
|
80
|
+
$ sdk-commands storage env set API_KEY --value "my-secret-key"
|
|
81
|
+
|
|
82
|
+
- Get a scene storage value:
|
|
83
|
+
$ sdk-commands storage scene get high_score
|
|
84
|
+
|
|
85
|
+
- Set player storage:
|
|
86
|
+
$ sdk-commands storage player set level --value 10 --address 0x1234...
|
|
87
|
+
|
|
88
|
+
- Clear all environment variables with confirmation:
|
|
89
|
+
$ sdk-commands storage env clear --confirm
|
|
90
|
+
|
|
91
|
+
- Deploy to staging:
|
|
92
|
+
$ sdk-commands storage env set MY_KEY --value my_value --target https://storage.decentraland.zone
|
|
93
|
+
|
|
94
|
+
- Deploy to local development server:
|
|
95
|
+
$ sdk-commands storage scene set test_key --value test_value --target http://localhost:8000
|
|
96
|
+
`);
|
|
97
|
+
}
|
|
98
|
+
async function main(options) {
|
|
99
|
+
// Parse positional arguments: storage [subcommand] [action] [KEY?]
|
|
100
|
+
const positionalArgs = options.args._.filter((arg) => !arg.startsWith('-'));
|
|
101
|
+
if (positionalArgs.length === 0) {
|
|
102
|
+
throw new error_1.CliError('STORAGE_MISSING_SUBCOMMAND', 'Missing subcommand. Usage: storage [env|scene|player] [action] [KEY] [options]\nRun "sdk-commands storage --help" for more information.');
|
|
103
|
+
}
|
|
104
|
+
const [subcommand, action, key] = positionalArgs;
|
|
105
|
+
// Validate subcommand
|
|
106
|
+
if (!['env', 'scene', 'player'].includes(subcommand)) {
|
|
107
|
+
throw new error_1.CliError('STORAGE_INVALID_SUBCOMMAND', `Invalid subcommand '${subcommand}'. Use: env, scene, or player\nRun "sdk-commands storage --help" for more information.`);
|
|
108
|
+
}
|
|
109
|
+
// Validate action is provided
|
|
110
|
+
if (!action) {
|
|
111
|
+
throw new error_1.CliError('STORAGE_MISSING_ACTION', `Missing action for '${subcommand}'. Run "sdk-commands storage --help" for more information.`);
|
|
112
|
+
}
|
|
113
|
+
// Use storage-specific analytics; pass augmented options so handlers use it without mutating shared components
|
|
114
|
+
const storageAnalytics = await (0, analytics_1.createAnalyticsComponent)(options.components, {
|
|
115
|
+
writeKey: (0, config_1.getStorageSegmentKey)()
|
|
116
|
+
});
|
|
117
|
+
const storageOptions = {
|
|
118
|
+
...options,
|
|
119
|
+
components: { ...options.components, analytics: storageAnalytics }
|
|
120
|
+
};
|
|
121
|
+
try {
|
|
122
|
+
if (subcommand === 'env') {
|
|
123
|
+
await (0, env_1.handleEnv)(action, key, storageOptions);
|
|
124
|
+
}
|
|
125
|
+
else if (subcommand === 'scene') {
|
|
126
|
+
await (0, scene_1.handleScene)(action, key, storageOptions);
|
|
127
|
+
}
|
|
128
|
+
else if (subcommand === 'player') {
|
|
129
|
+
await (0, player_1.handlePlayer)(action, key, storageOptions);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
if (error instanceof error_1.CliError) {
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
throw new error_1.CliError('STORAGE_OPERATION_FAILED', `Storage operation failed: ${error.message}`);
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
await storageAnalytics.stop();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/storage/index.ts"],"names":[],"mappings":"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"}
|