medusa-product-helper 0.0.12 → 0.0.13
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/.medusa/server/src/helpers/wishlist.js +6 -13
- package/README.md +53 -4
- package/package.json +1 -1
|
@@ -8,19 +8,12 @@ const resolveEndpoint = (endpoint) => endpoint?.startsWith("/") ? endpoint : WIS
|
|
|
8
8
|
const execute = async (path, init, options) => {
|
|
9
9
|
const baseHeaders = (0, base_client_1.buildHeaders)(options);
|
|
10
10
|
// Only include Content-Type if there's a body (POST, PUT, PATCH)
|
|
11
|
+
// GET requests don't need Content-Type header
|
|
11
12
|
const hasBody = init.body !== undefined;
|
|
12
|
-
const headers = {};
|
|
13
|
-
//
|
|
14
|
-
if (
|
|
15
|
-
headers["
|
|
16
|
-
}
|
|
17
|
-
// Include Content-Type only for requests with body
|
|
18
|
-
if (hasBody && baseHeaders["Content-Type"]) {
|
|
19
|
-
headers["Content-Type"] = baseHeaders["Content-Type"];
|
|
20
|
-
}
|
|
21
|
-
// Merge custom headers from options
|
|
22
|
-
if (options.headers) {
|
|
23
|
-
Object.assign(headers, options.headers);
|
|
13
|
+
const headers = { ...baseHeaders };
|
|
14
|
+
// Remove Content-Type for GET requests (no body)
|
|
15
|
+
if (!hasBody && headers["Content-Type"]) {
|
|
16
|
+
delete headers["Content-Type"];
|
|
24
17
|
}
|
|
25
18
|
// Merge any additional headers from init (takes precedence)
|
|
26
19
|
const mergedHeaders = {
|
|
@@ -117,4 +110,4 @@ const createWishlistHelpers = (options = {}) => ({
|
|
|
117
110
|
removeFromWishlist: (0, exports.createRemoveFromWishlist)(options),
|
|
118
111
|
});
|
|
119
112
|
exports.createWishlistHelpers = createWishlistHelpers;
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lzaGxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaGVscGVycy93aXNobGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FLc0I7QUFFdEIsTUFBTSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtBQUUzQyxtREFBbUQ7QUFDbkQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUFpQixFQUFFLEVBQUUsQ0FDNUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQTtBQStDMUQsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUNuQixJQUFZLEVBQ1osSUFBcUIsRUFDckIsT0FBK0IsRUFDbkIsRUFBRTtJQUNkLE1BQU0sV0FBVyxHQUFHLElBQUEsMEJBQVksRUFBQyxPQUFPLENBQUMsQ0FBQTtJQUV6QyxpRUFBaUU7SUFDakUsOENBQThDO0lBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFBO0lBQ3ZDLE1BQU0sT0FBTyxHQUEyQixFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUE7SUFFMUQsaURBQWlEO0lBQ2pELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDeEMsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxNQUFNLGFBQWEsR0FBRztRQUNwQixHQUFHLE9BQU87UUFDVixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7S0FDeEIsQ0FBQTtJQUVELE1BQU0sY0FBYyxHQUFnQjtRQUNsQyxHQUFHLElBQUk7UUFDUCxPQUFPLEVBQUUsYUFBYTtLQUN2QixDQUFBO0lBRUQsTUFBTSxhQUFhLEdBQUcsSUFBQSw4QkFBZ0IsRUFBQyxPQUFPLENBQUMsTUFBTSxD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
|
package/README.md
CHANGED
|
@@ -448,11 +448,12 @@ import {
|
|
|
448
448
|
#### Example Usage
|
|
449
449
|
|
|
450
450
|
```typescript
|
|
451
|
+
// Recommended: Using Bearer token for authentication
|
|
451
452
|
const options: HelperTransportOptions = {
|
|
452
453
|
baseUrl: "https://store.example.com",
|
|
453
454
|
publishableApiKey: "pk_your_publishable_api_key",
|
|
454
455
|
headers: {
|
|
455
|
-
|
|
456
|
+
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", // Customer JWT token
|
|
456
457
|
},
|
|
457
458
|
}
|
|
458
459
|
|
|
@@ -466,23 +467,44 @@ const { wishlist } = await getWishlist({ includeDetails: true }, options)
|
|
|
466
467
|
await removeFromWishlist({ product_id: "prod_123" }, options)
|
|
467
468
|
```
|
|
468
469
|
|
|
470
|
+
**Alternative: Using session cookie**
|
|
471
|
+
```typescript
|
|
472
|
+
const options: HelperTransportOptions = {
|
|
473
|
+
baseUrl: "https://store.example.com",
|
|
474
|
+
publishableApiKey: "pk_your_publishable_api_key",
|
|
475
|
+
headers: {
|
|
476
|
+
Cookie: "connect.sid=...", // Session cookie (browser-based)
|
|
477
|
+
},
|
|
478
|
+
}
|
|
479
|
+
```
|
|
480
|
+
|
|
469
481
|
#### Configuration Options
|
|
470
482
|
|
|
471
483
|
All helper calls accept the following options:
|
|
472
484
|
|
|
473
485
|
- `publishableApiKey`: Required for public storefront calls when not passing a Medusa JS client. Add it from **Settings → API Keys** in the Medusa dashboard.
|
|
474
|
-
- `client`: Medusa JS/SDK client instance. When provided, network requests are delegated to `client.request` and the client
|
|
486
|
+
- `client`: Medusa JS/SDK client instance. When provided, network requests are delegated to `client.request` and the client's publishable key is reused.
|
|
475
487
|
- `baseUrl`: Base URL for the Store API (e.g., `https://store.example.com`). Required when a client is not provided.
|
|
476
488
|
- `fetchImpl`: Custom `fetch` implementation for SSR or React Native environments. Defaults to `globalThis.fetch`.
|
|
477
|
-
- `headers`: Additional headers appended to every request
|
|
489
|
+
- `headers`: Additional headers appended to every request. **Required for authenticated endpoints** - include `Authorization: Bearer <token>` for customer authentication:
|
|
490
|
+
```ts
|
|
491
|
+
headers: {
|
|
492
|
+
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
|
493
|
+
}
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
**Note:** All wishlist endpoints require customer authentication. Pass the Bearer token via the `headers` option.
|
|
478
497
|
|
|
479
498
|
You can also generate pre-configured helpers:
|
|
480
499
|
|
|
481
500
|
```typescript
|
|
501
|
+
// Recommended: Using Bearer token
|
|
482
502
|
const wishlist = createWishlistHelpers({
|
|
483
503
|
baseUrl: "https://store.example.com",
|
|
484
504
|
publishableApiKey: "pk_your_publishable_api_key",
|
|
485
|
-
headers: {
|
|
505
|
+
headers: {
|
|
506
|
+
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
507
|
+
},
|
|
486
508
|
})
|
|
487
509
|
|
|
488
510
|
await wishlist.addToWishlist({ product_id: "prod_123" })
|
|
@@ -490,6 +512,33 @@ const { wishlist: items } = await wishlist.getWishlist({ includeDetails: true })
|
|
|
490
512
|
await wishlist.removeFromWishlist({ product_id: "prod_123" })
|
|
491
513
|
```
|
|
492
514
|
|
|
515
|
+
**Getting the Bearer Token:**
|
|
516
|
+
```typescript
|
|
517
|
+
// Login to get JWT token
|
|
518
|
+
const loginResponse = await fetch("https://store.example.com/store/auth/customer/emailpass", {
|
|
519
|
+
method: "POST",
|
|
520
|
+
headers: {
|
|
521
|
+
"Content-Type": "application/json",
|
|
522
|
+
"x-publishable-api-key": "pk_your_publishable_api_key",
|
|
523
|
+
},
|
|
524
|
+
body: JSON.stringify({
|
|
525
|
+
email: "customer@example.com",
|
|
526
|
+
password: "password123",
|
|
527
|
+
}),
|
|
528
|
+
})
|
|
529
|
+
|
|
530
|
+
const { token } = await loginResponse.json()
|
|
531
|
+
|
|
532
|
+
// Use token in wishlist helpers
|
|
533
|
+
const wishlist = createWishlistHelpers({
|
|
534
|
+
baseUrl: "https://store.example.com",
|
|
535
|
+
publishableApiKey: "pk_your_publishable_api_key",
|
|
536
|
+
headers: {
|
|
537
|
+
Authorization: `Bearer ${token}`,
|
|
538
|
+
},
|
|
539
|
+
})
|
|
540
|
+
```
|
|
541
|
+
|
|
493
542
|
### Using Workflows Directly
|
|
494
543
|
|
|
495
544
|
You can also use the workflows directly in your custom code:
|