@haatlabs-core/shopify 0.11.2 → 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/dist/billing.d.ts CHANGED
@@ -30,3 +30,9 @@ export declare function createAppSubscription(client: GraphQLRequester, input: {
30
30
  export declare function listActiveAppSubscriptions(client: GraphQLRequester): Promise<AppSubscription[]>;
31
31
  /** Ends a subscription now. Shopify does not wait for the end of the period paid for. */
32
32
  export declare function cancelAppSubscription(client: GraphQLRequester, id: string): Promise<void>;
33
+ /**
34
+ * Whether the shop is a partner development store, as Shopify says: such a store cannot be
35
+ * charged, so the app's charges there are test charges. Asked of Shopify each time, never
36
+ * guessed: an answer without the plan fails, to be tried again.
37
+ */
38
+ export declare function isDevelopmentStore(client: GraphQLRequester): Promise<boolean>;
package/dist/billing.js CHANGED
@@ -28,6 +28,11 @@ const ACTIVE_QUERY = `
28
28
  }
29
29
  }
30
30
  `;
31
+ const DEVELOPMENT_STORE_QUERY = `
32
+ query DevelopmentStore {
33
+ shop { plan { partnerDevelopment } }
34
+ }
35
+ `;
31
36
  const CANCEL_MUTATION = `
32
37
  mutation CancelAppSubscription($id: ID!) {
33
38
  appSubscriptionCancel(id: $id) {
@@ -128,4 +133,17 @@ export async function cancelAppSubscription(client, id) {
128
133
  const result = await client.request(CANCEL_MUTATION, { id });
129
134
  assertAccepted(result.appSubscriptionCancel.userErrors, 'Shopify refused to cancel');
130
135
  }
136
+ /**
137
+ * Whether the shop is a partner development store, as Shopify says: such a store cannot be
138
+ * charged, so the app's charges there are test charges. Asked of Shopify each time, never
139
+ * guessed: an answer without the plan fails, to be tried again.
140
+ */
141
+ export async function isDevelopmentStore(client) {
142
+ const result = await client.request(DEVELOPMENT_STORE_QUERY);
143
+ const answer = result.shop?.plan?.partnerDevelopment;
144
+ if (typeof answer !== 'boolean') {
145
+ throw shopifyError(ErrorCode.SHOPIFY_API_ERROR, 'Shopify did not say whether the shop is a development store', { transient: true });
146
+ }
147
+ return answer;
148
+ }
131
149
  //# sourceMappingURL=billing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAiB3D,MAAM,gBAAgB,GAAG,yCAAyC,CAAC;AAEnE,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;CAoBvB,CAAC;AACF,MAAM,YAAY,GAAG;;;;;;CAMpB,CAAC;AACF,MAAM,uBAAuB,GAAG;;;;CAI/B,CAAC;AACF,MAAM,eAAe,GAAG;;;;;;;CAOvB,CAAC;AAEF;;;;GAIG;AACH,SAAS,cAAc,CAAC,UAA0C,EAAE,IAAY;IAC9E,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,YAAY,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,KAAK,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,OAAe,EAAiC,EAAE,CACjE,YAAY,CAAC,SAAS,CAAC,iBAAiB,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAE3E,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IACD,MAAM,OAAO,CAAC,mDAAmD,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,KAAc,EAAe,EAAE;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AACxD,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAwB,EACxB,KAA+F;IAE/F,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAMhC,eAAe,EAAE;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,mBAAmB,EAAE,mBAAmB;QACxC,SAAS,EAAE;YACT;gBACE,IAAI,EAAE;oBACJ,0BAA0B,EAAE;wBAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE;wBACjE,QAAQ,EAAE,eAAe;qBAC1B;iBACF;aACF;SACF;KACF,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC;IAC7C,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,CAAC,eAAe;QAAE,MAAM,OAAO,CAAC,yCAAyC,CAAC,CAAC;IACvF,OAAO;QACL,cAAc,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE;QAC1C,eAAe,EAAE,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAwB;IAExB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAEhC,YAAY,CAAC,CAAC;IACjB,MAAM,IAAI,GAAG,MAAM,CAAC,sBAAsB,EAAE,mBAAmB,CAAC;IAChE,sFAAsF;IACtF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,MAAM,OAAO,CAAC,gDAAgD,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS;YAAE,SAAS;QACzF,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YAClD,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACxD,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI;YACvB,SAAS;YACT,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAwB,EAAE,EAAU;IAC9E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/B,MAAM,YAAY,CAAC,SAAS,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAEhC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5B,cAAc,CAAC,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;AACvF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAwB;IAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAEhC,uBAAuB,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC;IACrD,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,YAAY,CAChB,SAAS,CAAC,iBAAiB,EAC3B,6DAA6D,EAC7D,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -30,3 +30,9 @@ export declare function createAppSubscription(client: GraphQLRequester, input: {
30
30
  export declare function listActiveAppSubscriptions(client: GraphQLRequester): Promise<AppSubscription[]>;
31
31
  /** Ends a subscription now. Shopify does not wait for the end of the period paid for. */
32
32
  export declare function cancelAppSubscription(client: GraphQLRequester, id: string): Promise<void>;
33
+ /**
34
+ * Whether the shop is a partner development store, as Shopify says: such a store cannot be
35
+ * charged, so the app's charges there are test charges. Asked of Shopify each time, never
36
+ * guessed: an answer without the plan fails, to be tried again.
37
+ */
38
+ export declare function isDevelopmentStore(client: GraphQLRequester): Promise<boolean>;
@@ -19,6 +19,7 @@ var billing_exports = {};
19
19
  __export(billing_exports, {
20
20
  cancelAppSubscription: () => cancelAppSubscription,
21
21
  createAppSubscription: () => createAppSubscription,
22
+ isDevelopmentStore: () => isDevelopmentStore,
22
23
  listActiveAppSubscriptions: () => listActiveAppSubscriptions
23
24
  });
24
25
  module.exports = __toCommonJS(billing_exports);
@@ -52,6 +53,11 @@ const ACTIVE_QUERY = `
52
53
  }
53
54
  }
54
55
  `;
56
+ const DEVELOPMENT_STORE_QUERY = `
57
+ query DevelopmentStore {
58
+ shop { plan { partnerDevelopment } }
59
+ }
60
+ `;
55
61
  const CANCEL_MUTATION = `
56
62
  mutation CancelAppSubscription($id: ID!) {
57
63
  appSubscriptionCancel(id: $id) {
@@ -137,9 +143,18 @@ async function cancelAppSubscription(client, id) {
137
143
  const result = await client.request(CANCEL_MUTATION, { id });
138
144
  assertAccepted(result.appSubscriptionCancel.userErrors, "Shopify refused to cancel");
139
145
  }
146
+ async function isDevelopmentStore(client) {
147
+ const result = await client.request(DEVELOPMENT_STORE_QUERY);
148
+ const answer = result.shop?.plan?.partnerDevelopment;
149
+ if (typeof answer !== "boolean") {
150
+ throw (0, import_error_codes.shopifyError)(import_error_codes.ErrorCode.SHOPIFY_API_ERROR, "Shopify did not say whether the shop is a development store", { transient: true });
151
+ }
152
+ return answer;
153
+ }
140
154
  // Annotate the CommonJS export names for ESM import in node:
141
155
  0 && (module.exports = {
142
156
  cancelAppSubscription,
143
157
  createAppSubscription,
158
+ isDevelopmentStore,
144
159
  listActiveAppSubscriptions
145
160
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haatlabs-core/shopify",
3
- "version": "0.11.2",
3
+ "version": "0.12.0",
4
4
  "description": "Shopify for Node apps: OAuth, session tokens, the Admin GraphQL client, products, webhooks and billing.",
5
5
  "keywords": [
6
6
  "haatlabs",
@@ -57,7 +57,7 @@
57
57
  }
58
58
  },
59
59
  "dependencies": {
60
- "@haatlabs-core/errors": "0.11.2"
60
+ "@haatlabs-core/errors": "0.12.0"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@nestjs/common": "12.1.2",
@@ -67,8 +67,8 @@
67
67
  "jose": "^6.2.12",
68
68
  "reflect-metadata": "^0.2.2",
69
69
  "rxjs": "^7.8.2",
70
- "@haatlabs-core/tsconfig": "0.11.2",
71
- "@haatlabs-core/vitest-config": "0.11.2"
70
+ "@haatlabs-core/tsconfig": "0.12.0",
71
+ "@haatlabs-core/vitest-config": "0.12.0"
72
72
  },
73
73
  "scripts": {
74
74
  "build": "rm -rf dist && tsc -p tsconfig.build.json && node ../../scripts/build-cjs.mjs",