@dcl/sdk-commands 7.22.6-25007982108.commit-83012ab → 7.22.6-25321038582.commit-63ddb3f
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/index.d.ts +1 -0
- package/dist/commands/deploy/index.js +93 -8
- package/dist/commands/deploy/index.js.map +1 -1
- package/dist/commands/deploy/utils.d.ts +51 -2
- package/dist/commands/deploy/utils.js +212 -16
- package/dist/commands/deploy/utils.js.map +1 -1
- package/dist/commands/sdk-server-logs/index.d.ts +24 -0
- package/dist/commands/sdk-server-logs/index.js +313 -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 +71 -1
- package/dist/components/analytics.js +3 -2
- package/dist/components/analytics.js.map +1 -1
- package/dist/linker-dapp/routes.d.ts +1 -0
- 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 +59 -19
- 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/dcl-ignore.js +2 -1
- package/dist/logic/dcl-ignore.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/project-validations.d.ts +13 -0
- package/dist/logic/project-validations.js +29 -2
- package/dist/logic/project-validations.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,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleScene = 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 scene storage operations in the server-side storage service (get, set, delete, clear)
|
|
10
|
+
*/
|
|
11
|
+
const handleScene = 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'], ['get', 'set', 'delete', 'clear']);
|
|
16
|
+
// Linker dApp options
|
|
17
|
+
const linkOptions = (0, shared_1.getLinkerDappOptions)(options.args);
|
|
18
|
+
// Handle actions
|
|
19
|
+
if (action === 'get') {
|
|
20
|
+
// GET operation
|
|
21
|
+
if (!key) {
|
|
22
|
+
throw new error_1.CliError('STORAGE_MISSING_KEY', 'Missing KEY argument. Usage: storage scene get KEY');
|
|
23
|
+
}
|
|
24
|
+
logger.info(`Getting scene storage value '${key}' from ${baseURL}`);
|
|
25
|
+
const url = `${baseURL}/values/${encodeURIComponent(key)}`;
|
|
26
|
+
const info = (0, shared_1.createStorageInfo)('scene', 'get', url, worldName, baseParcel, parcels, key);
|
|
27
|
+
const result = await (0, shared_1.makeAuthenticatedRequest)(options.components, info, linkOptions, 'GET', url);
|
|
28
|
+
if (result.success) {
|
|
29
|
+
analytics.track('Storage Scene Get Success', { key });
|
|
30
|
+
logger.log(`\nValue for '${key}':`);
|
|
31
|
+
logger.log(JSON.stringify(result.data, null, 2));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
analytics.track('Storage Scene Get Failure', { key });
|
|
35
|
+
(0, beautiful_logs_1.printError)(logger, `Failed to get scene storage value '${key}':`, new Error(result.error || 'Unknown error'));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else if (action === 'set') {
|
|
39
|
+
// SET operation
|
|
40
|
+
if (!key) {
|
|
41
|
+
throw new error_1.CliError('STORAGE_MISSING_KEY', 'Missing KEY argument. Usage: storage scene set KEY --value VALUE');
|
|
42
|
+
}
|
|
43
|
+
const value = options.args['--value'];
|
|
44
|
+
if (value === undefined) {
|
|
45
|
+
throw new error_1.CliError('STORAGE_MISSING_VALUE', 'Missing --value option. Usage: storage scene set KEY --value VALUE');
|
|
46
|
+
}
|
|
47
|
+
logger.info(`Setting scene storage value '${key}' to ${baseURL}`);
|
|
48
|
+
const url = `${baseURL}/values/${encodeURIComponent(key)}`;
|
|
49
|
+
const info = (0, shared_1.createStorageInfo)('scene', 'set', url, worldName, baseParcel, parcels, key, value);
|
|
50
|
+
const result = await (0, shared_1.makeAuthenticatedRequest)(options.components, info, linkOptions, 'PUT', url, { value });
|
|
51
|
+
if (result.success) {
|
|
52
|
+
analytics.track('Storage Scene Set Success', { key });
|
|
53
|
+
(0, beautiful_logs_1.printSuccess)(logger, `Scene storage value '${key}' set successfully!`, '');
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
analytics.track('Storage Scene Set Failure', { key });
|
|
57
|
+
(0, beautiful_logs_1.printError)(logger, `Failed to set scene storage value '${key}':`, new Error(result.error || 'Unknown error'));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (action === 'delete') {
|
|
61
|
+
// DELETE operation
|
|
62
|
+
if (!key) {
|
|
63
|
+
throw new error_1.CliError('STORAGE_MISSING_KEY', 'Missing KEY argument. Usage: storage scene delete KEY');
|
|
64
|
+
}
|
|
65
|
+
logger.info(`Deleting scene storage value '${key}' from ${baseURL}`);
|
|
66
|
+
const url = `${baseURL}/values/${encodeURIComponent(key)}`;
|
|
67
|
+
const info = (0, shared_1.createStorageInfo)('scene', 'delete', url, worldName, baseParcel, parcels, key);
|
|
68
|
+
const result = await (0, shared_1.makeAuthenticatedRequest)(options.components, info, linkOptions, 'DELETE', url);
|
|
69
|
+
if (result.success) {
|
|
70
|
+
analytics.track('Storage Scene Delete Success', { key });
|
|
71
|
+
(0, beautiful_logs_1.printSuccess)(logger, `Scene storage value '${key}' deleted successfully!`, '');
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
analytics.track('Storage Scene Delete Failure', { key });
|
|
75
|
+
(0, beautiful_logs_1.printError)(logger, `Failed to delete scene storage value '${key}':`, new Error(result.error || 'Unknown error'));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (action === 'clear') {
|
|
79
|
+
// CLEAR operation
|
|
80
|
+
const hasConfirm = options.args['--confirm'];
|
|
81
|
+
if (!hasConfirm) {
|
|
82
|
+
const confirmed = await (0, shared_1.confirmAction)('Are you sure you want to delete ALL scene storage data? This cannot be undone.');
|
|
83
|
+
if (!confirmed) {
|
|
84
|
+
logger.info('Operation cancelled.');
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
logger.info(`Clearing all scene storage data from ${baseURL}`);
|
|
89
|
+
const url = `${baseURL}/values`;
|
|
90
|
+
const info = (0, shared_1.createStorageInfo)('scene', 'clear', url, worldName, baseParcel, parcels);
|
|
91
|
+
const result = await (0, shared_1.makeAuthenticatedRequest)(options.components, info, linkOptions, 'DELETE', url, undefined, {
|
|
92
|
+
'X-Confirm-Delete-All': 'true'
|
|
93
|
+
});
|
|
94
|
+
if (result.success) {
|
|
95
|
+
analytics.track('Storage Scene Clear Success', {});
|
|
96
|
+
(0, beautiful_logs_1.printSuccess)(logger, 'All scene storage data cleared successfully!', '');
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
analytics.track('Storage Scene Clear Failure', {});
|
|
100
|
+
(0, beautiful_logs_1.printError)(logger, 'Failed to clear scene storage data:', new Error(result.error || 'Unknown error'));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
exports.handleScene = handleScene;
|
|
105
|
+
//# sourceMappingURL=scene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene.js","sourceRoot":"","sources":["../../../src/commands/storage/scene.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { IFuture } from 'fp-future';
|
|
2
|
+
import { Lifecycle } from '@well-known-components/interfaces';
|
|
3
|
+
import { CliComponents } from '../../components';
|
|
4
|
+
import { LinkerResponse } from '../../linker-dapp/routes';
|
|
5
|
+
import { StorageInfo, LinkerOptions, StorageType } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Validates workspace and extracts world configuration for server-side storage operations
|
|
8
|
+
*/
|
|
9
|
+
export declare const validateWorkspaceAndWorld: (components: CliComponents, projectRoot: string, baseURL: string) => Promise<{
|
|
10
|
+
worldName: string | undefined;
|
|
11
|
+
baseParcel: string;
|
|
12
|
+
parcels: string[];
|
|
13
|
+
}>;
|
|
14
|
+
/**
|
|
15
|
+
* Builds metadata for server-side storage service requests (ADR-44 format)
|
|
16
|
+
*/
|
|
17
|
+
export declare const buildStorageMetadata: (worldName: string | undefined, baseParcel: string) => string;
|
|
18
|
+
/**
|
|
19
|
+
* Confirms an action with the user
|
|
20
|
+
* Accepts: yes, y, no, n (case insensitive)
|
|
21
|
+
*/
|
|
22
|
+
export declare const confirmAction: (message: string) => Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Extracts linker dApp options from command arguments
|
|
25
|
+
*/
|
|
26
|
+
export declare const getLinkerDappOptions: (args: {
|
|
27
|
+
"--port"?: number;
|
|
28
|
+
"--no-browser"?: boolean;
|
|
29
|
+
"--https"?: boolean;
|
|
30
|
+
}) => LinkerOptions;
|
|
31
|
+
/**
|
|
32
|
+
* Common setup for server-side storage commands: validates action, workspace, and world configuration
|
|
33
|
+
*/
|
|
34
|
+
export declare const setupStorageCommand: (components: CliComponents, projectRoot: string, action: string, targetArg: string | undefined, validActions: string[]) => Promise<{
|
|
35
|
+
baseURL: string;
|
|
36
|
+
worldName: string | undefined;
|
|
37
|
+
baseParcel: string;
|
|
38
|
+
parcels: string[];
|
|
39
|
+
}>;
|
|
40
|
+
export type StorageOperationResult = {
|
|
41
|
+
success: boolean;
|
|
42
|
+
data?: any;
|
|
43
|
+
error?: string;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Gets authentication (private key or linker dApp) and executes callback with signed headers
|
|
47
|
+
*/
|
|
48
|
+
export declare const getAuthHeaders: (components: CliComponents, awaitResponse: IFuture<void>, info: StorageInfo, linkOptions: LinkerOptions, deployCallback: (response: LinkerResponse) => Promise<StorageOperationResult>) => Promise<{
|
|
49
|
+
program?: Lifecycle.ComponentBasedProgram<unknown>;
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Makes an authenticated request to the server-side storage service
|
|
53
|
+
*/
|
|
54
|
+
export declare const makeAuthenticatedRequest: (components: CliComponents, info: StorageInfo, linkOptions: LinkerOptions, method: "GET" | "PUT" | "DELETE", url: string, body?: any, additionalHeaders?: Record<string, string>) => Promise<StorageOperationResult>;
|
|
55
|
+
/**
|
|
56
|
+
* Gets the base URL for server-side storage service operations
|
|
57
|
+
*/
|
|
58
|
+
export declare const getStorageBaseUrl: (targetArg?: string) => string;
|
|
59
|
+
/**
|
|
60
|
+
* Creates storage info object for signing server-side storage service requests
|
|
61
|
+
*/
|
|
62
|
+
export declare const createStorageInfo: (storageType: StorageType, action: "get" | "set" | "delete" | "clear", url: string, worldName: string | undefined, baseParcel: string, parcels: string[], key?: string, value?: string, address?: string) => StorageInfo;
|
|
@@ -0,0 +1,249 @@
|
|
|
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.createStorageInfo = exports.getStorageBaseUrl = exports.makeAuthenticatedRequest = exports.getAuthHeaders = exports.setupStorageCommand = exports.getLinkerDappOptions = exports.confirmAction = exports.buildStorageMetadata = exports.validateWorkspaceAndWorld = void 0;
|
|
7
|
+
const fp_future_1 = __importDefault(require("fp-future"));
|
|
8
|
+
const crypto_1 = require("@dcl/crypto");
|
|
9
|
+
const crypto_2 = require("@dcl/crypto/dist/crypto");
|
|
10
|
+
const eth_connect_1 = require("eth-connect");
|
|
11
|
+
const readline_1 = __importDefault(require("readline"));
|
|
12
|
+
const error_1 = require("../../logic/error");
|
|
13
|
+
const account_1 = require("../../logic/account");
|
|
14
|
+
const auth_chain_headers_1 = require("../../logic/auth-chain-headers");
|
|
15
|
+
const routes_1 = require("../../linker-dapp/routes");
|
|
16
|
+
const run_dapp_1 = require("../../run-dapp");
|
|
17
|
+
const workspace_validations_1 = require("../../logic/workspace-validations");
|
|
18
|
+
const scene_validations_1 = require("../../logic/scene-validations");
|
|
19
|
+
const STORAGE_SERVER_ORG = 'https://storage.decentraland.org';
|
|
20
|
+
/**
|
|
21
|
+
* Validates workspace and extracts world configuration for server-side storage operations
|
|
22
|
+
*/
|
|
23
|
+
const validateWorkspaceAndWorld = async (components, projectRoot, baseURL) => {
|
|
24
|
+
await (0, workspace_validations_1.getValidWorkspace)(components, projectRoot);
|
|
25
|
+
const isLocalTarget = baseURL.includes('localhost') || baseURL.includes('127.0.0.1');
|
|
26
|
+
const sceneJson = await (0, scene_validations_1.getValidSceneJson)(components, projectRoot);
|
|
27
|
+
const worldName = sceneJson.worldConfiguration?.name;
|
|
28
|
+
if (!worldName && !isLocalTarget) {
|
|
29
|
+
throw new error_1.CliError('STORAGE_MISSING_WORLD', 'scene.json must have worldConfiguration.name defined to use storage on remote servers');
|
|
30
|
+
}
|
|
31
|
+
const baseParcel = sceneJson.scene?.base || '0,0';
|
|
32
|
+
const parcels = sceneJson.scene?.parcels || ['0,0'];
|
|
33
|
+
return { worldName, baseParcel, parcels };
|
|
34
|
+
};
|
|
35
|
+
exports.validateWorkspaceAndWorld = validateWorkspaceAndWorld;
|
|
36
|
+
/**
|
|
37
|
+
* Builds metadata for server-side storage service requests (ADR-44 format)
|
|
38
|
+
*/
|
|
39
|
+
const buildStorageMetadata = (worldName, baseParcel) => {
|
|
40
|
+
const meta = {};
|
|
41
|
+
if (worldName) {
|
|
42
|
+
meta.realm = { serverName: worldName };
|
|
43
|
+
meta.realmName = worldName;
|
|
44
|
+
}
|
|
45
|
+
meta.parcel = baseParcel;
|
|
46
|
+
return JSON.stringify(meta);
|
|
47
|
+
};
|
|
48
|
+
exports.buildStorageMetadata = buildStorageMetadata;
|
|
49
|
+
/**
|
|
50
|
+
* Confirms an action with the user
|
|
51
|
+
* Accepts: yes, y, no, n (case insensitive)
|
|
52
|
+
*/
|
|
53
|
+
const confirmAction = async (message) => {
|
|
54
|
+
return new Promise((resolve) => {
|
|
55
|
+
const rl = readline_1.default.createInterface({
|
|
56
|
+
input: process.stdin,
|
|
57
|
+
output: process.stdout
|
|
58
|
+
});
|
|
59
|
+
rl.question(`${message} (Yes/No): `, (answer) => {
|
|
60
|
+
rl.close();
|
|
61
|
+
const normalized = answer.toLowerCase().trim();
|
|
62
|
+
resolve(normalized === 'yes' || normalized === 'y');
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
exports.confirmAction = confirmAction;
|
|
67
|
+
/**
|
|
68
|
+
* Extracts linker dApp options from command arguments
|
|
69
|
+
*/
|
|
70
|
+
const getLinkerDappOptions = (args) => {
|
|
71
|
+
return {
|
|
72
|
+
linkerPort: args['--port'],
|
|
73
|
+
openBrowser: !args['--no-browser'],
|
|
74
|
+
isHttps: !!args['--https']
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
exports.getLinkerDappOptions = getLinkerDappOptions;
|
|
78
|
+
/**
|
|
79
|
+
* Common setup for server-side storage commands: validates action, workspace, and world configuration
|
|
80
|
+
*/
|
|
81
|
+
const setupStorageCommand = async (components, projectRoot, action, targetArg, validActions) => {
|
|
82
|
+
const { logger } = components;
|
|
83
|
+
// Validate action
|
|
84
|
+
if (!validActions.includes(action)) {
|
|
85
|
+
throw new error_1.CliError('STORAGE_INVALID_ACTION', `Invalid action '${action}'. Use: ${validActions.join(', ')}`);
|
|
86
|
+
}
|
|
87
|
+
// Get base URL
|
|
88
|
+
const baseURL = (0, exports.getStorageBaseUrl)(targetArg);
|
|
89
|
+
// Validate workspace and world
|
|
90
|
+
const { worldName, baseParcel, parcels } = await (0, exports.validateWorkspaceAndWorld)(components, projectRoot, baseURL);
|
|
91
|
+
if (worldName) {
|
|
92
|
+
logger.info(`World: ${worldName}`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
logger.info(`Local development mode (no world configuration required)`);
|
|
96
|
+
}
|
|
97
|
+
return { baseURL, worldName, baseParcel, parcels };
|
|
98
|
+
};
|
|
99
|
+
exports.setupStorageCommand = setupStorageCommand;
|
|
100
|
+
/**
|
|
101
|
+
* Sets up routes for the linker dApp specific to server-side storage operations
|
|
102
|
+
*/
|
|
103
|
+
const setStorageRoutes = (router, components, awaitResponse, deployCallback) => {
|
|
104
|
+
const { logger } = components;
|
|
105
|
+
const resolveLinkerPromise = () => setTimeout(() => awaitResponse.resolve(), 100);
|
|
106
|
+
const rejectLinkerPromise = (e) => setTimeout(() => awaitResponse.reject(e), 100);
|
|
107
|
+
router.post('/api/storage', async (ctx) => {
|
|
108
|
+
const value = (await ctx.request.json());
|
|
109
|
+
if (!value.address || !value.authChain) {
|
|
110
|
+
const errorMessage = `Invalid payload: ${Object.keys(value).join(' - ')}`;
|
|
111
|
+
logger.error(errorMessage);
|
|
112
|
+
resolveLinkerPromise();
|
|
113
|
+
return { status: 400, body: { success: false, error: errorMessage } };
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
const result = await deployCallback(value);
|
|
117
|
+
resolveLinkerPromise();
|
|
118
|
+
if (!result.success) {
|
|
119
|
+
return { status: 400, body: { success: false, error: result.error } };
|
|
120
|
+
}
|
|
121
|
+
return { body: { success: true, data: result.data } };
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
rejectLinkerPromise(e);
|
|
125
|
+
return { status: 400, body: { success: false, error: e.message } };
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
return router;
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Gets authentication (private key or linker dApp) and executes callback with signed headers
|
|
132
|
+
*/
|
|
133
|
+
const getAuthHeaders = async (components, awaitResponse, info, linkOptions, deployCallback) => {
|
|
134
|
+
// If DCL_PRIVATE_KEY is set, sign directly without the linker dapp
|
|
135
|
+
if (process.env.DCL_PRIVATE_KEY) {
|
|
136
|
+
const wallet = (0, account_1.createWallet)(process.env.DCL_PRIVATE_KEY);
|
|
137
|
+
const authChain = crypto_1.Authenticator.createSimpleAuthChain(info.rootCID, wallet.address, (0, crypto_2.ethSign)((0, eth_connect_1.hexToBytes)(wallet.privateKey), info.rootCID));
|
|
138
|
+
const linkerResponse = { authChain, address: wallet.address };
|
|
139
|
+
await deployCallback(linkerResponse);
|
|
140
|
+
awaitResponse.resolve();
|
|
141
|
+
return {};
|
|
142
|
+
}
|
|
143
|
+
// Use linker dapp for signing
|
|
144
|
+
const { router: commonRouter } = (0, routes_1.setRoutes)(components, {
|
|
145
|
+
storageType: info.storageType,
|
|
146
|
+
key: info.key,
|
|
147
|
+
value: info.value,
|
|
148
|
+
address: info.address,
|
|
149
|
+
world: info.world,
|
|
150
|
+
action: info.action,
|
|
151
|
+
targetUrl: info.targetUrl,
|
|
152
|
+
rootCID: info.rootCID,
|
|
153
|
+
baseParcel: info.baseParcel,
|
|
154
|
+
parcels: info.parcels,
|
|
155
|
+
skipValidations: info.skipValidations,
|
|
156
|
+
debug: info.debug,
|
|
157
|
+
isWorld: info.isWorld,
|
|
158
|
+
title: 'Storage Service',
|
|
159
|
+
description: 'Manage storage in the Decentraland Storage Service'
|
|
160
|
+
});
|
|
161
|
+
const router = setStorageRoutes(commonRouter, components, awaitResponse, deployCallback);
|
|
162
|
+
const actionLabel = info.action === 'delete' || info.action === 'clear' ? 'delete' : 'deploy';
|
|
163
|
+
components.logger.info(`You need to sign the content before the ${actionLabel}:`);
|
|
164
|
+
const { program } = await (0, run_dapp_1.runDapp)(components, router, { ...linkOptions, uri: `/` });
|
|
165
|
+
return { program };
|
|
166
|
+
};
|
|
167
|
+
exports.getAuthHeaders = getAuthHeaders;
|
|
168
|
+
/**
|
|
169
|
+
* Makes an authenticated request to the server-side storage service
|
|
170
|
+
*/
|
|
171
|
+
const makeAuthenticatedRequest = async (components, info, linkOptions, method, url, body, additionalHeaders) => {
|
|
172
|
+
const { fetch: fetchComponent } = components;
|
|
173
|
+
const awaitResponse = (0, fp_future_1.default)();
|
|
174
|
+
let operationResult = { success: false, error: 'Operation not completed' };
|
|
175
|
+
const { program } = await (0, exports.getAuthHeaders)(components, awaitResponse, info, linkOptions, async (linkerResponse) => {
|
|
176
|
+
const authHeaders = (0, auth_chain_headers_1.createAuthChainHeaders)(linkerResponse.authChain, info.timestamp, info.metadata);
|
|
177
|
+
const headers = {
|
|
178
|
+
...authHeaders,
|
|
179
|
+
...additionalHeaders
|
|
180
|
+
};
|
|
181
|
+
if (method !== 'GET') {
|
|
182
|
+
headers['Content-Type'] = 'application/json';
|
|
183
|
+
}
|
|
184
|
+
const res = await fetchComponent.fetch(url, {
|
|
185
|
+
method,
|
|
186
|
+
headers,
|
|
187
|
+
body: body ? JSON.stringify(body) : undefined
|
|
188
|
+
});
|
|
189
|
+
if (res.ok) {
|
|
190
|
+
try {
|
|
191
|
+
const text = await res.text();
|
|
192
|
+
const responseData = text ? JSON.parse(text) : {};
|
|
193
|
+
operationResult = { success: true, data: responseData.value };
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
operationResult = { success: true };
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
const errorText = await res.text();
|
|
201
|
+
operationResult = { success: false, error: errorText };
|
|
202
|
+
}
|
|
203
|
+
return operationResult;
|
|
204
|
+
});
|
|
205
|
+
try {
|
|
206
|
+
await awaitResponse;
|
|
207
|
+
}
|
|
208
|
+
finally {
|
|
209
|
+
void program?.stop();
|
|
210
|
+
}
|
|
211
|
+
return operationResult;
|
|
212
|
+
};
|
|
213
|
+
exports.makeAuthenticatedRequest = makeAuthenticatedRequest;
|
|
214
|
+
/**
|
|
215
|
+
* Gets the base URL for server-side storage service operations
|
|
216
|
+
*/
|
|
217
|
+
const getStorageBaseUrl = (targetArg) => {
|
|
218
|
+
return targetArg || STORAGE_SERVER_ORG;
|
|
219
|
+
};
|
|
220
|
+
exports.getStorageBaseUrl = getStorageBaseUrl;
|
|
221
|
+
/**
|
|
222
|
+
* Creates storage info object for signing server-side storage service requests
|
|
223
|
+
*/
|
|
224
|
+
const createStorageInfo = (storageType, action, url, worldName, baseParcel, parcels, key, value, address) => {
|
|
225
|
+
const timestamp = String(Date.now());
|
|
226
|
+
const metadata = (0, exports.buildStorageMetadata)(worldName, baseParcel);
|
|
227
|
+
const pathname = new URL(url).pathname;
|
|
228
|
+
const method = action === 'get' ? 'get' : action === 'set' ? 'put' : 'delete';
|
|
229
|
+
const payload = [method, pathname, timestamp, metadata].join(':').toLowerCase();
|
|
230
|
+
return {
|
|
231
|
+
storageType,
|
|
232
|
+
key,
|
|
233
|
+
value,
|
|
234
|
+
address,
|
|
235
|
+
world: worldName,
|
|
236
|
+
action,
|
|
237
|
+
targetUrl: url,
|
|
238
|
+
rootCID: payload,
|
|
239
|
+
timestamp,
|
|
240
|
+
metadata,
|
|
241
|
+
baseParcel,
|
|
242
|
+
parcels,
|
|
243
|
+
skipValidations: true,
|
|
244
|
+
debug: !!process.env.DEBUG,
|
|
245
|
+
isWorld: true
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
exports.createStorageInfo = createStorageInfo;
|
|
249
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/storage/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Result } from 'arg';
|
|
2
|
+
import { CliComponents } from '../../components';
|
|
3
|
+
export declare const args: {
|
|
4
|
+
'--help': BooleanConstructor;
|
|
5
|
+
'-h': string;
|
|
6
|
+
'--dir': StringConstructor;
|
|
7
|
+
'--target': StringConstructor;
|
|
8
|
+
'-t': string;
|
|
9
|
+
'--port': NumberConstructor;
|
|
10
|
+
'-p': string;
|
|
11
|
+
'--https': BooleanConstructor;
|
|
12
|
+
'--no-browser': BooleanConstructor;
|
|
13
|
+
'-b': string;
|
|
14
|
+
'--value': StringConstructor;
|
|
15
|
+
'-v': string;
|
|
16
|
+
'--address': StringConstructor;
|
|
17
|
+
'-a': string;
|
|
18
|
+
'--confirm': BooleanConstructor;
|
|
19
|
+
'-c': string;
|
|
20
|
+
};
|
|
21
|
+
export interface Options {
|
|
22
|
+
args: Result<typeof args>;
|
|
23
|
+
components: CliComponents;
|
|
24
|
+
}
|
|
25
|
+
export type StorageType = 'env' | 'scene' | 'player';
|
|
26
|
+
export interface StorageInfo {
|
|
27
|
+
storageType?: StorageType;
|
|
28
|
+
key?: string;
|
|
29
|
+
value?: string;
|
|
30
|
+
address?: string;
|
|
31
|
+
world?: string;
|
|
32
|
+
action: 'get' | 'set' | 'delete' | 'clear';
|
|
33
|
+
targetUrl: string;
|
|
34
|
+
rootCID: string;
|
|
35
|
+
timestamp: string;
|
|
36
|
+
metadata: string;
|
|
37
|
+
baseParcel: string;
|
|
38
|
+
parcels: string[];
|
|
39
|
+
skipValidations: boolean;
|
|
40
|
+
debug: boolean;
|
|
41
|
+
isWorld: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface LinkerOptions {
|
|
44
|
+
linkerPort?: number;
|
|
45
|
+
openBrowser: boolean;
|
|
46
|
+
isHttps: boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface AuthHeaders {
|
|
49
|
+
[key: string]: string;
|
|
50
|
+
}
|
|
51
|
+
export interface ApiResponse {
|
|
52
|
+
ok: boolean;
|
|
53
|
+
status: number;
|
|
54
|
+
text: () => Promise<string>;
|
|
55
|
+
json: () => Promise<any>;
|
|
56
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.args = void 0;
|
|
4
|
+
const args_1 = require("../../logic/args");
|
|
5
|
+
exports.args = (0, args_1.declareArgs)({
|
|
6
|
+
'--help': Boolean,
|
|
7
|
+
'-h': '--help',
|
|
8
|
+
'--dir': String,
|
|
9
|
+
'--target': String,
|
|
10
|
+
'-t': '--target',
|
|
11
|
+
'--port': Number,
|
|
12
|
+
'-p': '--port',
|
|
13
|
+
'--https': Boolean,
|
|
14
|
+
'--no-browser': Boolean,
|
|
15
|
+
'-b': '--no-browser',
|
|
16
|
+
'--value': String,
|
|
17
|
+
'-v': '--value',
|
|
18
|
+
'--address': String,
|
|
19
|
+
'-a': '--address',
|
|
20
|
+
'--confirm': Boolean,
|
|
21
|
+
'-c': '--confirm'
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/storage/types.ts"],"names":[],"mappings":";;;AAEA,2CAA8C;AAEjC,QAAA,IAAI,GAAG,IAAA,kBAAW,EAAC;IAC9B,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,MAAM;IAClB,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,OAAO;IAClB,cAAc,EAAE,OAAO;IACvB,IAAI,EAAE,cAAc;IACpB,SAAS,EAAE,MAAM;IACjB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,MAAM;IACnB,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,OAAO;IACpB,IAAI,EAAE,WAAW;CAClB,CAAC,CAAA"}
|
|
@@ -50,6 +50,7 @@ export type Events = {
|
|
|
50
50
|
};
|
|
51
51
|
isWorld: boolean;
|
|
52
52
|
dependencies: string[];
|
|
53
|
+
dependencyVersions: Record<string, string>;
|
|
53
54
|
sceneId: string;
|
|
54
55
|
targetContentServer: string;
|
|
55
56
|
worldName: string | undefined;
|
|
@@ -96,8 +97,77 @@ export type Events = {
|
|
|
96
97
|
code: number;
|
|
97
98
|
creatorAddress: string;
|
|
98
99
|
};
|
|
100
|
+
'Storage Env Set Success': {
|
|
101
|
+
key: string;
|
|
102
|
+
};
|
|
103
|
+
'Storage Env Set Failure': {
|
|
104
|
+
key: string;
|
|
105
|
+
};
|
|
106
|
+
'Storage Env Delete Success': {
|
|
107
|
+
key: string;
|
|
108
|
+
};
|
|
109
|
+
'Storage Env Delete Failure': {
|
|
110
|
+
key: string;
|
|
111
|
+
};
|
|
112
|
+
'Storage Env Clear Success': Record<string, never>;
|
|
113
|
+
'Storage Env Clear Failure': Record<string, never>;
|
|
114
|
+
'Storage Scene Get Success': {
|
|
115
|
+
key: string;
|
|
116
|
+
};
|
|
117
|
+
'Storage Scene Get Failure': {
|
|
118
|
+
key: string;
|
|
119
|
+
};
|
|
120
|
+
'Storage Scene Set Success': {
|
|
121
|
+
key: string;
|
|
122
|
+
};
|
|
123
|
+
'Storage Scene Set Failure': {
|
|
124
|
+
key: string;
|
|
125
|
+
};
|
|
126
|
+
'Storage Scene Delete Success': {
|
|
127
|
+
key: string;
|
|
128
|
+
};
|
|
129
|
+
'Storage Scene Delete Failure': {
|
|
130
|
+
key: string;
|
|
131
|
+
};
|
|
132
|
+
'Storage Scene Clear Success': Record<string, never>;
|
|
133
|
+
'Storage Scene Clear Failure': Record<string, never>;
|
|
134
|
+
'Storage Player Get Success': {
|
|
135
|
+
key: string;
|
|
136
|
+
address: string;
|
|
137
|
+
};
|
|
138
|
+
'Storage Player Get Failure': {
|
|
139
|
+
key: string;
|
|
140
|
+
address: string;
|
|
141
|
+
};
|
|
142
|
+
'Storage Player Set Success': {
|
|
143
|
+
key: string;
|
|
144
|
+
address: string;
|
|
145
|
+
};
|
|
146
|
+
'Storage Player Set Failure': {
|
|
147
|
+
key: string;
|
|
148
|
+
address: string;
|
|
149
|
+
};
|
|
150
|
+
'Storage Player Delete Success': {
|
|
151
|
+
key: string;
|
|
152
|
+
address: string;
|
|
153
|
+
};
|
|
154
|
+
'Storage Player Delete Failure': {
|
|
155
|
+
key: string;
|
|
156
|
+
address: string;
|
|
157
|
+
};
|
|
158
|
+
'Storage Player Clear Success': {
|
|
159
|
+
address: string;
|
|
160
|
+
};
|
|
161
|
+
'Storage Player Clear Failure': {
|
|
162
|
+
address: string;
|
|
163
|
+
};
|
|
164
|
+
'Storage Player Clear All Success': Record<string, never>;
|
|
165
|
+
'Storage Player Clear All Failure': Record<string, never>;
|
|
166
|
+
};
|
|
167
|
+
export type CreateAnalyticsOptions = {
|
|
168
|
+
writeKey?: string;
|
|
99
169
|
};
|
|
100
|
-
export declare function createAnalyticsComponent(components: Pick<CliComponents, 'config' | 'logger' | 'fs'
|
|
170
|
+
export declare function createAnalyticsComponent(components: Pick<CliComponents, 'config' | 'logger' | 'fs'>, options?: CreateAnalyticsOptions): Promise<IAnalyticsComponent | {
|
|
101
171
|
get(): Analytics;
|
|
102
172
|
track: <T extends keyof Events>(eventName: T, eventProps: Events[T]) => void;
|
|
103
173
|
stop(): Promise<void>;
|
|
@@ -14,14 +14,15 @@ const noopAnalytics = {
|
|
|
14
14
|
track() { },
|
|
15
15
|
async stop() { }
|
|
16
16
|
};
|
|
17
|
-
async function createAnalyticsComponent(components) {
|
|
17
|
+
async function createAnalyticsComponent(components, options) {
|
|
18
18
|
const analyticsEnabled = (await (0, config_1.readStringConfig)(components, 'DCL_DISABLE_ANALYTICS')) !== 'true';
|
|
19
19
|
if (!analyticsEnabled) {
|
|
20
20
|
return noopAnalytics;
|
|
21
21
|
}
|
|
22
22
|
const USER_ID = 'sdk-commands-user';
|
|
23
23
|
let anonId = await (0, config_1.readStringConfig)(components, 'DCL_ANON_ID');
|
|
24
|
-
const
|
|
24
|
+
const writeKey = options?.writeKey ?? (0, config_2.getSegmentKey)();
|
|
25
|
+
const analytics = new analytics_node_1.Analytics({ writeKey });
|
|
25
26
|
if (!anonId) {
|
|
26
27
|
anonId = (0, uuid_1.v4)();
|
|
27
28
|
await (0, config_1.writeGlobalConfig)(components, 'DCL_ANON_ID', anonId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/components/analytics.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/components/analytics.ts"],"names":[],"mappings":"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"}
|