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 @@
1
+ {"version":3,"file":"edge-functions.d.ts","sourceRoot":"","sources":["../../../../src/commands/logs/sources/edge-functions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,aAAa,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,UAAU,MAAM,KACf,OAAO,CAAC,mBAAmB,EAAE,CAc/B,CAAA;AAED,eAAO,MAAM,+BAA+B,GAAU,2DAOnD;IACD,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB,KAAG,OAAO,CAAC,QAAQ,EAAE,CA+BrB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,UAAU,MAAM,EAChB,aAAa,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,aAAa,MAAM,EAAE,EACrB,SAAS,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,KACjC,CAAC,MAAM,IAAI,CAwCb,CAAA"}
@@ -0,0 +1,71 @@
1
+ import { getWebSocket } from '../../../utils/websockets/index.js';
2
+ import { buildEdgeFunctionLogsUrl, debugFetch, fetchHistoricalLogs } from '../log-api.js';
3
+ export const listEdgeFunctions = async (apiBase, accessToken, deployId) => {
4
+ const response = await debugFetch(`${apiBase}/api/v1/deploys/${encodeURIComponent(deployId)}/edge_functions`, {
5
+ headers: {
6
+ Authorization: `Bearer ${accessToken ?? ''}`,
7
+ },
8
+ });
9
+ if (!response.ok) {
10
+ return [];
11
+ }
12
+ const data = (await response.json());
13
+ if (Array.isArray(data)) {
14
+ return data;
15
+ }
16
+ return data.edge_functions ?? [];
17
+ };
18
+ export const fetchEdgeFunctionHistoricalLogs = async ({ siteId, accessToken, from, to, deployId, filterNames, }) => {
19
+ if (filterNames.length > 0) {
20
+ const results = await Promise.all(filterNames.map(async (filterName) => {
21
+ const baseUrl = buildEdgeFunctionLogsUrl({ siteId, search: filterName });
22
+ const entries = await fetchHistoricalLogs({ baseUrl, accessToken, from, to, deployId });
23
+ return entries.map((entry) => ({
24
+ source: 'edge-function',
25
+ name: entry.name ?? entry.function ?? filterName,
26
+ ts: entry.ts,
27
+ level: entry.level || 'INFO',
28
+ message: entry.message,
29
+ }));
30
+ }));
31
+ return results.flat();
32
+ }
33
+ const baseUrl = buildEdgeFunctionLogsUrl({ siteId });
34
+ const entries = await fetchHistoricalLogs({ baseUrl, accessToken, from, to, deployId });
35
+ return entries.map((entry) => ({
36
+ source: 'edge-function',
37
+ name: entry.name ?? entry.function ?? 'edge-function',
38
+ ts: entry.ts,
39
+ level: entry.level || 'INFO',
40
+ message: entry.message,
41
+ }));
42
+ };
43
+ export const streamEdgeFunctions = (siteId, deployId, accessToken, filterNames, onEntry) => {
44
+ const ws = getWebSocket('wss://socketeer.services.netlify.com/edge-function/logs');
45
+ ws.on('open', () => {
46
+ ws.send(JSON.stringify({
47
+ deploy_id: deployId,
48
+ site_id: siteId,
49
+ access_token: accessToken,
50
+ since: new Date(Date.now() - 5 * 60 * 1000).toISOString(),
51
+ }));
52
+ });
53
+ ws.on('message', (data) => {
54
+ const logData = JSON.parse(data);
55
+ const name = logData.function ?? 'edge-function';
56
+ if (filterNames.length > 0 && !filterNames.some((f) => name === f || logData.request_path === f)) {
57
+ return;
58
+ }
59
+ onEntry({
60
+ source: 'edge-function',
61
+ name,
62
+ ts: typeof logData.ts === 'number' ? logData.ts : Date.now(),
63
+ level: logData.level || 'INFO',
64
+ message: logData.message,
65
+ });
66
+ });
67
+ return () => {
68
+ ws.close();
69
+ };
70
+ };
71
+ //# sourceMappingURL=edge-functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-functions.js","sourceRoot":"","sources":["../../../../src/commands/logs/sources/edge-functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { NetlifyAPI } from '@netlify/api';
2
+ import type { LogEntry } from '../log-api.js';
3
+ interface NetlifyFunction {
4
+ a: string;
5
+ oid: string;
6
+ n: string;
7
+ branch?: string | null;
8
+ }
9
+ export declare const listFunctions: (client: NetlifyAPI, siteId: string, deployId?: string) => Promise<NetlifyFunction[]>;
10
+ export declare const selectFunctions: (allFunctions: NetlifyFunction[], filterNames: string[]) => NetlifyFunction[];
11
+ export declare const validateFunctionCount: (count: number) => void;
12
+ export declare const fetchFunctionHistoricalLogs: ({ functions, siteId, accessToken, from, to, deployId, }: {
13
+ functions: NetlifyFunction[];
14
+ siteId: string;
15
+ accessToken: string | null | undefined;
16
+ from: number;
17
+ to: number;
18
+ deployId?: string;
19
+ }) => Promise<LogEntry[]>;
20
+ export declare const streamFunctions: (functions: NetlifyFunction[], siteId: string, accessToken: string | null | undefined, onEntry: (entry: LogEntry) => void) => (() => void);
21
+ export {};
22
+ //# sourceMappingURL=functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../src/commands/logs/sources/functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAI9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,UAAU,eAAe;IACvB,CAAC,EAAE,MAAM,CAAA;IACT,GAAG,EAAE,MAAM,CAAA;IACX,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAID,eAAO,MAAM,aAAa,GACxB,QAAQ,UAAU,EAClB,QAAQ,MAAM,EACd,WAAW,MAAM,KAChB,OAAO,CAAC,eAAe,EAAE,CAO3B,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,cAAc,eAAe,EAAE,EAAE,aAAa,MAAM,EAAE,KAAG,eAAe,EAavG,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,KAAG,IAMrD,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAU,yDAO/C;IACD,SAAS,EAAE,eAAe,EAAE,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,KAAG,OAAO,CAAC,QAAQ,EAAE,CAiBrB,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,WAAW,eAAe,EAAE,EAC5B,QAAQ,MAAM,EACd,aAAa,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,SAAS,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,KACjC,CAAC,MAAM,IAAI,CAmCb,CAAA"}
@@ -0,0 +1,75 @@
1
+ import { getWebSocket } from '../../../utils/websockets/index.js';
2
+ import { buildFunctionLogsUrl, fetchHistoricalLogs } from '../log-api.js';
3
+ const MAX_CONCURRENT_FUNCTIONS = 10;
4
+ export const listFunctions = async (client, siteId, deployId) => {
5
+ if (deployId) {
6
+ const deploy = (await client.getSiteDeploy({ siteId, deployId }));
7
+ return deploy.available_functions ?? [];
8
+ }
9
+ const searchResponse = (await client.searchSiteFunctions({ siteId }));
10
+ return searchResponse.functions ?? [];
11
+ };
12
+ export const selectFunctions = (allFunctions, filterNames) => {
13
+ if (filterNames.length === 0) {
14
+ return allFunctions;
15
+ }
16
+ const selected = [];
17
+ for (const name of filterNames) {
18
+ const match = allFunctions.find((fn) => fn.n === name);
19
+ if (!match) {
20
+ throw new Error(`Could not find function ${name}`);
21
+ }
22
+ selected.push(match);
23
+ }
24
+ return selected;
25
+ };
26
+ export const validateFunctionCount = (count) => {
27
+ if (count > MAX_CONCURRENT_FUNCTIONS) {
28
+ throw new Error(`You can only stream logs for up to ${MAX_CONCURRENT_FUNCTIONS.toString()} functions at a time — this project has ${count.toString()}.`);
29
+ }
30
+ };
31
+ export const fetchFunctionHistoricalLogs = async ({ functions, siteId, accessToken, from, to, deployId, }) => {
32
+ const results = await Promise.all(functions.map(async (fn) => {
33
+ const baseUrl = buildFunctionLogsUrl({ siteId, branch: fn.branch, functionName: fn.n });
34
+ const entries = await fetchHistoricalLogs({ baseUrl, accessToken, from, to, deployId });
35
+ return entries.map((entry) => ({
36
+ source: 'function',
37
+ name: fn.n,
38
+ ts: entry.ts,
39
+ level: entry.level || 'INFO',
40
+ message: entry.message,
41
+ }));
42
+ }));
43
+ return results.flat();
44
+ };
45
+ export const streamFunctions = (functions, siteId, accessToken, onEntry) => {
46
+ const sockets = [];
47
+ for (const fn of functions) {
48
+ const ws = getWebSocket('wss://socketeer.services.netlify.com/function/logs');
49
+ sockets.push(ws);
50
+ ws.on('open', () => {
51
+ ws.send(JSON.stringify({
52
+ function_id: fn.oid,
53
+ site_id: siteId,
54
+ access_token: accessToken,
55
+ account_id: fn.a,
56
+ }));
57
+ });
58
+ ws.on('message', (data) => {
59
+ const logData = JSON.parse(data);
60
+ onEntry({
61
+ source: 'function',
62
+ name: fn.n,
63
+ ts: typeof logData.ts === 'number' ? logData.ts : Date.now(),
64
+ level: logData.level || 'INFO',
65
+ message: logData.message,
66
+ });
67
+ });
68
+ }
69
+ return () => {
70
+ for (const ws of sockets) {
71
+ ws.close();
72
+ }
73
+ };
74
+ };
75
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../src/commands/logs/sources/functions.ts"],"names":[],"mappings":"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"}