@salesforce/b2c-tooling-sdk 0.6.0 → 0.7.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/config/dw-json.d.ts +6 -0
- package/dist/cjs/config/dw-json.js.map +1 -1
- package/dist/cjs/config/index.d.ts +1 -0
- package/dist/cjs/config/index.js +1 -0
- package/dist/cjs/config/index.js.map +1 -1
- package/dist/cjs/config/mapping.js +15 -0
- package/dist/cjs/config/mapping.js.map +1 -1
- package/dist/cjs/config/resolver.js +1 -0
- package/dist/cjs/config/resolver.js.map +1 -1
- package/dist/cjs/config/sources/env-source.d.ts +32 -0
- package/dist/cjs/config/sources/env-source.js +88 -0
- package/dist/cjs/config/sources/env-source.js.map +1 -0
- 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/types.d.ts +6 -0
- package/dist/cjs/skills/github.js +5 -2
- package/dist/cjs/skills/github.js.map +1 -1
- package/dist/cjs/slas/index.d.ts +12 -0
- package/dist/cjs/slas/index.js +8 -0
- package/dist/cjs/slas/index.js.map +1 -0
- package/dist/cjs/slas/pkce.d.ts +13 -0
- package/dist/cjs/slas/pkce.js +35 -0
- package/dist/cjs/slas/pkce.js.map +1 -0
- package/dist/cjs/slas/token.d.ts +24 -0
- package/dist/cjs/slas/token.js +217 -0
- package/dist/cjs/slas/token.js.map +1 -0
- package/dist/cjs/slas/types.d.ts +43 -0
- package/dist/cjs/slas/types.js +7 -0
- package/dist/cjs/slas/types.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/index.d.ts +1 -0
- package/dist/esm/config/index.js +1 -0
- package/dist/esm/config/index.js.map +1 -1
- package/dist/esm/config/mapping.js +15 -0
- package/dist/esm/config/mapping.js.map +1 -1
- package/dist/esm/config/resolver.js +1 -0
- package/dist/esm/config/resolver.js.map +1 -1
- package/dist/esm/config/sources/env-source.d.ts +32 -0
- package/dist/esm/config/sources/env-source.js +88 -0
- package/dist/esm/config/sources/env-source.js.map +1 -0
- 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/types.d.ts +6 -0
- package/dist/esm/skills/github.js +5 -2
- package/dist/esm/skills/github.js.map +1 -1
- package/dist/esm/slas/index.d.ts +12 -0
- package/dist/esm/slas/index.js +8 -0
- package/dist/esm/slas/index.js.map +1 -0
- package/dist/esm/slas/pkce.d.ts +13 -0
- package/dist/esm/slas/pkce.js +35 -0
- package/dist/esm/slas/pkce.js.map +1 -0
- package/dist/esm/slas/token.d.ts +24 -0
- package/dist/esm/slas/token.js +217 -0
- package/dist/esm/slas/token.js.map +1 -0
- package/dist/esm/slas/types.d.ts +43 -0
- package/dist/esm/slas/types.js +7 -0
- package/dist/esm/slas/types.js.map +1 -0
- package/package.json +12 -1
|
@@ -181,8 +181,11 @@ export async function downloadSkillsArtifact(skillSet, options = {}) {
|
|
|
181
181
|
}
|
|
182
182
|
// Extract actual version from the final URL (after redirects)
|
|
183
183
|
const actualVersion = extractVersionFromUrl(response.url) || version;
|
|
184
|
-
// Check cache for the resolved version (for 'latest' which we now know)
|
|
185
|
-
if
|
|
184
|
+
// Check cache for the resolved version (for 'latest' which we now know the real tag)
|
|
185
|
+
// Only use cache if we actually resolved a real version — if actualVersion is still
|
|
186
|
+
// 'latest' (e.g., redirect URL didn't contain the tag), we must re-extract since
|
|
187
|
+
// we can't tell if the cached 'latest' is stale.
|
|
188
|
+
if (version === 'latest' && actualVersion !== 'latest' && !forceDownload) {
|
|
186
189
|
const cached = getCachedArtifact(actualVersion, skillSet);
|
|
187
190
|
if (cached && fs.existsSync(cached.path)) {
|
|
188
191
|
logger.debug({ version: actualVersion, skillSet, path: cached.path }, 'Using cached skills (resolved latest)');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/skills/github.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/skills/github.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAE/C,MAAM,WAAW,GAAG,+CAA+C,CAAC;AACpE,MAAM,eAAe,GAAG,wBAAwB,CAAC;AACjD,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,GAA6B;IAC5C,GAAG,EAAE,gBAAgB;IACrB,SAAS,EAAE,oBAAoB;CAChC,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAAC,OAAe,EAAE,SAAiB;IAC9D,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,GAAG,oBAAoB,IAAI,WAAW,6BAA6B,SAAS,EAAE,CAAC;IACxF,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;IAC9D,OAAO,GAAG,oBAAoB,IAAI,WAAW,sBAAsB,GAAG,IAAI,SAAS,EAAE,CAAC;AACxF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC5C,MAAM,SAAS,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAIrB;IACC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IAElF,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,QAAQ;QACzB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,WAAW,EAAE,OAAO,CAAC,YAAY;QACjC,iBAAiB,EAAE,QAAQ,EAAE,oBAAoB,IAAI,IAAI;QACzD,oBAAoB,EAAE,WAAW,EAAE,oBAAoB,IAAI,IAAI;KAChE,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,QAAQ;IACzD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,QAAQ,GACZ,OAAO,KAAK,QAAQ;QAClB,CAAC,CAAC,GAAG,eAAe,UAAU,WAAW,kBAAkB;QAC3D,CAAC,CAAC,GAAG,eAAe,UAAU,WAAW,kBAAkB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,EAAE,CAAC;IAEnH,MAAM,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,EAAE,uBAAuB,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACrC,OAAO,EAAE;YACP,MAAM,EAAE,gCAAgC;YACxC,YAAY,EAAE,SAAS;SACxB;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAIlC,CAAC;IAEF,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE;IACnD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,GAAG,eAAe,UAAU,WAAW,sBAAsB,KAAK,EAAE,CAAC;IAEtF,MAAM,CAAC,KAAK,CAAC,EAAC,QAAQ,EAAC,EAAE,kBAAkB,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACrC,OAAO,EAAE;YACP,MAAM,EAAE,gCAAgC;YACxC,YAAY,EAAE,SAAS;SACxB;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAIjC,CAAC;IAEH,8DAA8D;IAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAC7F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAAkB;IACnE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IAE7E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAAkB,EAAE,UAAiC,EAAE;IAClG,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,EAAC,OAAO,GAAG,QAAQ,EAAE,aAAa,GAAG,KAAK,EAAC,GAAG,OAAO,CAAC;IAC5D,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAExC,sEAAsE;IACtE,IAAI,OAAO,KAAK,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,MAAM,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,EAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC,EAAE,qBAAqB,CAAC,CAAC;YACxF,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,CAAC,KAAK,CAAC,EAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAC,EAAE,6BAA6B,CAAC,CAAC;IAE1E,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;QACxC,OAAO,EAAE;YACP,YAAY,EAAE,SAAS;SACxB;QACD,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,oBAAoB,SAAS,mBAAmB,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,OAAO,EAAE,EAAE,CACjH,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,8DAA8D;IAC9D,MAAM,aAAa,GAAG,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC;IAErE,qFAAqF;IACrF,oFAAoF;IACpF,iFAAiF;IACjF,iDAAiD;IACjD,IAAI,OAAO,KAAK,QAAQ,IAAI,aAAa,KAAK,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;QACzE,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC1D,IAAI,MAAM,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,EAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC,EAAE,uCAAuC,CAAC,CAAC;YAC7G,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,KAAK,CAAC,EAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAC,EAAE,2BAA2B,CAAC,CAAC;IAE5F,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,EAAE,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;IAEhE,uCAAuC;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IAEvD,uBAAuB;IACvB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;YAChF,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE3C,iCAAiC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;QAEtD,aAAa;QACb,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,cAAc,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,EAAC,UAAU,EAAE,SAAS,EAAE,cAAc,EAAC,EAAE,kBAAkB,CAAC,CAAC;IAE1E,uBAAuB;IACvB,MAAM,QAAQ,GAAmB;QAC/B,OAAO,EAAE,aAAa;QACtB,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACvC,CAAC;IACF,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvG,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAgB;IAC/C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;SAAM,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SLAS Shopper Login token retrieval.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions to obtain shopper access tokens from the SLAS
|
|
5
|
+
* Shopper Login service, supporting public (PKCE) and private
|
|
6
|
+
* (client_credentials) client flows for both guest and registered customers.
|
|
7
|
+
*
|
|
8
|
+
* @module slas
|
|
9
|
+
*/
|
|
10
|
+
export type { SlasTokenConfig, SlasTokenResponse, SlasRegisteredLoginConfig } from './types.js';
|
|
11
|
+
export { generateCodeChallenge, generateCodeVerifier } from './pkce.js';
|
|
12
|
+
export { getGuestToken, getRegisteredToken } from './token.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
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 { generateCodeChallenge, generateCodeVerifier } from './pkce.js';
|
|
7
|
+
export { getGuestToken, getRegisteredToken } from './token.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/slas/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,EAAC,qBAAqB,EAAE,oBAAoB,EAAC,MAAM,WAAW,CAAC;AACtE,OAAO,EAAC,aAAa,EAAE,kBAAkB,EAAC,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a cryptographically random PKCE code verifier.
|
|
3
|
+
*
|
|
4
|
+
* @returns A 128-character base64url-encoded random string
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateCodeVerifier(): string;
|
|
7
|
+
/**
|
|
8
|
+
* Generates a PKCE code challenge from a code verifier using S256.
|
|
9
|
+
*
|
|
10
|
+
* @param verifier - The code verifier to hash
|
|
11
|
+
* @returns The base64url-encoded SHA-256 hash of the verifier
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateCodeChallenge(verifier: string): string;
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
* PKCE (Proof Key for Code Exchange) helpers for SLAS authentication.
|
|
8
|
+
*
|
|
9
|
+
* @module slas/pkce
|
|
10
|
+
*/
|
|
11
|
+
import { randomBytes, createHash } from 'node:crypto';
|
|
12
|
+
/**
|
|
13
|
+
* Encodes a buffer as a base64url string (RFC 7636).
|
|
14
|
+
*/
|
|
15
|
+
function base64url(buffer) {
|
|
16
|
+
return buffer.toString('base64url');
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generates a cryptographically random PKCE code verifier.
|
|
20
|
+
*
|
|
21
|
+
* @returns A 128-character base64url-encoded random string
|
|
22
|
+
*/
|
|
23
|
+
export function generateCodeVerifier() {
|
|
24
|
+
return base64url(randomBytes(96));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generates a PKCE code challenge from a code verifier using S256.
|
|
28
|
+
*
|
|
29
|
+
* @param verifier - The code verifier to hash
|
|
30
|
+
* @returns The base64url-encoded SHA-256 hash of the verifier
|
|
31
|
+
*/
|
|
32
|
+
export function generateCodeChallenge(verifier) {
|
|
33
|
+
return base64url(createHash('sha256').update(verifier).digest());
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=pkce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../../src/slas/pkce.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,SAAS,SAAS,CAAC,MAAc;IAC/B,OAAO,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { SlasTokenConfig, SlasTokenResponse, SlasRegisteredLoginConfig } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Retrieves a guest shopper access token from SLAS.
|
|
4
|
+
*
|
|
5
|
+
* - **Private client** (slasClientSecret set): Uses `client_credentials` grant.
|
|
6
|
+
* - **Public client** (no secret): Uses PKCE authorization code flow with `hint=guest`.
|
|
7
|
+
*
|
|
8
|
+
* @param config - SLAS token configuration
|
|
9
|
+
* @returns The token response including access_token and refresh_token
|
|
10
|
+
*/
|
|
11
|
+
export declare function getGuestToken(config: SlasTokenConfig): Promise<SlasTokenResponse>;
|
|
12
|
+
/**
|
|
13
|
+
* Retrieves a registered customer access token from SLAS.
|
|
14
|
+
*
|
|
15
|
+
* Uses the `/oauth2/login` endpoint with shopper credentials, then exchanges
|
|
16
|
+
* the authorization code for an access token.
|
|
17
|
+
*
|
|
18
|
+
* - **Public client**: Uses PKCE for code exchange.
|
|
19
|
+
* - **Private client**: Uses client credentials (Basic auth) for code exchange.
|
|
20
|
+
*
|
|
21
|
+
* @param config - SLAS token configuration including shopper credentials
|
|
22
|
+
* @returns The token response including access_token and refresh_token
|
|
23
|
+
*/
|
|
24
|
+
export declare function getRegisteredToken(config: SlasRegisteredLoginConfig): Promise<SlasTokenResponse>;
|
|
@@ -0,0 +1,217 @@
|
|
|
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
|
+
* SLAS shopper token retrieval.
|
|
8
|
+
*
|
|
9
|
+
* Supports guest and registered customer flows for both public (PKCE) and
|
|
10
|
+
* private (client_credentials) SLAS clients.
|
|
11
|
+
*
|
|
12
|
+
* @module slas/token
|
|
13
|
+
*/
|
|
14
|
+
import { getLogger } from '../logging/logger.js';
|
|
15
|
+
import { generateCodeChallenge, generateCodeVerifier } from './pkce.js';
|
|
16
|
+
/**
|
|
17
|
+
* Builds the SLAS shopper auth base URL.
|
|
18
|
+
*/
|
|
19
|
+
function buildBaseUrl(shortCode, organizationId) {
|
|
20
|
+
return `https://${shortCode}.api.commercecloud.salesforce.com/shopper/auth/v1/organizations/${organizationId}`;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parses an authorization code and usid from a redirect Location header.
|
|
24
|
+
*
|
|
25
|
+
* @throws Error if the redirect does not contain the expected code parameter
|
|
26
|
+
*/
|
|
27
|
+
function parseRedirectCode(locationHeader) {
|
|
28
|
+
const url = new URL(locationHeader, 'http://localhost');
|
|
29
|
+
const code = url.searchParams.get('code');
|
|
30
|
+
const usid = url.searchParams.get('usid') ?? '';
|
|
31
|
+
if (!code) {
|
|
32
|
+
throw new Error(`SLAS redirect did not contain authorization code. Location: ${locationHeader}`);
|
|
33
|
+
}
|
|
34
|
+
return { code, usid };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Checks a SLAS response for errors and throws with details.
|
|
38
|
+
*/
|
|
39
|
+
async function checkResponse(response, context) {
|
|
40
|
+
if (response.ok)
|
|
41
|
+
return;
|
|
42
|
+
let detail = '';
|
|
43
|
+
try {
|
|
44
|
+
const body = await response.text();
|
|
45
|
+
detail = body ? ` — ${body}` : '';
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// ignore body parse errors
|
|
49
|
+
}
|
|
50
|
+
throw new Error(`SLAS ${context} failed (HTTP ${response.status})${detail}`);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Retrieves a guest shopper access token from SLAS.
|
|
54
|
+
*
|
|
55
|
+
* - **Private client** (slasClientSecret set): Uses `client_credentials` grant.
|
|
56
|
+
* - **Public client** (no secret): Uses PKCE authorization code flow with `hint=guest`.
|
|
57
|
+
*
|
|
58
|
+
* @param config - SLAS token configuration
|
|
59
|
+
* @returns The token response including access_token and refresh_token
|
|
60
|
+
*/
|
|
61
|
+
export async function getGuestToken(config) {
|
|
62
|
+
const logger = getLogger();
|
|
63
|
+
if (config.slasClientSecret) {
|
|
64
|
+
return getPrivateClientGuestToken(config);
|
|
65
|
+
}
|
|
66
|
+
logger.debug('Using public client PKCE guest flow');
|
|
67
|
+
const baseUrl = buildBaseUrl(config.shortCode, config.organizationId);
|
|
68
|
+
const verifier = generateCodeVerifier();
|
|
69
|
+
const challenge = generateCodeChallenge(verifier);
|
|
70
|
+
// Step 1: Authorize — get authorization code via 303 redirect
|
|
71
|
+
const authorizeParams = new URLSearchParams({
|
|
72
|
+
client_id: config.slasClientId,
|
|
73
|
+
response_type: 'code',
|
|
74
|
+
redirect_uri: config.redirectUri,
|
|
75
|
+
hint: 'guest',
|
|
76
|
+
code_challenge: challenge,
|
|
77
|
+
});
|
|
78
|
+
const authorizeUrl = `${baseUrl}/oauth2/authorize?${authorizeParams.toString()}`;
|
|
79
|
+
logger.debug({ url: authorizeUrl }, 'SLAS authorize request');
|
|
80
|
+
const authorizeResponse = await fetch(authorizeUrl, { redirect: 'manual' });
|
|
81
|
+
if (authorizeResponse.status !== 303) {
|
|
82
|
+
await checkResponse(authorizeResponse, 'authorize');
|
|
83
|
+
throw new Error(`Expected 303 redirect from SLAS authorize, got ${authorizeResponse.status}`);
|
|
84
|
+
}
|
|
85
|
+
const location = authorizeResponse.headers.get('location');
|
|
86
|
+
if (!location) {
|
|
87
|
+
throw new Error('SLAS authorize response missing Location header');
|
|
88
|
+
}
|
|
89
|
+
const { code, usid } = parseRedirectCode(location);
|
|
90
|
+
logger.debug({ usid }, 'Got authorization code from SLAS');
|
|
91
|
+
// Step 2: Exchange code for token
|
|
92
|
+
const tokenBody = new URLSearchParams({
|
|
93
|
+
grant_type: 'authorization_code_pkce',
|
|
94
|
+
client_id: config.slasClientId,
|
|
95
|
+
code,
|
|
96
|
+
code_verifier: verifier,
|
|
97
|
+
redirect_uri: config.redirectUri,
|
|
98
|
+
channel_id: config.siteId,
|
|
99
|
+
usid,
|
|
100
|
+
});
|
|
101
|
+
const tokenResponse = await fetch(`${baseUrl}/oauth2/token`, {
|
|
102
|
+
method: 'POST',
|
|
103
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
104
|
+
body: tokenBody,
|
|
105
|
+
});
|
|
106
|
+
await checkResponse(tokenResponse, 'token exchange (authorization_code_pkce)');
|
|
107
|
+
return (await tokenResponse.json());
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Private client guest token via client_credentials grant.
|
|
111
|
+
*/
|
|
112
|
+
async function getPrivateClientGuestToken(config) {
|
|
113
|
+
const logger = getLogger();
|
|
114
|
+
logger.debug('Using private client client_credentials guest flow');
|
|
115
|
+
const baseUrl = buildBaseUrl(config.shortCode, config.organizationId);
|
|
116
|
+
const basicAuth = Buffer.from(`${config.slasClientId}:${config.slasClientSecret}`).toString('base64');
|
|
117
|
+
const tokenBody = new URLSearchParams({
|
|
118
|
+
grant_type: 'client_credentials',
|
|
119
|
+
channel_id: config.siteId,
|
|
120
|
+
});
|
|
121
|
+
const tokenResponse = await fetch(`${baseUrl}/oauth2/token`, {
|
|
122
|
+
method: 'POST',
|
|
123
|
+
headers: {
|
|
124
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
125
|
+
Authorization: `Basic ${basicAuth}`,
|
|
126
|
+
},
|
|
127
|
+
body: tokenBody,
|
|
128
|
+
});
|
|
129
|
+
await checkResponse(tokenResponse, 'token (client_credentials)');
|
|
130
|
+
return (await tokenResponse.json());
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Retrieves a registered customer access token from SLAS.
|
|
134
|
+
*
|
|
135
|
+
* Uses the `/oauth2/login` endpoint with shopper credentials, then exchanges
|
|
136
|
+
* the authorization code for an access token.
|
|
137
|
+
*
|
|
138
|
+
* - **Public client**: Uses PKCE for code exchange.
|
|
139
|
+
* - **Private client**: Uses client credentials (Basic auth) for code exchange.
|
|
140
|
+
*
|
|
141
|
+
* @param config - SLAS token configuration including shopper credentials
|
|
142
|
+
* @returns The token response including access_token and refresh_token
|
|
143
|
+
*/
|
|
144
|
+
export async function getRegisteredToken(config) {
|
|
145
|
+
const logger = getLogger();
|
|
146
|
+
const baseUrl = buildBaseUrl(config.shortCode, config.organizationId);
|
|
147
|
+
const isPrivate = Boolean(config.slasClientSecret);
|
|
148
|
+
logger.debug({ isPrivate }, 'Using registered customer login flow');
|
|
149
|
+
const verifier = generateCodeVerifier();
|
|
150
|
+
const challenge = generateCodeChallenge(verifier);
|
|
151
|
+
// Step 1: Login with shopper credentials
|
|
152
|
+
const shopperAuth = Buffer.from(`${config.shopperLogin}:${config.shopperPassword}`).toString('base64');
|
|
153
|
+
const loginBody = new URLSearchParams({
|
|
154
|
+
client_id: config.slasClientId,
|
|
155
|
+
channel_id: config.siteId,
|
|
156
|
+
code_challenge: challenge,
|
|
157
|
+
redirect_uri: config.redirectUri,
|
|
158
|
+
});
|
|
159
|
+
const loginResponse = await fetch(`${baseUrl}/oauth2/login`, {
|
|
160
|
+
method: 'POST',
|
|
161
|
+
headers: {
|
|
162
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
163
|
+
Authorization: `Basic ${shopperAuth}`,
|
|
164
|
+
},
|
|
165
|
+
body: loginBody,
|
|
166
|
+
redirect: 'manual',
|
|
167
|
+
});
|
|
168
|
+
if (loginResponse.status !== 303) {
|
|
169
|
+
await checkResponse(loginResponse, 'login');
|
|
170
|
+
throw new Error(`Expected 303 redirect from SLAS login, got ${loginResponse.status}`);
|
|
171
|
+
}
|
|
172
|
+
const location = loginResponse.headers.get('location');
|
|
173
|
+
if (!location) {
|
|
174
|
+
throw new Error('SLAS login response missing Location header');
|
|
175
|
+
}
|
|
176
|
+
const { code, usid } = parseRedirectCode(location);
|
|
177
|
+
logger.debug({ usid }, 'Got authorization code from SLAS login');
|
|
178
|
+
// Step 2: Exchange code for token
|
|
179
|
+
if (isPrivate) {
|
|
180
|
+
const basicAuth = Buffer.from(`${config.slasClientId}:${config.slasClientSecret}`).toString('base64');
|
|
181
|
+
const tokenBody = new URLSearchParams({
|
|
182
|
+
grant_type: 'authorization_code',
|
|
183
|
+
code,
|
|
184
|
+
redirect_uri: config.redirectUri,
|
|
185
|
+
channel_id: config.siteId,
|
|
186
|
+
usid,
|
|
187
|
+
});
|
|
188
|
+
const tokenResponse = await fetch(`${baseUrl}/oauth2/token`, {
|
|
189
|
+
method: 'POST',
|
|
190
|
+
headers: {
|
|
191
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
192
|
+
Authorization: `Basic ${basicAuth}`,
|
|
193
|
+
},
|
|
194
|
+
body: tokenBody,
|
|
195
|
+
});
|
|
196
|
+
await checkResponse(tokenResponse, 'token exchange (authorization_code)');
|
|
197
|
+
return (await tokenResponse.json());
|
|
198
|
+
}
|
|
199
|
+
// Public client — use PKCE
|
|
200
|
+
const tokenBody = new URLSearchParams({
|
|
201
|
+
grant_type: 'authorization_code_pkce',
|
|
202
|
+
client_id: config.slasClientId,
|
|
203
|
+
code,
|
|
204
|
+
code_verifier: verifier,
|
|
205
|
+
redirect_uri: config.redirectUri,
|
|
206
|
+
channel_id: config.siteId,
|
|
207
|
+
usid,
|
|
208
|
+
});
|
|
209
|
+
const tokenResponse = await fetch(`${baseUrl}/oauth2/token`, {
|
|
210
|
+
method: 'POST',
|
|
211
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
212
|
+
body: tokenBody,
|
|
213
|
+
});
|
|
214
|
+
await checkResponse(tokenResponse, 'token exchange (authorization_code_pkce)');
|
|
215
|
+
return (await tokenResponse.json());
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/slas/token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for SLAS Shopper Login token retrieval.
|
|
3
|
+
*
|
|
4
|
+
* @module slas/types
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Response from SLAS token endpoints.
|
|
8
|
+
*/
|
|
9
|
+
export interface SlasTokenResponse {
|
|
10
|
+
access_token: string;
|
|
11
|
+
refresh_token: string;
|
|
12
|
+
expires_in: number;
|
|
13
|
+
token_type: string;
|
|
14
|
+
usid: string;
|
|
15
|
+
customer_id: string;
|
|
16
|
+
id_token?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Configuration for SLAS shopper token retrieval.
|
|
20
|
+
*/
|
|
21
|
+
export interface SlasTokenConfig {
|
|
22
|
+
/** SCAPI short code */
|
|
23
|
+
shortCode: string;
|
|
24
|
+
/** Organization ID in f_ecom_xxxx_yyy format */
|
|
25
|
+
organizationId: string;
|
|
26
|
+
/** SLAS client ID */
|
|
27
|
+
slasClientId: string;
|
|
28
|
+
/** SLAS client secret (undefined = public client) */
|
|
29
|
+
slasClientSecret?: string;
|
|
30
|
+
/** B2C Commerce site/channel ID */
|
|
31
|
+
siteId: string;
|
|
32
|
+
/** OAuth redirect URI */
|
|
33
|
+
redirectUri: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Configuration for registered customer login.
|
|
37
|
+
*/
|
|
38
|
+
export interface SlasRegisteredLoginConfig extends SlasTokenConfig {
|
|
39
|
+
/** Shopper login/username */
|
|
40
|
+
shopperLogin: string;
|
|
41
|
+
/** Shopper password */
|
|
42
|
+
shopperPassword: string;
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/slas/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/b2c-tooling-sdk",
|
|
3
3
|
"description": "Core tooling library for Salesforce B2C Commerce CLI",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.7.0",
|
|
5
5
|
"author": "Charles Lavery",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"repository": "SalesforceCommerceCloud/b2c-developer-tooling",
|
|
@@ -178,6 +178,17 @@
|
|
|
178
178
|
"default": "./dist/cjs/operations/cip/index.js"
|
|
179
179
|
}
|
|
180
180
|
},
|
|
181
|
+
"./slas": {
|
|
182
|
+
"development": "./src/slas/index.ts",
|
|
183
|
+
"import": {
|
|
184
|
+
"types": "./dist/esm/slas/index.d.ts",
|
|
185
|
+
"default": "./dist/esm/slas/index.js"
|
|
186
|
+
},
|
|
187
|
+
"require": {
|
|
188
|
+
"types": "./dist/cjs/slas/index.d.ts",
|
|
189
|
+
"default": "./dist/cjs/slas/index.js"
|
|
190
|
+
}
|
|
191
|
+
},
|
|
181
192
|
"./cli": {
|
|
182
193
|
"development": "./src/cli/index.ts",
|
|
183
194
|
"import": {
|