@salesforce/b2c-tooling-sdk 0.0.8 → 0.2.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/index.d.ts +2 -0
- package/dist/cjs/auth/index.js +2 -0
- package/dist/cjs/auth/index.js.map +1 -1
- package/dist/cjs/auth/middleware.d.ts +196 -0
- package/dist/cjs/auth/middleware.js +190 -0
- package/dist/cjs/auth/middleware.js.map +1 -0
- package/dist/cjs/auth/oauth.js +21 -9
- package/dist/cjs/auth/oauth.js.map +1 -1
- package/dist/cjs/cli/base-command.d.ts +15 -0
- package/dist/cjs/cli/base-command.js +58 -2
- package/dist/cjs/cli/base-command.js.map +1 -1
- package/dist/cjs/cli/hooks.d.ts +98 -5
- package/dist/cjs/cli/hooks.js.map +1 -1
- package/dist/cjs/cli/instance-command.d.ts +1 -0
- package/dist/cjs/cli/mrt-command.d.ts +2 -1
- package/dist/cjs/cli/mrt-command.js +3 -2
- package/dist/cjs/cli/mrt-command.js.map +1 -1
- package/dist/cjs/cli/oauth-command.d.ts +1 -0
- package/dist/cjs/cli/oauth-command.js +6 -0
- package/dist/cjs/cli/oauth-command.js.map +1 -1
- package/dist/cjs/cli/ods-command.d.ts +1 -0
- package/dist/cjs/cli/webdav-command.d.ts +1 -0
- package/dist/cjs/clients/cdn-zones.d.ts +154 -0
- package/dist/cjs/clients/cdn-zones.generated.d.ts +8330 -0
- package/dist/cjs/clients/cdn-zones.generated.js +6 -0
- package/dist/cjs/clients/cdn-zones.generated.js.map +1 -0
- package/dist/cjs/clients/cdn-zones.js +100 -0
- package/dist/cjs/clients/cdn-zones.js.map +1 -0
- package/dist/cjs/clients/error-utils.d.ts +35 -0
- package/dist/cjs/clients/error-utils.js +69 -0
- package/dist/cjs/clients/error-utils.js.map +1 -0
- package/dist/cjs/clients/index.d.ts +11 -2
- package/dist/cjs/clients/index.js +8 -1
- package/dist/cjs/clients/index.js.map +1 -1
- package/dist/cjs/clients/middleware-registry.d.ts +1 -1
- package/dist/cjs/clients/middleware-registry.js.map +1 -1
- package/dist/cjs/clients/middleware.d.ts +25 -0
- package/dist/cjs/clients/middleware.js +16 -10
- package/dist/cjs/clients/middleware.js.map +1 -1
- package/dist/cjs/clients/mrt-b2c.d.ts +114 -0
- package/dist/cjs/clients/mrt-b2c.generated.d.ts +176 -0
- package/dist/cjs/clients/mrt-b2c.generated.js +6 -0
- package/dist/cjs/clients/mrt-b2c.generated.js.map +1 -0
- package/dist/cjs/clients/mrt-b2c.js +86 -0
- package/dist/cjs/clients/mrt-b2c.js.map +1 -0
- package/dist/cjs/clients/scapi-schemas.d.ts +132 -0
- package/dist/cjs/clients/scapi-schemas.generated.d.ts +328 -0
- package/dist/cjs/clients/scapi-schemas.generated.js +6 -0
- package/dist/cjs/clients/scapi-schemas.generated.js.map +1 -0
- package/dist/cjs/clients/scapi-schemas.js +95 -0
- package/dist/cjs/clients/scapi-schemas.js.map +1 -0
- package/dist/cjs/clients/user-agent.d.ts +43 -0
- package/dist/cjs/clients/user-agent.js +87 -0
- package/dist/cjs/clients/user-agent.js.map +1 -0
- package/dist/cjs/config/dw-json.d.ts +6 -0
- package/dist/cjs/config/dw-json.js.map +1 -1
- package/dist/cjs/config/mapping.js +3 -0
- package/dist/cjs/config/mapping.js.map +1 -1
- package/dist/cjs/config/resolver.d.ts +2 -1
- package/dist/cjs/config/resolver.js +14 -7
- package/dist/cjs/config/resolver.js.map +1 -1
- package/dist/cjs/config/sources/dw-json-source.d.ts +1 -0
- package/dist/cjs/config/sources/dw-json-source.js +1 -0
- package/dist/cjs/config/sources/dw-json-source.js.map +1 -1
- package/dist/cjs/config/sources/index.d.ts +1 -0
- package/dist/cjs/config/sources/index.js +1 -0
- package/dist/cjs/config/sources/index.js.map +1 -1
- package/dist/cjs/config/sources/mobify-source.d.ts +1 -0
- package/dist/cjs/config/sources/mobify-source.js +1 -0
- package/dist/cjs/config/sources/mobify-source.js.map +1 -1
- package/dist/cjs/config/sources/package-json-source.d.ts +14 -0
- package/dist/cjs/config/sources/package-json-source.js +86 -0
- package/dist/cjs/config/sources/package-json-source.js.map +1 -0
- package/dist/cjs/config/types.d.ts +14 -0
- package/dist/cjs/index.d.ts +3 -2
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/operations/code/deploy.js +9 -3
- package/dist/cjs/operations/code/deploy.js.map +1 -1
- package/dist/cjs/operations/mrt/access-control.d.ts +192 -0
- package/dist/cjs/operations/mrt/access-control.js +152 -0
- package/dist/cjs/operations/mrt/access-control.js.map +1 -0
- package/dist/cjs/operations/mrt/b2c-config.d.ts +201 -0
- package/dist/cjs/operations/mrt/b2c-config.js +195 -0
- package/dist/cjs/operations/mrt/b2c-config.js.map +1 -0
- package/dist/cjs/operations/mrt/cache.d.ts +80 -0
- package/dist/cjs/operations/mrt/cache.js +65 -0
- package/dist/cjs/operations/mrt/cache.js.map +1 -0
- package/dist/cjs/operations/mrt/deployment.d.ts +157 -0
- package/dist/cjs/operations/mrt/deployment.js +109 -0
- package/dist/cjs/operations/mrt/deployment.js.map +1 -0
- package/dist/cjs/operations/mrt/env.d.ts +141 -0
- package/dist/cjs/operations/mrt/env.js +119 -0
- package/dist/cjs/operations/mrt/env.js.map +1 -1
- package/dist/cjs/operations/mrt/index.d.ts +24 -4
- package/dist/cjs/operations/mrt/index.js +23 -3
- package/dist/cjs/operations/mrt/index.js.map +1 -1
- package/dist/cjs/operations/mrt/member.d.ts +281 -0
- package/dist/cjs/operations/mrt/member.js +244 -0
- package/dist/cjs/operations/mrt/member.js.map +1 -0
- package/dist/cjs/operations/mrt/notification.d.ts +252 -0
- package/dist/cjs/operations/mrt/notification.js +206 -0
- package/dist/cjs/operations/mrt/notification.js.map +1 -0
- package/dist/cjs/operations/mrt/organization.d.ts +80 -0
- package/dist/cjs/operations/mrt/organization.js +53 -0
- package/dist/cjs/operations/mrt/organization.js.map +1 -0
- package/dist/cjs/operations/mrt/project.d.ts +261 -0
- package/dist/cjs/operations/mrt/project.js +232 -0
- package/dist/cjs/operations/mrt/project.js.map +1 -0
- package/dist/cjs/operations/mrt/push.d.ts +122 -8
- package/dist/cjs/operations/mrt/push.js +83 -10
- package/dist/cjs/operations/mrt/push.js.map +1 -1
- package/dist/cjs/operations/mrt/redirect.d.ts +337 -0
- package/dist/cjs/operations/mrt/redirect.js +256 -0
- package/dist/cjs/operations/mrt/redirect.js.map +1 -0
- package/dist/cjs/operations/mrt/user.d.ts +135 -0
- package/dist/cjs/operations/mrt/user.js +153 -0
- package/dist/cjs/operations/mrt/user.js.map +1 -0
- package/dist/cjs/operations/scapi-schemas/collapse.d.ts +150 -0
- package/dist/cjs/operations/scapi-schemas/collapse.js +180 -0
- package/dist/cjs/operations/scapi-schemas/collapse.js.map +1 -0
- package/dist/cjs/operations/scapi-schemas/index.d.ts +53 -0
- package/dist/cjs/operations/scapi-schemas/index.js +59 -0
- package/dist/cjs/operations/scapi-schemas/index.js.map +1 -0
- package/dist/cjs/skills/agents.d.ts +41 -0
- package/dist/cjs/skills/agents.js +159 -0
- package/dist/cjs/skills/agents.js.map +1 -0
- package/dist/cjs/skills/github.d.ts +47 -0
- package/dist/cjs/skills/github.js +246 -0
- package/dist/cjs/skills/github.js.map +1 -0
- package/dist/cjs/skills/index.d.ts +42 -0
- package/dist/cjs/skills/index.js +14 -0
- package/dist/cjs/skills/index.js.map +1 -0
- package/dist/cjs/skills/installer.d.ts +34 -0
- package/dist/cjs/skills/installer.js +181 -0
- package/dist/cjs/skills/installer.js.map +1 -0
- package/dist/cjs/skills/parser.d.ts +39 -0
- package/dist/cjs/skills/parser.js +131 -0
- package/dist/cjs/skills/parser.js.map +1 -0
- package/dist/cjs/skills/types.d.ts +134 -0
- package/dist/cjs/skills/types.js +7 -0
- package/dist/cjs/skills/types.js.map +1 -0
- package/dist/cjs/test-utils/config-isolation.d.ts +2 -0
- package/dist/cjs/test-utils/config-isolation.js +41 -0
- package/dist/cjs/test-utils/config-isolation.js.map +1 -0
- package/dist/cjs/test-utils/index.d.ts +1 -0
- package/dist/cjs/test-utils/index.js +7 -0
- package/dist/cjs/test-utils/index.js.map +1 -0
- package/dist/cjs/version.d.ts +14 -0
- package/dist/cjs/version.js +29 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/esm/auth/index.d.ts +2 -0
- package/dist/esm/auth/index.js +2 -0
- package/dist/esm/auth/index.js.map +1 -1
- package/dist/esm/auth/middleware.d.ts +196 -0
- package/dist/esm/auth/middleware.js +190 -0
- package/dist/esm/auth/middleware.js.map +1 -0
- package/dist/esm/auth/oauth.js +21 -9
- package/dist/esm/auth/oauth.js.map +1 -1
- package/dist/esm/cli/base-command.d.ts +15 -0
- package/dist/esm/cli/base-command.js +58 -2
- package/dist/esm/cli/base-command.js.map +1 -1
- package/dist/esm/cli/hooks.d.ts +98 -5
- package/dist/esm/cli/hooks.js.map +1 -1
- package/dist/esm/cli/instance-command.d.ts +1 -0
- package/dist/esm/cli/mrt-command.d.ts +2 -1
- package/dist/esm/cli/mrt-command.js +3 -2
- package/dist/esm/cli/mrt-command.js.map +1 -1
- package/dist/esm/cli/oauth-command.d.ts +1 -0
- package/dist/esm/cli/oauth-command.js +6 -0
- package/dist/esm/cli/oauth-command.js.map +1 -1
- package/dist/esm/cli/ods-command.d.ts +1 -0
- package/dist/esm/cli/webdav-command.d.ts +1 -0
- package/dist/esm/clients/cdn-zones.d.ts +154 -0
- package/dist/esm/clients/cdn-zones.generated.d.ts +8330 -0
- package/dist/esm/clients/cdn-zones.generated.js +6 -0
- package/dist/esm/clients/cdn-zones.generated.js.map +1 -0
- package/dist/esm/clients/cdn-zones.js +100 -0
- package/dist/esm/clients/cdn-zones.js.map +1 -0
- package/dist/esm/clients/error-utils.d.ts +35 -0
- package/dist/esm/clients/error-utils.js +69 -0
- package/dist/esm/clients/error-utils.js.map +1 -0
- package/dist/esm/clients/index.d.ts +11 -2
- package/dist/esm/clients/index.js +8 -1
- package/dist/esm/clients/index.js.map +1 -1
- package/dist/esm/clients/middleware-registry.d.ts +1 -1
- package/dist/esm/clients/middleware-registry.js.map +1 -1
- package/dist/esm/clients/middleware.d.ts +25 -0
- package/dist/esm/clients/middleware.js +16 -10
- package/dist/esm/clients/middleware.js.map +1 -1
- package/dist/esm/clients/mrt-b2c.d.ts +114 -0
- package/dist/esm/clients/mrt-b2c.generated.d.ts +176 -0
- package/dist/esm/clients/mrt-b2c.generated.js +6 -0
- package/dist/esm/clients/mrt-b2c.generated.js.map +1 -0
- package/dist/esm/clients/mrt-b2c.js +86 -0
- package/dist/esm/clients/mrt-b2c.js.map +1 -0
- package/dist/esm/clients/scapi-schemas.d.ts +132 -0
- package/dist/esm/clients/scapi-schemas.generated.d.ts +328 -0
- package/dist/esm/clients/scapi-schemas.generated.js +6 -0
- package/dist/esm/clients/scapi-schemas.generated.js.map +1 -0
- package/dist/esm/clients/scapi-schemas.js +95 -0
- package/dist/esm/clients/scapi-schemas.js.map +1 -0
- package/dist/esm/clients/user-agent.d.ts +43 -0
- package/dist/esm/clients/user-agent.js +87 -0
- package/dist/esm/clients/user-agent.js.map +1 -0
- package/dist/esm/config/dw-json.d.ts +6 -0
- package/dist/esm/config/dw-json.js.map +1 -1
- package/dist/esm/config/mapping.js +3 -0
- package/dist/esm/config/mapping.js.map +1 -1
- package/dist/esm/config/resolver.d.ts +2 -1
- package/dist/esm/config/resolver.js +14 -7
- package/dist/esm/config/resolver.js.map +1 -1
- package/dist/esm/config/sources/dw-json-source.d.ts +1 -0
- package/dist/esm/config/sources/dw-json-source.js +1 -0
- package/dist/esm/config/sources/dw-json-source.js.map +1 -1
- package/dist/esm/config/sources/index.d.ts +1 -0
- package/dist/esm/config/sources/index.js +1 -0
- package/dist/esm/config/sources/index.js.map +1 -1
- package/dist/esm/config/sources/mobify-source.d.ts +1 -0
- package/dist/esm/config/sources/mobify-source.js +1 -0
- package/dist/esm/config/sources/mobify-source.js.map +1 -1
- package/dist/esm/config/sources/package-json-source.d.ts +14 -0
- package/dist/esm/config/sources/package-json-source.js +86 -0
- package/dist/esm/config/sources/package-json-source.js.map +1 -0
- package/dist/esm/config/types.d.ts +14 -0
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/operations/code/deploy.js +9 -3
- package/dist/esm/operations/code/deploy.js.map +1 -1
- package/dist/esm/operations/mrt/access-control.d.ts +192 -0
- package/dist/esm/operations/mrt/access-control.js +152 -0
- package/dist/esm/operations/mrt/access-control.js.map +1 -0
- package/dist/esm/operations/mrt/b2c-config.d.ts +201 -0
- package/dist/esm/operations/mrt/b2c-config.js +195 -0
- package/dist/esm/operations/mrt/b2c-config.js.map +1 -0
- package/dist/esm/operations/mrt/cache.d.ts +80 -0
- package/dist/esm/operations/mrt/cache.js +65 -0
- package/dist/esm/operations/mrt/cache.js.map +1 -0
- package/dist/esm/operations/mrt/deployment.d.ts +157 -0
- package/dist/esm/operations/mrt/deployment.js +109 -0
- package/dist/esm/operations/mrt/deployment.js.map +1 -0
- package/dist/esm/operations/mrt/env.d.ts +141 -0
- package/dist/esm/operations/mrt/env.js +119 -0
- package/dist/esm/operations/mrt/env.js.map +1 -1
- package/dist/esm/operations/mrt/index.d.ts +24 -4
- package/dist/esm/operations/mrt/index.js +23 -3
- package/dist/esm/operations/mrt/index.js.map +1 -1
- package/dist/esm/operations/mrt/member.d.ts +281 -0
- package/dist/esm/operations/mrt/member.js +244 -0
- package/dist/esm/operations/mrt/member.js.map +1 -0
- package/dist/esm/operations/mrt/notification.d.ts +252 -0
- package/dist/esm/operations/mrt/notification.js +206 -0
- package/dist/esm/operations/mrt/notification.js.map +1 -0
- package/dist/esm/operations/mrt/organization.d.ts +80 -0
- package/dist/esm/operations/mrt/organization.js +53 -0
- package/dist/esm/operations/mrt/organization.js.map +1 -0
- package/dist/esm/operations/mrt/project.d.ts +261 -0
- package/dist/esm/operations/mrt/project.js +232 -0
- package/dist/esm/operations/mrt/project.js.map +1 -0
- package/dist/esm/operations/mrt/push.d.ts +122 -8
- package/dist/esm/operations/mrt/push.js +83 -10
- package/dist/esm/operations/mrt/push.js.map +1 -1
- package/dist/esm/operations/mrt/redirect.d.ts +337 -0
- package/dist/esm/operations/mrt/redirect.js +256 -0
- package/dist/esm/operations/mrt/redirect.js.map +1 -0
- package/dist/esm/operations/mrt/user.d.ts +135 -0
- package/dist/esm/operations/mrt/user.js +153 -0
- package/dist/esm/operations/mrt/user.js.map +1 -0
- package/dist/esm/operations/scapi-schemas/collapse.d.ts +150 -0
- package/dist/esm/operations/scapi-schemas/collapse.js +180 -0
- package/dist/esm/operations/scapi-schemas/collapse.js.map +1 -0
- package/dist/esm/operations/scapi-schemas/index.d.ts +53 -0
- package/dist/esm/operations/scapi-schemas/index.js +59 -0
- package/dist/esm/operations/scapi-schemas/index.js.map +1 -0
- package/dist/esm/skills/agents.d.ts +41 -0
- package/dist/esm/skills/agents.js +159 -0
- package/dist/esm/skills/agents.js.map +1 -0
- package/dist/esm/skills/github.d.ts +47 -0
- package/dist/esm/skills/github.js +246 -0
- package/dist/esm/skills/github.js.map +1 -0
- package/dist/esm/skills/index.d.ts +42 -0
- package/dist/esm/skills/index.js +14 -0
- package/dist/esm/skills/index.js.map +1 -0
- package/dist/esm/skills/installer.d.ts +34 -0
- package/dist/esm/skills/installer.js +181 -0
- package/dist/esm/skills/installer.js.map +1 -0
- package/dist/esm/skills/parser.d.ts +39 -0
- package/dist/esm/skills/parser.js +131 -0
- package/dist/esm/skills/parser.js.map +1 -0
- package/dist/esm/skills/types.d.ts +134 -0
- package/dist/esm/skills/types.js +7 -0
- package/dist/esm/skills/types.js.map +1 -0
- package/dist/esm/test-utils/config-isolation.d.ts +2 -0
- package/dist/esm/test-utils/config-isolation.js +41 -0
- package/dist/esm/test-utils/config-isolation.js.map +1 -0
- package/dist/esm/test-utils/index.d.ts +1 -0
- package/dist/esm/test-utils/index.js +7 -0
- package/dist/esm/test-utils/index.js.map +1 -0
- package/dist/esm/version.d.ts +14 -0
- package/dist/esm/version.js +29 -0
- package/dist/esm/version.js.map +1 -0
- package/package.json +35 -2
- package/specs/cdn-zones-v1.yaml +9324 -0
- package/specs/mrt-b2c.json +384 -0
- package/specs/scapi-schemas-v1.yaml +341 -0
|
@@ -0,0 +1,131 @@
|
|
|
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
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { getLogger } from '../logging/logger.js';
|
|
9
|
+
/**
|
|
10
|
+
* Parse simple YAML-like frontmatter from SKILL.md content.
|
|
11
|
+
* Only supports basic key: value pairs (name and description).
|
|
12
|
+
*
|
|
13
|
+
* @param content - File content with frontmatter
|
|
14
|
+
* @returns Parsed frontmatter or null if invalid
|
|
15
|
+
*/
|
|
16
|
+
export function parseSkillFrontmatter(content) {
|
|
17
|
+
// Match frontmatter between --- delimiters
|
|
18
|
+
const match = content.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
19
|
+
if (!match) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const frontmatter = match[1];
|
|
23
|
+
const result = {};
|
|
24
|
+
// Parse simple key: value lines
|
|
25
|
+
for (const line of frontmatter.split('\n')) {
|
|
26
|
+
const keyValueMatch = line.match(/^(\w+):\s*(.+)$/);
|
|
27
|
+
if (keyValueMatch) {
|
|
28
|
+
const [, key, value] = keyValueMatch;
|
|
29
|
+
if (key === 'name') {
|
|
30
|
+
result.name = value.trim();
|
|
31
|
+
}
|
|
32
|
+
else if (key === 'description') {
|
|
33
|
+
result.description = value.trim();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (!result.name || !result.description) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return { name: result.name, description: result.description };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Scan a directory for skills and extract their metadata.
|
|
44
|
+
*
|
|
45
|
+
* @param skillsDir - Path to extracted skills directory (e.g., ~/.cache/b2c-cli/skills/v0.1.0/b2c/skills/)
|
|
46
|
+
* @param skillSet - The skill set being scanned ('b2c' or 'b2c-cli')
|
|
47
|
+
* @returns Array of skill metadata
|
|
48
|
+
*/
|
|
49
|
+
export async function scanSkills(skillsDir, skillSet) {
|
|
50
|
+
const logger = getLogger();
|
|
51
|
+
const skills = [];
|
|
52
|
+
// The extracted structure should be: skillsDir/skills/skill-name/SKILL.md
|
|
53
|
+
// Find the skills subdirectory
|
|
54
|
+
const skillsSubdir = path.join(skillsDir, 'skills');
|
|
55
|
+
if (!fs.existsSync(skillsSubdir)) {
|
|
56
|
+
logger.debug({ skillsDir, skillsSubdir }, 'Skills subdirectory not found');
|
|
57
|
+
return skills;
|
|
58
|
+
}
|
|
59
|
+
const entries = await fs.promises.readdir(skillsSubdir, { withFileTypes: true });
|
|
60
|
+
for (const entry of entries) {
|
|
61
|
+
if (!entry.isDirectory()) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const skillDir = path.join(skillsSubdir, entry.name);
|
|
65
|
+
const skillPath = path.join(skillDir, 'SKILL.md');
|
|
66
|
+
if (!fs.existsSync(skillPath)) {
|
|
67
|
+
logger.debug({ skillDir }, 'No SKILL.md found, skipping');
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const content = await fs.promises.readFile(skillPath, 'utf-8');
|
|
72
|
+
const frontmatter = parseSkillFrontmatter(content);
|
|
73
|
+
if (!frontmatter) {
|
|
74
|
+
logger.warn({ skillPath }, 'Invalid frontmatter in SKILL.md');
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// Check for references directory
|
|
78
|
+
const referencesDir = path.join(skillDir, 'references');
|
|
79
|
+
const hasReferences = fs.existsSync(referencesDir);
|
|
80
|
+
skills.push({
|
|
81
|
+
name: frontmatter.name,
|
|
82
|
+
description: frontmatter.description,
|
|
83
|
+
skillSet,
|
|
84
|
+
path: entry.name, // Relative path within skills directory
|
|
85
|
+
hasReferences,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
logger.warn({ skillPath, error }, 'Failed to parse SKILL.md');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
logger.debug({ count: skills.length, skillSet }, 'Scanned skills');
|
|
93
|
+
return skills;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Filter skills by name.
|
|
97
|
+
*
|
|
98
|
+
* @param skills - All available skills
|
|
99
|
+
* @param names - Skill names to include (if provided)
|
|
100
|
+
* @returns Filtered skills
|
|
101
|
+
*/
|
|
102
|
+
export function filterSkillsByName(skills, names) {
|
|
103
|
+
if (!names || names.length === 0) {
|
|
104
|
+
return skills;
|
|
105
|
+
}
|
|
106
|
+
const nameSet = new Set(names);
|
|
107
|
+
return skills.filter((skill) => nameSet.has(skill.name));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Find skills that match the given names, returning any that weren't found.
|
|
111
|
+
*
|
|
112
|
+
* @param skills - Available skills
|
|
113
|
+
* @param names - Requested skill names
|
|
114
|
+
* @returns Object with matched skills and names not found
|
|
115
|
+
*/
|
|
116
|
+
export function findSkillsByName(skills, names) {
|
|
117
|
+
const skillMap = new Map(skills.map((s) => [s.name, s]));
|
|
118
|
+
const found = [];
|
|
119
|
+
const notFound = [];
|
|
120
|
+
for (const name of names) {
|
|
121
|
+
const skill = skillMap.get(name);
|
|
122
|
+
if (skill) {
|
|
123
|
+
found.push(skill);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
notFound.push(name);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return { found, notFound };
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/skills/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supported IDE types for skill installation.
|
|
3
|
+
*/
|
|
4
|
+
export type IdeType = 'claude-code' | 'cursor' | 'windsurf' | 'vscode' | 'codex' | 'opencode' | 'manual';
|
|
5
|
+
/**
|
|
6
|
+
* Skill set categories matching the plugins directory structure.
|
|
7
|
+
*/
|
|
8
|
+
export type SkillSet = 'b2c' | 'b2c-cli';
|
|
9
|
+
/**
|
|
10
|
+
* IDE path configuration for skill installation.
|
|
11
|
+
*/
|
|
12
|
+
export interface IdePaths {
|
|
13
|
+
/** Relative path for project-level installation (e.g., '.claude/skills') */
|
|
14
|
+
projectDir: string;
|
|
15
|
+
/** Absolute path for global/user-level installation (e.g., '~/.claude/skills') */
|
|
16
|
+
globalDir: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* IDE configuration including paths and display name.
|
|
20
|
+
*/
|
|
21
|
+
export interface IdeConfig {
|
|
22
|
+
/** IDE identifier */
|
|
23
|
+
id: IdeType;
|
|
24
|
+
/** Human-readable display name */
|
|
25
|
+
displayName: string;
|
|
26
|
+
/** Installation paths */
|
|
27
|
+
paths: IdePaths;
|
|
28
|
+
/** Function to detect if IDE is installed */
|
|
29
|
+
detectInstalled: () => Promise<boolean>;
|
|
30
|
+
/** Optional documentation URL for skill configuration */
|
|
31
|
+
docsUrl?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Skill metadata extracted from SKILL.md frontmatter.
|
|
35
|
+
*/
|
|
36
|
+
export interface SkillMetadata {
|
|
37
|
+
/** Skill identifier from frontmatter name field */
|
|
38
|
+
name: string;
|
|
39
|
+
/** Skill description from frontmatter */
|
|
40
|
+
description: string;
|
|
41
|
+
/** Skill set this skill belongs to (b2c or b2c-cli) */
|
|
42
|
+
skillSet: SkillSet;
|
|
43
|
+
/** Relative path within the skills archive */
|
|
44
|
+
path: string;
|
|
45
|
+
/** Whether this skill has a references/ subdirectory */
|
|
46
|
+
hasReferences: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* GitHub release information.
|
|
50
|
+
*/
|
|
51
|
+
export interface ReleaseInfo {
|
|
52
|
+
/** Git tag name (e.g., 'v0.1.0') */
|
|
53
|
+
tagName: string;
|
|
54
|
+
/** Version number without 'v' prefix */
|
|
55
|
+
version: string;
|
|
56
|
+
/** ISO date string when release was published */
|
|
57
|
+
publishedAt: string;
|
|
58
|
+
/** Download URL for b2c-skills.zip asset, or null if not present */
|
|
59
|
+
b2cSkillsAssetUrl: string | null;
|
|
60
|
+
/** Download URL for b2c-cli-skills.zip asset, or null if not present */
|
|
61
|
+
b2cCliSkillsAssetUrl: string | null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Options for downloading skills artifacts.
|
|
65
|
+
*/
|
|
66
|
+
export interface DownloadSkillsOptions {
|
|
67
|
+
/** Specific release version to download (default: 'latest') */
|
|
68
|
+
version?: string;
|
|
69
|
+
/** Custom cache directory (default: ~/.cache/b2c-cli/skills/) */
|
|
70
|
+
cacheDir?: string;
|
|
71
|
+
/** Force re-download even if cached */
|
|
72
|
+
forceDownload?: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Options for installing skills.
|
|
76
|
+
*/
|
|
77
|
+
export interface InstallSkillsOptions {
|
|
78
|
+
/** Specific skill names to install (default: all skills in skillset) */
|
|
79
|
+
skills?: string[];
|
|
80
|
+
/** Target IDEs to install to */
|
|
81
|
+
ides: IdeType[];
|
|
82
|
+
/** Install to global/user directory instead of project */
|
|
83
|
+
global: boolean;
|
|
84
|
+
/** Overwrite existing skills */
|
|
85
|
+
update: boolean;
|
|
86
|
+
/** Project root for project-level installations */
|
|
87
|
+
projectRoot?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Result of a single skill installation.
|
|
91
|
+
*/
|
|
92
|
+
export interface SkillInstallation {
|
|
93
|
+
skill: string;
|
|
94
|
+
ide: IdeType;
|
|
95
|
+
path: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Reason for skipping a skill installation.
|
|
99
|
+
*/
|
|
100
|
+
export interface SkillSkipped {
|
|
101
|
+
skill: string;
|
|
102
|
+
ide: IdeType;
|
|
103
|
+
reason: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Error during skill installation.
|
|
107
|
+
*/
|
|
108
|
+
export interface SkillError {
|
|
109
|
+
skill: string;
|
|
110
|
+
ide: IdeType;
|
|
111
|
+
error: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Result of installing skills.
|
|
115
|
+
*/
|
|
116
|
+
export interface InstallSkillsResult {
|
|
117
|
+
/** Successfully installed skills */
|
|
118
|
+
installed: SkillInstallation[];
|
|
119
|
+
/** Skipped skills (already exist, no update flag) */
|
|
120
|
+
skipped: SkillSkipped[];
|
|
121
|
+
/** Failed installations */
|
|
122
|
+
errors: SkillError[];
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Cached artifact metadata stored in manifest.json.
|
|
126
|
+
*/
|
|
127
|
+
export interface CachedArtifact {
|
|
128
|
+
/** Version of the cached artifact */
|
|
129
|
+
version: string;
|
|
130
|
+
/** Path to the extracted skills directory */
|
|
131
|
+
path: string;
|
|
132
|
+
/** ISO date string when artifact was downloaded */
|
|
133
|
+
downloadedAt: string;
|
|
134
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
const ADDITIONAL_ENV_VARS = ['LANGUAGE', 'NO_COLOR'];
|
|
7
|
+
let state = null;
|
|
8
|
+
export function isolateConfig() {
|
|
9
|
+
if (state)
|
|
10
|
+
throw new Error('isolateConfig() called without cleanup - call restoreConfig() first');
|
|
11
|
+
const savedEnvVars = {};
|
|
12
|
+
for (const key of Object.keys(process.env)) {
|
|
13
|
+
if (key.startsWith('SFCC_') || key.startsWith('MRT_')) {
|
|
14
|
+
savedEnvVars[key] = process.env[key];
|
|
15
|
+
delete process.env[key];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
for (const key of ADDITIONAL_ENV_VARS) {
|
|
19
|
+
savedEnvVars[key] = process.env[key];
|
|
20
|
+
delete process.env[key];
|
|
21
|
+
}
|
|
22
|
+
process.env.SFCC_CONFIG = '/dev/null';
|
|
23
|
+
process.env.MRT_CREDENTIALS_FILE = '/dev/null';
|
|
24
|
+
state = { savedEnvVars };
|
|
25
|
+
}
|
|
26
|
+
export function restoreConfig() {
|
|
27
|
+
if (!state)
|
|
28
|
+
return;
|
|
29
|
+
delete process.env.SFCC_CONFIG;
|
|
30
|
+
delete process.env.MRT_CREDENTIALS_FILE;
|
|
31
|
+
for (const [key, value] of Object.entries(state.savedEnvVars)) {
|
|
32
|
+
if (value === undefined) {
|
|
33
|
+
delete process.env[key];
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
process.env[key] = value;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
state = null;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=config-isolation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-isolation.js","sourceRoot":"","sources":["../../../src/test-utils/config-isolation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAMrD,IAAI,KAAK,GAA0B,IAAI,CAAC;AAExC,MAAM,UAAU,aAAa;IAC3B,IAAI,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IAElG,MAAM,YAAY,GAAuC,EAAE,CAAC;IAE5D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtC,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,WAAW,CAAC;IAE/C,KAAK,GAAG,EAAC,YAAY,EAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAExC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,GAAG,IAAI,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { isolateConfig, restoreConfig } from './config-isolation.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
+
export { isolateConfig, restoreConfig } from './config-isolation.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test-utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,aAAa,EAAE,aAAa,EAAC,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The SDK package name.
|
|
3
|
+
*/
|
|
4
|
+
export declare const SDK_NAME: string;
|
|
5
|
+
/**
|
|
6
|
+
* The SDK package version.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SDK_VERSION: string;
|
|
9
|
+
/**
|
|
10
|
+
* Default User-Agent string for the SDK.
|
|
11
|
+
*
|
|
12
|
+
* Format: `b2c-tooling-sdk/0.1.0`
|
|
13
|
+
*/
|
|
14
|
+
export declare const SDK_USER_AGENT: string;
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
* SDK version information and User-Agent string.
|
|
8
|
+
*
|
|
9
|
+
* @module version
|
|
10
|
+
*/
|
|
11
|
+
import { createRequire } from 'node:module';
|
|
12
|
+
const require = createRequire(import.meta.url);
|
|
13
|
+
// Use the package.json exports path to resolve correctly from both src/ and dist/
|
|
14
|
+
const pkg = require('@salesforce/b2c-tooling-sdk/package.json');
|
|
15
|
+
/**
|
|
16
|
+
* The SDK package name.
|
|
17
|
+
*/
|
|
18
|
+
export const SDK_NAME = pkg.name;
|
|
19
|
+
/**
|
|
20
|
+
* The SDK package version.
|
|
21
|
+
*/
|
|
22
|
+
export const SDK_VERSION = pkg.version;
|
|
23
|
+
/**
|
|
24
|
+
* Default User-Agent string for the SDK.
|
|
25
|
+
*
|
|
26
|
+
* Format: `b2c-tooling-sdk/0.1.0`
|
|
27
|
+
*/
|
|
28
|
+
export const SDK_USER_AGENT = `${SDK_NAME.replace(/^@salesforce\//, '')}/${SDK_VERSION}`;
|
|
29
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;GAIG;AACH,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAE1C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,kFAAkF;AAClF,MAAM,GAAG,GAAG,OAAO,CAAC,0CAA0C,CAAoC,CAAC;AAEnG;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC"}
|
package/dist/esm/auth/index.d.ts
CHANGED
|
@@ -63,3 +63,5 @@ export type { ImplicitOAuthConfig } from './oauth-implicit.js';
|
|
|
63
63
|
export { ApiKeyStrategy } from './api-key.js';
|
|
64
64
|
export { resolveAuthStrategy, checkAvailableAuthMethods } from './resolve.js';
|
|
65
65
|
export type { ResolveAuthStrategyOptions, AvailableAuthMethods } from './resolve.js';
|
|
66
|
+
export { globalAuthMiddlewareRegistry, AuthMiddlewareRegistry, applyAuthRequestMiddleware, applyAuthResponseMiddleware, } from './middleware.js';
|
|
67
|
+
export type { AuthMiddleware, AuthMiddlewareProvider } from './middleware.js';
|
package/dist/esm/auth/index.js
CHANGED
|
@@ -66,4 +66,6 @@ export { ImplicitOAuthStrategy } from './oauth-implicit.js';
|
|
|
66
66
|
export { ApiKeyStrategy } from './api-key.js';
|
|
67
67
|
// Resolution helpers
|
|
68
68
|
export { resolveAuthStrategy, checkAvailableAuthMethods } from './resolve.js';
|
|
69
|
+
// Auth middleware
|
|
70
|
+
export { globalAuthMiddlewareRegistry, AuthMiddlewareRegistry, applyAuthRequestMiddleware, applyAuthResponseMiddleware, } from './middleware.js';
|
|
69
71
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAcH,OAAO,EAAC,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAE5C,aAAa;AACb,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAE5C,qBAAqB;AACrB,OAAO,EAAC,mBAAmB,EAAE,yBAAyB,EAAC,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAcH,OAAO,EAAC,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAE5C,aAAa;AACb,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAE5C,qBAAqB;AACrB,OAAO,EAAC,mBAAmB,EAAE,yBAAyB,EAAC,MAAM,cAAc,CAAC;AAG5E,kBAAkB;AAClB,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Middleware Registry for B2C SDK.
|
|
3
|
+
*
|
|
4
|
+
* Provides a middleware system specifically for authentication requests (OAuth token requests).
|
|
5
|
+
* This is separate from the HTTP middleware registry because auth requests bypass the
|
|
6
|
+
* standard openapi-fetch client middleware chain.
|
|
7
|
+
*
|
|
8
|
+
* ## SDK Usage
|
|
9
|
+
*
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { globalAuthMiddlewareRegistry, AuthMiddlewareProvider } from '@salesforce/b2c-tooling-sdk/auth';
|
|
12
|
+
*
|
|
13
|
+
* const loggingProvider: AuthMiddlewareProvider = {
|
|
14
|
+
* name: 'auth-logger',
|
|
15
|
+
* getMiddleware() {
|
|
16
|
+
* return {
|
|
17
|
+
* onRequest({ request }) {
|
|
18
|
+
* console.log(`[Auth] ${request.method} ${request.url}`);
|
|
19
|
+
* return request;
|
|
20
|
+
* },
|
|
21
|
+
* onResponse({ response }) {
|
|
22
|
+
* console.log(`[Auth] ${response.status}`);
|
|
23
|
+
* return response;
|
|
24
|
+
* },
|
|
25
|
+
* };
|
|
26
|
+
* },
|
|
27
|
+
* };
|
|
28
|
+
*
|
|
29
|
+
* globalAuthMiddlewareRegistry.register(loggingProvider);
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* ## CLI Plugin Usage
|
|
33
|
+
*
|
|
34
|
+
* Plugins can provide auth middleware via the `b2c:auth-middleware` hook.
|
|
35
|
+
*
|
|
36
|
+
* @module auth/middleware
|
|
37
|
+
*/
|
|
38
|
+
/**
|
|
39
|
+
* Middleware interface for authentication requests.
|
|
40
|
+
*
|
|
41
|
+
* Similar to openapi-fetch's Middleware interface, but simplified for auth requests.
|
|
42
|
+
*/
|
|
43
|
+
export interface AuthMiddleware {
|
|
44
|
+
/**
|
|
45
|
+
* Called before the auth request is sent.
|
|
46
|
+
* Can modify the request or return a new one.
|
|
47
|
+
*
|
|
48
|
+
* @param params - Object containing the request
|
|
49
|
+
* @returns Modified request, or void to use original
|
|
50
|
+
*/
|
|
51
|
+
onRequest?(params: {
|
|
52
|
+
request: Request;
|
|
53
|
+
}): Promise<Request | void>;
|
|
54
|
+
/**
|
|
55
|
+
* Called after the auth response is received.
|
|
56
|
+
* Can modify the response or return a new one.
|
|
57
|
+
*
|
|
58
|
+
* @param params - Object containing request and response
|
|
59
|
+
* @returns Modified response, or void to use original
|
|
60
|
+
*/
|
|
61
|
+
onResponse?(params: {
|
|
62
|
+
request: Request;
|
|
63
|
+
response: Response;
|
|
64
|
+
}): Promise<Response | void>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Middleware provider that supplies middleware for auth requests.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const provider: AuthMiddlewareProvider = {
|
|
72
|
+
* name: 'user-agent',
|
|
73
|
+
* getMiddleware() {
|
|
74
|
+
* return {
|
|
75
|
+
* onRequest({ request }) {
|
|
76
|
+
* request.headers.set('User-Agent', 'my-app/1.0');
|
|
77
|
+
* return request;
|
|
78
|
+
* },
|
|
79
|
+
* };
|
|
80
|
+
* },
|
|
81
|
+
* };
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export interface AuthMiddlewareProvider {
|
|
85
|
+
/**
|
|
86
|
+
* Human-readable name for the provider (used in logging/debugging).
|
|
87
|
+
*/
|
|
88
|
+
readonly name: string;
|
|
89
|
+
/**
|
|
90
|
+
* Returns middleware for auth requests.
|
|
91
|
+
*
|
|
92
|
+
* @returns Middleware to apply, or undefined to skip
|
|
93
|
+
*/
|
|
94
|
+
getMiddleware(): AuthMiddleware | undefined;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Registry for auth middleware providers.
|
|
98
|
+
*
|
|
99
|
+
* The registry collects middleware from multiple providers and returns
|
|
100
|
+
* them in registration order when requested during OAuth token requests.
|
|
101
|
+
*
|
|
102
|
+
* ## Usage Modes
|
|
103
|
+
*
|
|
104
|
+
* **SDK Mode**: Register providers directly via `register()`:
|
|
105
|
+
* ```typescript
|
|
106
|
+
* globalAuthMiddlewareRegistry.register(myProvider);
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* **CLI Mode**: Providers are collected via the `b2c:auth-middleware` hook
|
|
110
|
+
* and registered during command initialization.
|
|
111
|
+
*/
|
|
112
|
+
export declare class AuthMiddlewareRegistry {
|
|
113
|
+
private providers;
|
|
114
|
+
/**
|
|
115
|
+
* Registers a middleware provider.
|
|
116
|
+
*
|
|
117
|
+
* Providers are called in registration order when middleware is requested.
|
|
118
|
+
*
|
|
119
|
+
* @param provider - The provider to register
|
|
120
|
+
*/
|
|
121
|
+
register(provider: AuthMiddlewareProvider): void;
|
|
122
|
+
/**
|
|
123
|
+
* Unregisters a middleware provider by name.
|
|
124
|
+
*
|
|
125
|
+
* @param name - The name of the provider to remove
|
|
126
|
+
* @returns true if a provider was removed, false if not found
|
|
127
|
+
*/
|
|
128
|
+
unregister(name: string): boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Collects middleware from all providers.
|
|
131
|
+
*
|
|
132
|
+
* @returns Array of middleware in registration order
|
|
133
|
+
*/
|
|
134
|
+
getMiddleware(): AuthMiddleware[];
|
|
135
|
+
/**
|
|
136
|
+
* Clears all registered providers.
|
|
137
|
+
*
|
|
138
|
+
* Primarily useful for testing.
|
|
139
|
+
*/
|
|
140
|
+
clear(): void;
|
|
141
|
+
/**
|
|
142
|
+
* Returns the number of registered providers.
|
|
143
|
+
*/
|
|
144
|
+
get size(): number;
|
|
145
|
+
/**
|
|
146
|
+
* Returns the names of all registered providers.
|
|
147
|
+
*/
|
|
148
|
+
getProviderNames(): string[];
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Global auth middleware registry instance.
|
|
152
|
+
*
|
|
153
|
+
* This is the default registry used by OAuth strategies. Register
|
|
154
|
+
* middleware providers here to have them applied to token requests.
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```typescript
|
|
158
|
+
* import { globalAuthMiddlewareRegistry } from '@salesforce/b2c-tooling-sdk/auth';
|
|
159
|
+
*
|
|
160
|
+
* globalAuthMiddlewareRegistry.register({
|
|
161
|
+
* name: 'user-agent',
|
|
162
|
+
* getMiddleware() {
|
|
163
|
+
* return {
|
|
164
|
+
* onRequest({ request }) {
|
|
165
|
+
* request.headers.set('User-Agent', 'my-app/1.0');
|
|
166
|
+
* return request;
|
|
167
|
+
* },
|
|
168
|
+
* };
|
|
169
|
+
* },
|
|
170
|
+
* });
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
export declare const globalAuthMiddlewareRegistry: AuthMiddlewareRegistry;
|
|
174
|
+
/**
|
|
175
|
+
* Applies auth middleware to a request.
|
|
176
|
+
*
|
|
177
|
+
* This helper applies all registered `onRequest` middleware in order,
|
|
178
|
+
* accumulating modifications to the request.
|
|
179
|
+
*
|
|
180
|
+
* @param request - The original request
|
|
181
|
+
* @param middleware - Array of middleware to apply
|
|
182
|
+
* @returns The modified request
|
|
183
|
+
*/
|
|
184
|
+
export declare function applyAuthRequestMiddleware(request: Request, middleware: AuthMiddleware[]): Promise<Request>;
|
|
185
|
+
/**
|
|
186
|
+
* Applies auth middleware to a response.
|
|
187
|
+
*
|
|
188
|
+
* This helper applies all registered `onResponse` middleware in order,
|
|
189
|
+
* accumulating modifications to the response.
|
|
190
|
+
*
|
|
191
|
+
* @param request - The original request (for context)
|
|
192
|
+
* @param response - The response to process
|
|
193
|
+
* @param middleware - Array of middleware to apply
|
|
194
|
+
* @returns The modified response
|
|
195
|
+
*/
|
|
196
|
+
export declare function applyAuthResponseMiddleware(request: Request, response: Response, middleware: AuthMiddleware[]): Promise<Response>;
|