netlify-cli 24.11.3 → 25.0.1

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 (54) hide show
  1. package/dist/commands/base-command.d.ts.map +1 -1
  2. package/dist/commands/base-command.js +18 -2
  3. package/dist/commands/base-command.js.map +1 -1
  4. package/dist/commands/functions/functions-create.d.ts.map +1 -1
  5. package/dist/commands/functions/functions-create.js +1 -6
  6. package/dist/commands/functions/functions-create.js.map +1 -1
  7. package/dist/commands/login/login.d.ts.map +1 -1
  8. package/dist/commands/login/login.js +0 -6
  9. package/dist/commands/login/login.js.map +1 -1
  10. package/dist/commands/logs/index.d.ts +0 -2
  11. package/dist/commands/logs/index.d.ts.map +1 -1
  12. package/dist/commands/logs/index.js +95 -29
  13. package/dist/commands/logs/index.js.map +1 -1
  14. package/dist/commands/logs/log-api.d.ts +64 -0
  15. package/dist/commands/logs/log-api.d.ts.map +1 -0
  16. package/dist/commands/logs/log-api.js +200 -0
  17. package/dist/commands/logs/log-api.js.map +1 -0
  18. package/dist/commands/logs/logs.d.ts +4 -0
  19. package/dist/commands/logs/logs.d.ts.map +1 -0
  20. package/dist/commands/logs/logs.js +302 -0
  21. package/dist/commands/logs/logs.js.map +1 -0
  22. package/dist/commands/logs/sources/deploy.d.ts +13 -0
  23. package/dist/commands/logs/sources/deploy.d.ts.map +1 -0
  24. package/dist/commands/logs/sources/deploy.js +71 -0
  25. package/dist/commands/logs/sources/deploy.js.map +1 -0
  26. package/dist/commands/logs/sources/edge-functions.d.ts +17 -0
  27. package/dist/commands/logs/sources/edge-functions.d.ts.map +1 -0
  28. package/dist/commands/logs/sources/edge-functions.js +71 -0
  29. package/dist/commands/logs/sources/edge-functions.js.map +1 -0
  30. package/dist/commands/logs/sources/functions.d.ts +22 -0
  31. package/dist/commands/logs/sources/functions.d.ts.map +1 -0
  32. package/dist/commands/logs/sources/functions.js +75 -0
  33. package/dist/commands/logs/sources/functions.js.map +1 -0
  34. package/dist/tsconfig.build.tsbuildinfo +1 -1
  35. package/dist/utils/open-browser.d.ts +1 -1
  36. package/dist/utils/open-browser.d.ts.map +1 -1
  37. package/dist/utils/open-browser.js +4 -2
  38. package/dist/utils/open-browser.js.map +1 -1
  39. package/package.json +69 -6
  40. package/scripts/netlifyPackage.js +2 -26
  41. package/dist/commands/logs/functions.d.ts +0 -4
  42. package/dist/commands/logs/functions.d.ts.map +0 -1
  43. package/dist/commands/logs/functions.js +0 -79
  44. package/dist/commands/logs/functions.js.map +0 -1
  45. package/functions-templates/go/hello-world/.netlify-function-template.mjs +0 -6
  46. package/functions-templates/go/hello-world/go.mod +0 -5
  47. package/functions-templates/go/hello-world/go.sum +0 -22
  48. package/functions-templates/go/hello-world/main.go +0 -24
  49. package/functions-templates/rust/hello-world/.netlify-function-template.mjs +0 -6
  50. package/functions-templates/rust/hello-world/Cargo.lock +0 -1149
  51. package/functions-templates/rust/hello-world/Cargo.toml +0 -14
  52. package/functions-templates/rust/hello-world/src/main.rs +0 -29
  53. package/npm-shrinkwrap.json +0 -13402
  54. package/scripts/prepublishOnly.js +0 -29
@@ -0,0 +1,200 @@
1
+ import parseDuration from 'parse-duration';
2
+ import { chalk } from '../../utils/command-helpers.js';
3
+ import { LOG_LEVELS } from './log-levels.js';
4
+ export const ANALYTICS_API_BASE = 'https://analytics.services.netlify.com';
5
+ export const DEPLOY_ID_RE = /^[a-f0-9]{24}$/;
6
+ export const SOURCE_INDICATORS = {
7
+ function: '𝒇',
8
+ 'edge-function': '🌐',
9
+ deploy: '🚀',
10
+ };
11
+ export const SOURCE_LABELS = {
12
+ function: 'Function',
13
+ 'edge-function': 'Edge function',
14
+ deploy: 'Deploy',
15
+ };
16
+ const DURATION_LIKE_RE = /^\d+(\.\d+)?\s*[a-z]/i;
17
+ export const parseTimeValue = (input, now = Date.now()) => {
18
+ const trimmed = input.trim();
19
+ if (DURATION_LIKE_RE.test(trimmed) && !trimmed.includes('-')) {
20
+ const duration = parseDuration(trimmed);
21
+ if (typeof duration === 'number' && duration > 0) {
22
+ return now - duration;
23
+ }
24
+ }
25
+ const ms = new Date(trimmed).getTime();
26
+ if (Number.isNaN(ms)) {
27
+ throw new Error(`Invalid time value: "${input}". Use a duration (e.g. 10m, 1h, 24h, 2d) or an ISO 8601 timestamp.`);
28
+ }
29
+ return ms;
30
+ };
31
+ export const buildFunctionLogsUrl = ({ siteId, branch, functionName, }) => {
32
+ const branchPath = branch ? `branch/${encodeURIComponent(branch)}/` : '';
33
+ return `${ANALYTICS_API_BASE}/v2/sites/${encodeURIComponent(siteId)}/${branchPath}function_logs/${encodeURIComponent(functionName)}`;
34
+ };
35
+ export const buildEdgeFunctionLogsUrl = ({ siteId, search }) => {
36
+ const base = `${ANALYTICS_API_BASE}/v2/sites/${encodeURIComponent(siteId)}/edge_function_logs`;
37
+ if (search) {
38
+ return `${base}?search=${encodeURIComponent(search)}`;
39
+ }
40
+ return base;
41
+ };
42
+ const isDebug = () => Boolean(process.env.DEBUG);
43
+ const debugLog = (message) => {
44
+ if (isDebug()) {
45
+ process.stderr.write(`${chalk.dim(`[debug] ${message}`)}\n`);
46
+ }
47
+ };
48
+ export const debugFetch = async (url, init) => {
49
+ debugLog(`→ ${init?.method ?? 'GET'} ${url}`);
50
+ const start = performance.now();
51
+ const response = await fetch(url, init);
52
+ const elapsed = (performance.now() - start).toFixed(0);
53
+ debugLog(`← ${response.status.toString()} ${response.statusText} (${elapsed}ms)`);
54
+ return response;
55
+ };
56
+ export const fetchHistoricalLogs = async ({ baseUrl, accessToken, from, to, deployId, }) => {
57
+ const entries = [];
58
+ let cursor;
59
+ do {
60
+ const parsedUrl = new URL(baseUrl);
61
+ parsedUrl.searchParams.set('from', String(from));
62
+ parsedUrl.searchParams.set('to', String(to));
63
+ if (deployId) {
64
+ parsedUrl.searchParams.set('deploy_id', deployId);
65
+ }
66
+ if (cursor) {
67
+ parsedUrl.searchParams.set('cursor', cursor);
68
+ }
69
+ const response = await debugFetch(parsedUrl.toString(), {
70
+ headers: {
71
+ Authorization: `Bearer ${accessToken ?? ''}`,
72
+ 'Content-Type': 'application/json',
73
+ },
74
+ });
75
+ if (!response.ok) {
76
+ throw new Error(`Failed to fetch logs: ${response.status.toString()} ${response.statusText}`);
77
+ }
78
+ const body = (await response.json());
79
+ entries.push(...(body.logs ?? []));
80
+ cursor = body.pagination?.next;
81
+ } while (cursor);
82
+ return entries;
83
+ };
84
+ const PREFIX_COLORS = [
85
+ chalk.cyan,
86
+ chalk.magenta,
87
+ chalk.yellow,
88
+ chalk.green,
89
+ chalk.blue,
90
+ chalk.red,
91
+ chalk.yellowBright,
92
+ chalk.greenBright,
93
+ chalk.magentaBright,
94
+ chalk.cyanBright,
95
+ ];
96
+ export const createColorAssigner = () => {
97
+ const map = new Map();
98
+ let index = 0;
99
+ return (label) => {
100
+ let colorFn = map.get(label);
101
+ if (!colorFn) {
102
+ colorFn = PREFIX_COLORS[index % PREFIX_COLORS.length];
103
+ map.set(label, colorFn);
104
+ index += 1;
105
+ }
106
+ return colorFn;
107
+ };
108
+ };
109
+ const colorLevel = (level) => {
110
+ switch (level.toUpperCase()) {
111
+ case LOG_LEVELS.INFO:
112
+ return chalk.blueBright(level);
113
+ case LOG_LEVELS.WARN:
114
+ return chalk.yellowBright(level);
115
+ case LOG_LEVELS.ERROR:
116
+ return chalk.redBright(level);
117
+ default:
118
+ return level;
119
+ }
120
+ };
121
+ export const formatLogLine = (entry, colorFn) => {
122
+ const level = entry.level || 'INFO';
123
+ const indicator = SOURCE_INDICATORS[entry.source];
124
+ const label = `[${indicator} ${entry.name}]`;
125
+ const prefix = colorFn ? colorFn(label) : chalk.cyan(label);
126
+ const timestampStr = Number.isFinite(entry.ts) ? `${chalk.dim(new Date(entry.ts).toISOString())} ` : '';
127
+ return `${prefix} ${timestampStr}${colorLevel(level)} ${entry.message}`;
128
+ };
129
+ export const formatJsonLine = (entry) => JSON.stringify({
130
+ source: entry.source,
131
+ name: entry.name,
132
+ timestamp: Number.isFinite(entry.ts) ? new Date(entry.ts).toISOString() : new Date().toISOString(),
133
+ level: (entry.level || 'info').toLowerCase(),
134
+ message: entry.message,
135
+ ...(entry.section ? { section: entry.section } : {}),
136
+ });
137
+ export const hostnamesForSite = (siteInfo) => {
138
+ const canonical = new Set();
139
+ const addUrl = (value) => {
140
+ if (!value)
141
+ return;
142
+ try {
143
+ canonical.add(new URL(value.includes('://') ? value : `https://${value}`).hostname.toLowerCase());
144
+ }
145
+ catch {
146
+ // ignore invalid entries
147
+ }
148
+ };
149
+ addUrl(siteInfo.url);
150
+ addUrl(siteInfo.ssl_url);
151
+ if (siteInfo.custom_domain) {
152
+ canonical.add(siteInfo.custom_domain.toLowerCase());
153
+ }
154
+ for (const alias of siteInfo.domain_aliases ?? []) {
155
+ canonical.add(alias.toLowerCase());
156
+ }
157
+ const netlifyAppBaseHost = siteInfo.name ? `${siteInfo.name.toLowerCase()}.netlify.app` : null;
158
+ if (netlifyAppBaseHost) {
159
+ canonical.add(netlifyAppBaseHost);
160
+ }
161
+ return { canonicalHostnames: canonical, netlifyAppBaseHost };
162
+ };
163
+ export const resolveDeployIdFromUrl = async (urlInput, client, siteId, siteInfo) => {
164
+ let parsed;
165
+ try {
166
+ parsed = new URL(urlInput.includes('://') ? urlInput : `https://${urlInput}`);
167
+ }
168
+ catch {
169
+ throw new Error(`Invalid --url value: ${urlInput}`);
170
+ }
171
+ const hostname = parsed.hostname.toLowerCase();
172
+ const { canonicalHostnames, netlifyAppBaseHost } = hostnamesForSite(siteInfo);
173
+ if (canonicalHostnames.has(hostname)) {
174
+ return undefined;
175
+ }
176
+ const mismatchError = new Error(`The URL ${urlInput} doesn't seem to match the linked project${siteInfo.name ? ` (${siteInfo.name})` : ''}.`);
177
+ if (!netlifyAppBaseHost || !hostname.endsWith(`.netlify.app`)) {
178
+ throw mismatchError;
179
+ }
180
+ const firstLabel = hostname.split('.')[0] ?? '';
181
+ const separatorIndex = firstLabel.indexOf('--');
182
+ if (separatorIndex === -1) {
183
+ throw mismatchError;
184
+ }
185
+ const prefix = firstLabel.slice(0, separatorIndex);
186
+ const suffix = firstLabel.slice(separatorIndex + 2);
187
+ if (suffix !== siteInfo.name?.toLowerCase()) {
188
+ throw mismatchError;
189
+ }
190
+ if (DEPLOY_ID_RE.test(prefix)) {
191
+ return prefix;
192
+ }
193
+ const deploys = (await client.listSiteDeploys({ siteId, branch: prefix, per_page: 20 }));
194
+ const ready = deploys.find((deploy) => deploy.state === 'ready');
195
+ if (!ready) {
196
+ throw new Error(`No ready deploys found for branch ${prefix}`);
197
+ }
198
+ return ready.id;
199
+ };
200
+ //# sourceMappingURL=log-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-api.js","sourceRoot":"","sources":["../../../src/commands/logs/log-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { OptionValues } from 'commander';
2
+ import type BaseCommand from '../base-command.js';
3
+ export declare const logsCommand: (options: OptionValues, command: BaseCommand) => Promise<undefined>;
4
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/commands/logs/logs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAA;AAuHjD,eAAO,MAAM,WAAW,GAAU,SAAS,YAAY,EAAE,SAAS,WAAW,uBA+I5E,CAAA"}
@@ -0,0 +1,302 @@
1
+ import { chalk, log, logAndThrowError, netlifyCommand } from '../../utils/command-helpers.js';
2
+ import { createColorAssigner, formatJsonLine, formatLogLine, parseTimeValue, resolveDeployIdFromUrl, SOURCE_INDICATORS, SOURCE_LABELS, } from './log-api.js';
3
+ import { LOG_LEVELS_LIST, CLI_LOG_LEVEL_CHOICES_STRING } from './log-levels.js';
4
+ import { fetchDeployHistoricalLogs, findCurrentBuildingDeploy, findLatestReadyDeploy, streamDeploy, } from './sources/deploy.js';
5
+ import { fetchEdgeFunctionHistoricalLogs, streamEdgeFunctions } from './sources/edge-functions.js';
6
+ import { fetchFunctionHistoricalLogs, listFunctions, selectFunctions, streamFunctions, validateFunctionCount, } from './sources/functions.js';
7
+ const VALID_SOURCES = ['functions', 'edge-functions', 'deploy'];
8
+ const DEFAULT_SINCE = '10m';
9
+ const parseSources = (rawSources) => {
10
+ const sources = [];
11
+ for (const s of rawSources) {
12
+ if (!VALID_SOURCES.includes(s)) {
13
+ throw new Error(`Invalid --source value "${s}". Valid values are: ${VALID_SOURCES.join(', ')}`);
14
+ }
15
+ if (!sources.includes(s)) {
16
+ sources.push(s);
17
+ }
18
+ }
19
+ return sources;
20
+ };
21
+ const SOURCE_TO_ENTRY_SOURCE = {
22
+ functions: 'function',
23
+ 'edge-functions': 'edge-function',
24
+ deploy: 'deploy',
25
+ };
26
+ const humanizeTimeRange = (sinceValue, untilValue) => {
27
+ if (!sinceValue && !untilValue) {
28
+ return 'for the last 10 minutes';
29
+ }
30
+ if (sinceValue && !untilValue) {
31
+ return `for the last ${sinceValue}`;
32
+ }
33
+ if (sinceValue && untilValue) {
34
+ return `from ${sinceValue} to ${untilValue}`;
35
+ }
36
+ return '';
37
+ };
38
+ const printHeader = (sources, timeDescription, isFollow) => {
39
+ const sourceNames = sources.map((s) => {
40
+ switch (s) {
41
+ case 'functions':
42
+ return 'functions';
43
+ case 'edge-functions':
44
+ return 'edge functions';
45
+ case 'deploy':
46
+ return 'deploy';
47
+ }
48
+ });
49
+ const sourceList = sourceNames.length <= 2
50
+ ? sourceNames.join(' and ')
51
+ : `${sourceNames.slice(0, -1).join(', ')}, and ${String(sourceNames.at(-1))}`;
52
+ if (isFollow) {
53
+ log(`Streaming logs from ${sourceList}:`);
54
+ }
55
+ else {
56
+ log(`Showing logs from ${sourceList} ${timeDescription}:`);
57
+ }
58
+ log('');
59
+ // Emoji are typically 2 columns wide; 𝒇 (U+1D487) is 1 column.
60
+ // Pad single-width indicators so labels align.
61
+ const INDICATOR_PAD = {
62
+ function: ' ',
63
+ };
64
+ const activeSources = sources.map((s) => SOURCE_TO_ENTRY_SOURCE[s]);
65
+ for (const source of activeSources) {
66
+ const pad = INDICATOR_PAD[source] ?? '';
67
+ log(` ${SOURCE_INDICATORS[source]}${pad} ${chalk.dim(SOURCE_LABELS[source])}`);
68
+ }
69
+ log('');
70
+ };
71
+ const printEntry = (entry, levelsToPrint, json, colorFn) => {
72
+ const level = entry.level || 'INFO';
73
+ if (!levelsToPrint.includes(level.toLowerCase())) {
74
+ return;
75
+ }
76
+ if (json) {
77
+ process.stdout.write(`${formatJsonLine(entry)}\n`);
78
+ }
79
+ else {
80
+ log(formatLogLine(entry, colorFn));
81
+ }
82
+ };
83
+ export const logsCommand = async (options, command) => {
84
+ const client = command.netlify.api;
85
+ const { site, siteInfo } = command.netlify;
86
+ const siteId = site.id;
87
+ if (!siteId) {
88
+ return logAndThrowError('You must link a project before viewing logs.');
89
+ }
90
+ const levelFlags = options.level;
91
+ if (levelFlags && !levelFlags.every((level) => LOG_LEVELS_LIST.includes(level))) {
92
+ return logAndThrowError(`Invalid log level. Choices are: ${CLI_LOG_LEVEL_CHOICES_STRING.toString()}`);
93
+ }
94
+ const levelsToPrint = levelFlags ?? LOG_LEVELS_LIST;
95
+ const json = Boolean(options.json);
96
+ const follow = Boolean(options.follow);
97
+ if (follow && (options.since || options.until)) {
98
+ return logAndThrowError('--follow cannot be used together with --since/--until.');
99
+ }
100
+ let sources;
101
+ const rawSources = options.source;
102
+ const functionNames = options.function ?? [];
103
+ const edgeFunctionNames = options.edgeFunction ?? [];
104
+ if (rawSources) {
105
+ try {
106
+ sources = parseSources(rawSources);
107
+ }
108
+ catch (error) {
109
+ return logAndThrowError(error.message);
110
+ }
111
+ }
112
+ else {
113
+ sources = [];
114
+ if (functionNames.length > 0) {
115
+ sources.push('functions');
116
+ }
117
+ if (edgeFunctionNames.length > 0) {
118
+ sources.push('edge-functions');
119
+ }
120
+ if (sources.length === 0) {
121
+ sources = ['functions', 'edge-functions'];
122
+ }
123
+ }
124
+ let deployId;
125
+ if (options.url) {
126
+ try {
127
+ deployId = await resolveDeployIdFromUrl(options.url, client, siteId, siteInfo);
128
+ }
129
+ catch (error) {
130
+ const message = error.message;
131
+ if (message.includes("doesn't seem to match") && siteInfo.name) {
132
+ const parts = [
133
+ netlifyCommand(),
134
+ 'logs',
135
+ ...(options.since ? [`--since ${options.since}`] : []),
136
+ `--url https://${siteInfo.name}.netlify.app`,
137
+ ].join(' ');
138
+ return logAndThrowError(`${message}\nTry running ${chalk.cyan(parts)}`);
139
+ }
140
+ return logAndThrowError(message);
141
+ }
142
+ }
143
+ const now = Date.now();
144
+ let historicalRange;
145
+ if (!follow) {
146
+ if (options.until && !options.since) {
147
+ return logAndThrowError('--until requires --since to also be set.');
148
+ }
149
+ try {
150
+ const fromValue = options.since ?? DEFAULT_SINCE;
151
+ const from = parseTimeValue(fromValue, now);
152
+ const to = options.until ? parseTimeValue(options.until, now) : now;
153
+ if (from >= to) {
154
+ return logAndThrowError('--since must be earlier than --until.');
155
+ }
156
+ historicalRange = { from, to };
157
+ }
158
+ catch (error) {
159
+ return logAndThrowError(error.message);
160
+ }
161
+ }
162
+ if (!deployId && (sources.includes('edge-functions') || sources.includes('deploy'))) {
163
+ if (follow && sources.includes('deploy')) {
164
+ const buildingDeployId = await findCurrentBuildingDeploy(client, siteId);
165
+ if (!buildingDeployId && sources.length === 1) {
166
+ return logAndThrowError('No active builds. Remove --source deploy or omit --follow to view historical deploy logs.');
167
+ }
168
+ if (buildingDeployId) {
169
+ deployId = buildingDeployId;
170
+ }
171
+ }
172
+ if (!deployId) {
173
+ const latestId = await findLatestReadyDeploy(client, siteId);
174
+ if (latestId) {
175
+ deployId = latestId;
176
+ }
177
+ }
178
+ }
179
+ const apiBase = client.basePath;
180
+ const sinceValue = options.since ?? DEFAULT_SINCE;
181
+ const untilValue = options.until;
182
+ if (historicalRange) {
183
+ await runHistoricalMode({
184
+ sources,
185
+ client,
186
+ apiBase,
187
+ siteId,
188
+ accessToken: client.accessToken,
189
+ deployId,
190
+ functionNames,
191
+ edgeFunctionNames,
192
+ from: historicalRange.from,
193
+ to: historicalRange.to,
194
+ levelsToPrint,
195
+ json,
196
+ timeDescription: humanizeTimeRange(sinceValue, untilValue),
197
+ });
198
+ return;
199
+ }
200
+ if (!json) {
201
+ printHeader(sources, '', true);
202
+ }
203
+ await runFollowMode({
204
+ sources,
205
+ client,
206
+ siteId,
207
+ accessToken: client.accessToken,
208
+ deployId,
209
+ functionNames,
210
+ edgeFunctionNames,
211
+ levelsToPrint,
212
+ json,
213
+ });
214
+ };
215
+ const runHistoricalMode = async ({ sources, client, apiBase, siteId, accessToken, deployId, functionNames, edgeFunctionNames, from, to, levelsToPrint, json, timeDescription, }) => {
216
+ const allEntries = [];
217
+ if (sources.includes('deploy') && deployId) {
218
+ const deployEntries = await fetchDeployHistoricalLogs({
219
+ apiBase,
220
+ accessToken,
221
+ deployId,
222
+ from,
223
+ to,
224
+ });
225
+ allEntries.push(...deployEntries);
226
+ }
227
+ if (sources.includes('functions')) {
228
+ const allFunctions = await listFunctions(client, siteId, deployId);
229
+ if (allFunctions.length > 0) {
230
+ const selected = selectFunctions(allFunctions, functionNames);
231
+ const entries = await fetchFunctionHistoricalLogs({
232
+ functions: selected,
233
+ siteId,
234
+ accessToken,
235
+ from,
236
+ to,
237
+ deployId,
238
+ });
239
+ allEntries.push(...entries);
240
+ }
241
+ }
242
+ if (sources.includes('edge-functions')) {
243
+ const entries = await fetchEdgeFunctionHistoricalLogs({
244
+ siteId,
245
+ accessToken,
246
+ from,
247
+ to,
248
+ deployId,
249
+ filterNames: edgeFunctionNames,
250
+ });
251
+ allEntries.push(...entries);
252
+ }
253
+ allEntries.sort((a, b) => a.ts - b.ts);
254
+ if (allEntries.length === 0) {
255
+ log('No logs found for the given time range.');
256
+ return;
257
+ }
258
+ if (!json) {
259
+ printHeader(sources, timeDescription, false);
260
+ }
261
+ const assignColor = createColorAssigner();
262
+ for (const entry of allEntries) {
263
+ const key = `${entry.source}:${entry.name}`;
264
+ printEntry(entry, levelsToPrint, json, assignColor(key));
265
+ }
266
+ };
267
+ const runFollowMode = async ({ sources, client, siteId, accessToken, deployId, functionNames, edgeFunctionNames, levelsToPrint, json, }) => {
268
+ const assignColor = createColorAssigner();
269
+ const onEntry = (entry) => {
270
+ const key = `${entry.source}:${entry.name}`;
271
+ printEntry(entry, levelsToPrint, json, assignColor(key));
272
+ };
273
+ if (sources.includes('deploy') && deployId) {
274
+ const buildingDeployId = await findCurrentBuildingDeploy(client, siteId);
275
+ if (buildingDeployId) {
276
+ streamDeploy(siteId, buildingDeployId, accessToken, onEntry, () => {
277
+ if (!json) {
278
+ log(chalk.dim('Deploy stream closed.'));
279
+ }
280
+ });
281
+ }
282
+ }
283
+ if (sources.includes('functions')) {
284
+ const allFunctions = await listFunctions(client, siteId, deployId);
285
+ if (allFunctions.length > 0) {
286
+ try {
287
+ const selected = selectFunctions(allFunctions, functionNames);
288
+ if (functionNames.length === 0) {
289
+ validateFunctionCount(selected.length);
290
+ }
291
+ streamFunctions(selected, siteId, accessToken, onEntry);
292
+ }
293
+ catch (error) {
294
+ return logAndThrowError(error.message);
295
+ }
296
+ }
297
+ }
298
+ if (sources.includes('edge-functions') && deployId) {
299
+ streamEdgeFunctions(siteId, deployId, accessToken, edgeFunctionNames, onEntry);
300
+ }
301
+ };
302
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/commands/logs/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { NetlifyAPI } from '@netlify/api';
2
+ import type { LogEntry } from '../log-api.js';
3
+ export declare const fetchDeployHistoricalLogs: ({ apiBase, accessToken, deployId, from, to, }: {
4
+ apiBase: string;
5
+ accessToken: string | null | undefined;
6
+ deployId: string;
7
+ from: number;
8
+ to: number;
9
+ }) => Promise<LogEntry[]>;
10
+ export declare const streamDeploy: (siteId: string, deployId: string, accessToken: string | null | undefined, onEntry: (entry: LogEntry) => void, onClose: () => void) => (() => void);
11
+ export declare const findCurrentBuildingDeploy: (client: NetlifyAPI, siteId: string) => Promise<string | undefined>;
12
+ export declare const findLatestReadyDeploy: (client: NetlifyAPI, siteId: string) => Promise<string | undefined>;
13
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../../src/commands/logs/sources/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAI9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAW7C,eAAO,MAAM,yBAAyB,GAAU,+CAM7C;IACD,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACtC,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACX,KAAG,OAAO,CAAC,QAAQ,EAAE,CAgCrB,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,QAAQ,MAAM,EACd,UAAU,MAAM,EAChB,aAAa,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,SAAS,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EAClC,SAAS,MAAM,IAAI,KAClB,CAAC,MAAM,IAAI,CA2Cb,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAU,QAAQ,UAAU,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAG9G,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAU,QAAQ,UAAU,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAG1G,CAAA"}
@@ -0,0 +1,71 @@
1
+ import { getWebSocket } from '../../../utils/websockets/index.js';
2
+ import { debugFetch } from '../log-api.js';
3
+ export const fetchDeployHistoricalLogs = async ({ apiBase, accessToken, deployId, from, to, }) => {
4
+ const response = await debugFetch(`${apiBase}/api/v1/deploys/${encodeURIComponent(deployId)}/log`, {
5
+ headers: {
6
+ Authorization: `Bearer ${accessToken ?? ''}`,
7
+ },
8
+ });
9
+ if (!response.ok) {
10
+ throw new Error(`Failed to fetch deploy logs: ${response.status.toString()} ${response.statusText}`);
11
+ }
12
+ const logData = (await response.json());
13
+ if (!Array.isArray(logData)) {
14
+ return [];
15
+ }
16
+ return logData
17
+ .map((line) => {
18
+ const ts = new Date(line.ts).getTime();
19
+ if (Number.isNaN(ts) || ts < from || ts > to) {
20
+ return null;
21
+ }
22
+ return {
23
+ source: 'deploy',
24
+ name: 'deploy',
25
+ ts,
26
+ level: line.level ?? 'INFO',
27
+ message: line.log ?? line.message ?? '',
28
+ section: line.section,
29
+ };
30
+ })
31
+ .filter((entry) => entry !== null);
32
+ };
33
+ export const streamDeploy = (siteId, deployId, accessToken, onEntry, onClose) => {
34
+ const ws = getWebSocket('wss://socketeer.services.netlify.com/build/logs');
35
+ ws.on('open', () => {
36
+ ws.send(JSON.stringify({
37
+ deploy_id: deployId,
38
+ site_id: siteId,
39
+ access_token: accessToken,
40
+ }));
41
+ });
42
+ ws.on('message', (data) => {
43
+ const logData = JSON.parse(data);
44
+ onEntry({
45
+ source: 'deploy',
46
+ name: 'deploy',
47
+ ts: logData.ts ? new Date(logData.ts).getTime() : Date.now(),
48
+ level: logData.level ?? 'INFO',
49
+ message: logData.message,
50
+ section: logData.section,
51
+ });
52
+ if (logData.type === 'report' && logData.section === 'building') {
53
+ ws.close();
54
+ }
55
+ });
56
+ ws.on('close', () => {
57
+ onClose();
58
+ });
59
+ return () => {
60
+ ws.close();
61
+ };
62
+ };
63
+ export const findCurrentBuildingDeploy = async (client, siteId) => {
64
+ const deploys = (await client.listSiteDeploys({ siteId, state: 'building' }));
65
+ return deploys.length > 0 ? deploys[0].id : undefined;
66
+ };
67
+ export const findLatestReadyDeploy = async (client, siteId) => {
68
+ const deploys = (await client.listSiteDeploys({ siteId, state: 'ready', per_page: 1 }));
69
+ return deploys.length > 0 ? deploys[0].id : undefined;
70
+ };
71
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../../src/commands/logs/sources/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { LogEntry } from '../log-api.js';
2
+ interface NetlifyEdgeFunction {
3
+ name: string;
4
+ generator?: string;
5
+ }
6
+ export declare const listEdgeFunctions: (apiBase: string, accessToken: string | null | undefined, deployId: string) => Promise<NetlifyEdgeFunction[]>;
7
+ export declare const fetchEdgeFunctionHistoricalLogs: ({ siteId, accessToken, from, to, deployId, filterNames, }: {
8
+ siteId: string;
9
+ accessToken: string | null | undefined;
10
+ from: number;
11
+ to: number;
12
+ deployId?: string;
13
+ filterNames: string[];
14
+ }) => Promise<LogEntry[]>;
15
+ export declare const streamEdgeFunctions: (siteId: string, deployId: string, accessToken: string | null | undefined, filterNames: string[], onEntry: (entry: LogEntry) => void) => (() => void);
16
+ export {};
17
+ //# sourceMappingURL=edge-functions.d.ts.map