@dcl/sdk-commands 7.31.1-40962203448.commit-c68a75f → 7.31.1-41498712919.commit-5e4cada

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 (100) hide show
  1. package/README.md +33 -0
  2. package/dist/commands/scene-insights/actions.d.ts +63 -0
  3. package/dist/commands/scene-insights/actions.js +106 -0
  4. package/dist/commands/scene-insights/actions.js.map +1 -0
  5. package/dist/commands/scene-insights/client.d.ts +51 -0
  6. package/dist/commands/scene-insights/client.js +294 -0
  7. package/dist/commands/scene-insights/client.js.map +1 -0
  8. package/dist/commands/scene-insights/format.d.ts +23 -0
  9. package/dist/commands/scene-insights/format.js +143 -0
  10. package/dist/commands/scene-insights/format.js.map +1 -0
  11. package/dist/commands/scene-insights/index.d.ts +51 -0
  12. package/dist/commands/scene-insights/index.js +315 -0
  13. package/dist/commands/scene-insights/index.js.map +1 -0
  14. package/dist/commands/scene-insights/inputs.d.ts +49 -0
  15. package/dist/commands/scene-insights/inputs.js +166 -0
  16. package/dist/commands/scene-insights/inputs.js.map +1 -0
  17. package/dist/commands/scene-insights/session-store.d.ts +43 -0
  18. package/dist/commands/scene-insights/session-store.js +132 -0
  19. package/dist/commands/scene-insights/session-store.js.map +1 -0
  20. package/dist/commands/scene-insights/session.d.ts +46 -0
  21. package/dist/commands/scene-insights/session.js +92 -0
  22. package/dist/commands/scene-insights/session.js.map +1 -0
  23. package/dist/commands/scene-insights/sign-in.d.ts +48 -0
  24. package/dist/commands/scene-insights/sign-in.js +125 -0
  25. package/dist/commands/scene-insights/sign-in.js.map +1 -0
  26. package/dist/commands/scene-insights/signature-validation.d.ts +6 -0
  27. package/dist/commands/scene-insights/signature-validation.js +100 -0
  28. package/dist/commands/scene-insights/signature-validation.js.map +1 -0
  29. package/dist/commands/scene-insights/types.d.ts +61 -0
  30. package/dist/commands/scene-insights/types.js +4 -0
  31. package/dist/commands/scene-insights/types.js.map +1 -0
  32. package/dist/commands/sdk-server-logs/index.d.ts +24 -0
  33. package/dist/commands/sdk-server-logs/index.js +313 -0
  34. package/dist/commands/sdk-server-logs/index.js.map +1 -0
  35. package/dist/commands/start/dcl-env.d.ts +16 -0
  36. package/dist/commands/start/dcl-env.js +51 -0
  37. package/dist/commands/start/dcl-env.js.map +1 -0
  38. package/dist/commands/start/index.d.ts +1 -0
  39. package/dist/commands/start/index.js +24 -6
  40. package/dist/commands/start/index.js.map +1 -1
  41. package/dist/commands/start/multiplayer-server.d.ts +35 -0
  42. package/dist/commands/start/multiplayer-server.js +244 -0
  43. package/dist/commands/start/multiplayer-server.js.map +1 -0
  44. package/dist/commands/start/server/routes.d.ts +1 -1
  45. package/dist/commands/start/server/routes.js +6 -2
  46. package/dist/commands/start/server/routes.js.map +1 -1
  47. package/dist/commands/start/server/runtime-env.d.ts +84 -0
  48. package/dist/commands/start/server/runtime-env.js +415 -0
  49. package/dist/commands/start/server/runtime-env.js.map +1 -0
  50. package/dist/commands/start/server/storage-service.d.ts +8 -0
  51. package/dist/commands/start/server/storage-service.js +243 -0
  52. package/dist/commands/start/server/storage-service.js.map +1 -0
  53. package/dist/commands/start/utils.d.ts +32 -0
  54. package/dist/commands/start/utils.js +72 -0
  55. package/dist/commands/start/utils.js.map +1 -1
  56. package/dist/commands/storage/env.d.ts +5 -0
  57. package/dist/commands/storage/env.js +86 -0
  58. package/dist/commands/storage/env.js.map +1 -0
  59. package/dist/commands/storage/index.d.ts +26 -0
  60. package/dist/commands/storage/index.js +142 -0
  61. package/dist/commands/storage/index.js.map +1 -0
  62. package/dist/commands/storage/player.d.ts +5 -0
  63. package/dist/commands/storage/player.js +143 -0
  64. package/dist/commands/storage/player.js.map +1 -0
  65. package/dist/commands/storage/scene.d.ts +5 -0
  66. package/dist/commands/storage/scene.js +105 -0
  67. package/dist/commands/storage/scene.js.map +1 -0
  68. package/dist/commands/storage/shared.d.ts +62 -0
  69. package/dist/commands/storage/shared.js +260 -0
  70. package/dist/commands/storage/shared.js.map +1 -0
  71. package/dist/commands/storage/types.d.ts +56 -0
  72. package/dist/commands/storage/types.js +23 -0
  73. package/dist/commands/storage/types.js.map +1 -0
  74. package/dist/components/analytics.d.ts +75 -1
  75. package/dist/components/analytics.js +3 -2
  76. package/dist/components/analytics.js.map +1 -1
  77. package/dist/logic/auth-chain-headers.d.ts +11 -0
  78. package/dist/logic/auth-chain-headers.js +25 -0
  79. package/dist/logic/auth-chain-headers.js.map +1 -0
  80. package/dist/logic/bundle.js +31 -0
  81. package/dist/logic/bundle.js.map +1 -1
  82. package/dist/logic/config.d.ts +1 -0
  83. package/dist/logic/config.js +7 -0
  84. package/dist/logic/config.js.map +1 -1
  85. package/dist/logic/error.d.ts +1 -1
  86. package/dist/logic/error.js.map +1 -1
  87. package/dist/logic/exec.d.ts +1 -0
  88. package/dist/logic/exec.js +2 -2
  89. package/dist/logic/exec.js.map +1 -1
  90. package/dist/logic/lang.js +1 -1
  91. package/dist/logic/lsd-realm.d.ts +5 -0
  92. package/dist/logic/lsd-realm.js +28 -0
  93. package/dist/logic/lsd-realm.js.map +1 -0
  94. package/dist/logic/project-files.js +2 -0
  95. package/dist/logic/project-files.js.map +1 -1
  96. package/dist/logic/scene-validations.d.ts +8 -1
  97. package/dist/logic/scene-validations.js.map +1 -1
  98. package/dist/run-command.js +3 -2
  99. package/dist/run-command.js.map +1 -1
  100. package/package.json +6 -5
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stripControlCharacters = stripControlCharacters;
4
+ exports.formatTimestamp = formatTimestamp;
5
+ exports.formatLogEntry = formatLogEntry;
6
+ exports.formatValue = formatValue;
7
+ exports.sparkline = sparkline;
8
+ exports.formatTable = formatTable;
9
+ exports.formatMetricNames = formatMetricNames;
10
+ exports.formatMetricSeries = formatMetricSeries;
11
+ exports.formatExecutions = formatExecutions;
12
+ const log_1 = require("../../components/log");
13
+ const SPARK = '▁▂▃▄▅▆▇█';
14
+ const identity = (text) => String(text);
15
+ /** C0 and C1 control characters except tab and newline: escape sequences a terminal would act on. */
16
+ const CONTROL_CHARACTERS = /[\u0000-\u0008\u000b-\u001f\u007f-\u009f]/g;
17
+ /** Removes what a terminal would interpret (cursor moves, OSC 8 links, OSC 52 clipboard writes) from service text. */
18
+ function stripControlCharacters(text) {
19
+ return text.replace(CONTROL_CHARACTERS, '');
20
+ }
21
+ /** `2026-10-12T14:13:02.166Z` → `2026-10-12 14:13:02.166Z`; anything unparseable is returned as is. */
22
+ function formatTimestamp(iso) {
23
+ const time = Date.parse(iso);
24
+ return Number.isNaN(time) ? iso : new Date(time).toISOString().replace('T', ' ');
25
+ }
26
+ /**
27
+ * One log entry as terminal text: time, level, the source when it is not the scene itself, and the
28
+ * message, with the lines of a multi-line message indented under the first.
29
+ */
30
+ function formatLogEntry(entry, color) {
31
+ const paint = {
32
+ error: color ? log_1.colors.redBright : identity,
33
+ warn: color ? log_1.colors.yellow : identity,
34
+ info: identity,
35
+ debug: color ? log_1.colors.dim : identity
36
+ }[entry.level] ?? identity;
37
+ const dim = color ? log_1.colors.dim : identity;
38
+ const time = stripControlCharacters(formatTimestamp(entry.timestamp));
39
+ const level = stripControlCharacters(entry.level.toUpperCase()).padEnd(5);
40
+ const source = entry.source === 'scene' ? '' : `[${stripControlCharacters(entry.source)}] `;
41
+ const prefix = `${time} ${level} `;
42
+ const message = stripControlCharacters(entry.message)
43
+ .split('\n')
44
+ .join('\n' + ' '.repeat(prefix.length));
45
+ const truncated = entry.truncated ? dim(' … (truncated)') : '';
46
+ return `${dim(time)} ${paint(level)} ${dim(source)}${paint(message)}${truncated}`;
47
+ }
48
+ /** A value in its unit: bytes in binary multiples, milliseconds up to seconds, counts as numbers. */
49
+ function formatValue(value, unit) {
50
+ if (value === null || !Number.isFinite(value))
51
+ return '-';
52
+ const round = (n) => (Math.abs(n) >= 100 ? n.toFixed(0) : Math.abs(n) >= 10 ? n.toFixed(1) : n.toFixed(2));
53
+ const base = unit.split('/')[0];
54
+ const per = unit.includes('/') ? `/${unit.split('/')[1]}` : '';
55
+ if (base === 'bytes') {
56
+ const units = ['B', 'KiB', 'MiB', 'GiB', 'TiB'];
57
+ let scaled = value;
58
+ let index = 0;
59
+ while (Math.abs(scaled) >= 1024 && index < units.length - 1) {
60
+ scaled /= 1024;
61
+ index++;
62
+ }
63
+ return `${index === 0 ? Math.round(scaled) : round(scaled)} ${units[index]}${per}`;
64
+ }
65
+ if (base === 'ms') {
66
+ return Math.abs(value) >= 1000 ? `${round(value / 1000)} s${per}` : `${round(value)} ms${per}`;
67
+ }
68
+ return `${Number.isInteger(value) ? value : round(value)}${per}`;
69
+ }
70
+ /** A one-line chart of the values; gaps are blanks. */
71
+ function sparkline(values) {
72
+ const present = values.filter((v) => v !== null && Number.isFinite(v));
73
+ if (present.length === 0)
74
+ return '';
75
+ const min = Math.min(...present);
76
+ const max = Math.max(...present);
77
+ return values
78
+ .map((v) => {
79
+ if (v === null || !Number.isFinite(v))
80
+ return ' ';
81
+ if (max === min)
82
+ return SPARK[0];
83
+ return SPARK[Math.round(((v - min) / (max - min)) * (SPARK.length - 1))];
84
+ })
85
+ .join('');
86
+ }
87
+ /** Left-aligned columns separated by two spaces. */
88
+ function formatTable(header, rawRows) {
89
+ const rows = rawRows.map((row) => row.map(stripControlCharacters));
90
+ const widths = header.map((title, column) => Math.max(title.length, ...rows.map((row) => row[column].length)));
91
+ const line = (cells) => cells
92
+ .map((cell, column) => (column === cells.length - 1 ? cell : cell.padEnd(widths[column])))
93
+ .join(' ')
94
+ .trimEnd();
95
+ return [line(header), ...rows.map(line)];
96
+ }
97
+ function formatMetricNames(result) {
98
+ if (result.metrics.length === 0) {
99
+ return [stripControlCharacters(`No metrics for ${result.sceneKey} between ${result.from} and ${result.to}`)];
100
+ }
101
+ return formatTable(['METRIC', 'TYPE', 'UNIT'], result.metrics.map((metric) => [metric.name, metric.type, metric.unit]));
102
+ }
103
+ /**
104
+ * A metric series: a header, a sparkline, and one row per bucket. Gauges show the average and the
105
+ * maximum; sums show the bucket total and its rate per second.
106
+ */
107
+ function formatMetricSeries(series) {
108
+ const head = stripControlCharacters(`${series.metric} (${series.type ?? 'no data'}, ${series.unit}) every ${series.stepSeconds}s, ${formatTimestamp(series.from)} → ${formatTimestamp(series.to)}`);
109
+ if (series.type === null || series.points.length === 0) {
110
+ return [head, 'No data in this range'];
111
+ }
112
+ if (series.type === 'gauge') {
113
+ const points = series.points;
114
+ return [
115
+ head,
116
+ `avg ${sparkline(points.map((p) => p.avg))}`,
117
+ '',
118
+ ...formatTable(['TIME', 'AVG', 'MAX'], points.map((p) => [formatTimestamp(p.t), formatValue(p.avg, series.unit), formatValue(p.max, series.unit)]))
119
+ ];
120
+ }
121
+ const points = series.points;
122
+ const rateUnit = series.rateUnit ?? `${series.unit}/s`;
123
+ return [
124
+ head,
125
+ `sum ${sparkline(points.map((p) => p.sum))}`,
126
+ '',
127
+ ...formatTable(['TIME', 'SUM', 'RATE'], points.map((p) => [formatTimestamp(p.t), formatValue(p.sum, series.unit), formatValue(p.rate, rateUnit)]))
128
+ ];
129
+ }
130
+ function formatExecutions(result) {
131
+ if (result.executions.length === 0) {
132
+ return [stripControlCharacters(`No executions of ${result.sceneKey} in this range`)];
133
+ }
134
+ return formatTable(['EXECUTION', 'ENTITY', 'FIRST SEEN', 'LAST SEEN', 'LINES', 'INSTANCE'], result.executions.map((execution) => [
135
+ execution.executionId,
136
+ execution.entityId,
137
+ formatTimestamp(execution.firstSeen),
138
+ formatTimestamp(execution.lastSeen),
139
+ String(execution.logLines),
140
+ execution.instanceId || '-'
141
+ ]));
142
+ }
143
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/commands/scene-insights/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { Result } from 'arg';
2
+ import { CliComponents } from '../../components';
3
+ import { CliErrorName } from '../../logic/error';
4
+ interface Options {
5
+ args: Result<typeof args>;
6
+ components: CliComponents;
7
+ }
8
+ export declare const args: {
9
+ '--help': BooleanConstructor;
10
+ '-h': string;
11
+ '--dir': StringConstructor;
12
+ '--world': StringConstructor;
13
+ '-w': string;
14
+ '--position': StringConstructor;
15
+ '--target': StringConstructor;
16
+ '-t': string;
17
+ '--trust-target': BooleanConstructor;
18
+ '--port': NumberConstructor;
19
+ '-p': string;
20
+ '--https': BooleanConstructor;
21
+ '--no-browser': BooleanConstructor;
22
+ '-b': string;
23
+ '--from': StringConstructor;
24
+ '--to': StringConstructor;
25
+ '--level': StringConstructor;
26
+ '-l': string;
27
+ '--source': StringConstructor;
28
+ '--query': StringConstructor;
29
+ '-q': string;
30
+ '--execution': StringConstructor;
31
+ '--limit': NumberConstructor;
32
+ '-n': string;
33
+ '--order': StringConstructor;
34
+ '--lines': NumberConstructor;
35
+ '--for': StringConstructor;
36
+ '--step': NumberConstructor;
37
+ '--json': BooleanConstructor;
38
+ };
39
+ /**
40
+ * Exit codes, so a script or an agent can tell what to do next without parsing messages:
41
+ * 2 fix the arguments, 3 have a person sign in, 4 use an address with access, 5 check the scene,
42
+ * 6 try again later. Anything else exits with 1.
43
+ */
44
+ export declare const EXIT_CODES: Partial<Record<CliErrorName, number>>;
45
+ export declare function help(options: Options): void;
46
+ /**
47
+ * Runs a subcommand. With --json it returns the result for the CLI to print as JSON (the tail
48
+ * streams its own JSON lines and returns nothing), and an error is written as JSON on stderr.
49
+ */
50
+ export declare function main(options: Options): Promise<unknown>;
51
+ export {};
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EXIT_CODES = exports.args = void 0;
4
+ exports.help = help;
5
+ exports.main = main;
6
+ const path_1 = require("path");
7
+ const args_1 = require("../../logic/args");
8
+ const error_1 = require("../../logic/error");
9
+ const account_1 = require("../../logic/account");
10
+ const workspace_validations_1 = require("../../logic/workspace-validations");
11
+ const scene_validations_1 = require("../../logic/scene-validations");
12
+ const actions_1 = require("./actions");
13
+ const client_1 = require("./client");
14
+ const inputs_1 = require("./inputs");
15
+ const session_store_1 = require("./session-store");
16
+ const sign_in_1 = require("./sign-in");
17
+ const signature_validation_1 = require("./signature-validation");
18
+ exports.args = (0, args_1.declareArgs)({
19
+ '--help': Boolean,
20
+ '-h': '--help',
21
+ '--dir': String,
22
+ '--world': String,
23
+ '-w': '--world',
24
+ '--position': String,
25
+ '--target': String,
26
+ '-t': '--target',
27
+ '--trust-target': Boolean,
28
+ '--port': Number,
29
+ '-p': '--port',
30
+ '--https': Boolean,
31
+ '--no-browser': Boolean,
32
+ '-b': '--no-browser',
33
+ '--from': String,
34
+ '--to': String,
35
+ '--level': String,
36
+ '-l': '--level',
37
+ '--source': String,
38
+ '--query': String,
39
+ '-q': '--query',
40
+ '--execution': String,
41
+ '--limit': Number,
42
+ '-n': '--limit',
43
+ '--order': String,
44
+ '--lines': Number,
45
+ '--for': String,
46
+ '--step': Number,
47
+ '--json': Boolean
48
+ });
49
+ const DEFAULT_SERVER = 'https://multiplayer-scenes-insights-service.decentraland.org';
50
+ const QUERY_SUBCOMMANDS = ['logs', 'tail', 'metrics', 'executions'];
51
+ const SESSION_SUBCOMMANDS = ['login', 'logout', 'session'];
52
+ const TARGET_FLAGS = ['--target', '--trust-target'];
53
+ const SIGN_IN_FLAGS = ['--port', '--no-browser', '--https'];
54
+ const SCENE_FLAGS = [...TARGET_FLAGS, ...SIGN_IN_FLAGS, '--world', '--position', '--dir'];
55
+ /** The flags each subcommand reads, besides --help and --json; any other is refused rather than ignored. */
56
+ const FLAGS_BY_SUBCOMMAND = {
57
+ login: [...TARGET_FLAGS, ...SIGN_IN_FLAGS],
58
+ logout: [],
59
+ session: [...TARGET_FLAGS],
60
+ logs: [...SCENE_FLAGS, '--from', '--to', '--level', '--source', '--query', '--execution', '--limit', '--order'],
61
+ tail: [...SCENE_FLAGS, '--for', '--lines', '--level', '--query'],
62
+ metrics: [...SCENE_FLAGS, '--from', '--to', '--step', '--execution'],
63
+ executions: [...SCENE_FLAGS, '--from', '--to']
64
+ };
65
+ /**
66
+ * Exit codes, so a script or an agent can tell what to do next without parsing messages:
67
+ * 2 fix the arguments, 3 have a person sign in, 4 use an address with access, 5 check the scene,
68
+ * 6 try again later. Anything else exits with 1.
69
+ */
70
+ exports.EXIT_CODES = {
71
+ SCENE_INSIGHTS_INVALID_ARGUMENT: 2,
72
+ SCENE_INSIGHTS_MISSING_SCENE: 2,
73
+ SCENE_INSIGHTS_UNSAFE_SESSION_FILE: 2,
74
+ SCENE_INSIGHTS_SESSION_REQUIRED: 3,
75
+ SCENE_INSIGHTS_UNAUTHORIZED: 3,
76
+ SCENE_INSIGHTS_INVALID_SIGNATURE: 3,
77
+ SCENE_INSIGHTS_UNSUPPORTED_WALLET: 3,
78
+ SCENE_INSIGHTS_FORBIDDEN: 4,
79
+ SCENE_INSIGHTS_NOT_FOUND: 5,
80
+ SCENE_INSIGHTS_UNAVAILABLE: 6
81
+ };
82
+ function help(options) {
83
+ options.components.logger.log(`
84
+ Usage: 'sdk-commands scene-insights <subcommand> [options]'
85
+ Reads the persisted logs and metrics of an authoritative multiplayer scene (kept for 7 days)
86
+ from multiplayer-scenes-insights-service. The signed-in address must be in the scene's
87
+ logsPermissions, or be the World's owner or a deployer.
88
+
89
+ Sign in once with "login": it opens the browser for your wallet to sign, and the session is
90
+ saved for 12 hours in ${(0, session_store_1.getSessionFilePath)()} (or in the .dcl folder of ${session_store_1.SESSION_DIR_ENV}).
91
+ Until it expires it can sign Decentraland requests as your address; "logout" removes it.
92
+ The .dcl folder is never deployed and ignores itself in git, so the session is never published.
93
+ With DCL_PRIVATE_KEY set, requests are signed with that key and nothing is saved.
94
+ Contract wallets use Ethereum RPC: Mainnet for .org, Sepolia for .zone. Use the same --target
95
+ for login, session and reads. Set DCL_SCENE_INSIGHTS_RPC_URL for a custom target's network.
96
+ Without a terminal (scripts, AI agents) a missing session is an error, never a browser prompt.
97
+
98
+ Runs from any directory with --world and/or --position; otherwise reads scene.json
99
+ (worldConfiguration.name and scene.base).
100
+
101
+ Subcommands:
102
+ login Sign in (always asks for a new signature)
103
+ session Show the signed-in address and when the session expires
104
+ logout Remove the saved session
105
+ logs Search the logs; prints the newest --limit lines, oldest first
106
+ tail Follow new log lines live (reconnects and resumes on its own)
107
+ metrics [name] List the metrics with data, or chart one (cpu.run_ms is short
108
+ for dcl.scene.cpu.run_ms)
109
+ executions List the scene's executions (deployments and restarts)
110
+
111
+ Scene:
112
+ -w, --world [name] World name (myworld, myworld.dcl.eth or any ENS name)
113
+ --position [x,y] A parcel of the scene: Genesis City, or one scene of a multi-scene
114
+ World (use the =value form for negative coordinates)
115
+ --dir [path] Project directory for the scene.json fallback
116
+
117
+ Time range (logs, metrics, executions):
118
+ --from [time] Start: a duration back from now (15m, 2h, 7d), epoch ms, or
119
+ ISO-8601 with an offset. Default: 1 hour ago (24 hours for
120
+ metric names and executions)
121
+ --to [time] End, same formats. Default: now
122
+
123
+ logs:
124
+ -l, --level [level] Minimum level: debug, info, warn or error
125
+ -q, --query [text] Literal text to match (case-insensitive)
126
+ --source [list] Comma-separated sources: scene, engine, stderr
127
+ --execution [id] Only this execution (see "executions")
128
+ -n, --limit [n] Lines to print, 1-10000 (default 100)
129
+ --order [order] desc (default) prints the newest lines, asc the oldest
130
+
131
+ tail:
132
+ --for [time] Stop after this long (30s, 5m, at most 24d); default: until CTRL+C
133
+ --lines [n] Replay the newest n lines first, 0-1000 (default 0)
134
+ -l, --level, -q, --query Filter the followed lines
135
+
136
+ metrics:
137
+ --step [s] Bucket width in seconds, 10-86400 (default: ~300 buckets)
138
+ --execution [id] Only this execution
139
+
140
+ Other options:
141
+ --json Print JSON to stdout (one object per log line), and errors as
142
+ {"error":{"code","message","exitCode"}} on stderr
143
+ -t, --target [URL] Insights service URL (default: ${DEFAULT_SERVER}); only
144
+ https hosts under decentraland.org or decentraland.zone
145
+ --trust-target Allow any --target. It receives signed requests it could replay
146
+ -p, --port [port] Select a custom port for the linker dApp
147
+ -b, --no-browser Do not open a new browser window
148
+ --https Use HTTPS for the linker dApp
149
+ -h, --help Displays complete help
150
+
151
+ Exit codes:
152
+ 0 success, 1 other failure, 2 invalid arguments, 3 sign-in needed (run login),
153
+ 4 the address has no access to the scene, 5 scene not found, 6 service unavailable
154
+
155
+ Examples:
156
+ - Sign in, then read the errors of the last 6 hours of the World in scene.json:
157
+ $ sdk-commands scene-insights login
158
+ $ sdk-commands scene-insights logs --from 6h --level error
159
+
160
+ - Search a World from any directory:
161
+ $ sdk-commands scene-insights logs --world myworld --query "player joined" --limit 500
162
+
163
+ - Follow a Genesis City scene for 2 minutes, replaying the last 50 lines:
164
+ $ sdk-commands scene-insights tail --position=-125,-96 --lines 50 --for 2m
165
+
166
+ - Chart heap usage over the last day, one point per 10 minutes:
167
+ $ sdk-commands scene-insights metrics mem.heap_used --from 1d --step 600
168
+
169
+ - Use the development (.zone) service, signing with a private key:
170
+ $ DCL_PRIVATE_KEY=0x... sdk-commands scene-insights executions --world myworld \\
171
+ --target https://multiplayer-scenes-insights-service.decentraland.zone
172
+ `);
173
+ }
174
+ /** Resolves the scene from --world/--position, falling back to scene.json. */
175
+ async function resolveTarget(options) {
176
+ const worldArg = options.args['--world'];
177
+ const positionArg = options.args['--position'];
178
+ if (worldArg || positionArg) {
179
+ return (0, inputs_1.buildSceneTarget)(worldArg ? (0, inputs_1.normalizeWorldName)(worldArg) : undefined, positionArg ? (0, inputs_1.normalizeParcel)(positionArg) : undefined);
180
+ }
181
+ const projectRoot = (0, path_1.resolve)(process.cwd(), options.args['--dir'] || '.');
182
+ await (0, workspace_validations_1.getValidWorkspace)(options.components, projectRoot);
183
+ const sceneJson = await (0, scene_validations_1.getValidSceneJson)(options.components, projectRoot);
184
+ const world = sceneJson.worldConfiguration?.name;
185
+ const base = sceneJson.scene?.base;
186
+ return (0, inputs_1.buildSceneTarget)(world ? (0, inputs_1.normalizeWorldName)(world) : undefined, base ? (0, inputs_1.normalizeParcel)(base) : undefined);
187
+ }
188
+ /**
189
+ * Runs a subcommand. With --json it returns the result for the CLI to print as JSON (the tail
190
+ * streams its own JSON lines and returns nothing), and an error is written as JSON on stderr.
191
+ */
192
+ async function main(options) {
193
+ const json = !!options.args['--json'];
194
+ try {
195
+ return await run(options);
196
+ }
197
+ catch (error) {
198
+ if (!(error instanceof error_1.CliError))
199
+ throw error;
200
+ process.exitCode = exports.EXIT_CODES[error.name] ?? 1;
201
+ if (!json)
202
+ throw error;
203
+ process.stderr.write(JSON.stringify({ error: { code: error.name, message: error.message, exitCode: process.exitCode } }) + '\n');
204
+ }
205
+ }
206
+ async function run(options) {
207
+ const { components } = options;
208
+ const a = options.args;
209
+ const [subcommand, ...positionals] = a._.filter((arg) => !arg.startsWith('-'));
210
+ if (!subcommand || ![...QUERY_SUBCOMMANDS, ...SESSION_SUBCOMMANDS].includes(subcommand)) {
211
+ throw new error_1.CliError('SCENE_INSIGHTS_INVALID_ARGUMENT', `${subcommand ? `Unknown subcommand "${subcommand}"` : 'Missing subcommand'}. Use: ` +
212
+ `${[...SESSION_SUBCOMMANDS, ...QUERY_SUBCOMMANDS].join(', ')}\n` +
213
+ 'Run "sdk-commands scene-insights --help" for more information.');
214
+ }
215
+ const maxPositionals = subcommand === 'metrics' ? 1 : 0;
216
+ if (positionals.length > maxPositionals) {
217
+ throw new error_1.CliError('SCENE_INSIGHTS_INVALID_ARGUMENT', `Unexpected argument "${positionals[maxPositionals]}" for ${subcommand}`);
218
+ }
219
+ const allowed = new Set(['--help', '--json', ...FLAGS_BY_SUBCOMMAND[subcommand]]);
220
+ const unused = Object.keys(a).filter((flag) => flag !== '_' && !allowed.has(flag));
221
+ if (unused.length > 0) {
222
+ throw new error_1.CliError('SCENE_INSIGHTS_INVALID_ARGUMENT', `${unused.join(', ')} ${unused.length === 1 ? 'does' : 'do'} not apply to ${subcommand}`);
223
+ }
224
+ const [positional] = positionals;
225
+ const baseUrl = a['--target'] ? (0, inputs_1.parseTarget)(a['--target'], !!a['--trust-target']) : DEFAULT_SERVER;
226
+ const file = (0, session_store_1.getSessionFilePath)();
227
+ const write = (line) => process.stdout.write(line + '\n');
228
+ const sessionOptions = {
229
+ file,
230
+ targetUrl: baseUrl,
231
+ linkOptions: { linkerPort: a['--port'], openBrowser: !a['--no-browser'], isHttps: !!a['--https'] },
232
+ interactive: !!process.stdin.isTTY
233
+ };
234
+ if (subcommand === 'logout') {
235
+ const removed = await (0, session_store_1.deleteSession)(components, file);
236
+ components.logger.info(removed ? `Signed out; removed ${file}` : 'There was no saved session');
237
+ return { removed, file };
238
+ }
239
+ if (subcommand === 'session') {
240
+ if (process.env.DCL_PRIVATE_KEY) {
241
+ const { address } = (0, account_1.createWallet)(process.env.DCL_PRIVATE_KEY);
242
+ if (!a['--json'])
243
+ write(`Signing as ${address} with DCL_PRIVATE_KEY`);
244
+ return { address, expiration: null, source: 'DCL_PRIVATE_KEY' };
245
+ }
246
+ const saved = await (0, session_store_1.loadSession)(components, file, Date.now(), (0, signature_validation_1.createInsightsProvider)(baseUrl));
247
+ if (!saved) {
248
+ throw new error_1.CliError('SCENE_INSIGHTS_SESSION_REQUIRED', 'Not signed in; run "sdk-commands scene-insights login"');
249
+ }
250
+ const { address, expiration } = saved.session;
251
+ if (!a['--json'])
252
+ write(`Signed in as ${address} until ${expiration.toISOString()} (${file})`);
253
+ return { address, expiration: expiration.toISOString(), source: file };
254
+ }
255
+ if (subcommand === 'login') {
256
+ const { session, source } = await (0, sign_in_1.getSession)(components, { label: 'scene insights' }, { ...sessionOptions, interactive: true, forceNew: true });
257
+ if (source === 'private-key') {
258
+ components.logger.info(`DCL_PRIVATE_KEY is set: requests are signed as ${session.address}, nothing to save`);
259
+ return { address: session.address, expiration: null, source: 'DCL_PRIVATE_KEY' };
260
+ }
261
+ components.logger.info(`Signed in as ${session.address} until ${session.expiration.toISOString()}; saved to ${file}`);
262
+ return { address: session.address, expiration: session.expiration.toISOString(), source: file };
263
+ }
264
+ // validate every flag before resolving the scene or signing
265
+ const from = a['--from'] ? (0, inputs_1.parseTime)(a['--from'], '--from') : undefined;
266
+ const to = a['--to'] ? (0, inputs_1.parseTime)(a['--to'], '--to') : undefined;
267
+ const level = a['--level'] ? (0, inputs_1.parseLevel)(a['--level']) : undefined;
268
+ const order = a['--order'] ?? 'desc';
269
+ if (order !== 'asc' && order !== 'desc') {
270
+ throw new error_1.CliError('SCENE_INSIGHTS_INVALID_ARGUMENT', '--order must be asc or desc');
271
+ }
272
+ const limit = (0, inputs_1.parseInteger)(a['--limit'] ?? 100, '--limit', 1, 10000);
273
+ const lines = a['--lines'] !== undefined ? (0, inputs_1.parseInteger)(a['--lines'], '--lines', 0, 1000) : undefined;
274
+ const followFor = a['--for'] !== undefined ? (0, inputs_1.parseDuration)(a['--for'], '--for') : undefined;
275
+ const step = a['--step'] !== undefined ? (0, inputs_1.parseInteger)(a['--step'], '--step', 10, 86400) : undefined;
276
+ const query = a['--query'];
277
+ if (query !== undefined && (query.length < 1 || query.length > 256)) {
278
+ throw new error_1.CliError('SCENE_INSIGHTS_INVALID_ARGUMENT', '--query must be 1 to 256 characters');
279
+ }
280
+ const metric = positional ? (0, inputs_1.normalizeMetricName)(positional) : undefined;
281
+ const target = await resolveTarget(options);
282
+ components.logger.info(`Scene insights for ${target.label} (${baseUrl})`);
283
+ const { session } = await (0, sign_in_1.getSession)(components, target, sessionOptions);
284
+ components.logger.info(`Signed in as ${session.address}`);
285
+ const client = (0, client_1.createInsightsClient)(components, baseUrl, session, target.metadata);
286
+ const output = {
287
+ write,
288
+ note: (message) => components.logger.info(message),
289
+ json: !!a['--json'],
290
+ color: !!process.stdout.isTTY && !process.env.NO_COLOR && process.env.FORCE_COLOR !== '0'
291
+ };
292
+ const common = { from, to };
293
+ switch (subcommand) {
294
+ case 'logs':
295
+ return (0, actions_1.runLogs)(client, { ...common, level, source: a['--source'], query, execution: a['--execution'], limit, order }, output);
296
+ case 'tail': {
297
+ const controller = new AbortController();
298
+ const stop = () => controller.abort();
299
+ process.on('SIGINT', stop);
300
+ const timer = followFor !== undefined ? setTimeout(stop, followFor) : undefined;
301
+ try {
302
+ return await (0, actions_1.runTail)(client, { lines, level, query, signal: controller.signal }, output);
303
+ }
304
+ finally {
305
+ clearTimeout(timer);
306
+ process.off('SIGINT', stop);
307
+ }
308
+ }
309
+ case 'metrics':
310
+ return (0, actions_1.runMetrics)(client, { ...common, metric, step, execution: a['--execution'] }, output);
311
+ case 'executions':
312
+ return (0, actions_1.runExecutions)(client, common, output);
313
+ }
314
+ }
315
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/scene-insights/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /** The scene a request targets, as the insights service reads it from the signed metadata. */
2
+ export interface SceneTarget {
3
+ /** Human-readable description, for the terminal and the linker dApp */
4
+ label: string;
5
+ /** Signed `x-identity-metadata` JSON */
6
+ metadata: string;
7
+ /** World name sent as `sceneId`, when the scene is in a World */
8
+ world?: string;
9
+ /** Parcel sent as `parcel`, when one was given or read from scene.json */
10
+ parcel?: string;
11
+ }
12
+ export declare const LOG_LEVELS: readonly ["debug", "info", "warn", "error"];
13
+ export type LogLevel = (typeof LOG_LEVELS)[number];
14
+ /**
15
+ * Normalizes a World name the way creators type it: `foo`, `foo.dcl.eth` or any other ENS name
16
+ * (`foo.eth`). Names without an `.eth` suffix are DCL names.
17
+ */
18
+ export declare function normalizeWorldName(raw: string): string;
19
+ /** Normalizes `x,y` parcel coordinates (spaces and leading zeros removed). */
20
+ export declare function normalizeParcel(raw: string): string;
21
+ /**
22
+ * Builds the scene target. A World is addressed by name (`sceneId`), plus the parcel of one of its
23
+ * scenes when it has several; a Genesis City scene by any of its parcels.
24
+ */
25
+ export declare function buildSceneTarget(world: string | undefined, parcel: string | undefined): SceneTarget;
26
+ /**
27
+ * Parses a `--from`/`--to` value into the ISO-8601 form the service expects. Accepts `now`, a
28
+ * duration back from now (`30s`, `15m`, `2h`, `7d`), epoch milliseconds (13 digits) or ISO-8601
29
+ * with an explicit offset (`2026-10-01T12:00:00Z`, `2026-10-01T09:00:00-03:00`). A duration of 7
30
+ * days or more means the whole retention window, ending a minute short of it.
31
+ */
32
+ export declare function parseTime(raw: string, flag: string, now?: number): string;
33
+ /** Parses a duration (`30s`, `5m`, `2h`, `1d`, up to 24 days) into milliseconds. */
34
+ export declare function parseDuration(raw: string, flag: string): number;
35
+ /**
36
+ * Validates a `--target` URL. Without `trustAny`, only https Decentraland hosts are accepted: the
37
+ * signed headers don't name the host, so another server receiving them could replay them.
38
+ */
39
+ export declare function parseTarget(raw: string, trustAny: boolean): string;
40
+ /** Validates a `--level` value. */
41
+ export declare function parseLevel(raw: string): LogLevel;
42
+ /** Validates an integer flag inside [min, max]. */
43
+ export declare function parseInteger(value: number, flag: string, min: number, max: number): number;
44
+ /**
45
+ * Expands a metric name, so `cpu.run_ms` can be typed for `dcl.scene.cpu.run_ms`.
46
+ *
47
+ * @throws {CliError} SCENE_INSIGHTS_INVALID_ARGUMENT when the result is not `dcl.scene.<group>.<field>`
48
+ */
49
+ export declare function normalizeMetricName(raw: string): string;