Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .depcheckrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ ignores:
- nock # Used by multiple files for testing to mock API calls
- handlebars # Used by generation script to generate version.ts and top level index.ts files
- fs-extra # Used by generation script and updateApis script
- tslib # Used by the TypeScript compiler
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
- Certain operations have had types updated for query parameters
- SLAS helpers have been refactored to accept a single `options` object argument, where the properties are the old arguments
- Path parameter special characters are encoded by default
- API family layer and API namespace has been removed. To import API classes, please refer to the [README](https://github.com/SalesforceCommerceCloud/commerce-sdk?tab=readme-ov-file#sample-code)

## v4.2.0

Expand Down
12 changes: 8 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,14 @@ To use an SDK client, instantiate an object of that client and configure these p

// Import the SDK in TypeScript
// tsc requires the --esModuleInterop flag for this
import { Search, Customer, helpers, slasHelpers } from "commerce-sdk";
// Starting in v5, API classes will no longer be namespaced under API family
import { ShopperSearch, ShopperLogin, helpers, slasHelpers } from "commerce-sdk";
// Older Node.js versions can instead use:
// const { ClientConfig, helpers, slasHelpers Search } = require("commerce-sdk");

// Types for each individual API can be imported as <api_name>Types starting in v5
import type { ShopperLoginTypes } from "commerce-sdk"

// demo client credentials, if you have access to your own please replace them below.
// do not store client secret as plaintext. Store it in a secure location.
const CLIENT_ID = "da422690-7800-41d1-8ee4-3ce983961078";
Expand All @@ -92,10 +96,10 @@ const config = {
*
* @returns guest user authorization token
*/
async function getGuestUserAuthToken(): Promise<Customer.ShopperLogin.TokenResponse> {
async function getGuestUserAuthToken(): Promise<ShopperLoginTypes.TokenResponse> {
const base64data = Buffer.from(`${CLIENT_ID}:${CLIENT_SECRET}`).toString("base64");
const headers = { Authorization: `Basic ${base64data}` };
const loginClient = new Customer.ShopperLogin(config);
const loginClient = new ShopperLogin(config);

return await loginClient.getAccessToken({
headers,
Expand All @@ -119,7 +123,7 @@ getGuestUserAuthToken().then(async (token) => {
// Add the token to the client configuration
config.headers["authorization"] = `Bearer ${token.access_token}`;

const searchClient = new Search.ShopperSearch(config);
const searchClient = new ShopperSearch(config);

// Search for dresses
const searchResults = await searchClient.productSearch({
Expand Down
2 changes: 1 addition & 1 deletion src/static/helpers/slas.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ const parameters = {
usid: "usid",
};
const createSlasClient = (): ISlasClient => {
return new ShopperLogin.ShopperLogin(clientConfig) as ISlasClient;
return new ShopperLogin(clientConfig) as ISlasClient;
};

const sandbox = sinon.createSandbox();
Expand Down
4 changes: 2 additions & 2 deletions src/test/parameters.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ describe("Parameters", () => {
afterEach(() => nock.cleanAll());

it("allow custom query params", async () => {
const productClient = new ShopperProducts.ShopperProducts({
const productClient = new ShopperProducts({
parameters: {
clientId: CLIENT_ID,
organizationId: ORGANIZATION_ID,
Expand Down Expand Up @@ -53,7 +53,7 @@ describe("Parameters", () => {
});

it("warns user when an unknown param is passed", async () => {
const productClient = new ShopperProducts.ShopperProducts({
const productClient = new ShopperProducts({
parameters: {
clientId: CLIENT_ID,
organizationId: ORGANIZATION_ID,
Expand Down
21 changes: 4 additions & 17 deletions templatesOas/apis.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ import type {
{{/imports}}
} from '../models/index{{importFileExtension}}';

export namespace {{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}} {

{{#hasEnums}}
{{#operations}}
{{#operation}}
Expand Down Expand Up @@ -61,21 +59,11 @@ export namespace {{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-clas
*
* For instructions on how to retrieve access token for admin APIs: <a>https://developer.salesforce.com/docs/commerce/commerce-api/guide/authorization-for-admin-apis.html</a> <br /> <br />
* Example with admin auth
*
* For API family, here is the list:
* Cdn: CdnZones
* Checkout: Orders, ShopperBaskets, ShopperOrders
* Customer: Customers, ShopperContexts, ShopperCustomers, ShopperLogin, ShopperSeo, SlasAdmin
* Experience: ShopperExperience
* Pricing: Assignments, Campaigns, Coupons, GiftCertificates, Promotions, ShopperGiftCertificates, ShopperPromotions, SourceCodeGroups
* Product: Catalogs, Products, ShopperProducts
* Search: ShopperSearch
* Seller: ShopperStores
*
* ```typescript
* import { {{#vendorExtensions}}{{x-api-family}}{{/vendorExtensions}}, ClientConfig } from "commerce-sdk";
* import { {{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}, ClientConfig } from "commerce-sdk";
* // or
* const { {{#vendorExtensions}}{{x-api-family}}{{/vendorExtensions}}, ClientConfig } = require("commerce-sdk");
* const { {{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}, ClientConfig } = require("commerce-sdk");
*
* const clientConfig: ClientConfig = {
* parameters: {
Expand All @@ -89,7 +77,7 @@ export namespace {{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-clas
* token = { access_token: 'INSERT_ACCESS_TOKEN_HERE' };
*
* clientConfig.headers['authorization'] = `Bearer ${token.access_token}`;
* const {{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}Client = new {{#vendorExtensions}}{{x-api-family}}{{/vendorExtensions}}.{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}(clientConfig);
* const {{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}Client = new {{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}(clientConfig);
* ```
*
* <span style="font-size:.7em; display:block; text-align: right">
Expand All @@ -98,7 +86,7 @@ export namespace {{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-clas
* </span>
*
*/
export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}} extends BaseClient {
export class {{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}} extends BaseClient {

constructor(config: ClientConfig) {
super(config);
Expand All @@ -122,4 +110,3 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came
{{/operation}}
{{/operations}}
}
}
8 changes: 4 additions & 4 deletions templatesOas/index.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -22,25 +22,25 @@ export namespace {{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}
{{#allParams}}
{{#isEnum}}
{{^stringEnums}}
export type {{operationIdCamelCase}}{{enumName}} = {{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}ApiTypes.{{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}.{{operationIdCamelCase}}{{enumName}}
export type {{operationIdCamelCase}}{{enumName}} = {{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}ApiTypes.{{operationIdCamelCase}}{{enumName}}
{{/stringEnums}}
{{/isEnum}}
{{/allParams}}
{{#hasFormParams}}
export type {{nickname}}BodyType = {{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}ApiTypes.{{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}.{{nickname}}BodyType
export type {{nickname}}BodyType = {{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}ApiTypes.{{nickname}}BodyType
{{/hasFormParams}}
{{/x-scapi-internal}}
{{/vendorExtensions}}
{{^vendorExtensions}}
{{#allParams}}
{{#isEnum}}
{{^stringEnums}}
export type {{operationIdCamelCase}}{{enumName}} = {{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}ApiTypes.{{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}.{{operationIdCamelCase}}{{enumName}}
export type {{operationIdCamelCase}}{{enumName}} = {{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}ApiTypes.{{operationIdCamelCase}}{{enumName}}
{{/stringEnums}}
{{/isEnum}}
{{/allParams}}
{{#hasFormParams}}
export type {{nickname}}BodyType = {{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}ApiTypes.{{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}.{{nickname}}BodyType
export type {{nickname}}BodyType = {{#apiInfo}}{{#apis.0}}{{#vendorExtensions}}{{#x-sdk-classname}}{{{ . }}}{{/x-sdk-classname}}{{^x-sdk-classname}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/x-sdk-classname}}{{/vendorExtensions}}{{^vendorExtensions}}{{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}{{/vendorExtensions}}{{/apis.0}}{{/apiInfo}}ApiTypes.{{nickname}}BodyType
{{/hasFormParams}}
{{/vendorExtensions}}
{{/operation}}
Expand Down