@ehrenkind/shopify-lib 0.8.1 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -20862,6 +20862,11 @@ type OrderByIdFullQuery = {
20862
20862
  order?: Maybe<(Pick<Order, 'id' | 'name' | 'createdAt' | 'updatedAt' | 'processedAt' | 'closedAt' | 'cancelledAt' | 'cancelReason' | 'displayFinancialStatus' | 'displayFulfillmentStatus' | 'discountCodes'> & {
20863
20863
  totalPriceSet: {
20864
20864
  shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20865
+ presentmentMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20866
+ };
20867
+ currentTotalPriceSet: {
20868
+ shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20869
+ presentmentMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20865
20870
  };
20866
20871
  customer?: Maybe<Pick<Customer$1, 'id' | 'firstName' | 'lastName' | 'email' | 'phone'>>;
20867
20872
  shippingAddress?: Maybe<Pick<MailingAddress, 'firstName' | 'lastName' | 'address1' | 'address2' | 'city' | 'province' | 'country' | 'zip'>>;
@@ -20876,6 +20881,7 @@ type OrderByIdFullQuery = {
20876
20881
  discountAllocations: Array<{
20877
20882
  allocatedAmountSet: {
20878
20883
  shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20884
+ presentmentMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20879
20885
  };
20880
20886
  }>;
20881
20887
  image?: Maybe<Pick<Image, 'url' | 'width' | 'height' | 'altText'>>;
@@ -21202,7 +21208,7 @@ interface GeneratedQueryTypes {
21202
21208
  return: OrderByIdQuery;
21203
21209
  variables: OrderByIdQueryVariables;
21204
21210
  };
21205
- "#graphql\n query orderByIdFull($id: ID!) {\n order(id: $id) {\n id\n name\n createdAt\n updatedAt\n processedAt\n closedAt\n cancelledAt\n cancelReason\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n firstName\n lastName\n email\n phone\n }\n displayFinancialStatus\n displayFulfillmentStatus\n shippingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n billingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n lineItems(first: 100) {\n edges {\n node {\n id\n sku\n title\n variantTitle\n quantity\n customAttributes {\n key\n value\n }\n originalUnitPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n discountAllocations {\n allocatedAmountSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n vendor\n image {\n url\n width\n height\n altText\n }\n lineItemGroup {\n id\n title\n quantity\n variantSku\n }\n }\n }\n }\n discountApplications(first: 20) {\n nodes {\n allocationMethod\n targetType\n value {\n __typename\n ... on PricingPercentageValue {\n percentage\n }\n ... on MoneyV2 {\n amount\n currencyCode\n }\n }\n ... on DiscountCodeApplication {\n code\n }\n }\n }\n fulfillments {\n id\n name\n totalQuantity\n status\n createdAt\n estimatedDeliveryAt\n deliveredAt\n trackingInfo {\n company\n number\n url\n }\n fulfillmentLineItems(first: 100) {\n edges {\n node {\n id\n quantity\n lineItem {\n id\n sku\n }\n }\n }\n }\n }\n shippingLine {\n originalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n taxLines {\n priceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n totalDiscountsSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n discountCodes\n refunds {\n totalRefundedSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n transactions(first: 50) {\n nodes {\n kind\n amountSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n }\n }\n }\n }\n": {
21211
+ "#graphql\n query orderByIdFull($id: ID!) {\n order(id: $id) {\n id\n name\n createdAt\n updatedAt\n processedAt\n closedAt\n cancelledAt\n cancelReason\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n presentmentMoney {\n amount\n currencyCode\n }\n }\n currentTotalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n presentmentMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n firstName\n lastName\n email\n phone\n }\n displayFinancialStatus\n displayFulfillmentStatus\n shippingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n billingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n lineItems(first: 100) {\n edges {\n node {\n id\n sku\n title\n variantTitle\n quantity\n customAttributes {\n key\n value\n }\n originalUnitPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n discountAllocations {\n allocatedAmountSet {\n shopMoney {\n amount\n currencyCode\n }\n presentmentMoney {\n amount\n currencyCode\n }\n }\n }\n vendor\n image {\n url\n width\n height\n altText\n }\n lineItemGroup {\n id\n title\n quantity\n variantSku\n }\n }\n }\n }\n discountApplications(first: 20) {\n nodes {\n allocationMethod\n targetType\n value {\n __typename\n ... on PricingPercentageValue {\n percentage\n }\n ... on MoneyV2 {\n amount\n currencyCode\n }\n }\n ... on DiscountCodeApplication {\n code\n }\n }\n }\n fulfillments {\n id\n name\n totalQuantity\n status\n createdAt\n estimatedDeliveryAt\n deliveredAt\n trackingInfo {\n company\n number\n url\n }\n fulfillmentLineItems(first: 100) {\n edges {\n node {\n id\n quantity\n lineItem {\n id\n sku\n }\n }\n }\n }\n }\n shippingLine {\n originalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n taxLines {\n priceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n totalDiscountsSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n discountCodes\n refunds {\n totalRefundedSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n transactions(first: 50) {\n nodes {\n kind\n amountSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n }\n }\n }\n }\n": {
21206
21212
  return: OrderByIdFullQuery;
21207
21213
  variables: OrderByIdFullQueryVariables;
21208
21214
  };
package/dist/index.d.ts CHANGED
@@ -20862,6 +20862,11 @@ type OrderByIdFullQuery = {
20862
20862
  order?: Maybe<(Pick<Order, 'id' | 'name' | 'createdAt' | 'updatedAt' | 'processedAt' | 'closedAt' | 'cancelledAt' | 'cancelReason' | 'displayFinancialStatus' | 'displayFulfillmentStatus' | 'discountCodes'> & {
20863
20863
  totalPriceSet: {
20864
20864
  shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20865
+ presentmentMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20866
+ };
20867
+ currentTotalPriceSet: {
20868
+ shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20869
+ presentmentMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20865
20870
  };
20866
20871
  customer?: Maybe<Pick<Customer$1, 'id' | 'firstName' | 'lastName' | 'email' | 'phone'>>;
20867
20872
  shippingAddress?: Maybe<Pick<MailingAddress, 'firstName' | 'lastName' | 'address1' | 'address2' | 'city' | 'province' | 'country' | 'zip'>>;
@@ -20876,6 +20881,7 @@ type OrderByIdFullQuery = {
20876
20881
  discountAllocations: Array<{
20877
20882
  allocatedAmountSet: {
20878
20883
  shopMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20884
+ presentmentMoney: Pick<MoneyV2, 'amount' | 'currencyCode'>;
20879
20885
  };
20880
20886
  }>;
20881
20887
  image?: Maybe<Pick<Image, 'url' | 'width' | 'height' | 'altText'>>;
@@ -21202,7 +21208,7 @@ interface GeneratedQueryTypes {
21202
21208
  return: OrderByIdQuery;
21203
21209
  variables: OrderByIdQueryVariables;
21204
21210
  };
21205
- "#graphql\n query orderByIdFull($id: ID!) {\n order(id: $id) {\n id\n name\n createdAt\n updatedAt\n processedAt\n closedAt\n cancelledAt\n cancelReason\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n firstName\n lastName\n email\n phone\n }\n displayFinancialStatus\n displayFulfillmentStatus\n shippingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n billingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n lineItems(first: 100) {\n edges {\n node {\n id\n sku\n title\n variantTitle\n quantity\n customAttributes {\n key\n value\n }\n originalUnitPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n discountAllocations {\n allocatedAmountSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n vendor\n image {\n url\n width\n height\n altText\n }\n lineItemGroup {\n id\n title\n quantity\n variantSku\n }\n }\n }\n }\n discountApplications(first: 20) {\n nodes {\n allocationMethod\n targetType\n value {\n __typename\n ... on PricingPercentageValue {\n percentage\n }\n ... on MoneyV2 {\n amount\n currencyCode\n }\n }\n ... on DiscountCodeApplication {\n code\n }\n }\n }\n fulfillments {\n id\n name\n totalQuantity\n status\n createdAt\n estimatedDeliveryAt\n deliveredAt\n trackingInfo {\n company\n number\n url\n }\n fulfillmentLineItems(first: 100) {\n edges {\n node {\n id\n quantity\n lineItem {\n id\n sku\n }\n }\n }\n }\n }\n shippingLine {\n originalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n taxLines {\n priceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n totalDiscountsSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n discountCodes\n refunds {\n totalRefundedSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n transactions(first: 50) {\n nodes {\n kind\n amountSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n }\n }\n }\n }\n": {
21211
+ "#graphql\n query orderByIdFull($id: ID!) {\n order(id: $id) {\n id\n name\n createdAt\n updatedAt\n processedAt\n closedAt\n cancelledAt\n cancelReason\n totalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n presentmentMoney {\n amount\n currencyCode\n }\n }\n currentTotalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n presentmentMoney {\n amount\n currencyCode\n }\n }\n customer {\n id\n firstName\n lastName\n email\n phone\n }\n displayFinancialStatus\n displayFulfillmentStatus\n shippingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n billingAddress {\n firstName\n lastName\n address1\n address2\n city\n province\n country\n zip\n }\n lineItems(first: 100) {\n edges {\n node {\n id\n sku\n title\n variantTitle\n quantity\n customAttributes {\n key\n value\n }\n originalUnitPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n discountAllocations {\n allocatedAmountSet {\n shopMoney {\n amount\n currencyCode\n }\n presentmentMoney {\n amount\n currencyCode\n }\n }\n }\n vendor\n image {\n url\n width\n height\n altText\n }\n lineItemGroup {\n id\n title\n quantity\n variantSku\n }\n }\n }\n }\n discountApplications(first: 20) {\n nodes {\n allocationMethod\n targetType\n value {\n __typename\n ... on PricingPercentageValue {\n percentage\n }\n ... on MoneyV2 {\n amount\n currencyCode\n }\n }\n ... on DiscountCodeApplication {\n code\n }\n }\n }\n fulfillments {\n id\n name\n totalQuantity\n status\n createdAt\n estimatedDeliveryAt\n deliveredAt\n trackingInfo {\n company\n number\n url\n }\n fulfillmentLineItems(first: 100) {\n edges {\n node {\n id\n quantity\n lineItem {\n id\n sku\n }\n }\n }\n }\n }\n shippingLine {\n originalPriceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n taxLines {\n priceSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n totalDiscountsSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n discountCodes\n refunds {\n totalRefundedSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n transactions(first: 50) {\n nodes {\n kind\n amountSet {\n shopMoney {\n amount\n currencyCode\n }\n }\n }\n }\n }\n }\n }\n": {
21206
21212
  return: OrderByIdFullQuery;
21207
21213
  variables: OrderByIdFullQueryVariables;
21208
21214
  };
package/dist/index.mjs CHANGED
@@ -143,13 +143,21 @@ var RETRYABLE_ERROR_CODES = /* @__PURE__ */ new Set([
143
143
  "UND_ERR_SOCKET",
144
144
  "UND_ERR_CONNECT_TIMEOUT",
145
145
  "UND_ERR_HEADERS_TIMEOUT",
146
- "UND_ERR_BODY_TIMEOUT"
146
+ "UND_ERR_BODY_TIMEOUT",
147
+ // Shopify GraphQL rate limiting — backoff lets the leaky bucket refill
148
+ "THROTTLED"
147
149
  ]);
148
150
  function hasRetryableCode(value) {
149
151
  if (!value || typeof value !== "object") return false;
150
152
  const code = value.code;
151
153
  return typeof code === "string" && RETRYABLE_ERROR_CODES.has(code);
152
154
  }
155
+ function isThrottledErrors(errors) {
156
+ const list = Array.isArray(errors) ? errors : [errors];
157
+ return list.some(
158
+ (e) => e?.extensions?.code === "THROTTLED"
159
+ );
160
+ }
153
161
  function isRetryableError(error) {
154
162
  if (!(error instanceof Error)) return false;
155
163
  if (hasRetryableCode(error)) return true;
@@ -237,7 +245,12 @@ async function makeRequest(query, variables, retries = 0) {
237
245
  errorMessages = JSON.stringify(errors);
238
246
  }
239
247
  logger.error("GraphQL query failed:", errorMessages);
240
- throw new Error(`GraphQL errors: ${errorMessages}`);
248
+ const graphqlError = new Error(`GraphQL errors: ${errorMessages}`);
249
+ if (isThrottledErrors(errors)) {
250
+ ;
251
+ graphqlError.code = "THROTTLED";
252
+ }
253
+ throw graphqlError;
241
254
  }
242
255
  if (!response.data) {
243
256
  throw new Error("No data in Shopify API response");
@@ -1769,6 +1782,20 @@ var queryOrderByIdFull = gql`#graphql
1769
1782
  amount
1770
1783
  currencyCode
1771
1784
  }
1785
+ presentmentMoney {
1786
+ amount
1787
+ currencyCode
1788
+ }
1789
+ }
1790
+ currentTotalPriceSet {
1791
+ shopMoney {
1792
+ amount
1793
+ currencyCode
1794
+ }
1795
+ presentmentMoney {
1796
+ amount
1797
+ currencyCode
1798
+ }
1772
1799
  }
1773
1800
  customer {
1774
1801
  id
@@ -1823,6 +1850,10 @@ var queryOrderByIdFull = gql`#graphql
1823
1850
  amount
1824
1851
  currencyCode
1825
1852
  }
1853
+ presentmentMoney {
1854
+ amount
1855
+ currencyCode
1856
+ }
1826
1857
  }
1827
1858
  }
1828
1859
  vendor