@salesforce/b2c-tooling-sdk 0.2.0 → 0.3.0
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/cjs/auth/api-key.d.ts +2 -2
- package/dist/cjs/auth/api-key.js +1 -0
- package/dist/cjs/auth/api-key.js.map +1 -1
- package/dist/cjs/auth/basic.d.ts +2 -2
- package/dist/cjs/auth/basic.js +2 -0
- package/dist/cjs/auth/basic.js.map +1 -1
- package/dist/cjs/auth/index.d.ts +1 -1
- package/dist/cjs/auth/index.js.map +1 -1
- package/dist/cjs/auth/oauth-implicit.d.ts +2 -2
- package/dist/cjs/auth/oauth-implicit.js +1 -0
- package/dist/cjs/auth/oauth-implicit.js.map +1 -1
- package/dist/cjs/auth/oauth.d.ts +2 -2
- package/dist/cjs/auth/oauth.js +2 -0
- package/dist/cjs/auth/oauth.js.map +1 -1
- package/dist/cjs/auth/types.d.ts +10 -1
- package/dist/cjs/auth/types.js +5 -0
- package/dist/cjs/auth/types.js.map +1 -1
- package/dist/cjs/cli/base-command.d.ts +23 -0
- package/dist/cjs/cli/base-command.js +29 -4
- package/dist/cjs/cli/base-command.js.map +1 -1
- package/dist/cjs/cli/config.d.ts +71 -0
- package/dist/cjs/cli/config.js +105 -2
- package/dist/cjs/cli/config.js.map +1 -1
- package/dist/cjs/cli/index.d.ts +2 -2
- package/dist/cjs/cli/index.js +3 -1
- package/dist/cjs/cli/index.js.map +1 -1
- package/dist/cjs/cli/instance-command.d.ts +4 -0
- package/dist/cjs/cli/instance-command.js +24 -23
- package/dist/cjs/cli/instance-command.js.map +1 -1
- package/dist/cjs/cli/mrt-command.d.ts +0 -6
- package/dist/cjs/cli/mrt-command.js +5 -29
- package/dist/cjs/cli/mrt-command.js.map +1 -1
- package/dist/cjs/cli/oauth-command.d.ts +5 -6
- package/dist/cjs/cli/oauth-command.js +13 -35
- package/dist/cjs/cli/oauth-command.js.map +1 -1
- package/dist/cjs/cli/ods-command.d.ts +18 -0
- package/dist/cjs/cli/ods-command.js +51 -0
- package/dist/cjs/cli/ods-command.js.map +1 -1
- package/dist/cjs/cli/webdav-command.d.ts +4 -0
- package/dist/cjs/clients/cdn-zones.d.ts +33 -1
- package/dist/cjs/clients/cdn-zones.js.map +1 -1
- package/dist/cjs/clients/custom-apis.d.ts +30 -1
- package/dist/cjs/clients/custom-apis.js.map +1 -1
- package/dist/cjs/clients/index.d.ts +2 -0
- package/dist/cjs/clients/index.js +1 -0
- package/dist/cjs/clients/index.js.map +1 -1
- package/dist/cjs/clients/mrt-b2c.d.ts +25 -1
- package/dist/cjs/clients/mrt-b2c.js.map +1 -1
- package/dist/cjs/clients/mrt.d.ts +24 -1
- package/dist/cjs/clients/mrt.js.map +1 -1
- package/dist/cjs/clients/ocapi.d.ts +22 -2
- package/dist/cjs/clients/ocapi.js +0 -2
- package/dist/cjs/clients/ocapi.js.map +1 -1
- package/dist/cjs/clients/ods.d.ts +28 -1
- package/dist/cjs/clients/ods.js.map +1 -1
- package/dist/cjs/clients/scapi-schemas.d.ts +30 -1
- package/dist/cjs/clients/scapi-schemas.js.map +1 -1
- package/dist/cjs/clients/slas-admin.d.ts +28 -0
- package/dist/cjs/clients/slas-admin.js.map +1 -1
- package/dist/cjs/clients/tls-dispatcher.d.ts +42 -0
- package/dist/cjs/clients/tls-dispatcher.js +107 -0
- package/dist/cjs/clients/tls-dispatcher.js.map +1 -0
- package/dist/cjs/clients/webdav.d.ts +8 -1
- package/dist/cjs/clients/webdav.js +5 -1
- package/dist/cjs/clients/webdav.js.map +1 -1
- package/dist/cjs/config/dw-json.d.ts +14 -0
- package/dist/cjs/config/dw-json.js +3 -2
- package/dist/cjs/config/dw-json.js.map +1 -1
- package/dist/cjs/config/index.d.ts +2 -2
- package/dist/cjs/config/index.js +1 -1
- package/dist/cjs/config/index.js.map +1 -1
- package/dist/cjs/config/mapping.d.ts +1 -1
- package/dist/cjs/config/mapping.js +20 -4
- package/dist/cjs/config/mapping.js.map +1 -1
- package/dist/cjs/config/resolved-config.d.ts +1 -3
- package/dist/cjs/config/resolved-config.js +0 -8
- package/dist/cjs/config/resolved-config.js.map +1 -1
- package/dist/cjs/config/resolver.d.ts +1 -1
- package/dist/cjs/config/resolver.js +20 -4
- package/dist/cjs/config/resolver.js.map +1 -1
- package/dist/cjs/config/sources/mobify-source.js +3 -2
- package/dist/cjs/config/sources/mobify-source.js.map +1 -1
- package/dist/cjs/config/sources/package-json-source.js +3 -1
- package/dist/cjs/config/sources/package-json-source.js.map +1 -1
- package/dist/cjs/config/types.d.ts +6 -18
- package/dist/{esm/operations → cjs}/docs/download.d.ts +1 -1
- package/dist/cjs/{operations/docs → docs}/download.js +2 -2
- package/dist/cjs/docs/download.js.map +1 -0
- package/dist/{esm/operations → cjs}/docs/index.d.ts +4 -4
- package/dist/cjs/docs/index.js.map +1 -0
- package/dist/cjs/docs/schema.js.map +1 -0
- package/dist/cjs/docs/search.js.map +1 -0
- package/dist/cjs/docs/types.js.map +1 -0
- package/dist/cjs/index.d.ts +5 -10
- package/dist/cjs/index.js +4 -8
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/instance/index.d.ts +4 -0
- package/dist/cjs/instance/index.js +6 -1
- package/dist/cjs/instance/index.js.map +1 -1
- package/dist/cjs/logging/index.d.ts +1 -1
- package/dist/cjs/logging/logger.js +15 -0
- package/dist/cjs/logging/logger.js.map +1 -1
- package/dist/cjs/logging/types.d.ts +9 -0
- package/dist/cjs/operations/logs/index.d.ts +65 -0
- package/dist/cjs/operations/logs/index.js +73 -0
- package/dist/cjs/operations/logs/index.js.map +1 -0
- package/dist/cjs/operations/logs/list.d.ts +35 -0
- package/dist/cjs/operations/logs/list.js +144 -0
- package/dist/cjs/operations/logs/list.js.map +1 -0
- package/dist/cjs/operations/logs/path-normalizer.d.ts +82 -0
- package/dist/cjs/operations/logs/path-normalizer.js +190 -0
- package/dist/cjs/operations/logs/path-normalizer.js.map +1 -0
- package/dist/cjs/operations/logs/tail.d.ts +92 -0
- package/dist/cjs/operations/logs/tail.js +525 -0
- package/dist/cjs/operations/logs/tail.js.map +1 -0
- package/dist/cjs/operations/logs/types.d.ts +132 -0
- package/dist/cjs/operations/logs/types.js +7 -0
- package/dist/cjs/operations/logs/types.js.map +1 -0
- package/dist/cjs/operations/mrt/push.js +3 -0
- package/dist/cjs/operations/mrt/push.js.map +1 -1
- package/dist/cjs/operations/ods/index.d.ts +6 -0
- package/dist/cjs/operations/ods/index.js +12 -0
- package/dist/cjs/operations/ods/index.js.map +1 -0
- package/dist/cjs/operations/ods/sandbox-lookup.d.ts +63 -0
- package/dist/cjs/operations/ods/sandbox-lookup.js +130 -0
- package/dist/cjs/operations/ods/sandbox-lookup.js.map +1 -0
- package/dist/{esm/operations/scapi-schemas → cjs/schemas}/collapse.d.ts +1 -1
- package/dist/cjs/schemas/collapse.js.map +1 -0
- package/dist/cjs/{operations/scapi-schemas → schemas}/index.d.ts +5 -5
- package/dist/cjs/{operations/scapi-schemas → schemas}/index.js +5 -5
- package/dist/cjs/schemas/index.js.map +1 -0
- package/dist/cjs/test-utils/config-isolation.js +7 -0
- package/dist/cjs/test-utils/config-isolation.js.map +1 -1
- package/dist/esm/auth/api-key.d.ts +2 -2
- package/dist/esm/auth/api-key.js +1 -0
- package/dist/esm/auth/api-key.js.map +1 -1
- package/dist/esm/auth/basic.d.ts +2 -2
- package/dist/esm/auth/basic.js +2 -0
- package/dist/esm/auth/basic.js.map +1 -1
- package/dist/esm/auth/index.d.ts +1 -1
- package/dist/esm/auth/index.js.map +1 -1
- package/dist/esm/auth/oauth-implicit.d.ts +2 -2
- package/dist/esm/auth/oauth-implicit.js +1 -0
- package/dist/esm/auth/oauth-implicit.js.map +1 -1
- package/dist/esm/auth/oauth.d.ts +2 -2
- package/dist/esm/auth/oauth.js +2 -0
- package/dist/esm/auth/oauth.js.map +1 -1
- package/dist/esm/auth/types.d.ts +10 -1
- package/dist/esm/auth/types.js +5 -0
- package/dist/esm/auth/types.js.map +1 -1
- package/dist/esm/cli/base-command.d.ts +23 -0
- package/dist/esm/cli/base-command.js +29 -4
- package/dist/esm/cli/base-command.js.map +1 -1
- package/dist/esm/cli/config.d.ts +71 -0
- package/dist/esm/cli/config.js +105 -2
- package/dist/esm/cli/config.js.map +1 -1
- package/dist/esm/cli/index.d.ts +2 -2
- package/dist/esm/cli/index.js +3 -1
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/cli/instance-command.d.ts +4 -0
- package/dist/esm/cli/instance-command.js +24 -23
- package/dist/esm/cli/instance-command.js.map +1 -1
- package/dist/esm/cli/mrt-command.d.ts +0 -6
- package/dist/esm/cli/mrt-command.js +5 -29
- package/dist/esm/cli/mrt-command.js.map +1 -1
- package/dist/esm/cli/oauth-command.d.ts +5 -6
- package/dist/esm/cli/oauth-command.js +13 -35
- package/dist/esm/cli/oauth-command.js.map +1 -1
- package/dist/esm/cli/ods-command.d.ts +18 -0
- package/dist/esm/cli/ods-command.js +51 -0
- package/dist/esm/cli/ods-command.js.map +1 -1
- package/dist/esm/cli/webdav-command.d.ts +4 -0
- package/dist/esm/clients/cdn-zones.d.ts +33 -1
- package/dist/esm/clients/cdn-zones.js.map +1 -1
- package/dist/esm/clients/custom-apis.d.ts +30 -1
- package/dist/esm/clients/custom-apis.js.map +1 -1
- package/dist/esm/clients/index.d.ts +2 -0
- package/dist/esm/clients/index.js +1 -0
- package/dist/esm/clients/index.js.map +1 -1
- package/dist/esm/clients/mrt-b2c.d.ts +25 -1
- package/dist/esm/clients/mrt-b2c.js.map +1 -1
- package/dist/esm/clients/mrt.d.ts +24 -1
- package/dist/esm/clients/mrt.js.map +1 -1
- package/dist/esm/clients/ocapi.d.ts +22 -2
- package/dist/esm/clients/ocapi.js +0 -2
- package/dist/esm/clients/ocapi.js.map +1 -1
- package/dist/esm/clients/ods.d.ts +28 -1
- package/dist/esm/clients/ods.js.map +1 -1
- package/dist/esm/clients/scapi-schemas.d.ts +30 -1
- package/dist/esm/clients/scapi-schemas.js.map +1 -1
- package/dist/esm/clients/slas-admin.d.ts +28 -0
- package/dist/esm/clients/slas-admin.js.map +1 -1
- package/dist/esm/clients/tls-dispatcher.d.ts +42 -0
- package/dist/esm/clients/tls-dispatcher.js +107 -0
- package/dist/esm/clients/tls-dispatcher.js.map +1 -0
- package/dist/esm/clients/webdav.d.ts +8 -1
- package/dist/esm/clients/webdav.js +5 -1
- package/dist/esm/clients/webdav.js.map +1 -1
- package/dist/esm/config/dw-json.d.ts +14 -0
- package/dist/esm/config/dw-json.js +3 -2
- package/dist/esm/config/dw-json.js.map +1 -1
- package/dist/esm/config/index.d.ts +2 -2
- package/dist/esm/config/index.js +1 -1
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/config/mapping.d.ts +1 -1
- package/dist/esm/config/mapping.js +20 -4
- package/dist/esm/config/mapping.js.map +1 -1
- package/dist/esm/config/resolved-config.d.ts +1 -3
- package/dist/esm/config/resolved-config.js +0 -8
- package/dist/esm/config/resolved-config.js.map +1 -1
- package/dist/esm/config/resolver.d.ts +1 -1
- package/dist/esm/config/resolver.js +20 -4
- package/dist/esm/config/resolver.js.map +1 -1
- package/dist/esm/config/sources/mobify-source.js +3 -2
- package/dist/esm/config/sources/mobify-source.js.map +1 -1
- package/dist/esm/config/sources/package-json-source.js +3 -1
- package/dist/esm/config/sources/package-json-source.js.map +1 -1
- package/dist/esm/config/types.d.ts +6 -18
- package/dist/{cjs/operations → esm}/docs/download.d.ts +1 -1
- package/dist/esm/{operations/docs → docs}/download.js +2 -2
- package/dist/esm/docs/download.js.map +1 -0
- package/dist/{cjs/operations → esm}/docs/index.d.ts +4 -4
- package/dist/esm/docs/index.js.map +1 -0
- package/dist/esm/docs/schema.js.map +1 -0
- package/dist/esm/docs/search.js.map +1 -0
- package/dist/esm/docs/types.js.map +1 -0
- package/dist/esm/index.d.ts +5 -10
- package/dist/esm/index.js +4 -8
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instance/index.d.ts +4 -0
- package/dist/esm/instance/index.js +6 -1
- package/dist/esm/instance/index.js.map +1 -1
- package/dist/esm/logging/index.d.ts +1 -1
- package/dist/esm/logging/logger.js +15 -0
- package/dist/esm/logging/logger.js.map +1 -1
- package/dist/esm/logging/types.d.ts +9 -0
- package/dist/esm/operations/logs/index.d.ts +65 -0
- package/dist/esm/operations/logs/index.js +73 -0
- package/dist/esm/operations/logs/index.js.map +1 -0
- package/dist/esm/operations/logs/list.d.ts +35 -0
- package/dist/esm/operations/logs/list.js +144 -0
- package/dist/esm/operations/logs/list.js.map +1 -0
- package/dist/esm/operations/logs/path-normalizer.d.ts +82 -0
- package/dist/esm/operations/logs/path-normalizer.js +190 -0
- package/dist/esm/operations/logs/path-normalizer.js.map +1 -0
- package/dist/esm/operations/logs/tail.d.ts +92 -0
- package/dist/esm/operations/logs/tail.js +525 -0
- package/dist/esm/operations/logs/tail.js.map +1 -0
- package/dist/esm/operations/logs/types.d.ts +132 -0
- package/dist/esm/operations/logs/types.js +7 -0
- package/dist/esm/operations/logs/types.js.map +1 -0
- package/dist/esm/operations/mrt/push.js +3 -0
- package/dist/esm/operations/mrt/push.js.map +1 -1
- package/dist/esm/operations/ods/index.d.ts +6 -0
- package/dist/esm/operations/ods/index.js +12 -0
- package/dist/esm/operations/ods/index.js.map +1 -0
- package/dist/esm/operations/ods/sandbox-lookup.d.ts +63 -0
- package/dist/esm/operations/ods/sandbox-lookup.js +130 -0
- package/dist/esm/operations/ods/sandbox-lookup.js.map +1 -0
- package/dist/{cjs/operations/scapi-schemas → esm/schemas}/collapse.d.ts +1 -1
- package/dist/esm/schemas/collapse.js.map +1 -0
- package/dist/esm/{operations/scapi-schemas → schemas}/index.d.ts +5 -5
- package/dist/esm/{operations/scapi-schemas → schemas}/index.js +5 -5
- package/dist/esm/schemas/index.js.map +1 -0
- package/dist/esm/test-utils/config-isolation.js +7 -0
- package/dist/esm/test-utils/config-isolation.js.map +1 -1
- package/package.json +28 -35
- package/dist/cjs/logger.d.ts +0 -66
- package/dist/cjs/logger.js +0 -80
- package/dist/cjs/logger.js.map +0 -1
- package/dist/cjs/operations/docs/download.js.map +0 -1
- package/dist/cjs/operations/docs/index.js.map +0 -1
- package/dist/cjs/operations/docs/schema.js.map +0 -1
- package/dist/cjs/operations/docs/search.js.map +0 -1
- package/dist/cjs/operations/docs/types.js.map +0 -1
- package/dist/cjs/operations/scapi-schemas/collapse.js.map +0 -1
- package/dist/cjs/operations/scapi-schemas/index.js.map +0 -1
- package/dist/cjs/operations/sites/index.d.ts +0 -56
- package/dist/cjs/operations/sites/index.js +0 -19
- package/dist/cjs/operations/sites/index.js.map +0 -1
- package/dist/cjs/platform/index.d.ts +0 -38
- package/dist/cjs/platform/index.js +0 -42
- package/dist/cjs/platform/index.js.map +0 -1
- package/dist/cjs/platform/mrt.d.ts +0 -19
- package/dist/cjs/platform/mrt.js +0 -22
- package/dist/cjs/platform/mrt.js.map +0 -1
- package/dist/cjs/platform/ods.d.ts +0 -17
- package/dist/cjs/platform/ods.js +0 -22
- package/dist/cjs/platform/ods.js.map +0 -1
- package/dist/esm/logger.d.ts +0 -66
- package/dist/esm/logger.js +0 -80
- package/dist/esm/logger.js.map +0 -1
- package/dist/esm/operations/docs/download.js.map +0 -1
- package/dist/esm/operations/docs/index.js.map +0 -1
- package/dist/esm/operations/docs/schema.js.map +0 -1
- package/dist/esm/operations/docs/search.js.map +0 -1
- package/dist/esm/operations/docs/types.js.map +0 -1
- package/dist/esm/operations/scapi-schemas/collapse.js.map +0 -1
- package/dist/esm/operations/scapi-schemas/index.js.map +0 -1
- package/dist/esm/operations/sites/index.d.ts +0 -56
- package/dist/esm/operations/sites/index.js +0 -67
- package/dist/esm/operations/sites/index.js.map +0 -1
- package/dist/esm/platform/index.d.ts +0 -38
- package/dist/esm/platform/index.js +0 -42
- package/dist/esm/platform/index.js.map +0 -1
- package/dist/esm/platform/mrt.d.ts +0 -19
- package/dist/esm/platform/mrt.js +0 -22
- package/dist/esm/platform/mrt.js.map +0 -1
- package/dist/esm/platform/ods.d.ts +0 -17
- package/dist/esm/platform/ods.js +0 -22
- package/dist/esm/platform/ods.js.map +0 -1
- /package/dist/cjs/{operations/docs → docs}/index.js +0 -0
- /package/dist/cjs/{operations/docs → docs}/schema.d.ts +0 -0
- /package/dist/cjs/{operations/docs → docs}/schema.js +0 -0
- /package/dist/cjs/{operations/docs → docs}/search.d.ts +0 -0
- /package/dist/cjs/{operations/docs → docs}/search.js +0 -0
- /package/dist/cjs/{operations/docs → docs}/types.d.ts +0 -0
- /package/dist/cjs/{operations/docs → docs}/types.js +0 -0
- /package/dist/cjs/{operations/scapi-schemas → schemas}/collapse.js +0 -0
- /package/dist/esm/{operations/docs → docs}/index.js +0 -0
- /package/dist/esm/{operations/docs → docs}/schema.d.ts +0 -0
- /package/dist/esm/{operations/docs → docs}/schema.js +0 -0
- /package/dist/esm/{operations/docs → docs}/search.d.ts +0 -0
- /package/dist/esm/{operations/docs → docs}/search.js +0 -0
- /package/dist/esm/{operations/docs → docs}/types.d.ts +0 -0
- /package/dist/esm/{operations/docs → docs}/types.js +0 -0
- /package/dist/esm/{operations/scapi-schemas → schemas}/collapse.js +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, Salesforce, Inc.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2
|
|
4
|
+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Log operations for B2C Commerce instances.
|
|
8
|
+
*
|
|
9
|
+
* This module provides functions for listing, tailing, and analyzing log files
|
|
10
|
+
* on B2C Commerce instances via WebDAV.
|
|
11
|
+
*
|
|
12
|
+
* @module operations/logs
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* List log files:
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { listLogFiles } from '@salesforce/b2c-tooling-sdk/operations/logs';
|
|
18
|
+
*
|
|
19
|
+
* const files = await listLogFiles(instance, {
|
|
20
|
+
* prefixes: ['error', 'customerror'],
|
|
21
|
+
* sortBy: 'date',
|
|
22
|
+
* sortOrder: 'desc'
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* for (const file of files) {
|
|
26
|
+
* console.log(`${file.name} (${file.size} bytes)`);
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* Tail logs in real-time:
|
|
32
|
+
* ```typescript
|
|
33
|
+
* import { tailLogs, createPathNormalizer } from '@salesforce/b2c-tooling-sdk/operations/logs';
|
|
34
|
+
*
|
|
35
|
+
* const normalizer = createPathNormalizer({ cartridgePath: './cartridges' });
|
|
36
|
+
*
|
|
37
|
+
* const { stop, done } = await tailLogs(instance, {
|
|
38
|
+
* prefixes: ['error', 'customerror'],
|
|
39
|
+
* pathNormalizer: normalizer,
|
|
40
|
+
* onEntry: (entry) => {
|
|
41
|
+
* console.log(`[${entry.file}] ${entry.level}: ${entry.message}`);
|
|
42
|
+
* },
|
|
43
|
+
* onError: (err) => console.error('Error:', err),
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* // Stop after 30 seconds
|
|
47
|
+
* setTimeout(() => stop(), 30000);
|
|
48
|
+
*
|
|
49
|
+
* await done;
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* Get recent logs (one-shot):
|
|
54
|
+
* ```typescript
|
|
55
|
+
* import { getRecentLogs } from '@salesforce/b2c-tooling-sdk/operations/logs';
|
|
56
|
+
*
|
|
57
|
+
* const entries = await getRecentLogs(instance, {
|
|
58
|
+
* prefixes: ['error'],
|
|
59
|
+
* maxEntries: 50
|
|
60
|
+
* });
|
|
61
|
+
*
|
|
62
|
+
* for (const entry of entries) {
|
|
63
|
+
* console.log(`[${entry.timestamp}] ${entry.message}`);
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
// List operations
|
|
68
|
+
export { extractPrefix, listLogFiles } from './list.js';
|
|
69
|
+
// Tail operations
|
|
70
|
+
export { aggregateLogEntries, getRecentLogs, parseLogEntry, splitLines, tailLogs } from './tail.js';
|
|
71
|
+
// Path normalization
|
|
72
|
+
export { createPathNormalizer, discoverAndCreateNormalizer, extractPaths, } from './path-normalizer.js';
|
|
73
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/operations/logs/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAaH,kBAAkB;AAClB,OAAO,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,WAAW,CAAC;AAEtD,kBAAkB;AAClB,OAAO,EAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAC,MAAM,WAAW,CAAC;AAElG,qBAAqB;AACrB,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,YAAY,GAEb,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log file listing operations.
|
|
3
|
+
*/
|
|
4
|
+
import type { B2CInstance } from '../../instance/index.js';
|
|
5
|
+
import type { ListLogsOptions, LogFile } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Extracts the log prefix from a filename.
|
|
8
|
+
*
|
|
9
|
+
* @param filename - Log file name (e.g., "error-blade1-20250125.log")
|
|
10
|
+
* @returns The prefix (e.g., "error") or "unknown"
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* extractPrefix("error-blade1-20250125.log") // "error"
|
|
14
|
+
* extractPrefix("customerror-blade1-20250125.log") // "customerror"
|
|
15
|
+
* extractPrefix("custom-mylog-blade1-20250125.log") // "custom-mylog"
|
|
16
|
+
*/
|
|
17
|
+
export declare function extractPrefix(filename: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Lists log files on a B2C Commerce instance.
|
|
20
|
+
*
|
|
21
|
+
* @param instance - B2C instance to list logs from
|
|
22
|
+
* @param options - Listing options (filters, sorting)
|
|
23
|
+
* @returns Array of log files
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // List all error and customerror logs
|
|
28
|
+
* const logs = await listLogFiles(instance, {
|
|
29
|
+
* prefixes: ['error', 'customerror'],
|
|
30
|
+
* sortBy: 'date',
|
|
31
|
+
* sortOrder: 'desc'
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function listLogFiles(instance: B2CInstance, options?: ListLogsOptions): Promise<LogFile[]>;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { getLogger } from '../../logging/logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Known log file prefixes in B2C Commerce.
|
|
4
|
+
* Used to extract the prefix from log file names.
|
|
5
|
+
*/
|
|
6
|
+
const LOG_PREFIXES = [
|
|
7
|
+
// Custom logs (must check first due to "custom" prefix)
|
|
8
|
+
'customdebug',
|
|
9
|
+
'custominfo',
|
|
10
|
+
'customwarn',
|
|
11
|
+
'customerror',
|
|
12
|
+
'customfatal',
|
|
13
|
+
// System logs
|
|
14
|
+
'error',
|
|
15
|
+
'warn',
|
|
16
|
+
'info',
|
|
17
|
+
'debug',
|
|
18
|
+
'fatal',
|
|
19
|
+
'api',
|
|
20
|
+
'deprecation',
|
|
21
|
+
'jobs',
|
|
22
|
+
'staging',
|
|
23
|
+
'quota',
|
|
24
|
+
'sql',
|
|
25
|
+
'service',
|
|
26
|
+
'syslog',
|
|
27
|
+
'security',
|
|
28
|
+
'analytics',
|
|
29
|
+
'migration',
|
|
30
|
+
// Custom named logs (format: custom-<name>-...)
|
|
31
|
+
'custom',
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* Extracts the log prefix from a filename.
|
|
35
|
+
*
|
|
36
|
+
* @param filename - Log file name (e.g., "error-blade1-20250125.log")
|
|
37
|
+
* @returns The prefix (e.g., "error") or "unknown"
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* extractPrefix("error-blade1-20250125.log") // "error"
|
|
41
|
+
* extractPrefix("customerror-blade1-20250125.log") // "customerror"
|
|
42
|
+
* extractPrefix("custom-mylog-blade1-20250125.log") // "custom-mylog"
|
|
43
|
+
*/
|
|
44
|
+
export function extractPrefix(filename) {
|
|
45
|
+
// Handle custom-<name> pattern (e.g., custom-mylog-blade1-...)
|
|
46
|
+
// Custom log names use word characters only (no dashes) to distinguish from hostname
|
|
47
|
+
const customMatch = filename.match(/^(custom-[a-zA-Z0-9_]+)-/);
|
|
48
|
+
if (customMatch) {
|
|
49
|
+
return customMatch[1];
|
|
50
|
+
}
|
|
51
|
+
// Check known prefixes (order matters - longer matches first)
|
|
52
|
+
for (const prefix of LOG_PREFIXES) {
|
|
53
|
+
if (filename.startsWith(`${prefix}-`) || filename.startsWith(`${prefix}_`)) {
|
|
54
|
+
return prefix;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Fallback: extract first segment before dash or underscore
|
|
58
|
+
const match = filename.match(/^([a-zA-Z]+)[-_]/);
|
|
59
|
+
return match ? match[1] : 'unknown';
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Lists log files on a B2C Commerce instance.
|
|
63
|
+
*
|
|
64
|
+
* @param instance - B2C instance to list logs from
|
|
65
|
+
* @param options - Listing options (filters, sorting)
|
|
66
|
+
* @returns Array of log files
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* // List all error and customerror logs
|
|
71
|
+
* const logs = await listLogFiles(instance, {
|
|
72
|
+
* prefixes: ['error', 'customerror'],
|
|
73
|
+
* sortBy: 'date',
|
|
74
|
+
* sortOrder: 'desc'
|
|
75
|
+
* });
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export async function listLogFiles(instance, options = {}) {
|
|
79
|
+
const logger = getLogger();
|
|
80
|
+
const { prefixes, sortBy = 'date', sortOrder = 'desc' } = options;
|
|
81
|
+
logger.debug({ prefixes, sortBy, sortOrder }, 'Listing log files');
|
|
82
|
+
// Get all files from Logs directory
|
|
83
|
+
const entries = await instance.webdav.propfind('Logs', '1');
|
|
84
|
+
// Filter to only log files (not directories, not the Logs directory itself)
|
|
85
|
+
const logFiles = entries
|
|
86
|
+
.filter((entry) => {
|
|
87
|
+
// Skip directories
|
|
88
|
+
if (entry.isCollection)
|
|
89
|
+
return false;
|
|
90
|
+
// Skip if not a .log file
|
|
91
|
+
const name = entry.displayName || entry.href.split('/').pop() || '';
|
|
92
|
+
if (!name.endsWith('.log'))
|
|
93
|
+
return false;
|
|
94
|
+
return true;
|
|
95
|
+
})
|
|
96
|
+
.map((entry) => {
|
|
97
|
+
const name = entry.displayName || entry.href.split('/').pop() || '';
|
|
98
|
+
const prefix = extractPrefix(name);
|
|
99
|
+
return {
|
|
100
|
+
name,
|
|
101
|
+
prefix,
|
|
102
|
+
size: entry.contentLength || 0,
|
|
103
|
+
lastModified: entry.lastModified || new Date(0),
|
|
104
|
+
path: `Logs/${name}`,
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
// Filter by prefix if specified
|
|
108
|
+
let filtered = logFiles;
|
|
109
|
+
if (prefixes && prefixes.length > 0) {
|
|
110
|
+
const prefixSet = new Set(prefixes.map((p) => p.toLowerCase()));
|
|
111
|
+
filtered = logFiles.filter((file) => {
|
|
112
|
+
// Check exact prefix match
|
|
113
|
+
if (prefixSet.has(file.prefix.toLowerCase()))
|
|
114
|
+
return true;
|
|
115
|
+
// Also check if the prefix starts with any of the specified prefixes
|
|
116
|
+
// This handles cases like "custom-mylog" matching "custom"
|
|
117
|
+
for (const p of prefixSet) {
|
|
118
|
+
if (file.prefix.toLowerCase().startsWith(p))
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
return false;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// Sort the results
|
|
125
|
+
filtered.sort((a, b) => {
|
|
126
|
+
let comparison = 0;
|
|
127
|
+
switch (sortBy) {
|
|
128
|
+
case 'name':
|
|
129
|
+
comparison = a.name.localeCompare(b.name);
|
|
130
|
+
break;
|
|
131
|
+
case 'size':
|
|
132
|
+
comparison = a.size - b.size;
|
|
133
|
+
break;
|
|
134
|
+
case 'date':
|
|
135
|
+
default:
|
|
136
|
+
comparison = a.lastModified.getTime() - b.lastModified.getTime();
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
return sortOrder === 'desc' ? -comparison : comparison;
|
|
140
|
+
});
|
|
141
|
+
logger.debug({ count: filtered.length }, `Found ${filtered.length} log files`);
|
|
142
|
+
return filtered;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/operations/logs/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { type CartridgeMapping } from '../code/cartridges.js';
|
|
2
|
+
/**
|
|
3
|
+
* Options for creating a path normalizer.
|
|
4
|
+
*/
|
|
5
|
+
export interface PathNormalizerOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Local path to the cartridges directory (simple mode).
|
|
8
|
+
* All cartridge references will be prefixed with this path.
|
|
9
|
+
* @example "./cartridges" or "/Users/dev/project/cartridges"
|
|
10
|
+
*/
|
|
11
|
+
cartridgePath?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Discovered cartridge mappings (precise mode).
|
|
14
|
+
* Each cartridge is mapped to its actual local path.
|
|
15
|
+
* Takes precedence over cartridgePath for known cartridges.
|
|
16
|
+
*/
|
|
17
|
+
cartridges?: CartridgeMapping[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a path normalizer function for converting remote cartridge paths
|
|
21
|
+
* to local paths in log messages.
|
|
22
|
+
*
|
|
23
|
+
* Supports two modes:
|
|
24
|
+
* 1. **Cartridge mappings** (precise): Uses discovered cartridges to map each
|
|
25
|
+
* cartridge name to its actual local path. Best for projects with cartridges
|
|
26
|
+
* in different locations.
|
|
27
|
+
* 2. **Cartridge path** (simple): Prefixes all paths with a base directory.
|
|
28
|
+
* Best when all cartridges are in a single directory.
|
|
29
|
+
*
|
|
30
|
+
* @param options - Normalizer options
|
|
31
|
+
* @returns Function that normalizes paths in a message string, or undefined if no options provided
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* // Using discovered cartridges (recommended)
|
|
36
|
+
* const cartridges = findCartridges('./my-project');
|
|
37
|
+
* const normalize = createPathNormalizer({ cartridges });
|
|
38
|
+
*
|
|
39
|
+
* // Using simple cartridge path
|
|
40
|
+
* const normalize = createPathNormalizer({ cartridgePath: './cartridges' });
|
|
41
|
+
*
|
|
42
|
+
* // Input: "(app_storefront/cartridge/controllers/Home.js:45)"
|
|
43
|
+
* // Output: "(./cartridges/app_storefront/cartridge/controllers/Home.js:45)"
|
|
44
|
+
* const normalized = normalize(logMessage);
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function createPathNormalizer(options: PathNormalizerOptions): ((message: string) => string) | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Discovers cartridges and creates a path normalizer automatically.
|
|
50
|
+
*
|
|
51
|
+
* This is a convenience function that combines `findCartridges` with
|
|
52
|
+
* `createPathNormalizer` for easy setup. Cartridge paths are converted
|
|
53
|
+
* to relative paths from the current working directory.
|
|
54
|
+
*
|
|
55
|
+
* @param directory - Directory to search for cartridges (defaults to cwd)
|
|
56
|
+
* @returns Path normalizer function, or undefined if no cartridges found
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* // Auto-discover cartridges from current directory
|
|
61
|
+
* const normalize = discoverAndCreateNormalizer();
|
|
62
|
+
*
|
|
63
|
+
* // Auto-discover from specific directory
|
|
64
|
+
* const normalize = discoverAndCreateNormalizer('./my-project');
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function discoverAndCreateNormalizer(directory?: string): ((message: string) => string) | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Extracts all cartridge paths from a message.
|
|
70
|
+
*
|
|
71
|
+
* Useful for testing or analysis of log messages.
|
|
72
|
+
*
|
|
73
|
+
* @param message - Log message to extract paths from
|
|
74
|
+
* @returns Array of extracted paths
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const paths = extractPaths("Error at (app_storefront/cartridge/controllers/Home.js:45)");
|
|
79
|
+
* // Returns: ["app_storefront/cartridge/controllers/Home.js:45"]
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare function extractPaths(message: string): string[];
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, Salesforce, Inc.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2
|
|
4
|
+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Path normalization for B2C Commerce log files.
|
|
8
|
+
*
|
|
9
|
+
* Converts remote cartridge paths in log messages to local paths
|
|
10
|
+
* for IDE click-to-open functionality.
|
|
11
|
+
*/
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
import { findCartridges } from '../code/cartridges.js';
|
|
14
|
+
/**
|
|
15
|
+
* Patterns for matching cartridge paths in various contexts.
|
|
16
|
+
*
|
|
17
|
+
* B2C Commerce log files can contain paths in various formats:
|
|
18
|
+
* - In parentheses: (app_storefront/cartridge/controllers/Home.js:45)
|
|
19
|
+
* - In quotes: 'app_storefront/cartridge/controllers/Home.js:45'
|
|
20
|
+
* - In stack traces: at app_storefront/cartridge/controllers/Home.js:45
|
|
21
|
+
* - Plain paths: app_storefront/cartridge/controllers/Home.js:45
|
|
22
|
+
*/
|
|
23
|
+
const PATH_PATTERNS = [
|
|
24
|
+
// Parentheses: (cartridge_name/cartridge/path/file.js:line)
|
|
25
|
+
{
|
|
26
|
+
pattern: /\(([a-zA-Z0-9_-]+\/cartridge\/[^)]+)\)/g,
|
|
27
|
+
context: 'parentheses',
|
|
28
|
+
extractPath: (match) => match[1],
|
|
29
|
+
buildReplacement: (match, normalizedPath) => `(${normalizedPath})`,
|
|
30
|
+
},
|
|
31
|
+
// Single quotes: 'cartridge_name/cartridge/path/file.js:line'
|
|
32
|
+
{
|
|
33
|
+
pattern: /'([a-zA-Z0-9_-]+\/cartridge\/[^']+)'/g,
|
|
34
|
+
context: 'quotes',
|
|
35
|
+
extractPath: (match) => match[1],
|
|
36
|
+
buildReplacement: (match, normalizedPath) => `'${normalizedPath}'`,
|
|
37
|
+
},
|
|
38
|
+
// Double quotes: "cartridge_name/cartridge/path/file.js:line"
|
|
39
|
+
{
|
|
40
|
+
pattern: /"([a-zA-Z0-9_-]+\/cartridge\/[^"]+)"/g,
|
|
41
|
+
context: 'quotes',
|
|
42
|
+
extractPath: (match) => match[1],
|
|
43
|
+
buildReplacement: (match, normalizedPath) => `"${normalizedPath}"`,
|
|
44
|
+
},
|
|
45
|
+
// Stack trace: at cartridge_name/cartridge/path/file.js:line
|
|
46
|
+
{
|
|
47
|
+
pattern: /at\s+([a-zA-Z0-9_-]+\/cartridge\/[^\s]+)/g,
|
|
48
|
+
context: 'stacktrace',
|
|
49
|
+
extractPath: (match) => match[1],
|
|
50
|
+
buildReplacement: (match, normalizedPath) => `at ${normalizedPath}`,
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
/**
|
|
54
|
+
* Creates a path normalizer function for converting remote cartridge paths
|
|
55
|
+
* to local paths in log messages.
|
|
56
|
+
*
|
|
57
|
+
* Supports two modes:
|
|
58
|
+
* 1. **Cartridge mappings** (precise): Uses discovered cartridges to map each
|
|
59
|
+
* cartridge name to its actual local path. Best for projects with cartridges
|
|
60
|
+
* in different locations.
|
|
61
|
+
* 2. **Cartridge path** (simple): Prefixes all paths with a base directory.
|
|
62
|
+
* Best when all cartridges are in a single directory.
|
|
63
|
+
*
|
|
64
|
+
* @param options - Normalizer options
|
|
65
|
+
* @returns Function that normalizes paths in a message string, or undefined if no options provided
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* // Using discovered cartridges (recommended)
|
|
70
|
+
* const cartridges = findCartridges('./my-project');
|
|
71
|
+
* const normalize = createPathNormalizer({ cartridges });
|
|
72
|
+
*
|
|
73
|
+
* // Using simple cartridge path
|
|
74
|
+
* const normalize = createPathNormalizer({ cartridgePath: './cartridges' });
|
|
75
|
+
*
|
|
76
|
+
* // Input: "(app_storefront/cartridge/controllers/Home.js:45)"
|
|
77
|
+
* // Output: "(./cartridges/app_storefront/cartridge/controllers/Home.js:45)"
|
|
78
|
+
* const normalized = normalize(logMessage);
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export function createPathNormalizer(options) {
|
|
82
|
+
const { cartridgePath, cartridges } = options;
|
|
83
|
+
// If no options provided, return undefined
|
|
84
|
+
if (!cartridgePath && (!cartridges || cartridges.length === 0)) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
// Build a map of cartridge names to their local paths
|
|
88
|
+
const cartridgeMap = new Map();
|
|
89
|
+
if (cartridges) {
|
|
90
|
+
for (const c of cartridges) {
|
|
91
|
+
cartridgeMap.set(c.name, c.src);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Normalize the fallback cartridge path (remove trailing slash)
|
|
95
|
+
const normalizedCartridgePath = cartridgePath?.replace(/\/+$/, '');
|
|
96
|
+
return (message) => {
|
|
97
|
+
let result = message;
|
|
98
|
+
for (const { pattern, extractPath, buildReplacement } of PATH_PATTERNS) {
|
|
99
|
+
// Create a fresh regex for each message (stateful with /g flag)
|
|
100
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
101
|
+
result = result.replace(regex, (...args) => {
|
|
102
|
+
// The full match is the first arg, captured groups follow
|
|
103
|
+
const match = args;
|
|
104
|
+
const remotePath = extractPath(match);
|
|
105
|
+
// Extract cartridge name from the path (first segment before /cartridge/)
|
|
106
|
+
const cartridgeName = remotePath.split('/')[0];
|
|
107
|
+
const restOfPath = remotePath.substring(cartridgeName.length);
|
|
108
|
+
// Try to find the cartridge in our mappings
|
|
109
|
+
const localCartridgePath = cartridgeMap.get(cartridgeName);
|
|
110
|
+
let localPath;
|
|
111
|
+
if (localCartridgePath) {
|
|
112
|
+
// Use the discovered cartridge's actual path
|
|
113
|
+
localPath = `${localCartridgePath}${restOfPath}`;
|
|
114
|
+
}
|
|
115
|
+
else if (normalizedCartridgePath) {
|
|
116
|
+
// Fall back to simple prefix mode
|
|
117
|
+
localPath = `${normalizedCartridgePath}/${remotePath}`;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// No mapping and no fallback - return original
|
|
121
|
+
return match[0];
|
|
122
|
+
}
|
|
123
|
+
return buildReplacement(match, localPath);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Discovers cartridges and creates a path normalizer automatically.
|
|
131
|
+
*
|
|
132
|
+
* This is a convenience function that combines `findCartridges` with
|
|
133
|
+
* `createPathNormalizer` for easy setup. Cartridge paths are converted
|
|
134
|
+
* to relative paths from the current working directory.
|
|
135
|
+
*
|
|
136
|
+
* @param directory - Directory to search for cartridges (defaults to cwd)
|
|
137
|
+
* @returns Path normalizer function, or undefined if no cartridges found
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* // Auto-discover cartridges from current directory
|
|
142
|
+
* const normalize = discoverAndCreateNormalizer();
|
|
143
|
+
*
|
|
144
|
+
* // Auto-discover from specific directory
|
|
145
|
+
* const normalize = discoverAndCreateNormalizer('./my-project');
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
export function discoverAndCreateNormalizer(directory) {
|
|
149
|
+
const searchDir = directory ?? process.cwd();
|
|
150
|
+
const cwd = process.cwd();
|
|
151
|
+
const cartridges = findCartridges(searchDir);
|
|
152
|
+
if (cartridges.length === 0) {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
// Convert absolute paths to relative paths from cwd
|
|
156
|
+
const relativeCartridges = cartridges.map((c) => ({
|
|
157
|
+
...c,
|
|
158
|
+
src: './' + path.relative(cwd, c.src),
|
|
159
|
+
}));
|
|
160
|
+
return createPathNormalizer({ cartridges: relativeCartridges });
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Extracts all cartridge paths from a message.
|
|
164
|
+
*
|
|
165
|
+
* Useful for testing or analysis of log messages.
|
|
166
|
+
*
|
|
167
|
+
* @param message - Log message to extract paths from
|
|
168
|
+
* @returns Array of extracted paths
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* ```typescript
|
|
172
|
+
* const paths = extractPaths("Error at (app_storefront/cartridge/controllers/Home.js:45)");
|
|
173
|
+
* // Returns: ["app_storefront/cartridge/controllers/Home.js:45"]
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
export function extractPaths(message) {
|
|
177
|
+
const paths = [];
|
|
178
|
+
for (const { pattern, extractPath } of PATH_PATTERNS) {
|
|
179
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
180
|
+
let match;
|
|
181
|
+
while ((match = regex.exec(message)) !== null) {
|
|
182
|
+
const path = extractPath(match);
|
|
183
|
+
if (!paths.includes(path)) {
|
|
184
|
+
paths.push(path);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return paths;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=path-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-normalizer.js","sourceRoot":"","sources":["../../../../src/operations/logs/path-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log tailing operations for B2C Commerce.
|
|
3
|
+
*/
|
|
4
|
+
import type { B2CInstance } from '../../instance/index.js';
|
|
5
|
+
import type { GetRecentLogsOptions, LogEntry, TailLogsOptions, TailLogsResult } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Parses the first line of a log entry to extract timestamp, level, and message.
|
|
8
|
+
*
|
|
9
|
+
* Expected format: [timestamp GMT] LEVEL context - message
|
|
10
|
+
* Example: [2025-01-25 10:30:45.123 GMT] ERROR PipelineCallServlet|... - Error message
|
|
11
|
+
*
|
|
12
|
+
* The message field will contain:
|
|
13
|
+
* - The content portion from the first line (after LEVEL)
|
|
14
|
+
* - Plus any continuation lines (stack traces, etc.)
|
|
15
|
+
*
|
|
16
|
+
* @param firstLine - First line of the log entry
|
|
17
|
+
* @param file - File name the entry came from
|
|
18
|
+
* @param fullMessage - Complete raw message including all lines
|
|
19
|
+
* @param pathNormalizer - Optional function to normalize paths in the message
|
|
20
|
+
* @returns Parsed log entry
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseLogEntry(firstLine: string, file: string, fullMessage: string, pathNormalizer?: (msg: string) => string): LogEntry;
|
|
23
|
+
/**
|
|
24
|
+
* Splits content into lines, handling incomplete lines at boundaries.
|
|
25
|
+
* Uses TextDecoder with stream mode for proper UTF-8 multi-byte character handling.
|
|
26
|
+
*
|
|
27
|
+
* @param content - ArrayBuffer content
|
|
28
|
+
* @param decoder - TextDecoder instance (should be reused for streaming)
|
|
29
|
+
* @param isComplete - Whether this is the final chunk (flush decoder)
|
|
30
|
+
* @returns Array of complete lines (without trailing incomplete line)
|
|
31
|
+
*/
|
|
32
|
+
export declare function splitLines(content: ArrayBuffer, decoder: InstanceType<typeof TextDecoder>, isComplete?: boolean): string[];
|
|
33
|
+
/**
|
|
34
|
+
* Aggregates lines into multi-line log entries.
|
|
35
|
+
*
|
|
36
|
+
* B2C log entries can span multiple lines. A new entry starts when a line
|
|
37
|
+
* begins with a timestamp pattern: [YYYY-MM-DD HH:MM:SS.mmm GMT]
|
|
38
|
+
*
|
|
39
|
+
* @param lines - Array of individual lines
|
|
40
|
+
* @param pendingLines - Lines carried over from previous chunk (incomplete entry)
|
|
41
|
+
* @returns Object with complete entries and any pending lines for next chunk
|
|
42
|
+
*/
|
|
43
|
+
export declare function aggregateLogEntries(lines: string[], pendingLines?: string[]): {
|
|
44
|
+
entries: string[][];
|
|
45
|
+
pending: string[];
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Tails log files on a B2C Commerce instance.
|
|
49
|
+
*
|
|
50
|
+
* Continuously polls for new log content using HTTP Range requests for efficiency.
|
|
51
|
+
* Calls the onEntry callback for each new log line.
|
|
52
|
+
*
|
|
53
|
+
* @param instance - B2C instance to tail logs from
|
|
54
|
+
* @param options - Tailing options (filters, callbacks, polling interval)
|
|
55
|
+
* @returns Tail result with stop() control and done promise
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const result = await tailLogs(instance, {
|
|
60
|
+
* prefixes: ['error', 'customerror'],
|
|
61
|
+
* onEntry: (entry) => console.log(`[${entry.file}] ${entry.message}`),
|
|
62
|
+
* onError: (err) => console.error('Tail error:', err),
|
|
63
|
+
* });
|
|
64
|
+
*
|
|
65
|
+
* // Stop after 10 seconds
|
|
66
|
+
* setTimeout(() => result.stop(), 10000);
|
|
67
|
+
*
|
|
68
|
+
* // Wait for tailing to complete
|
|
69
|
+
* await result.done;
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function tailLogs(instance: B2CInstance, options?: TailLogsOptions): Promise<TailLogsResult>;
|
|
73
|
+
/**
|
|
74
|
+
* Gets recent log entries (one-shot retrieval).
|
|
75
|
+
*
|
|
76
|
+
* Useful for MCP server integration or programmatic access without continuous tailing.
|
|
77
|
+
* Reads the tail end of log files and returns parsed entries.
|
|
78
|
+
*
|
|
79
|
+
* @param instance - B2C instance to get logs from
|
|
80
|
+
* @param options - Retrieval options
|
|
81
|
+
* @returns Array of recent log entries
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* // Get the last 50 error entries
|
|
86
|
+
* const entries = await getRecentLogs(instance, {
|
|
87
|
+
* prefixes: ['error'],
|
|
88
|
+
* maxEntries: 50
|
|
89
|
+
* });
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export declare function getRecentLogs(instance: B2CInstance, options?: GetRecentLogsOptions): Promise<LogEntry[]>;
|