@sdg.la/wishlist-stack-hydrogen 0.10.1 → 0.12.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/README.md CHANGED
@@ -16,30 +16,94 @@ It also provides:
16
16
  npm i @sdg.la/wishlist-stack-sdk @sdg.la/wishlist-stack-hydrogen
17
17
  ```
18
18
 
19
+ ## Environment Setup
20
+
21
+ Add your merchant API key to your `.env` file (or deployment environment):
22
+
23
+ ```
24
+ WISHLIST_STACK_API_KEY=your-merchant-api-key-here
25
+ ```
26
+
27
+ For Hydrogen projects, this is loaded from your local `.env` file during
28
+ development via MiniOxygen. In production (Oxygen), set it as an environment
29
+ variable in your deployment configuration.
30
+
31
+ > **Note:** In Hydrogen/Oxygen, environment variables are accessed via the `env`
32
+ > parameter (e.g. `env.WISHLIST_STACK_API_KEY`), not `process.env`.
33
+
34
+ ## Content Security Policy (CSP)
35
+
36
+ Hydrogen storefronts use `createContentSecurityPolicy` in `app/entry.server.tsx`.
37
+ If you use `mode="direct"` (the browser calls the API directly), you must allow
38
+ the API domain in `connectSrc`:
39
+
40
+ ```ts
41
+ // app/entry.server.tsx
42
+ const {nonce, header, NonceProvider} = createContentSecurityPolicy({
43
+ shop: {
44
+ checkoutDomain: context.env.PUBLIC_CHECKOUT_DOMAIN,
45
+ storeDomain: context.env.PUBLIC_STORE_DOMAIN,
46
+ },
47
+ connectSrc: ['https://wishlist.devteam.run'],
48
+ });
49
+ ```
50
+
51
+ Without this, client-side API calls will be silently blocked by the browser's
52
+ Content Security Policy. If you use a custom `baseUrl`, add that domain instead.
53
+
19
54
  ## 1) Server usage (attach to Hydrogen load context)
20
55
 
21
- Use `createWishlistStackServerContext()` to attach:
22
- - `context.wishlistStack` (server helper)
23
- - `context.wishlistStackClient` (ready-to-use client, lazy + request-scoped)
56
+ Use `createWishlistStackServerContext()` to create:
57
+ - `wishlistStack` — server helper (bootstrap config, get tokens)
58
+ - `wishlistStackClient` — ready-to-use client (lazy, request-scoped)
59
+
60
+ In your `app/lib/context.ts`, call it after `createHydrogenContext` and assign the
61
+ returned values back to the context:
24
62
 
25
63
  ```ts
64
+ import {createHydrogenContext} from '@shopify/hydrogen';
26
65
  import {createWishlistStackServerContext} from '@sdg.la/wishlist-stack-hydrogen/server';
27
66
 
28
- export function getLoadContext(hydrogenContext: unknown) {
29
- createWishlistStackServerContext({
30
- apiKey: process.env.WISHLIST_STACK_API_KEY!, // merchant key
31
- baseUrl: process.env.WISHLIST_STACK_BASE_URL,
32
- })(hydrogenContext);
67
+ // Inside createHydrogenRouterContext, after createHydrogenContext(...)
68
+ const wishlistStackContext = createWishlistStackServerContext({
69
+ apiKey: env.WISHLIST_STACK_API_KEY!,
70
+ baseUrl: env.WISHLIST_STACK_BASE_URL, // optional
71
+ })(hydrogenContext);
33
72
 
34
- return hydrogenContext;
35
- }
73
+ hydrogenContext.wishlistStack = wishlistStackContext.wishlistStack;
74
+ hydrogenContext.wishlistStackClient = wishlistStackContext.wishlistStackClient;
75
+
76
+ return hydrogenContext;
77
+ ```
78
+
79
+ > **Important:** You must explicitly assign `wishlistStack` and
80
+ > `wishlistStackClient` back onto the context object. The library's internal
81
+ > context mutation does not work with Hydrogen's `createHydrogenContext` return
82
+ > value.
83
+
84
+ ### Options
85
+
86
+ | Option | Type | Required | Description |
87
+ |--------|------|----------|-------------|
88
+ | `apiKey` | `string` | Yes | Your merchant API key |
89
+ | `baseUrl` | `string` | No | API base URL (defaults to production) |
90
+ | `getCustomerAccessToken` | `(context: unknown) => Promise<string \| undefined> \| string \| undefined` | No | Override how the customer access token is resolved. If omitted, the library calls `context.customerAccount.getAccessToken()` automatically. |
91
+
92
+ Example with explicit token resolution:
93
+
94
+ ```ts
95
+ createWishlistStackServerContext({
96
+ apiKey: env.WISHLIST_STACK_API_KEY!,
97
+ getCustomerAccessToken: hydrogenContext.customerAccount.getAccessToken,
98
+ })
36
99
  ```
37
100
 
38
101
  Now in loaders/actions you can do:
39
102
 
40
103
  ```ts
41
104
  export async function loader({context}: any) {
42
- return await context.wishlistStackClient.groups.getAll();
105
+ // Opt-in to lists + hydrated items in one call
106
+ return await context.wishlistStackClient.groups.getAll({ includeLists: true });
43
107
  }
44
108
  ```
45
109
 
@@ -58,20 +122,45 @@ export async function loader({context}: any) {
58
122
 
59
123
  ## 2) Server usage (middleware-enabled)
60
124
 
61
- Register middleware and it will attach `wishlistStack` to the middleware context.
125
+ > **Prerequisites:**
126
+ > - Enable `future.v8_middleware: true` in `react-router.config.ts`
127
+ > - Add `WISHLIST_STACK_API_KEY` to your `.env` file (see Environment Setup)
128
+
129
+ Export middleware from the route module where you want it to run.
130
+ For global coverage, add it to `app/root.tsx`:
62
131
 
63
132
  ```ts
133
+ // app/root.tsx
64
134
  import {createWishlistStackMiddleware} from '@sdg.la/wishlist-stack-hydrogen/middleware';
65
135
 
66
136
  export const middleware = [
67
- createWishlistStackMiddleware({
68
- apiKey: process.env.WISHLIST_STACK_API_KEY!,
69
- baseUrl: process.env.WISHLIST_STACK_BASE_URL,
70
- }),
137
+ ({context, request}: any, next: any) => {
138
+ const env = context.env ?? context.get?.('env');
139
+ return createWishlistStackMiddleware({
140
+ apiKey: env?.WISHLIST_STACK_API_KEY,
141
+ })({context, request}, next);
142
+ },
71
143
  ];
72
144
  ```
73
145
 
74
- The middleware supports both `context.set(...)` (context map style) and plain object mutation.
146
+ > **Hydrogen note:** `process.env` is not available in Hydrogen's Cloudflare
147
+ > Workers runtime. You must read env vars from `context.env` at request time.
148
+
149
+ In loaders/actions, use the helper to access the client:
150
+
151
+ ```ts
152
+ import {getWishlistStack, getWishlistStackClient} from '@sdg.la/wishlist-stack-hydrogen';
153
+
154
+ export async function loader({context}: Route.LoaderArgs) {
155
+ const client = await getWishlistStackClient(context);
156
+ return await client.groups.getAll();
157
+ }
158
+ ```
159
+
160
+ > **Important:** With middleware, use `getWishlistStack(context)` or
161
+ > `getWishlistStackClient(context)` helpers — not direct property access
162
+ > (`context.wishlistStack`). The middleware sets values via `context.set()`
163
+ > which is not accessible via property access in Hydrogen's context proxy.
75
164
 
76
165
  ## 3) Client usage (React Provider + hooks)
77
166
 
@@ -94,19 +183,29 @@ export async function loader({context}: any) {
94
183
  ```
95
184
 
96
185
  ```tsx
186
+ // app/root.tsx
97
187
  import {WishlistStackProvider} from '@sdg.la/wishlist-stack-hydrogen/react';
98
- import {useLoaderData} from 'react-router';
188
+ import {useRouteLoaderData, Outlet} from 'react-router';
189
+
190
+ export default function App() {
191
+ const data = useRouteLoaderData<RootLoader>('root');
192
+ if (!data) return <Outlet />;
99
193
 
100
- export function App() {
101
- const data = useLoaderData() as any;
102
194
  return (
103
- <WishlistStackProvider
104
- mode="direct"
105
- config={{apiKey: data.wishlistStack.apiKey, baseUrl: data.wishlistStack.baseUrl}}
106
- initialCustomerAccessToken={data.wishlistStack.customerAccessToken}
107
- >
108
- {/* ... */}
109
- </WishlistStackProvider>
195
+ <Analytics.Provider cart={data.cart} shop={data.shop} consent={data.consent}>
196
+ <WishlistStackProvider
197
+ mode="direct"
198
+ config={{
199
+ apiKey: data.wishlistStack.apiKey,
200
+ baseUrl: data.wishlistStack.baseUrl,
201
+ }}
202
+ initialCustomerAccessToken={data.wishlistStack.customerAccessToken}
203
+ >
204
+ <PageLayout {...data}>
205
+ <Outlet />
206
+ </PageLayout>
207
+ </WishlistStackProvider>
208
+ </Analytics.Provider>
110
209
  );
111
210
  }
112
211
  ```
@@ -125,15 +224,81 @@ export function MyComponent() {
125
224
 
126
225
  ### Optional global state (for "wishlisted?" checks)
127
226
 
227
+ The provider exposes lightweight client-side state for convenience:
228
+
229
+ ```ts
230
+ type WishlistStackGlobalState = {
231
+ savedVariantIds?: string[];
232
+ savedProductIds?: string[];
233
+ };
234
+ ```
235
+
236
+ #### Checking if a variant is saved
237
+
128
238
  ```ts
129
239
  import {useWishlistStack} from '@sdg.la/wishlist-stack-hydrogen/react';
130
240
 
131
241
  export function ProductCard({variantId}: {variantId: string}) {
132
242
  const {state} = useWishlistStack();
133
243
  const saved = state.savedVariantIds?.includes(variantId) ?? false;
134
- // render "saved" UI
135
- return null;
244
+ return <button>{saved ? '♥ Wishlisted' : '♡ Add to Wishlist'}</button>;
136
245
  }
137
246
  ```
138
247
 
139
- You can hydrate `initialState` in your root route loader and pass it to `<WishlistStackProvider initialState={...} />` when you add an endpoint for it.
248
+ #### Updating state after mutations
249
+
250
+ Use `setState` from the hook to keep state in sync after add/remove operations:
251
+
252
+ ```ts
253
+ const {setState} = useWishlistStack();
254
+
255
+ // After adding
256
+ setState((prev) => ({
257
+ ...prev,
258
+ savedVariantIds: [...(prev.savedVariantIds ?? []), variantId],
259
+ }));
260
+
261
+ // After removing
262
+ setState((prev) => ({
263
+ ...prev,
264
+ savedVariantIds: prev.savedVariantIds?.filter((id) => id !== variantId),
265
+ }));
266
+ ```
267
+
268
+ #### Hydrating saved IDs from the server
269
+ To hydrate `savedVariantIds`, fetch lists server-side and extract the IDs:
270
+
271
+ ```ts
272
+ // In your root loader, after bootstrapClientConfig:
273
+ let savedVariantIds: string[] = [];
274
+ if (cfg.customerAccessToken) {
275
+ try {
276
+ const {lists} = await context.wishlistStackClient.lists.getAll();
277
+ for (const list of lists) {
278
+ const detail = await context.wishlistStackClient.lists.getById(list.id);
279
+ for (const item of detail.items) {
280
+ savedVariantIds.push(String(item.product.variant.id));
281
+ }
282
+ }
283
+ } catch {
284
+ // Customer may not have any lists yet
285
+ }
286
+ }
287
+
288
+ return { wishlistStack: cfg, wishlistStackInitialState: {savedVariantIds} };
289
+ ```
290
+
291
+ Then pass to the provider:
292
+
293
+ ```tsx
294
+ <WishlistStackProvider
295
+ mode="direct"
296
+ config={{apiKey: data.wishlistStack.apiKey, baseUrl: data.wishlistStack.baseUrl}}
297
+ initialCustomerAccessToken={data.wishlistStack.customerAccessToken}
298
+ initialState={data.wishlistStackInitialState}
299
+ >
300
+ ```
301
+
302
+ > **Performance note:** For stores with many lists/items, consider adding a
303
+ > dedicated bulk endpoint (e.g. `GET /api/customers/saved-variant-ids`) to
304
+ > avoid multiple sequential round-trips during SSR.
package/dist/index.cjs CHANGED
@@ -7,10 +7,11 @@ function createLazyWishlistStackClient(getClient) {
7
7
  return {
8
8
  lists: {
9
9
  getAll: (query) => getClient().then((c) => c.lists.getAll(query)),
10
- getById: (listId) => getClient().then((c) => c.lists.getById(listId)),
10
+ getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),
11
11
  create: (body) => getClient().then((c) => c.lists.create(body)),
12
12
  update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),
13
13
  remove: (listId) => getClient().then((c) => c.lists.remove(listId)),
14
+ duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),
14
15
  addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),
15
16
  updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),
16
17
  removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),
@@ -25,13 +26,14 @@ function createLazyWishlistStackClient(getClient) {
25
26
  create: (body) => getClient().then((c) => c.groups.create(body)),
26
27
  update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),
27
28
  remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),
29
+ duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),
28
30
  reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),
29
31
  share: (groupId) => getClient().then((c) => c.groups.share(groupId)),
30
32
  unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId))
31
33
  },
32
34
  shared: {
33
- getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),
34
- getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId))
35
+ getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),
36
+ getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query))
35
37
  }
36
38
  };
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.ts","../src/middleware.ts","../src/context.ts"],"names":["createWishlistStackClient"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId) => getClient().then((c) => c.lists.getById(listId)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),\n getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n","import type { WishlistStackHydrogenOptions } from \"./types\";\nimport { createWishlistStackServerContext } from \"./server\";\n\ntype MiddlewareArgs = {\n request: Request;\n context: any;\n};\n\ntype MiddlewareNext = () => Promise<Response> | Response;\n\n/**\n * React Router middleware helper (Hydrogen react-router, middleware-enabled).\n *\n * We intentionally avoid importing react-router types here; we only require the\n * common shape: an object `context` that we can mutate (or that has `set()`).\n */\nexport function createWishlistStackMiddleware(options: WishlistStackHydrogenOptions) {\n const attach = createWishlistStackServerContext(options);\n return async function wishlistStackMiddleware(args: MiddlewareArgs, next: MiddlewareNext) {\n const ctxObj = args.context ?? {};\n // `attach` registers `wishlistStack` and `wishlistStackClient` onto the context (supports `set()` and mutation).\n attach(ctxObj);\n\n return await next();\n };\n}\n\n","import type { WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenServer } from \"./types\";\n\ntype ContextMapLike = {\n get?: (key: string) => unknown;\n wishlistStack?: WishlistStackHydrogenServer;\n wishlistStackClient?: WishlistStackClient;\n};\n\nasync function maybeAwait<T>(value: T | Promise<T>): Promise<T> {\n return value instanceof Promise ? await value : value;\n}\n\n/**\n * Retrieve `wishlistStackClient` from a Hydrogen/React Router loader context.\n *\n * Supports both styles:\n * - plain object: `context.wishlistStackClient`\n * - context map: `context.get('wishlistStackClient')`\n */\nexport async function getWishlistStackClient(context: unknown): Promise<WishlistStackClient> {\n const ctx = context as ContextMapLike | null | undefined;\n if (!ctx) throw new Error(\"Missing loader context (expected context.wishlistStackClient).\");\n\n if (ctx.wishlistStackClient) return ctx.wishlistStackClient;\n if (typeof ctx.get === \"function\") {\n const val = await maybeAwait(ctx.get(\"wishlistStackClient\") as any);\n if (val) return val as WishlistStackClient;\n }\n\n throw new Error(\n \"Wishlist Stack client not found on loader context. Ensure you called createWishlistStackServerContext(...)(context) in your server/app load context.\",\n );\n}\n\n/**\n * Retrieve the server helper (`wishlistStack`) from a Hydrogen/React Router loader context.\n * (Useful for bootstrap/token helpers; most route code should just use `wishlistStackClient`.)\n */\nexport async function getWishlistStack(context: unknown): Promise<WishlistStackHydrogenServer> {\n const ctx = context as ContextMapLike | null | undefined;\n if (!ctx) throw new Error(\"Missing loader context (expected context.wishlistStack).\");\n\n if (ctx.wishlistStack) return ctx.wishlistStack;\n if (typeof ctx.get === \"function\") {\n const val = await maybeAwait(ctx.get(\"wishlistStack\") as any);\n if (val) return val as WishlistStackHydrogenServer;\n }\n\n throw new Error(\n \"Wishlist Stack helper not found on loader context. Ensure you called createWishlistStackServerContext(...)(context) in your server/app load context.\",\n );\n}\n\n"]}
1
+ {"version":3,"sources":["../src/server.ts","../src/middleware.ts","../src/context.ts"],"names":["createWishlistStackClient"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),\n getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n","import type { WishlistStackHydrogenOptions } from \"./types\";\nimport { createWishlistStackServerContext } from \"./server\";\n\ntype MiddlewareArgs = {\n request: Request;\n context: any;\n};\n\ntype MiddlewareNext = () => Promise<Response> | Response;\n\n/**\n * React Router middleware helper (Hydrogen react-router, middleware-enabled).\n *\n * We intentionally avoid importing react-router types here; we only require the\n * common shape: an object `context` that we can mutate (or that has `set()`).\n */\nexport function createWishlistStackMiddleware(options: WishlistStackHydrogenOptions) {\n const attach = createWishlistStackServerContext(options);\n return async function wishlistStackMiddleware(args: MiddlewareArgs, next: MiddlewareNext) {\n const ctxObj = args.context ?? {};\n // `attach` registers `wishlistStack` and `wishlistStackClient` onto the context (supports `set()` and mutation).\n attach(ctxObj);\n\n return await next();\n };\n}\n\n","import type { WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenServer } from \"./types\";\n\ntype ContextMapLike = {\n get?: (key: string) => unknown;\n wishlistStack?: WishlistStackHydrogenServer;\n wishlistStackClient?: WishlistStackClient;\n};\n\nasync function maybeAwait<T>(value: T | Promise<T>): Promise<T> {\n return value instanceof Promise ? await value : value;\n}\n\n/**\n * Retrieve `wishlistStackClient` from a Hydrogen/React Router loader context.\n *\n * Supports both styles:\n * - plain object: `context.wishlistStackClient`\n * - context map: `context.get('wishlistStackClient')`\n */\nexport async function getWishlistStackClient(context: unknown): Promise<WishlistStackClient> {\n const ctx = context as ContextMapLike | null | undefined;\n if (!ctx) throw new Error(\"Missing loader context (expected context.wishlistStackClient).\");\n\n if (ctx.wishlistStackClient) return ctx.wishlistStackClient;\n if (typeof ctx.get === \"function\") {\n const val = await maybeAwait(ctx.get(\"wishlistStackClient\") as any);\n if (val) return val as WishlistStackClient;\n }\n\n throw new Error(\n \"Wishlist Stack client not found on loader context. Ensure you called createWishlistStackServerContext(...)(context) in your server/app load context.\",\n );\n}\n\n/**\n * Retrieve the server helper (`wishlistStack`) from a Hydrogen/React Router loader context.\n * (Useful for bootstrap/token helpers; most route code should just use `wishlistStackClient`.)\n */\nexport async function getWishlistStack(context: unknown): Promise<WishlistStackHydrogenServer> {\n const ctx = context as ContextMapLike | null | undefined;\n if (!ctx) throw new Error(\"Missing loader context (expected context.wishlistStack).\");\n\n if (ctx.wishlistStack) return ctx.wishlistStack;\n if (typeof ctx.get === \"function\") {\n const val = await maybeAwait(ctx.get(\"wishlistStack\") as any);\n if (val) return val as WishlistStackHydrogenServer;\n }\n\n throw new Error(\n \"Wishlist Stack helper not found on loader context. Ensure you called createWishlistStackServerContext(...)(context) in your server/app load context.\",\n );\n}\n\n"]}
package/dist/index.js CHANGED
@@ -6,10 +6,11 @@ function createLazyWishlistStackClient(getClient) {
6
6
  return {
7
7
  lists: {
8
8
  getAll: (query) => getClient().then((c) => c.lists.getAll(query)),
9
- getById: (listId) => getClient().then((c) => c.lists.getById(listId)),
9
+ getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),
10
10
  create: (body) => getClient().then((c) => c.lists.create(body)),
11
11
  update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),
12
12
  remove: (listId) => getClient().then((c) => c.lists.remove(listId)),
13
+ duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),
13
14
  addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),
14
15
  updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),
15
16
  removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),
@@ -24,13 +25,14 @@ function createLazyWishlistStackClient(getClient) {
24
25
  create: (body) => getClient().then((c) => c.groups.create(body)),
25
26
  update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),
26
27
  remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),
28
+ duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),
27
29
  reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),
28
30
  share: (groupId) => getClient().then((c) => c.groups.share(groupId)),
29
31
  unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId))
30
32
  },
31
33
  shared: {
32
- getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),
33
- getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId))
34
+ getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),
35
+ getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query))
34
36
  }
35
37
  };
36
38
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.ts","../src/middleware.ts","../src/context.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId) => getClient().then((c) => c.lists.getById(listId)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),\n getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n","import type { WishlistStackHydrogenOptions } from \"./types\";\nimport { createWishlistStackServerContext } from \"./server\";\n\ntype MiddlewareArgs = {\n request: Request;\n context: any;\n};\n\ntype MiddlewareNext = () => Promise<Response> | Response;\n\n/**\n * React Router middleware helper (Hydrogen react-router, middleware-enabled).\n *\n * We intentionally avoid importing react-router types here; we only require the\n * common shape: an object `context` that we can mutate (or that has `set()`).\n */\nexport function createWishlistStackMiddleware(options: WishlistStackHydrogenOptions) {\n const attach = createWishlistStackServerContext(options);\n return async function wishlistStackMiddleware(args: MiddlewareArgs, next: MiddlewareNext) {\n const ctxObj = args.context ?? {};\n // `attach` registers `wishlistStack` and `wishlistStackClient` onto the context (supports `set()` and mutation).\n attach(ctxObj);\n\n return await next();\n };\n}\n\n","import type { WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenServer } from \"./types\";\n\ntype ContextMapLike = {\n get?: (key: string) => unknown;\n wishlistStack?: WishlistStackHydrogenServer;\n wishlistStackClient?: WishlistStackClient;\n};\n\nasync function maybeAwait<T>(value: T | Promise<T>): Promise<T> {\n return value instanceof Promise ? await value : value;\n}\n\n/**\n * Retrieve `wishlistStackClient` from a Hydrogen/React Router loader context.\n *\n * Supports both styles:\n * - plain object: `context.wishlistStackClient`\n * - context map: `context.get('wishlistStackClient')`\n */\nexport async function getWishlistStackClient(context: unknown): Promise<WishlistStackClient> {\n const ctx = context as ContextMapLike | null | undefined;\n if (!ctx) throw new Error(\"Missing loader context (expected context.wishlistStackClient).\");\n\n if (ctx.wishlistStackClient) return ctx.wishlistStackClient;\n if (typeof ctx.get === \"function\") {\n const val = await maybeAwait(ctx.get(\"wishlistStackClient\") as any);\n if (val) return val as WishlistStackClient;\n }\n\n throw new Error(\n \"Wishlist Stack client not found on loader context. Ensure you called createWishlistStackServerContext(...)(context) in your server/app load context.\",\n );\n}\n\n/**\n * Retrieve the server helper (`wishlistStack`) from a Hydrogen/React Router loader context.\n * (Useful for bootstrap/token helpers; most route code should just use `wishlistStackClient`.)\n */\nexport async function getWishlistStack(context: unknown): Promise<WishlistStackHydrogenServer> {\n const ctx = context as ContextMapLike | null | undefined;\n if (!ctx) throw new Error(\"Missing loader context (expected context.wishlistStack).\");\n\n if (ctx.wishlistStack) return ctx.wishlistStack;\n if (typeof ctx.get === \"function\") {\n const val = await maybeAwait(ctx.get(\"wishlistStack\") as any);\n if (val) return val as WishlistStackHydrogenServer;\n }\n\n throw new Error(\n \"Wishlist Stack helper not found on loader context. Ensure you called createWishlistStackServerContext(...)(context) in your server/app load context.\",\n );\n}\n\n"]}
1
+ {"version":3,"sources":["../src/server.ts","../src/middleware.ts","../src/context.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),\n getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n","import type { WishlistStackHydrogenOptions } from \"./types\";\nimport { createWishlistStackServerContext } from \"./server\";\n\ntype MiddlewareArgs = {\n request: Request;\n context: any;\n};\n\ntype MiddlewareNext = () => Promise<Response> | Response;\n\n/**\n * React Router middleware helper (Hydrogen react-router, middleware-enabled).\n *\n * We intentionally avoid importing react-router types here; we only require the\n * common shape: an object `context` that we can mutate (or that has `set()`).\n */\nexport function createWishlistStackMiddleware(options: WishlistStackHydrogenOptions) {\n const attach = createWishlistStackServerContext(options);\n return async function wishlistStackMiddleware(args: MiddlewareArgs, next: MiddlewareNext) {\n const ctxObj = args.context ?? {};\n // `attach` registers `wishlistStack` and `wishlistStackClient` onto the context (supports `set()` and mutation).\n attach(ctxObj);\n\n return await next();\n };\n}\n\n","import type { WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenServer } from \"./types\";\n\ntype ContextMapLike = {\n get?: (key: string) => unknown;\n wishlistStack?: WishlistStackHydrogenServer;\n wishlistStackClient?: WishlistStackClient;\n};\n\nasync function maybeAwait<T>(value: T | Promise<T>): Promise<T> {\n return value instanceof Promise ? await value : value;\n}\n\n/**\n * Retrieve `wishlistStackClient` from a Hydrogen/React Router loader context.\n *\n * Supports both styles:\n * - plain object: `context.wishlistStackClient`\n * - context map: `context.get('wishlistStackClient')`\n */\nexport async function getWishlistStackClient(context: unknown): Promise<WishlistStackClient> {\n const ctx = context as ContextMapLike | null | undefined;\n if (!ctx) throw new Error(\"Missing loader context (expected context.wishlistStackClient).\");\n\n if (ctx.wishlistStackClient) return ctx.wishlistStackClient;\n if (typeof ctx.get === \"function\") {\n const val = await maybeAwait(ctx.get(\"wishlistStackClient\") as any);\n if (val) return val as WishlistStackClient;\n }\n\n throw new Error(\n \"Wishlist Stack client not found on loader context. Ensure you called createWishlistStackServerContext(...)(context) in your server/app load context.\",\n );\n}\n\n/**\n * Retrieve the server helper (`wishlistStack`) from a Hydrogen/React Router loader context.\n * (Useful for bootstrap/token helpers; most route code should just use `wishlistStackClient`.)\n */\nexport async function getWishlistStack(context: unknown): Promise<WishlistStackHydrogenServer> {\n const ctx = context as ContextMapLike | null | undefined;\n if (!ctx) throw new Error(\"Missing loader context (expected context.wishlistStack).\");\n\n if (ctx.wishlistStack) return ctx.wishlistStack;\n if (typeof ctx.get === \"function\") {\n const val = await maybeAwait(ctx.get(\"wishlistStack\") as any);\n if (val) return val as WishlistStackHydrogenServer;\n }\n\n throw new Error(\n \"Wishlist Stack helper not found on loader context. Ensure you called createWishlistStackServerContext(...)(context) in your server/app load context.\",\n );\n}\n\n"]}
@@ -7,10 +7,11 @@ function createLazyWishlistStackClient(getClient) {
7
7
  return {
8
8
  lists: {
9
9
  getAll: (query) => getClient().then((c) => c.lists.getAll(query)),
10
- getById: (listId) => getClient().then((c) => c.lists.getById(listId)),
10
+ getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),
11
11
  create: (body) => getClient().then((c) => c.lists.create(body)),
12
12
  update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),
13
13
  remove: (listId) => getClient().then((c) => c.lists.remove(listId)),
14
+ duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),
14
15
  addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),
15
16
  updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),
16
17
  removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),
@@ -25,13 +26,14 @@ function createLazyWishlistStackClient(getClient) {
25
26
  create: (body) => getClient().then((c) => c.groups.create(body)),
26
27
  update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),
27
28
  remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),
29
+ duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),
28
30
  reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),
29
31
  share: (groupId) => getClient().then((c) => c.groups.share(groupId)),
30
32
  unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId))
31
33
  },
32
34
  shared: {
33
- getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),
34
- getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId))
35
+ getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),
36
+ getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query))
35
37
  }
36
38
  };
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.ts","../src/middleware.ts"],"names":["createWishlistStackClient"],"mappings":"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","file":"middleware.cjs","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId) => getClient().then((c) => c.lists.getById(listId)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),\n getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n","import type { WishlistStackHydrogenOptions } from \"./types\";\nimport { createWishlistStackServerContext } from \"./server\";\n\ntype MiddlewareArgs = {\n request: Request;\n context: any;\n};\n\ntype MiddlewareNext = () => Promise<Response> | Response;\n\n/**\n * React Router middleware helper (Hydrogen react-router, middleware-enabled).\n *\n * We intentionally avoid importing react-router types here; we only require the\n * common shape: an object `context` that we can mutate (or that has `set()`).\n */\nexport function createWishlistStackMiddleware(options: WishlistStackHydrogenOptions) {\n const attach = createWishlistStackServerContext(options);\n return async function wishlistStackMiddleware(args: MiddlewareArgs, next: MiddlewareNext) {\n const ctxObj = args.context ?? {};\n // `attach` registers `wishlistStack` and `wishlistStackClient` onto the context (supports `set()` and mutation).\n attach(ctxObj);\n\n return await next();\n };\n}\n\n"]}
1
+ {"version":3,"sources":["../src/server.ts","../src/middleware.ts"],"names":["createWishlistStackClient"],"mappings":"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","file":"middleware.cjs","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),\n getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n","import type { WishlistStackHydrogenOptions } from \"./types\";\nimport { createWishlistStackServerContext } from \"./server\";\n\ntype MiddlewareArgs = {\n request: Request;\n context: any;\n};\n\ntype MiddlewareNext = () => Promise<Response> | Response;\n\n/**\n * React Router middleware helper (Hydrogen react-router, middleware-enabled).\n *\n * We intentionally avoid importing react-router types here; we only require the\n * common shape: an object `context` that we can mutate (or that has `set()`).\n */\nexport function createWishlistStackMiddleware(options: WishlistStackHydrogenOptions) {\n const attach = createWishlistStackServerContext(options);\n return async function wishlistStackMiddleware(args: MiddlewareArgs, next: MiddlewareNext) {\n const ctxObj = args.context ?? {};\n // `attach` registers `wishlistStack` and `wishlistStackClient` onto the context (supports `set()` and mutation).\n attach(ctxObj);\n\n return await next();\n };\n}\n\n"]}
@@ -5,10 +5,11 @@ function createLazyWishlistStackClient(getClient) {
5
5
  return {
6
6
  lists: {
7
7
  getAll: (query) => getClient().then((c) => c.lists.getAll(query)),
8
- getById: (listId) => getClient().then((c) => c.lists.getById(listId)),
8
+ getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),
9
9
  create: (body) => getClient().then((c) => c.lists.create(body)),
10
10
  update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),
11
11
  remove: (listId) => getClient().then((c) => c.lists.remove(listId)),
12
+ duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),
12
13
  addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),
13
14
  updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),
14
15
  removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),
@@ -23,13 +24,14 @@ function createLazyWishlistStackClient(getClient) {
23
24
  create: (body) => getClient().then((c) => c.groups.create(body)),
24
25
  update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),
25
26
  remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),
27
+ duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),
26
28
  reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),
27
29
  share: (groupId) => getClient().then((c) => c.groups.share(groupId)),
28
30
  unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId))
29
31
  },
30
32
  shared: {
31
- getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),
32
- getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId))
33
+ getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),
34
+ getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query))
33
35
  }
34
36
  };
35
37
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.ts","../src/middleware.ts"],"names":[],"mappings":"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","file":"middleware.js","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId) => getClient().then((c) => c.lists.getById(listId)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),\n getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n","import type { WishlistStackHydrogenOptions } from \"./types\";\nimport { createWishlistStackServerContext } from \"./server\";\n\ntype MiddlewareArgs = {\n request: Request;\n context: any;\n};\n\ntype MiddlewareNext = () => Promise<Response> | Response;\n\n/**\n * React Router middleware helper (Hydrogen react-router, middleware-enabled).\n *\n * We intentionally avoid importing react-router types here; we only require the\n * common shape: an object `context` that we can mutate (or that has `set()`).\n */\nexport function createWishlistStackMiddleware(options: WishlistStackHydrogenOptions) {\n const attach = createWishlistStackServerContext(options);\n return async function wishlistStackMiddleware(args: MiddlewareArgs, next: MiddlewareNext) {\n const ctxObj = args.context ?? {};\n // `attach` registers `wishlistStack` and `wishlistStackClient` onto the context (supports `set()` and mutation).\n attach(ctxObj);\n\n return await next();\n };\n}\n\n"]}
1
+ {"version":3,"sources":["../src/server.ts","../src/middleware.ts"],"names":[],"mappings":"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","file":"middleware.js","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),\n getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n","import type { WishlistStackHydrogenOptions } from \"./types\";\nimport { createWishlistStackServerContext } from \"./server\";\n\ntype MiddlewareArgs = {\n request: Request;\n context: any;\n};\n\ntype MiddlewareNext = () => Promise<Response> | Response;\n\n/**\n * React Router middleware helper (Hydrogen react-router, middleware-enabled).\n *\n * We intentionally avoid importing react-router types here; we only require the\n * common shape: an object `context` that we can mutate (or that has `set()`).\n */\nexport function createWishlistStackMiddleware(options: WishlistStackHydrogenOptions) {\n const attach = createWishlistStackServerContext(options);\n return async function wishlistStackMiddleware(args: MiddlewareArgs, next: MiddlewareNext) {\n const ctxObj = args.context ?? {};\n // `attach` registers `wishlistStack` and `wishlistStackClient` onto the context (supports `set()` and mutation).\n attach(ctxObj);\n\n return await next();\n };\n}\n\n"]}
package/dist/react.d.cts CHANGED
@@ -1,4 +1,3 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import React from 'react';
3
2
  import { WishlistStackClient } from '@sdg.la/wishlist-stack-sdk';
4
3
  import { B as BootstrapClientConfig } from './types-7NZ9ikCG.cjs';
@@ -33,7 +32,7 @@ type WishlistStackProviderValue = {
33
32
  state: WishlistStackGlobalState;
34
33
  setState: (next: WishlistStackGlobalState | ((prev: WishlistStackGlobalState) => WishlistStackGlobalState)) => void;
35
34
  };
36
- declare function WishlistStackProvider(props: WishlistStackProviderProps): react_jsx_runtime.JSX.Element;
35
+ declare function WishlistStackProvider(props: WishlistStackProviderProps): React.JSX.Element;
37
36
  declare function useWishlistStack(): WishlistStackProviderValue;
38
37
  declare function useWishlistStackClient(): WishlistStackClient;
39
38
 
package/dist/react.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import React from 'react';
3
2
  import { WishlistStackClient } from '@sdg.la/wishlist-stack-sdk';
4
3
  import { B as BootstrapClientConfig } from './types-7NZ9ikCG.js';
@@ -33,7 +32,7 @@ type WishlistStackProviderValue = {
33
32
  state: WishlistStackGlobalState;
34
33
  setState: (next: WishlistStackGlobalState | ((prev: WishlistStackGlobalState) => WishlistStackGlobalState)) => void;
35
34
  };
36
- declare function WishlistStackProvider(props: WishlistStackProviderProps): react_jsx_runtime.JSX.Element;
35
+ declare function WishlistStackProvider(props: WishlistStackProviderProps): React.JSX.Element;
37
36
  declare function useWishlistStack(): WishlistStackProviderValue;
38
37
  declare function useWishlistStackClient(): WishlistStackClient;
39
38
 
package/dist/server.cjs CHANGED
@@ -7,10 +7,11 @@ function createLazyWishlistStackClient(getClient) {
7
7
  return {
8
8
  lists: {
9
9
  getAll: (query) => getClient().then((c) => c.lists.getAll(query)),
10
- getById: (listId) => getClient().then((c) => c.lists.getById(listId)),
10
+ getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),
11
11
  create: (body) => getClient().then((c) => c.lists.create(body)),
12
12
  update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),
13
13
  remove: (listId) => getClient().then((c) => c.lists.remove(listId)),
14
+ duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),
14
15
  addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),
15
16
  updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),
16
17
  removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),
@@ -25,13 +26,14 @@ function createLazyWishlistStackClient(getClient) {
25
26
  create: (body) => getClient().then((c) => c.groups.create(body)),
26
27
  update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),
27
28
  remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),
29
+ duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),
28
30
  reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),
29
31
  share: (groupId) => getClient().then((c) => c.groups.share(groupId)),
30
32
  unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId))
31
33
  },
32
34
  shared: {
33
- getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),
34
- getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId))
35
+ getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),
36
+ getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query))
35
37
  }
36
38
  };
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.ts"],"names":["createWishlistStackClient"],"mappings":"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","file":"server.cjs","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId) => getClient().then((c) => c.lists.getById(listId)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),\n getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n"]}
1
+ {"version":3,"sources":["../src/server.ts"],"names":["createWishlistStackClient"],"mappings":"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","file":"server.cjs","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),\n getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n"]}
package/dist/server.js CHANGED
@@ -5,10 +5,11 @@ function createLazyWishlistStackClient(getClient) {
5
5
  return {
6
6
  lists: {
7
7
  getAll: (query) => getClient().then((c) => c.lists.getAll(query)),
8
- getById: (listId) => getClient().then((c) => c.lists.getById(listId)),
8
+ getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),
9
9
  create: (body) => getClient().then((c) => c.lists.create(body)),
10
10
  update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),
11
11
  remove: (listId) => getClient().then((c) => c.lists.remove(listId)),
12
+ duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),
12
13
  addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),
13
14
  updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),
14
15
  removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),
@@ -23,13 +24,14 @@ function createLazyWishlistStackClient(getClient) {
23
24
  create: (body) => getClient().then((c) => c.groups.create(body)),
24
25
  update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),
25
26
  remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),
27
+ duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),
26
28
  reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),
27
29
  share: (groupId) => getClient().then((c) => c.groups.share(groupId)),
28
30
  unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId))
29
31
  },
30
32
  shared: {
31
- getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),
32
- getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId))
33
+ getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),
34
+ getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query))
33
35
  }
34
36
  };
35
37
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.ts"],"names":[],"mappings":"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","file":"server.js","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId) => getClient().then((c) => c.lists.getById(listId)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId) => getClient().then((c) => c.shared.getSharedList(listId)),\n getSharedGroup: (groupId) => getClient().then((c) => c.shared.getSharedGroup(groupId)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n"]}
1
+ {"version":3,"sources":["../src/server.ts"],"names":[],"mappings":"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","file":"server.js","sourcesContent":["import { createWishlistStackClient, type WishlistStackClient } from \"@sdg.la/wishlist-stack-sdk\";\nimport type { WishlistStackHydrogenOptions, WishlistStackHydrogenServer } from \"./types\";\n\nfunction createLazyWishlistStackClient(getClient: () => Promise<WishlistStackClient>): WishlistStackClient {\n return {\n lists: {\n getAll: (query) => getClient().then((c) => c.lists.getAll(query)),\n getById: (listId, query) => getClient().then((c) => c.lists.getById(listId, query)),\n create: (body) => getClient().then((c) => c.lists.create(body)),\n update: (listId, body) => getClient().then((c) => c.lists.update(listId, body)),\n remove: (listId) => getClient().then((c) => c.lists.remove(listId)),\n duplicate: (listId) => getClient().then((c) => c.lists.duplicate(listId)),\n addItems: (listId, body) => getClient().then((c) => c.lists.addItems(listId, body)),\n updateItem: (listId, itemId, body) => getClient().then((c) => c.lists.updateItem(listId, itemId, body)),\n removeItem: (listId, itemId) => getClient().then((c) => c.lists.removeItem(listId, itemId)),\n reorderItems: (listId, body) => getClient().then((c) => c.lists.reorderItems(listId, body)),\n share: (listId) => getClient().then((c) => c.lists.share(listId)),\n unshare: (listId) => getClient().then((c) => c.lists.unshare(listId)),\n addItemsLegacy: (id, body) => getClient().then((c) => c.lists.addItemsLegacy(id, body)),\n },\n groups: {\n getAll: (query) => getClient().then((c) => c.groups.getAll(query)),\n getById: (groupId, query) => getClient().then((c) => c.groups.getById(groupId, query)),\n create: (body) => getClient().then((c) => c.groups.create(body)),\n update: (groupId, body) => getClient().then((c) => c.groups.update(groupId, body)),\n remove: (groupId) => getClient().then((c) => c.groups.remove(groupId)),\n duplicate: (groupId) => getClient().then((c) => c.groups.duplicate(groupId)),\n reorder: (groupId, body) => getClient().then((c) => c.groups.reorder(groupId, body)),\n share: (groupId) => getClient().then((c) => c.groups.share(groupId)),\n unshare: (groupId) => getClient().then((c) => c.groups.unshare(groupId)),\n },\n shared: {\n getSharedList: (listId, query) => getClient().then((c) => c.shared.getSharedList(listId, query)),\n getSharedGroup: (groupId, query) => getClient().then((c) => c.shared.getSharedGroup(groupId, query)),\n },\n };\n}\n\nasync function defaultGetCustomerAccessToken(context: unknown): Promise<string | undefined> {\n const anyCtx = context as any;\n const customerAccount = anyCtx?.customerAccount;\n const fn = customerAccount?.getAccessToken;\n if (typeof fn !== \"function\") return undefined;\n try {\n const token = await fn.call(customerAccount);\n return typeof token === \"string\" ? token : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function createWishlistStackServerContext(options: WishlistStackHydrogenOptions) {\n return function attachToContext(context: unknown): { wishlistStack: WishlistStackHydrogenServer; wishlistStackClient: WishlistStackClient } {\n if (!options.apiKey) {\n throw new Error(\"merchant api key is required. Pass it to createWishlistStackServerContext({ apiKey })\");\n }\n\n const getToken = async () => {\n if (options.getCustomerAccessToken) {\n const token = await options.getCustomerAccessToken(context);\n return typeof token === \"string\" ? token : undefined;\n }\n return await defaultGetCustomerAccessToken(context);\n };\n\n let cachedClient: WishlistStackClient | undefined;\n let cachedToken: string | undefined;\n\n const server: WishlistStackHydrogenServer = {\n async getCustomerAccessToken() {\n return await getToken();\n },\n async getClient() {\n const token = await getToken();\n // Cache by token value so calls within a single request reuse the client.\n if (cachedClient && cachedToken === token) return cachedClient;\n cachedToken = token;\n cachedClient = createWishlistStackClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n });\n return cachedClient;\n },\n async bootstrapClientConfig(opts) {\n const expose = opts?.exposeCustomerAccessToken ?? false;\n const token = expose ? await getToken() : undefined;\n return {\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n customerAccessToken: token,\n };\n },\n };\n\n const wishlistStackClient = createLazyWishlistStackClient(server.getClient);\n\n const anyCtx = context as any;\n if (anyCtx && typeof anyCtx.set === \"function\") {\n // Context map style (some React Router middleware implementations).\n anyCtx.set(\"wishlistStack\", server);\n anyCtx.set(\"wishlistStackClient\", wishlistStackClient);\n } else if (anyCtx && typeof anyCtx === \"object\") {\n // Plain object style (Hydrogen load context is an object).\n anyCtx.wishlistStack = server;\n anyCtx.wishlistStackClient = wishlistStackClient;\n }\n\n return { wishlistStack: server, wishlistStackClient };\n };\n}\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sdg.la/wishlist-stack-hydrogen",
3
- "version": "0.10.1",
3
+ "version": "0.12.0",
4
4
  "description": "Hydrogen (react-router) integration for wishlist-stack-sdk",
5
5
  "repository": {
6
6
  "type": "git",
@@ -38,7 +38,7 @@
38
38
  ],
39
39
  "sideEffects": false,
40
40
  "dependencies": {
41
- "@sdg.la/wishlist-stack-sdk": "^0.10.1"
41
+ "@sdg.la/wishlist-stack-sdk": "^0.12.0"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "react": ">=18",