@horae.io/passport-shopify 1.0.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/index.cjs ADDED
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ createJwtStrategy: () => import_passport_core2.createJwtStrategy,
24
+ createPassportSDK: () => import_passport_core2.createPassportSDK,
25
+ createShopifyPassportSDK: () => createShopifyPassportSDK,
26
+ fetchShopifyToken: () => fetchShopifyToken
27
+ });
28
+ module.exports = __toCommonJS(index_exports);
29
+ var import_passport_core = require("@horae.io/passport-core");
30
+ var import_passport_core2 = require("@horae.io/passport-core");
31
+ async function fetchShopifyToken(options) {
32
+ const { bridgeUrl, shop, customerId, customerEmail } = options;
33
+ const url = new URL(bridgeUrl);
34
+ url.searchParams.set("shop", shop);
35
+ url.searchParams.set("customer_id", customerId);
36
+ if (customerEmail) url.searchParams.set("customer_email", customerEmail);
37
+ const res = await fetch(url.toString(), { credentials: "omit" });
38
+ if (!res.ok) throw new Error(`Shopify auth bridge failed: ${res.status}`);
39
+ const data = await res.json();
40
+ const token = data?.token ?? (typeof data === "string" ? data : null);
41
+ if (!token) throw new Error("Shopify auth bridge did not return a token");
42
+ return token;
43
+ }
44
+ function createShopifyPassportSDK(config) {
45
+ return (0, import_passport_core.createPassportSDK)({
46
+ apiBase: config.apiBase,
47
+ authStrategy: "shopify",
48
+ token: config.token ?? null,
49
+ tokenStorageKey: config.tokenStorageKey ?? "shopify_access_token"
50
+ });
51
+ }
52
+ // Annotate the CommonJS export names for ESM import in node:
53
+ 0 && (module.exports = {
54
+ createJwtStrategy,
55
+ createPassportSDK,
56
+ createShopifyPassportSDK,
57
+ fetchShopifyToken
58
+ });
59
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @horae/passport-shopify\n * Shopify auth bridge: fetch JWT from backend (e.g. GET /external-auth/shopify).\n * Theme embed contract: data-* attributes and script URL — see docs/shopify-integration.md\n */\n\nimport { createPassportSDK } from \"@horae.io/passport-core\";\nimport type { PassportSDK, PassportSDKConfig } from \"@horae.io/passport-core\";\n\nexport type { PassportSDK, PassportSDKConfig };\n\nexport interface ShopifyAuthBridgeOptions {\n /** Backend URL that returns JWT (e.g. https://your-app.com/external-auth/shopify) */\n bridgeUrl: string;\n /** Shopify shop domain */\n shop: string;\n /** Shopify customer ID */\n customerId: string;\n /** Customer email */\n customerEmail?: string;\n}\n\n/**\n * Fetch JWT from your backend auth bridge.\n * Backend should verify Shopify request (HMAC/session) and return { token: \"...\" } or plain JWT string.\n */\nexport async function fetchShopifyToken(options: ShopifyAuthBridgeOptions): Promise<string> {\n const { bridgeUrl, shop, customerId, customerEmail } = options;\n const url = new URL(bridgeUrl);\n url.searchParams.set(\"shop\", shop);\n url.searchParams.set(\"customer_id\", customerId);\n if (customerEmail) url.searchParams.set(\"customer_email\", customerEmail);\n\n const res = await fetch(url.toString(), { credentials: \"omit\" });\n if (!res.ok) throw new Error(`Shopify auth bridge failed: ${res.status}`);\n const data = (await res.json()) as { token?: string };\n const token = data?.token ?? (typeof data === \"string\" ? data : null);\n if (!token) throw new Error(\"Shopify auth bridge did not return a token\");\n return token;\n}\n\n/**\n * Create SDK configured for Shopify (JWT strategy, optional persistence).\n * Call fetchShopifyToken first, then pass token here.\n */\nexport function createShopifyPassportSDK(config: {\n apiBase: string;\n token?: string | null;\n tokenStorageKey?: string | null;\n}): PassportSDK {\n return createPassportSDK({\n apiBase: config.apiBase,\n authStrategy: \"shopify\",\n token: config.token ?? null,\n tokenStorageKey: config.tokenStorageKey ?? \"shopify_access_token\",\n });\n}\n\nexport { createPassportSDK, createJwtStrategy } from \"@horae.io/passport-core\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,2BAAkC;AAoDlC,IAAAA,wBAAqD;AAhCrD,eAAsB,kBAAkB,SAAoD;AAC1F,QAAM,EAAE,WAAW,MAAM,YAAY,cAAc,IAAI;AACvD,QAAM,MAAM,IAAI,IAAI,SAAS;AAC7B,MAAI,aAAa,IAAI,QAAQ,IAAI;AACjC,MAAI,aAAa,IAAI,eAAe,UAAU;AAC9C,MAAI,cAAe,KAAI,aAAa,IAAI,kBAAkB,aAAa;AAEvE,QAAM,MAAM,MAAM,MAAM,IAAI,SAAS,GAAG,EAAE,aAAa,OAAO,CAAC;AAC/D,MAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,+BAA+B,IAAI,MAAM,EAAE;AACxE,QAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,QAAM,QAAQ,MAAM,UAAU,OAAO,SAAS,WAAW,OAAO;AAChE,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,4CAA4C;AACxE,SAAO;AACT;AAMO,SAAS,yBAAyB,QAIzB;AACd,aAAO,wCAAkB;AAAA,IACvB,SAAS,OAAO;AAAA,IAChB,cAAc;AAAA,IACd,OAAO,OAAO,SAAS;AAAA,IACvB,iBAAiB,OAAO,mBAAmB;AAAA,EAC7C,CAAC;AACH;","names":["import_passport_core"]}
@@ -0,0 +1,35 @@
1
+ import { PassportSDK } from '@horae.io/passport-core';
2
+ export { PassportSDK, PassportSDKConfig, createJwtStrategy, createPassportSDK } from '@horae.io/passport-core';
3
+
4
+ /**
5
+ * @horae/passport-shopify
6
+ * Shopify auth bridge: fetch JWT from backend (e.g. GET /external-auth/shopify).
7
+ * Theme embed contract: data-* attributes and script URL — see docs/shopify-integration.md
8
+ */
9
+
10
+ interface ShopifyAuthBridgeOptions {
11
+ /** Backend URL that returns JWT (e.g. https://your-app.com/external-auth/shopify) */
12
+ bridgeUrl: string;
13
+ /** Shopify shop domain */
14
+ shop: string;
15
+ /** Shopify customer ID */
16
+ customerId: string;
17
+ /** Customer email */
18
+ customerEmail?: string;
19
+ }
20
+ /**
21
+ * Fetch JWT from your backend auth bridge.
22
+ * Backend should verify Shopify request (HMAC/session) and return { token: "..." } or plain JWT string.
23
+ */
24
+ declare function fetchShopifyToken(options: ShopifyAuthBridgeOptions): Promise<string>;
25
+ /**
26
+ * Create SDK configured for Shopify (JWT strategy, optional persistence).
27
+ * Call fetchShopifyToken first, then pass token here.
28
+ */
29
+ declare function createShopifyPassportSDK(config: {
30
+ apiBase: string;
31
+ token?: string | null;
32
+ tokenStorageKey?: string | null;
33
+ }): PassportSDK;
34
+
35
+ export { type ShopifyAuthBridgeOptions, createShopifyPassportSDK, fetchShopifyToken };
@@ -0,0 +1,35 @@
1
+ import { PassportSDK } from '@horae.io/passport-core';
2
+ export { PassportSDK, PassportSDKConfig, createJwtStrategy, createPassportSDK } from '@horae.io/passport-core';
3
+
4
+ /**
5
+ * @horae/passport-shopify
6
+ * Shopify auth bridge: fetch JWT from backend (e.g. GET /external-auth/shopify).
7
+ * Theme embed contract: data-* attributes and script URL — see docs/shopify-integration.md
8
+ */
9
+
10
+ interface ShopifyAuthBridgeOptions {
11
+ /** Backend URL that returns JWT (e.g. https://your-app.com/external-auth/shopify) */
12
+ bridgeUrl: string;
13
+ /** Shopify shop domain */
14
+ shop: string;
15
+ /** Shopify customer ID */
16
+ customerId: string;
17
+ /** Customer email */
18
+ customerEmail?: string;
19
+ }
20
+ /**
21
+ * Fetch JWT from your backend auth bridge.
22
+ * Backend should verify Shopify request (HMAC/session) and return { token: "..." } or plain JWT string.
23
+ */
24
+ declare function fetchShopifyToken(options: ShopifyAuthBridgeOptions): Promise<string>;
25
+ /**
26
+ * Create SDK configured for Shopify (JWT strategy, optional persistence).
27
+ * Call fetchShopifyToken first, then pass token here.
28
+ */
29
+ declare function createShopifyPassportSDK(config: {
30
+ apiBase: string;
31
+ token?: string | null;
32
+ tokenStorageKey?: string | null;
33
+ }): PassportSDK;
34
+
35
+ export { type ShopifyAuthBridgeOptions, createShopifyPassportSDK, fetchShopifyToken };
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ // src/index.ts
2
+ import { createPassportSDK } from "@horae.io/passport-core";
3
+ import { createPassportSDK as createPassportSDK2, createJwtStrategy } from "@horae.io/passport-core";
4
+ async function fetchShopifyToken(options) {
5
+ const { bridgeUrl, shop, customerId, customerEmail } = options;
6
+ const url = new URL(bridgeUrl);
7
+ url.searchParams.set("shop", shop);
8
+ url.searchParams.set("customer_id", customerId);
9
+ if (customerEmail) url.searchParams.set("customer_email", customerEmail);
10
+ const res = await fetch(url.toString(), { credentials: "omit" });
11
+ if (!res.ok) throw new Error(`Shopify auth bridge failed: ${res.status}`);
12
+ const data = await res.json();
13
+ const token = data?.token ?? (typeof data === "string" ? data : null);
14
+ if (!token) throw new Error("Shopify auth bridge did not return a token");
15
+ return token;
16
+ }
17
+ function createShopifyPassportSDK(config) {
18
+ return createPassportSDK({
19
+ apiBase: config.apiBase,
20
+ authStrategy: "shopify",
21
+ token: config.token ?? null,
22
+ tokenStorageKey: config.tokenStorageKey ?? "shopify_access_token"
23
+ });
24
+ }
25
+ export {
26
+ createJwtStrategy,
27
+ createPassportSDK2 as createPassportSDK,
28
+ createShopifyPassportSDK,
29
+ fetchShopifyToken
30
+ };
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @horae/passport-shopify\n * Shopify auth bridge: fetch JWT from backend (e.g. GET /external-auth/shopify).\n * Theme embed contract: data-* attributes and script URL — see docs/shopify-integration.md\n */\n\nimport { createPassportSDK } from \"@horae.io/passport-core\";\nimport type { PassportSDK, PassportSDKConfig } from \"@horae.io/passport-core\";\n\nexport type { PassportSDK, PassportSDKConfig };\n\nexport interface ShopifyAuthBridgeOptions {\n /** Backend URL that returns JWT (e.g. https://your-app.com/external-auth/shopify) */\n bridgeUrl: string;\n /** Shopify shop domain */\n shop: string;\n /** Shopify customer ID */\n customerId: string;\n /** Customer email */\n customerEmail?: string;\n}\n\n/**\n * Fetch JWT from your backend auth bridge.\n * Backend should verify Shopify request (HMAC/session) and return { token: \"...\" } or plain JWT string.\n */\nexport async function fetchShopifyToken(options: ShopifyAuthBridgeOptions): Promise<string> {\n const { bridgeUrl, shop, customerId, customerEmail } = options;\n const url = new URL(bridgeUrl);\n url.searchParams.set(\"shop\", shop);\n url.searchParams.set(\"customer_id\", customerId);\n if (customerEmail) url.searchParams.set(\"customer_email\", customerEmail);\n\n const res = await fetch(url.toString(), { credentials: \"omit\" });\n if (!res.ok) throw new Error(`Shopify auth bridge failed: ${res.status}`);\n const data = (await res.json()) as { token?: string };\n const token = data?.token ?? (typeof data === \"string\" ? data : null);\n if (!token) throw new Error(\"Shopify auth bridge did not return a token\");\n return token;\n}\n\n/**\n * Create SDK configured for Shopify (JWT strategy, optional persistence).\n * Call fetchShopifyToken first, then pass token here.\n */\nexport function createShopifyPassportSDK(config: {\n apiBase: string;\n token?: string | null;\n tokenStorageKey?: string | null;\n}): PassportSDK {\n return createPassportSDK({\n apiBase: config.apiBase,\n authStrategy: \"shopify\",\n token: config.token ?? null,\n tokenStorageKey: config.tokenStorageKey ?? \"shopify_access_token\",\n });\n}\n\nexport { createPassportSDK, createJwtStrategy } from \"@horae.io/passport-core\";\n"],"mappings":";AAMA,SAAS,yBAAyB;AAoDlC,SAAS,qBAAAA,oBAAmB,yBAAyB;AAhCrD,eAAsB,kBAAkB,SAAoD;AAC1F,QAAM,EAAE,WAAW,MAAM,YAAY,cAAc,IAAI;AACvD,QAAM,MAAM,IAAI,IAAI,SAAS;AAC7B,MAAI,aAAa,IAAI,QAAQ,IAAI;AACjC,MAAI,aAAa,IAAI,eAAe,UAAU;AAC9C,MAAI,cAAe,KAAI,aAAa,IAAI,kBAAkB,aAAa;AAEvE,QAAM,MAAM,MAAM,MAAM,IAAI,SAAS,GAAG,EAAE,aAAa,OAAO,CAAC;AAC/D,MAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,+BAA+B,IAAI,MAAM,EAAE;AACxE,QAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,QAAM,QAAQ,MAAM,UAAU,OAAO,SAAS,WAAW,OAAO;AAChE,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,4CAA4C;AACxE,SAAO;AACT;AAMO,SAAS,yBAAyB,QAIzB;AACd,SAAO,kBAAkB;AAAA,IACvB,SAAS,OAAO;AAAA,IAChB,cAAc;AAAA,IACd,OAAO,OAAO,SAAS;AAAA,IACvB,iBAAiB,OAAO,mBAAmB;AAAA,EAC7C,CAAC;AACH;","names":["createPassportSDK"]}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@horae.io/passport-shopify",
3
+ "version": "1.0.0",
4
+ "description": "Horae Passport SDK — Shopify auth bridge, theme embed contract",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsup",
21
+ "dev": "tsup --watch"
22
+ },
23
+ "peerDependencies": {
24
+ "@horae.io/passport-core": "*"
25
+ },
26
+ "devDependencies": {
27
+ "tsup": "^8.3.5",
28
+ "typescript": "~5.7.2"
29
+ }
30
+ }