@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.
Files changed (306) hide show
  1. package/dist/cjs/auth/index.d.ts +2 -0
  2. package/dist/cjs/auth/index.js +2 -0
  3. package/dist/cjs/auth/index.js.map +1 -1
  4. package/dist/cjs/auth/middleware.d.ts +196 -0
  5. package/dist/cjs/auth/middleware.js +190 -0
  6. package/dist/cjs/auth/middleware.js.map +1 -0
  7. package/dist/cjs/auth/oauth.js +21 -9
  8. package/dist/cjs/auth/oauth.js.map +1 -1
  9. package/dist/cjs/cli/base-command.d.ts +15 -0
  10. package/dist/cjs/cli/base-command.js +58 -2
  11. package/dist/cjs/cli/base-command.js.map +1 -1
  12. package/dist/cjs/cli/hooks.d.ts +98 -5
  13. package/dist/cjs/cli/hooks.js.map +1 -1
  14. package/dist/cjs/cli/instance-command.d.ts +1 -0
  15. package/dist/cjs/cli/mrt-command.d.ts +2 -1
  16. package/dist/cjs/cli/mrt-command.js +3 -2
  17. package/dist/cjs/cli/mrt-command.js.map +1 -1
  18. package/dist/cjs/cli/oauth-command.d.ts +1 -0
  19. package/dist/cjs/cli/oauth-command.js +6 -0
  20. package/dist/cjs/cli/oauth-command.js.map +1 -1
  21. package/dist/cjs/cli/ods-command.d.ts +1 -0
  22. package/dist/cjs/cli/webdav-command.d.ts +1 -0
  23. package/dist/cjs/clients/cdn-zones.d.ts +154 -0
  24. package/dist/cjs/clients/cdn-zones.generated.d.ts +8330 -0
  25. package/dist/cjs/clients/cdn-zones.generated.js +6 -0
  26. package/dist/cjs/clients/cdn-zones.generated.js.map +1 -0
  27. package/dist/cjs/clients/cdn-zones.js +100 -0
  28. package/dist/cjs/clients/cdn-zones.js.map +1 -0
  29. package/dist/cjs/clients/error-utils.d.ts +35 -0
  30. package/dist/cjs/clients/error-utils.js +69 -0
  31. package/dist/cjs/clients/error-utils.js.map +1 -0
  32. package/dist/cjs/clients/index.d.ts +11 -2
  33. package/dist/cjs/clients/index.js +8 -1
  34. package/dist/cjs/clients/index.js.map +1 -1
  35. package/dist/cjs/clients/middleware-registry.d.ts +1 -1
  36. package/dist/cjs/clients/middleware-registry.js.map +1 -1
  37. package/dist/cjs/clients/middleware.d.ts +25 -0
  38. package/dist/cjs/clients/middleware.js +16 -10
  39. package/dist/cjs/clients/middleware.js.map +1 -1
  40. package/dist/cjs/clients/mrt-b2c.d.ts +114 -0
  41. package/dist/cjs/clients/mrt-b2c.generated.d.ts +176 -0
  42. package/dist/cjs/clients/mrt-b2c.generated.js +6 -0
  43. package/dist/cjs/clients/mrt-b2c.generated.js.map +1 -0
  44. package/dist/cjs/clients/mrt-b2c.js +86 -0
  45. package/dist/cjs/clients/mrt-b2c.js.map +1 -0
  46. package/dist/cjs/clients/scapi-schemas.d.ts +132 -0
  47. package/dist/cjs/clients/scapi-schemas.generated.d.ts +328 -0
  48. package/dist/cjs/clients/scapi-schemas.generated.js +6 -0
  49. package/dist/cjs/clients/scapi-schemas.generated.js.map +1 -0
  50. package/dist/cjs/clients/scapi-schemas.js +95 -0
  51. package/dist/cjs/clients/scapi-schemas.js.map +1 -0
  52. package/dist/cjs/clients/user-agent.d.ts +43 -0
  53. package/dist/cjs/clients/user-agent.js +87 -0
  54. package/dist/cjs/clients/user-agent.js.map +1 -0
  55. package/dist/cjs/config/dw-json.d.ts +6 -0
  56. package/dist/cjs/config/dw-json.js.map +1 -1
  57. package/dist/cjs/config/mapping.js +3 -0
  58. package/dist/cjs/config/mapping.js.map +1 -1
  59. package/dist/cjs/config/resolver.d.ts +2 -1
  60. package/dist/cjs/config/resolver.js +14 -7
  61. package/dist/cjs/config/resolver.js.map +1 -1
  62. package/dist/cjs/config/sources/dw-json-source.d.ts +1 -0
  63. package/dist/cjs/config/sources/dw-json-source.js +1 -0
  64. package/dist/cjs/config/sources/dw-json-source.js.map +1 -1
  65. package/dist/cjs/config/sources/index.d.ts +1 -0
  66. package/dist/cjs/config/sources/index.js +1 -0
  67. package/dist/cjs/config/sources/index.js.map +1 -1
  68. package/dist/cjs/config/sources/mobify-source.d.ts +1 -0
  69. package/dist/cjs/config/sources/mobify-source.js +1 -0
  70. package/dist/cjs/config/sources/mobify-source.js.map +1 -1
  71. package/dist/cjs/config/sources/package-json-source.d.ts +14 -0
  72. package/dist/cjs/config/sources/package-json-source.js +86 -0
  73. package/dist/cjs/config/sources/package-json-source.js.map +1 -0
  74. package/dist/cjs/config/types.d.ts +14 -0
  75. package/dist/cjs/index.d.ts +3 -2
  76. package/dist/cjs/index.js +3 -1
  77. package/dist/cjs/index.js.map +1 -1
  78. package/dist/cjs/operations/code/deploy.js +9 -3
  79. package/dist/cjs/operations/code/deploy.js.map +1 -1
  80. package/dist/cjs/operations/mrt/access-control.d.ts +192 -0
  81. package/dist/cjs/operations/mrt/access-control.js +152 -0
  82. package/dist/cjs/operations/mrt/access-control.js.map +1 -0
  83. package/dist/cjs/operations/mrt/b2c-config.d.ts +201 -0
  84. package/dist/cjs/operations/mrt/b2c-config.js +195 -0
  85. package/dist/cjs/operations/mrt/b2c-config.js.map +1 -0
  86. package/dist/cjs/operations/mrt/cache.d.ts +80 -0
  87. package/dist/cjs/operations/mrt/cache.js +65 -0
  88. package/dist/cjs/operations/mrt/cache.js.map +1 -0
  89. package/dist/cjs/operations/mrt/deployment.d.ts +157 -0
  90. package/dist/cjs/operations/mrt/deployment.js +109 -0
  91. package/dist/cjs/operations/mrt/deployment.js.map +1 -0
  92. package/dist/cjs/operations/mrt/env.d.ts +141 -0
  93. package/dist/cjs/operations/mrt/env.js +119 -0
  94. package/dist/cjs/operations/mrt/env.js.map +1 -1
  95. package/dist/cjs/operations/mrt/index.d.ts +24 -4
  96. package/dist/cjs/operations/mrt/index.js +23 -3
  97. package/dist/cjs/operations/mrt/index.js.map +1 -1
  98. package/dist/cjs/operations/mrt/member.d.ts +281 -0
  99. package/dist/cjs/operations/mrt/member.js +244 -0
  100. package/dist/cjs/operations/mrt/member.js.map +1 -0
  101. package/dist/cjs/operations/mrt/notification.d.ts +252 -0
  102. package/dist/cjs/operations/mrt/notification.js +206 -0
  103. package/dist/cjs/operations/mrt/notification.js.map +1 -0
  104. package/dist/cjs/operations/mrt/organization.d.ts +80 -0
  105. package/dist/cjs/operations/mrt/organization.js +53 -0
  106. package/dist/cjs/operations/mrt/organization.js.map +1 -0
  107. package/dist/cjs/operations/mrt/project.d.ts +261 -0
  108. package/dist/cjs/operations/mrt/project.js +232 -0
  109. package/dist/cjs/operations/mrt/project.js.map +1 -0
  110. package/dist/cjs/operations/mrt/push.d.ts +122 -8
  111. package/dist/cjs/operations/mrt/push.js +83 -10
  112. package/dist/cjs/operations/mrt/push.js.map +1 -1
  113. package/dist/cjs/operations/mrt/redirect.d.ts +337 -0
  114. package/dist/cjs/operations/mrt/redirect.js +256 -0
  115. package/dist/cjs/operations/mrt/redirect.js.map +1 -0
  116. package/dist/cjs/operations/mrt/user.d.ts +135 -0
  117. package/dist/cjs/operations/mrt/user.js +153 -0
  118. package/dist/cjs/operations/mrt/user.js.map +1 -0
  119. package/dist/cjs/operations/scapi-schemas/collapse.d.ts +150 -0
  120. package/dist/cjs/operations/scapi-schemas/collapse.js +180 -0
  121. package/dist/cjs/operations/scapi-schemas/collapse.js.map +1 -0
  122. package/dist/cjs/operations/scapi-schemas/index.d.ts +53 -0
  123. package/dist/cjs/operations/scapi-schemas/index.js +59 -0
  124. package/dist/cjs/operations/scapi-schemas/index.js.map +1 -0
  125. package/dist/cjs/skills/agents.d.ts +41 -0
  126. package/dist/cjs/skills/agents.js +159 -0
  127. package/dist/cjs/skills/agents.js.map +1 -0
  128. package/dist/cjs/skills/github.d.ts +47 -0
  129. package/dist/cjs/skills/github.js +246 -0
  130. package/dist/cjs/skills/github.js.map +1 -0
  131. package/dist/cjs/skills/index.d.ts +42 -0
  132. package/dist/cjs/skills/index.js +14 -0
  133. package/dist/cjs/skills/index.js.map +1 -0
  134. package/dist/cjs/skills/installer.d.ts +34 -0
  135. package/dist/cjs/skills/installer.js +181 -0
  136. package/dist/cjs/skills/installer.js.map +1 -0
  137. package/dist/cjs/skills/parser.d.ts +39 -0
  138. package/dist/cjs/skills/parser.js +131 -0
  139. package/dist/cjs/skills/parser.js.map +1 -0
  140. package/dist/cjs/skills/types.d.ts +134 -0
  141. package/dist/cjs/skills/types.js +7 -0
  142. package/dist/cjs/skills/types.js.map +1 -0
  143. package/dist/cjs/test-utils/config-isolation.d.ts +2 -0
  144. package/dist/cjs/test-utils/config-isolation.js +41 -0
  145. package/dist/cjs/test-utils/config-isolation.js.map +1 -0
  146. package/dist/cjs/test-utils/index.d.ts +1 -0
  147. package/dist/cjs/test-utils/index.js +7 -0
  148. package/dist/cjs/test-utils/index.js.map +1 -0
  149. package/dist/cjs/version.d.ts +14 -0
  150. package/dist/cjs/version.js +29 -0
  151. package/dist/cjs/version.js.map +1 -0
  152. package/dist/esm/auth/index.d.ts +2 -0
  153. package/dist/esm/auth/index.js +2 -0
  154. package/dist/esm/auth/index.js.map +1 -1
  155. package/dist/esm/auth/middleware.d.ts +196 -0
  156. package/dist/esm/auth/middleware.js +190 -0
  157. package/dist/esm/auth/middleware.js.map +1 -0
  158. package/dist/esm/auth/oauth.js +21 -9
  159. package/dist/esm/auth/oauth.js.map +1 -1
  160. package/dist/esm/cli/base-command.d.ts +15 -0
  161. package/dist/esm/cli/base-command.js +58 -2
  162. package/dist/esm/cli/base-command.js.map +1 -1
  163. package/dist/esm/cli/hooks.d.ts +98 -5
  164. package/dist/esm/cli/hooks.js.map +1 -1
  165. package/dist/esm/cli/instance-command.d.ts +1 -0
  166. package/dist/esm/cli/mrt-command.d.ts +2 -1
  167. package/dist/esm/cli/mrt-command.js +3 -2
  168. package/dist/esm/cli/mrt-command.js.map +1 -1
  169. package/dist/esm/cli/oauth-command.d.ts +1 -0
  170. package/dist/esm/cli/oauth-command.js +6 -0
  171. package/dist/esm/cli/oauth-command.js.map +1 -1
  172. package/dist/esm/cli/ods-command.d.ts +1 -0
  173. package/dist/esm/cli/webdav-command.d.ts +1 -0
  174. package/dist/esm/clients/cdn-zones.d.ts +154 -0
  175. package/dist/esm/clients/cdn-zones.generated.d.ts +8330 -0
  176. package/dist/esm/clients/cdn-zones.generated.js +6 -0
  177. package/dist/esm/clients/cdn-zones.generated.js.map +1 -0
  178. package/dist/esm/clients/cdn-zones.js +100 -0
  179. package/dist/esm/clients/cdn-zones.js.map +1 -0
  180. package/dist/esm/clients/error-utils.d.ts +35 -0
  181. package/dist/esm/clients/error-utils.js +69 -0
  182. package/dist/esm/clients/error-utils.js.map +1 -0
  183. package/dist/esm/clients/index.d.ts +11 -2
  184. package/dist/esm/clients/index.js +8 -1
  185. package/dist/esm/clients/index.js.map +1 -1
  186. package/dist/esm/clients/middleware-registry.d.ts +1 -1
  187. package/dist/esm/clients/middleware-registry.js.map +1 -1
  188. package/dist/esm/clients/middleware.d.ts +25 -0
  189. package/dist/esm/clients/middleware.js +16 -10
  190. package/dist/esm/clients/middleware.js.map +1 -1
  191. package/dist/esm/clients/mrt-b2c.d.ts +114 -0
  192. package/dist/esm/clients/mrt-b2c.generated.d.ts +176 -0
  193. package/dist/esm/clients/mrt-b2c.generated.js +6 -0
  194. package/dist/esm/clients/mrt-b2c.generated.js.map +1 -0
  195. package/dist/esm/clients/mrt-b2c.js +86 -0
  196. package/dist/esm/clients/mrt-b2c.js.map +1 -0
  197. package/dist/esm/clients/scapi-schemas.d.ts +132 -0
  198. package/dist/esm/clients/scapi-schemas.generated.d.ts +328 -0
  199. package/dist/esm/clients/scapi-schemas.generated.js +6 -0
  200. package/dist/esm/clients/scapi-schemas.generated.js.map +1 -0
  201. package/dist/esm/clients/scapi-schemas.js +95 -0
  202. package/dist/esm/clients/scapi-schemas.js.map +1 -0
  203. package/dist/esm/clients/user-agent.d.ts +43 -0
  204. package/dist/esm/clients/user-agent.js +87 -0
  205. package/dist/esm/clients/user-agent.js.map +1 -0
  206. package/dist/esm/config/dw-json.d.ts +6 -0
  207. package/dist/esm/config/dw-json.js.map +1 -1
  208. package/dist/esm/config/mapping.js +3 -0
  209. package/dist/esm/config/mapping.js.map +1 -1
  210. package/dist/esm/config/resolver.d.ts +2 -1
  211. package/dist/esm/config/resolver.js +14 -7
  212. package/dist/esm/config/resolver.js.map +1 -1
  213. package/dist/esm/config/sources/dw-json-source.d.ts +1 -0
  214. package/dist/esm/config/sources/dw-json-source.js +1 -0
  215. package/dist/esm/config/sources/dw-json-source.js.map +1 -1
  216. package/dist/esm/config/sources/index.d.ts +1 -0
  217. package/dist/esm/config/sources/index.js +1 -0
  218. package/dist/esm/config/sources/index.js.map +1 -1
  219. package/dist/esm/config/sources/mobify-source.d.ts +1 -0
  220. package/dist/esm/config/sources/mobify-source.js +1 -0
  221. package/dist/esm/config/sources/mobify-source.js.map +1 -1
  222. package/dist/esm/config/sources/package-json-source.d.ts +14 -0
  223. package/dist/esm/config/sources/package-json-source.js +86 -0
  224. package/dist/esm/config/sources/package-json-source.js.map +1 -0
  225. package/dist/esm/config/types.d.ts +14 -0
  226. package/dist/esm/index.d.ts +3 -2
  227. package/dist/esm/index.js +3 -1
  228. package/dist/esm/index.js.map +1 -1
  229. package/dist/esm/operations/code/deploy.js +9 -3
  230. package/dist/esm/operations/code/deploy.js.map +1 -1
  231. package/dist/esm/operations/mrt/access-control.d.ts +192 -0
  232. package/dist/esm/operations/mrt/access-control.js +152 -0
  233. package/dist/esm/operations/mrt/access-control.js.map +1 -0
  234. package/dist/esm/operations/mrt/b2c-config.d.ts +201 -0
  235. package/dist/esm/operations/mrt/b2c-config.js +195 -0
  236. package/dist/esm/operations/mrt/b2c-config.js.map +1 -0
  237. package/dist/esm/operations/mrt/cache.d.ts +80 -0
  238. package/dist/esm/operations/mrt/cache.js +65 -0
  239. package/dist/esm/operations/mrt/cache.js.map +1 -0
  240. package/dist/esm/operations/mrt/deployment.d.ts +157 -0
  241. package/dist/esm/operations/mrt/deployment.js +109 -0
  242. package/dist/esm/operations/mrt/deployment.js.map +1 -0
  243. package/dist/esm/operations/mrt/env.d.ts +141 -0
  244. package/dist/esm/operations/mrt/env.js +119 -0
  245. package/dist/esm/operations/mrt/env.js.map +1 -1
  246. package/dist/esm/operations/mrt/index.d.ts +24 -4
  247. package/dist/esm/operations/mrt/index.js +23 -3
  248. package/dist/esm/operations/mrt/index.js.map +1 -1
  249. package/dist/esm/operations/mrt/member.d.ts +281 -0
  250. package/dist/esm/operations/mrt/member.js +244 -0
  251. package/dist/esm/operations/mrt/member.js.map +1 -0
  252. package/dist/esm/operations/mrt/notification.d.ts +252 -0
  253. package/dist/esm/operations/mrt/notification.js +206 -0
  254. package/dist/esm/operations/mrt/notification.js.map +1 -0
  255. package/dist/esm/operations/mrt/organization.d.ts +80 -0
  256. package/dist/esm/operations/mrt/organization.js +53 -0
  257. package/dist/esm/operations/mrt/organization.js.map +1 -0
  258. package/dist/esm/operations/mrt/project.d.ts +261 -0
  259. package/dist/esm/operations/mrt/project.js +232 -0
  260. package/dist/esm/operations/mrt/project.js.map +1 -0
  261. package/dist/esm/operations/mrt/push.d.ts +122 -8
  262. package/dist/esm/operations/mrt/push.js +83 -10
  263. package/dist/esm/operations/mrt/push.js.map +1 -1
  264. package/dist/esm/operations/mrt/redirect.d.ts +337 -0
  265. package/dist/esm/operations/mrt/redirect.js +256 -0
  266. package/dist/esm/operations/mrt/redirect.js.map +1 -0
  267. package/dist/esm/operations/mrt/user.d.ts +135 -0
  268. package/dist/esm/operations/mrt/user.js +153 -0
  269. package/dist/esm/operations/mrt/user.js.map +1 -0
  270. package/dist/esm/operations/scapi-schemas/collapse.d.ts +150 -0
  271. package/dist/esm/operations/scapi-schemas/collapse.js +180 -0
  272. package/dist/esm/operations/scapi-schemas/collapse.js.map +1 -0
  273. package/dist/esm/operations/scapi-schemas/index.d.ts +53 -0
  274. package/dist/esm/operations/scapi-schemas/index.js +59 -0
  275. package/dist/esm/operations/scapi-schemas/index.js.map +1 -0
  276. package/dist/esm/skills/agents.d.ts +41 -0
  277. package/dist/esm/skills/agents.js +159 -0
  278. package/dist/esm/skills/agents.js.map +1 -0
  279. package/dist/esm/skills/github.d.ts +47 -0
  280. package/dist/esm/skills/github.js +246 -0
  281. package/dist/esm/skills/github.js.map +1 -0
  282. package/dist/esm/skills/index.d.ts +42 -0
  283. package/dist/esm/skills/index.js +14 -0
  284. package/dist/esm/skills/index.js.map +1 -0
  285. package/dist/esm/skills/installer.d.ts +34 -0
  286. package/dist/esm/skills/installer.js +181 -0
  287. package/dist/esm/skills/installer.js.map +1 -0
  288. package/dist/esm/skills/parser.d.ts +39 -0
  289. package/dist/esm/skills/parser.js +131 -0
  290. package/dist/esm/skills/parser.js.map +1 -0
  291. package/dist/esm/skills/types.d.ts +134 -0
  292. package/dist/esm/skills/types.js +7 -0
  293. package/dist/esm/skills/types.js.map +1 -0
  294. package/dist/esm/test-utils/config-isolation.d.ts +2 -0
  295. package/dist/esm/test-utils/config-isolation.js +41 -0
  296. package/dist/esm/test-utils/config-isolation.js.map +1 -0
  297. package/dist/esm/test-utils/index.d.ts +1 -0
  298. package/dist/esm/test-utils/index.js +7 -0
  299. package/dist/esm/test-utils/index.js.map +1 -0
  300. package/dist/esm/version.d.ts +14 -0
  301. package/dist/esm/version.js +29 -0
  302. package/dist/esm/version.js.map +1 -0
  303. package/package.json +35 -2
  304. package/specs/cdn-zones-v1.yaml +9324 -0
  305. package/specs/mrt-b2c.json +384 -0
  306. 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":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,2CAA2C;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,MAAM,GAA0C,EAAE,CAAC;IAEzD,gCAAgC;IAChC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC;YACrC,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,CAAC;iBAAM,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;gBACjC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAC,CAAC;AAC9D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,SAAiB,EAAE,QAAkB;IACpE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,0EAA0E;IAC1E,+BAA+B;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,YAAY,EAAC,EAAE,+BAA+B,CAAC,CAAC;QACzE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC;IAE/E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAElD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,EAAE,6BAA6B,CAAC,CAAC;YACxD,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAEnD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,EAAC,SAAS,EAAC,EAAE,iCAAiC,CAAC,CAAC;gBAC5D,SAAS;YACX,CAAC;YAED,iCAAiC;YACjC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACxD,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAEnD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,WAAW,EAAE,WAAW,CAAC,WAAW;gBACpC,QAAQ;gBACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,wCAAwC;gBAC1D,aAAa;aACd,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,EAAE,0BAA0B,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAC,EAAE,gBAAgB,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAuB,EAAE,KAAgB;IAC1E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAuB,EACvB,KAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,EAAC,KAAK,EAAE,QAAQ,EAAC,CAAC;AAC3B,CAAC"}
@@ -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,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 {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,2 @@
1
+ export declare function isolateConfig(): void;
2
+ export declare function restoreConfig(): void;
@@ -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"}
@@ -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';
@@ -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>;