@ordersail/storefront-sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -29,7 +29,9 @@ const storefrontApi = new StorefrontClient(
29
29
  "sfk_...", // your account's app key — see "Auth model" below
30
30
  );
31
31
 
32
- // reads return the data directly, or undefined if not found
32
+ // reads return the data directly — most throw ApiError on failure just
33
+ // like mutations; a few return undefined for one specific, expected
34
+ // outcome (see "Resources" below)
33
35
  const products = await storefrontApi.products.list({ limit: 20 });
34
36
 
35
37
  // mutations throw a typed ApiError on failure
@@ -46,27 +48,38 @@ try {
46
48
 
47
49
  | Resource | Method | Throws `ApiError`? |
48
50
  | ------------------------------ | ---------------------------------------- | ------------------- |
49
- | `storefrontApi.products` | `list(query?)` | no |
50
- | | `getById(id)` | no |
51
- | `storefrontApi.cart` | `get()` | no |
51
+ | `storefrontApi.products` | `list(query?)` | **yes** |
52
+ | | `getById(id)` | only unexpectedly¹ |
53
+ | `storefrontApi.cart` | `get()` | only unexpectedly¹ |
52
54
  | | `addItem(body)` | **yes** |
53
55
  | | `updateItem(variantId, body)` | **yes** |
54
56
  | | `removeItem(variantId)` | **yes** |
55
57
  | | `clear()` | **yes** |
56
- | `storefrontApi.checkout` | `getConfig()` | no |
58
+ | `storefrontApi.checkout` | `getConfig()` | **yes** |
57
59
  | | `createSession(body)` | **yes** |
58
- | | `getSessionStatus(sessionId)` | no |
59
- | | `getShippingOptions(body)` | no |
60
- | `storefrontApi.customer` | `get()` | no |
60
+ | | `getSessionStatus(sessionId)` | only unexpectedly¹ |
61
+ | | `getShippingOptions(body)` | **yes** |
62
+ | `storefrontApi.customer` | `get()` | only unexpectedly² |
61
63
  | | `update(params)` | **yes** |
62
64
  | `storefrontApi` (top level) | `signUp(dto)` | **yes** |
63
65
  | | `signIn(credentials)` | **yes** |
64
- | | `refreshAccessToken()` | no |
66
+ | | `refreshAccessToken()` | only unexpectedly² |
65
67
  | | `logout()` | no |
66
68
 
67
- The convention throughout: a read returns the response body directly (or
68
- `undefined` on a non-2xx response), while a mutation throws `ApiError` so a
69
- failure can't be silently ignored.
69
+ The convention throughout: a mutation always throws `ApiError` on a non-2xx
70
+ response. A read does too, *unless* it has exactly one well-understood "no
71
+ data" outcome, in which case it returns `undefined` for that one status and
72
+ still throws for everything else:
73
+
74
+ ¹ `getById`/`cart.get`/`getSessionStatus` return `undefined` only on a `404`
75
+ (a genuine lookup miss — no such product, no cart yet for this token, no
76
+ such session) — a bad app-key, a `500`, or a network failure throws instead
77
+ of looking identical to "not found."
78
+
79
+ ² `customer.get()`/`refreshAccessToken()` return `undefined` only on a `401`
80
+ (not currently signed in — the everyday case for most visitors) — anything
81
+ else, including a `404` (a customer row missing despite a valid token, which
82
+ would be an anomaly, not a normal state), throws instead.
70
83
 
71
84
  Not yet supported: **order history** for customers (`storefront-api` has no
72
85
  customer-facing order endpoints yet — see Storefront Builder M5) and
@@ -105,13 +118,13 @@ Two independent layers, both handled for you by `StorefrontClient`:
105
118
  cookie the browser sends automatically (`credentials: "include"`). Call
106
119
  `refreshAccessToken()` on app start to restore a session from that cookie.
107
120
 
108
- **Known gap**: only `customer.get()`/`customer.update()` currently retry
109
- once on a `401` by calling `refreshAccessToken()` and re-issuing the
110
- request. `cart` and `checkout` methods do not — if you're calling them a
111
- long time after the last customer request, a stale in-memory token can
112
- produce an unhandled `401`. Call `refreshAccessToken()` proactively if this
113
- matters for your integration, or treat it as a signed-out state and prompt
114
- sign-in again.
121
+ Only `customer.get()`/`customer.update()` retry once on a `401` by calling
122
+ `refreshAccessToken()` and re-issuing the request — `cart` and `checkout`
123
+ methods don't, and don't need to: they never check the customer JWT at all.
124
+ Cart/checkout identity flows entirely through the `x-cart-token` header
125
+ (guest checkout is fully supported), so the only thing that can produce a
126
+ 401 there is a missing/invalid/revoked `x-app-key` — an entirely different
127
+ credential that refreshing the customer's access token can't fix.
115
128
 
116
129
  ## Regenerating after an API change
117
130
 
package/dist/http.d.ts CHANGED
@@ -17,4 +17,9 @@ export declare function unwrap<T>(result: {
17
17
  error?: unknown;
18
18
  response: Response;
19
19
  }): T;
20
+ export declare function unwrapOrUndefinedOn<T>(result: {
21
+ data?: T;
22
+ error?: unknown;
23
+ response: Response;
24
+ }, expectedStatus: number): T | undefined;
20
25
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC,CAAC;AAKH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,EACnB,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAClB,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAIhE,qBAAa,QAAS,SAAQ,KAAK;IAG/B,QAAQ,CAAC,MAAM,EAAE,MAAM;gBADvB,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM;CAK1B;AAKD,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE;IAChC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB,GAAG,CAAC,CAaJ"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC,CAAC;AAKH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,EACnB,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAClB,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAIhE,qBAAa,QAAS,SAAQ,KAAK;IAG/B,QAAQ,CAAC,MAAM,EAAE,MAAM;gBADvB,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM;CAK1B;AAkBD,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE;IAChC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB,GAAG,CAAC,CAGJ;AAMD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,EACzD,cAAc,EAAE,MAAM,GACrB,CAAC,GAAG,SAAS,CAIf"}
package/dist/http.js CHANGED
@@ -8,21 +8,34 @@ export class ApiError extends Error {
8
8
  this.name = "ApiError";
9
9
  }
10
10
  }
11
- // openapi-fetch resolves non-2xx as { error } rather than throwing. Resource
12
- // methods that mutate use this so callers can `try/catch` and show the API's
13
- // message instead of a generic string.
14
- export function unwrap(result) {
15
- if (result.data !== undefined)
16
- return result.data;
11
+ function buildErrorMessage(result) {
17
12
  const body = result.error;
18
13
  const raw = body && typeof body === "object" && "message" in body
19
14
  ? body.message
20
15
  : undefined;
21
- const message = Array.isArray(raw)
16
+ return Array.isArray(raw)
22
17
  ? raw.join(", ")
23
18
  : typeof raw === "string" && raw
24
19
  ? raw
25
20
  : `Request failed (${result.response.status})`;
26
- throw new ApiError(message, result.response.status);
21
+ }
22
+ // openapi-fetch resolves non-2xx as { error } rather than throwing. Resource
23
+ // methods that mutate use this so callers can `try/catch` and show the API's
24
+ // message instead of a generic string.
25
+ export function unwrap(result) {
26
+ if (result.data !== undefined)
27
+ return result.data;
28
+ throw new ApiError(buildErrorMessage(result), result.response.status);
29
+ }
30
+ // A few reads have exactly one well-understood "no data" outcome (a lookup
31
+ // miss, or "not currently signed in") — anything else is a real failure and
32
+ // should surface as ApiError just like a mutation, not collapse to the same
33
+ // undefined a caller can't distinguish from the expected case.
34
+ export function unwrapOrUndefinedOn(result, expectedStatus) {
35
+ if (result.data !== undefined)
36
+ return result.data;
37
+ if (result.response.status === expectedStatus)
38
+ return undefined;
39
+ throw new ApiError(buildErrorMessage(result), result.response.status);
27
40
  }
28
41
  //# sourceMappingURL=http.js.map
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAaA,6EAA6E;AAC7E,8EAA8E;AAC9E,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGtB;IAFX,YACE,OAAe,EACN,MAAc;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,WAAM,GAAN,MAAM,CAAQ;QAGvB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,6EAA6E;AAC7E,6EAA6E;AAC7E,uCAAuC;AACvC,MAAM,UAAU,MAAM,CAAI,MAIzB;IACC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAClD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;IAC1B,MAAM,GAAG,GACP,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,IAAI;QACnD,CAAC,CAAE,IAA6B,CAAC,OAAO;QACxC,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAChB,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG;YAC9B,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,mBAAmB,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;IACnD,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAaA,6EAA6E;AAC7E,8EAA8E;AAC9E,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGtB;IAFX,YACE,OAAe,EACN,MAAc;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,WAAM,GAAN,MAAM,CAAQ;QAGvB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,MAA+C;IACxE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;IAC1B,MAAM,GAAG,GACP,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,IAAI;QACnD,CAAC,CAAE,IAA6B,CAAC,OAAO;QACxC,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QACvB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAChB,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG;YAC9B,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,mBAAmB,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;AACrD,CAAC;AAED,6EAA6E;AAC7E,6EAA6E;AAC7E,uCAAuC;AACvC,MAAM,UAAU,MAAM,CAAI,MAIzB;IACC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAClD,MAAM,IAAI,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC;AAED,2EAA2E;AAC3E,4EAA4E;AAC5E,4EAA4E;AAC5E,+DAA+D;AAC/D,MAAM,UAAU,mBAAmB,CACjC,MAAyD,EACzD,cAAsB;IAEtB,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAClD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,cAAc;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,IAAI,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAqB,EAAE,KAAK,MAAM,EAAmB,MAAM,eAAe,CAAC;AAC3E,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAC3E,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC;AACnE,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC;AAC/E,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC;AACjF,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AACjD,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACvE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACrE,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,uBAAuB,CAAC,CAAC;AACnF,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC;AACzD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAC3E,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAC3E,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAI3E,qBAAa,gBAAgB;IAC3B,MAAM,EAAE,MAAM,CAAC;IAGf,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAG9B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtB,QAAQ,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACpD,IAAI,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;IAC5C,QAAQ,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACpD,QAAQ,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IAKpD,OAAO,CAAC,cAAc,CAKpB;gBAEU,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IA6BzD,MAAM,CAAC,MAAM,EAAE,iBAAiB;IAQhC,MAAM,CAAC,WAAW,EAAE,iBAAiB;IASrC,kBAAkB;IAQlB,MAAM;YAME,EAAE;CAUjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAqB,EAAE,KAAK,MAAM,EAAmB,MAAM,eAAe,CAAC;AAC3E,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAC3E,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC;AACnE,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC;AAC/E,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC;AACjF,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AACjD,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACvE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACrE,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,uBAAuB,CAAC,CAAC;AACnF,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC;AACzD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAC3E,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAC3E,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAI3E,qBAAa,gBAAgB;IAC3B,MAAM,EAAE,MAAM,CAAC;IAGf,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAG9B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtB,QAAQ,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACpD,IAAI,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;IAC5C,QAAQ,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACpD,QAAQ,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IAKpD,OAAO,CAAC,cAAc,CAKpB;gBAEU,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IA6BzD,MAAM,CAAC,MAAM,EAAE,iBAAiB;IAQhC,MAAM,CAAC,WAAW,EAAE,iBAAiB;IAYrC,kBAAkB;IAQlB,MAAM;YAME,EAAE;CAUjB"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import createClient, {} from "openapi-fetch";
2
- import { unwrap } from "./http.js";
2
+ import { unwrap, unwrapOrUndefinedOn } from "./http.js";
3
3
  export { ApiError } from "./http.js";
4
4
  import { createProductsResource } from "./resources/products.js";
5
5
  import { createCartResource } from "./resources/cart.js";
@@ -65,9 +65,12 @@ export class StorefrontClient {
65
65
  this.accessToken = unwrap(result).access_token;
66
66
  return this.accessToken;
67
67
  }
68
+ // 401 = no valid session cookie, the expected "not signed in" outcome —
69
+ // anything else (a real 500/network failure) should surface, not silently
70
+ // leave accessToken unset
68
71
  async refreshAccessToken() {
69
- const { data } = await this.client.GET("/auth/token/refresh");
70
- this.accessToken = data?.access_token;
72
+ const result = await this.client.GET("/auth/token/refresh");
73
+ this.accessToken = unwrapOrUndefinedOn(result, 401)?.access_token;
71
74
  return this.accessToken;
72
75
  }
73
76
  // clears the httpOnly customer_refresh_token cookie server-side — the
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cart.d.ts","sourceRoot":"","sources":["../../src/resources/cart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKzD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EACrB,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,EACtC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;oBAoBb,UAAU,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC;;eA2CmrN,qBAAsB;;;;;;;;;;;;;;;;;;;;;;4BA7BzvN,MAAM,QACX,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC;;;;;;;;;;;;;;;;;;4BAYpB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAevC"}
1
+ {"version":3,"file":"cart.d.ts","sourceRoot":"","sources":["../../src/resources/cart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKzD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EACrB,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,EACtC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;oBAoBb,UAAU,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC;;eA4C4jN,qBAAsB;;;;;;;;;;;;;;;;;;;;;;4BA7BloN,MAAM,QACX,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC;;;;;;;;;;;;;;;;;;4BAYpB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAevC"}
@@ -1,4 +1,4 @@
1
- import { unwrap } from "../http.js";
1
+ import { unwrap, unwrapOrUndefinedOn } from "../http.js";
2
2
  const CART_TOKEN_HEADER = "x-cart-token";
3
3
  export function createCartResource(client, getCartToken, setCartToken) {
4
4
  // x-cart-token isn't a documented OpenAPI header parameter (it's read via
@@ -24,9 +24,10 @@ export function createCartResource(client, getCartToken, setCartToken) {
24
24
  });
25
25
  return captureToken(unwrap(result));
26
26
  },
27
+ // 404 = no cart yet for this token — the everyday first-visit case
27
28
  get: async () => {
28
- const { data } = await client.GET("/cart", { headers: cartHeaders() });
29
- return data;
29
+ const result = await client.GET("/cart", { headers: cartHeaders() });
30
+ return unwrapOrUndefinedOn(result, 404);
30
31
  },
31
32
  updateItem: async (variantId, body) => {
32
33
  const path = { variantId: String(variantId) };
@@ -1 +1 @@
1
- {"version":3,"file":"cart.js","sourceRoot":"","sources":["../../src/resources/cart.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAChC,MAAqB,EACrB,YAAsC,EACtC,YAAqC;IAErC,0EAA0E;IAC1E,wEAAwE;IACxE,gEAAgE;IAChE,SAAS,WAAW;QAClB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,CAAC;IAED,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,2EAA2E;IAC3E,SAAS,YAAY,CAAC,IAAmC;QACvD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,IAA6C,EAAE,EAAE;YAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC9C,IAAI;gBACJ,OAAO,EAAE,WAAW,EAAE;aACvB,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,UAAU,EAAE,KAAK,EACf,SAAiB,EACjB,IAAgD,EAChD,EAAE;YACF,MAAM,IAAI,GACR,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;gBAC3D,MAAM,EAAE,EAAE,IAAI,EAAE;gBAChB,IAAI;gBACJ,OAAO,EAAE,WAAW,EAAE;aACvB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,UAAU,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;YACtC,MAAM,IAAI,GACR,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE;gBAC5D,MAAM,EAAE,EAAE,IAAI,EAAE;gBAChB,OAAO,EAAE,WAAW,EAAE;aACvB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;YACxE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"cart.js","sourceRoot":"","sources":["../../src/resources/cart.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAChC,MAAqB,EACrB,YAAsC,EACtC,YAAqC;IAErC,0EAA0E;IAC1E,wEAAwE;IACxE,gEAAgE;IAChE,SAAS,WAAW;QAClB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,CAAC;IAED,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,2EAA2E;IAC3E,SAAS,YAAY,CAAC,IAAmC;QACvD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,IAA6C,EAAE,EAAE;YAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC9C,IAAI;gBACJ,OAAO,EAAE,WAAW,EAAE;aACvB,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,mEAAmE;QACnE,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;YACrE,OAAO,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;QAED,UAAU,EAAE,KAAK,EACf,SAAiB,EACjB,IAAgD,EAChD,EAAE;YACF,MAAM,IAAI,GACR,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;gBAC3D,MAAM,EAAE,EAAE,IAAI,EAAE;gBAChB,IAAI;gBACJ,OAAO,EAAE,WAAW,EAAE;aACvB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,UAAU,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;YACtC,MAAM,IAAI,GACR,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE;gBAC5D,MAAM,EAAE,EAAE,IAAI,EAAE;gBAChB,OAAO,EAAE,WAAW,EAAE;aACvB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;YACxE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -4,7 +4,7 @@ export declare function createCheckoutResource(client: Client<paths>, getCartTok
4
4
  getConfig: () => Promise<{
5
5
  ready: boolean;
6
6
  stripeAccountId: string | null;
7
- } | undefined>;
7
+ }>;
8
8
  createSession: (body: components["schemas"]["CreateCheckoutSessionDto"]) => Promise<{
9
9
  clientSecret: string;
10
10
  }>;
@@ -16,6 +16,6 @@ export declare function createCheckoutResource(client: Client<paths>, getCartTok
16
16
  getShippingOptions: (body: components["schemas"]["GetShippingOptionsDto"]) => Promise<{
17
17
  ok: boolean;
18
18
  errorMessage?: string;
19
- } | undefined>;
19
+ }>;
20
20
  };
21
21
  //# sourceMappingURL=checkout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/resources/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKzD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EACrB,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS;;;;;0BAaR,UAAU,CAAC,SAAS,CAAC,CAAC,0BAA0B,CAAC;;;kCAQzC,MAAM;;;;;+BAUlC,UAAU,CAAC,SAAS,CAAC,CAAC,uBAAuB,CAAC;;;;EAMzD"}
1
+ {"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/resources/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKzD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EACrB,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS;;;;;0BAcR,UAAU,CAAC,SAAS,CAAC,CAAC,0BAA0B,CAAC;;;kCASzC,MAAM;;;;;+BAWlC,UAAU,CAAC,SAAS,CAAC,CAAC,uBAAuB,CAAC;;;;EAMzD"}
@@ -1,4 +1,4 @@
1
- import { unwrap } from "../http.js";
1
+ import { unwrap, unwrapOrUndefinedOn } from "../http.js";
2
2
  const CART_TOKEN_HEADER = "x-cart-token";
3
3
  export function createCheckoutResource(client, getCartToken) {
4
4
  function cartHeaders() {
@@ -6,9 +6,10 @@ export function createCheckoutResource(client, getCartToken) {
6
6
  return token ? { [CART_TOKEN_HEADER]: token } : {};
7
7
  }
8
8
  return {
9
+ // no legitimate "empty" case — always returns a body (ready: boolean)
9
10
  getConfig: async () => {
10
- const { data } = await client.GET("/checkout/config");
11
- return data;
11
+ const result = await client.GET("/checkout/config");
12
+ return unwrap(result);
12
13
  },
13
14
  createSession: async (body) => {
14
15
  const result = await client.POST("/checkout/session", {
@@ -17,16 +18,18 @@ export function createCheckoutResource(client, getCartToken) {
17
18
  });
18
19
  return unwrap(result);
19
20
  },
21
+ // 404 = no connected Stripe account, or an unknown/expired session id
20
22
  getSessionStatus: async (sessionId) => {
21
23
  const path = { sessionId };
22
- const { data } = await client.GET("/checkout/session/{sessionId}", {
24
+ const result = await client.GET("/checkout/session/{sessionId}", {
23
25
  params: { path },
24
26
  });
25
- return data;
27
+ return unwrapOrUndefinedOn(result, 404);
26
28
  },
29
+ // no legitimate "empty" case — a computed result, not a lookup
27
30
  getShippingOptions: async (body) => {
28
- const { data } = await client.POST("/checkout/shipping-options", { body });
29
- return data;
31
+ const result = await client.POST("/checkout/shipping-options", { body });
32
+ return unwrap(result);
30
33
  },
31
34
  };
32
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/resources/checkout.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEzC,MAAM,UAAU,sBAAsB,CACpC,MAAqB,EACrB,YAAsC;IAEtC,SAAS,WAAW;QAClB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK,IAAI,EAAE;YACpB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,aAAa,EAAE,KAAK,EAAE,IAAuD,EAAE,EAAE;YAC/E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBACpD,IAAI;gBACJ,OAAO,EAAE,WAAW,EAAE;aACvB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,gBAAgB,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;YAC5C,MAAM,IAAI,GACR,EAAE,SAAS,EAAE,CAAC;YAChB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,+BAA+B,EAAE;gBACjE,MAAM,EAAE,EAAE,IAAI,EAAE;aACjB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kBAAkB,EAAE,KAAK,EACvB,IAAoD,EACpD,EAAE;YACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/resources/checkout.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEzC,MAAM,UAAU,sBAAsB,CACpC,MAAqB,EACrB,YAAsC;IAEtC,SAAS,WAAW;QAClB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,CAAC;IAED,OAAO;QACL,sEAAsE;QACtE,SAAS,EAAE,KAAK,IAAI,EAAE;YACpB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,aAAa,EAAE,KAAK,EAAE,IAAuD,EAAE,EAAE;YAC/E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBACpD,IAAI;gBACJ,OAAO,EAAE,WAAW,EAAE;aACvB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,sEAAsE;QACtE,gBAAgB,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;YAC5C,MAAM,IAAI,GACR,EAAE,SAAS,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,+BAA+B,EAAE;gBAC/D,MAAM,EAAE,EAAE,IAAI,EAAE;aACjB,CAAC,CAAC;YACH,OAAO,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;QAED,+DAA+D;QAC/D,kBAAkB,EAAE,KAAK,EACvB,IAAoD,EACpD,EAAE;YACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACzE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"customer.d.ts","sourceRoot":"","sources":["../../src/resources/customer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAU,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAE/C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI;;;;;;;;;;qBAOlD,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC;;;;;;;;;EAOpE"}
1
+ {"version":3,"file":"customer.d.ts","sourceRoot":"","sources":["../../src/resources/customer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAA+B,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAEpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI;;;;;;;;;;qBAWlD,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC;;;;;;;;;EAOpE"}
@@ -1,9 +1,13 @@
1
- import { unwrap } from "../http.js";
1
+ import { unwrap, unwrapOrUndefinedOn } from "../http.js";
2
2
  export function createCustomerResource(client, doRequest) {
3
3
  return {
4
+ // 401 = not currently signed in (the everyday case) — a lingering 401
5
+ // after do()'s refresh-and-retry means truly not authenticated. A 404
6
+ // here would mean the customer row is missing despite a valid JWT, an
7
+ // anomaly worth throwing on rather than swallowing.
4
8
  get: async () => {
5
- const { data } = await doRequest(() => client.GET("/customer"));
6
- return data;
9
+ const result = await doRequest(() => client.GET("/customer"));
10
+ return unwrapOrUndefinedOn(result, 401);
7
11
  },
8
12
  update: async (params) => {
9
13
  const result = await doRequest(() => client.PATCH("/customer", { body: params }));
@@ -1 +1 @@
1
- {"version":3,"file":"customer.js","sourceRoot":"","sources":["../../src/resources/customer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAa,MAAM,YAAY,CAAC;AAE/C,MAAM,UAAU,sBAAsB,CAAC,MAAqB,EAAE,SAAe;IAC3E,OAAO;QACL,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAkD,EAAE,EAAE;YACnE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAClC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAC5C,CAAC;YACF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"customer.js","sourceRoot":"","sources":["../../src/resources/customer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAa,MAAM,YAAY,CAAC;AAEpE,MAAM,UAAU,sBAAsB,CAAC,MAAqB,EAAE,SAAe;IAC3E,OAAO;QACL,sEAAsE;QACtE,sEAAsE;QACtE,sEAAsE;QACtE,oDAAoD;QACpD,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;YAC9D,OAAO,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAkD,EAAE,EAAE;YACnE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAClC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAC5C,CAAC;YACF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -21,7 +21,7 @@ export declare function createProductsResource(client: Client<paths>): {
21
21
  total: number;
22
22
  limit: number;
23
23
  offset: number;
24
- } | undefined>;
24
+ }>;
25
25
  getById: (id: number) => Promise<{
26
26
  id: number;
27
27
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../src/resources/products.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;mBAG/C,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;kBAMrC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ7B"}
1
+ {"version":3,"file":"products.d.ts","sourceRoot":"","sources":["../../src/resources/products.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;mBAI/C,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;kBAMrC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ7B"}
@@ -1,15 +1,17 @@
1
+ import { unwrap, unwrapOrUndefinedOn } from "../http.js";
1
2
  export function createProductsResource(client) {
2
3
  return {
4
+ // no legitimate "empty" case for a list — any non-2xx is a real failure
3
5
  list: async (query = {}) => {
4
- const { data } = await client.GET("/products", { params: { query } });
5
- return data;
6
+ const result = await client.GET("/products", { params: { query } });
7
+ return unwrap(result);
6
8
  },
7
9
  getById: async (id) => {
8
10
  const path = {
9
11
  id: String(id),
10
12
  };
11
- const { data } = await client.GET("/products/{id}", { params: { path } });
12
- return data;
13
+ const result = await client.GET("/products/{id}", { params: { path } });
14
+ return unwrapOrUndefinedOn(result, 404);
13
15
  },
14
16
  };
15
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"products.js","sourceRoot":"","sources":["../../src/resources/products.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,sBAAsB,CAAC,MAAqB;IAC1D,OAAO;QACL,IAAI,EAAE,KAAK,EACT,QAA0D,EAAE,EAC5D,EAAE;YACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAyD;gBACjE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;aACf,CAAC;YACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"products.js","sourceRoot":"","sources":["../../src/resources/products.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,UAAU,sBAAsB,CAAC,MAAqB;IAC1D,OAAO;QACL,wEAAwE;QACxE,IAAI,EAAE,KAAK,EACT,QAA0D,EAAE,EAC5D,EAAE;YACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACpE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAyD;gBACjE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;aACf,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACxE,OAAO,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@ordersail/storefront-sdk",
3
3
  "description": "Typed client for OrderSail's storefront-api — build and host your own storefront against the same API that powers OrderSail's reference storefront.",
4
4
  "private": false,
5
- "version": "0.1.0",
5
+ "version": "0.2.0",
6
6
  "type": "module",
7
7
  "repository": {
8
8
  "type": "git",