@commercekitsdk/auth 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/firebase.cjs +31 -0
- package/dist/firebase.cjs.map +1 -0
- package/dist/firebase.d.cts +28 -0
- package/dist/firebase.d.ts +28 -0
- package/dist/firebase.js +29 -0
- package/dist/firebase.js.map +1 -0
- package/dist/index.cjs +18 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +36 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/jwt.cjs +38 -0
- package/dist/jwt.cjs.map +1 -0
- package/dist/jwt.d.cts +29 -0
- package/dist/jwt.d.ts +29 -0
- package/dist/jwt.js +36 -0
- package/dist/jwt.js.map +1 -0
- package/dist/supabase.cjs +40 -0
- package/dist/supabase.cjs.map +1 -0
- package/dist/supabase.d.cts +55 -0
- package/dist/supabase.d.ts +55 -0
- package/dist/supabase.js +38 -0
- package/dist/supabase.js.map +1 -0
- package/dist/types-CSm6J3gP.d.cts +29 -0
- package/dist/types-CSm6J3gP.d.ts +29 -0
- package/package.json +98 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/firebase.ts
|
|
4
|
+
async function toSession(user) {
|
|
5
|
+
if (!user) return null;
|
|
6
|
+
const token = await user.getIdToken();
|
|
7
|
+
return { token, user: { id: user.uid, ...user.email ? { email: user.email } : {} } };
|
|
8
|
+
}
|
|
9
|
+
function createFirebaseAuth(config) {
|
|
10
|
+
const { auth } = config;
|
|
11
|
+
return {
|
|
12
|
+
getToken: async () => auth.currentUser ? auth.currentUser.getIdToken() : null,
|
|
13
|
+
getCustomerId: () => auth.currentUser?.uid ?? null,
|
|
14
|
+
getSession: () => toSession(auth.currentUser),
|
|
15
|
+
signIn: async (credentials) => {
|
|
16
|
+
const { user } = await auth.signInWithEmailAndPassword(
|
|
17
|
+
credentials.email,
|
|
18
|
+
credentials.password
|
|
19
|
+
);
|
|
20
|
+
return await toSession(user);
|
|
21
|
+
},
|
|
22
|
+
signOut: () => auth.signOut(),
|
|
23
|
+
onAuthChange: (handler) => auth.onAuthStateChanged((user) => {
|
|
24
|
+
void toSession(user).then(handler);
|
|
25
|
+
})
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
exports.createFirebaseAuth = createFirebaseAuth;
|
|
30
|
+
//# sourceMappingURL=firebase.cjs.map
|
|
31
|
+
//# sourceMappingURL=firebase.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/firebase.ts"],"names":[],"mappings":";;;AAeA,eAAe,UAAU,IAAA,EAAwD;AAC/E,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,UAAA,EAAW;AACpC,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,EAAE,EAAA,EAAI,KAAK,GAAA,EAAK,GAAI,IAAA,CAAK,KAAA,GAAQ,EAAE,KAAA,EAAO,IAAA,CAAK,OAAM,GAAI,IAAI,EAAE;AACvF;AAQO,SAAS,mBAAmB,MAAA,EAAoD;AACrF,EAAA,MAAM,EAAE,MAAK,GAAI,MAAA;AAEjB,EAAA,OAAO;AAAA,IACL,UAAU,YAAa,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA,CAAY,YAAW,GAAI,IAAA;AAAA,IAC1E,aAAA,EAAe,MAAM,IAAA,CAAK,WAAA,EAAa,GAAA,IAAO,IAAA;AAAA,IAC9C,UAAA,EAAY,MAAM,SAAA,CAAU,IAAA,CAAK,WAAW,CAAA;AAAA,IAE5C,MAAA,EAAQ,OAAO,WAAA,KAAgB;AAC7B,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,IAAA,CAAK,0BAAA;AAAA,QAC1B,WAAA,CAAY,KAAA;AAAA,QACZ,WAAA,CAAY;AAAA,OACd;AACA,MAAA,OAAQ,MAAM,UAAU,IAAI,CAAA;AAAA,IAC9B,CAAA;AAAA,IAEA,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA,EAAQ;AAAA,IAE5B,cAAc,CAAC,OAAA,KACb,IAAA,CAAK,kBAAA,CAAmB,CAAC,IAAA,KAAS;AAChC,MAAA,KAAK,SAAA,CAAU,IAAI,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA;AAAA,IACnC,CAAC;AAAA,GACL;AACF","file":"firebase.cjs","sourcesContent":["import type { AuthSession, CommerceAuth, Unsubscribe } from \"./types.js\";\n\n/** Structural slice of the Firebase Auth client (v8/compat shape). */\ninterface FirebaseUser {\n uid: string;\n email: string | null;\n getIdToken(): Promise<string>;\n}\nexport interface FirebaseAuthClient {\n currentUser: FirebaseUser | null;\n signInWithEmailAndPassword(email: string, password: string): Promise<{ user: FirebaseUser }>;\n signOut(): Promise<void>;\n onAuthStateChanged(callback: (user: FirebaseUser | null) => void): () => void;\n}\n\nasync function toSession(user: FirebaseUser | null): Promise<AuthSession | null> {\n if (!user) return null;\n const token = await user.getIdToken();\n return { token, user: { id: user.uid, ...(user.email ? { email: user.email } : {}) } };\n}\n\n/**\n * Wraps a Firebase Auth client as a {@link CommerceAuth}.\n *\n * @example\n * const auth = createFirebaseAuth({ auth: firebase.auth() });\n */\nexport function createFirebaseAuth(config: { auth: FirebaseAuthClient }): CommerceAuth {\n const { auth } = config;\n\n return {\n getToken: async () => (auth.currentUser ? auth.currentUser.getIdToken() : null),\n getCustomerId: () => auth.currentUser?.uid ?? null,\n getSession: () => toSession(auth.currentUser),\n\n signIn: async (credentials) => {\n const { user } = await auth.signInWithEmailAndPassword(\n credentials.email,\n credentials.password,\n );\n return (await toSession(user))!;\n },\n\n signOut: () => auth.signOut(),\n\n onAuthChange: (handler): Unsubscribe =>\n auth.onAuthStateChanged((user) => {\n void toSession(user).then(handler);\n }),\n };\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { C as CommerceAuth } from './types-CSm6J3gP.cjs';
|
|
2
|
+
import '@commercekitsdk/core';
|
|
3
|
+
|
|
4
|
+
/** Structural slice of the Firebase Auth client (v8/compat shape). */
|
|
5
|
+
interface FirebaseUser {
|
|
6
|
+
uid: string;
|
|
7
|
+
email: string | null;
|
|
8
|
+
getIdToken(): Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
interface FirebaseAuthClient {
|
|
11
|
+
currentUser: FirebaseUser | null;
|
|
12
|
+
signInWithEmailAndPassword(email: string, password: string): Promise<{
|
|
13
|
+
user: FirebaseUser;
|
|
14
|
+
}>;
|
|
15
|
+
signOut(): Promise<void>;
|
|
16
|
+
onAuthStateChanged(callback: (user: FirebaseUser | null) => void): () => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Wraps a Firebase Auth client as a {@link CommerceAuth}.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const auth = createFirebaseAuth({ auth: firebase.auth() });
|
|
23
|
+
*/
|
|
24
|
+
declare function createFirebaseAuth(config: {
|
|
25
|
+
auth: FirebaseAuthClient;
|
|
26
|
+
}): CommerceAuth;
|
|
27
|
+
|
|
28
|
+
export { type FirebaseAuthClient, createFirebaseAuth };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { C as CommerceAuth } from './types-CSm6J3gP.js';
|
|
2
|
+
import '@commercekitsdk/core';
|
|
3
|
+
|
|
4
|
+
/** Structural slice of the Firebase Auth client (v8/compat shape). */
|
|
5
|
+
interface FirebaseUser {
|
|
6
|
+
uid: string;
|
|
7
|
+
email: string | null;
|
|
8
|
+
getIdToken(): Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
interface FirebaseAuthClient {
|
|
11
|
+
currentUser: FirebaseUser | null;
|
|
12
|
+
signInWithEmailAndPassword(email: string, password: string): Promise<{
|
|
13
|
+
user: FirebaseUser;
|
|
14
|
+
}>;
|
|
15
|
+
signOut(): Promise<void>;
|
|
16
|
+
onAuthStateChanged(callback: (user: FirebaseUser | null) => void): () => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Wraps a Firebase Auth client as a {@link CommerceAuth}.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const auth = createFirebaseAuth({ auth: firebase.auth() });
|
|
23
|
+
*/
|
|
24
|
+
declare function createFirebaseAuth(config: {
|
|
25
|
+
auth: FirebaseAuthClient;
|
|
26
|
+
}): CommerceAuth;
|
|
27
|
+
|
|
28
|
+
export { type FirebaseAuthClient, createFirebaseAuth };
|
package/dist/firebase.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// src/firebase.ts
|
|
2
|
+
async function toSession(user) {
|
|
3
|
+
if (!user) return null;
|
|
4
|
+
const token = await user.getIdToken();
|
|
5
|
+
return { token, user: { id: user.uid, ...user.email ? { email: user.email } : {} } };
|
|
6
|
+
}
|
|
7
|
+
function createFirebaseAuth(config) {
|
|
8
|
+
const { auth } = config;
|
|
9
|
+
return {
|
|
10
|
+
getToken: async () => auth.currentUser ? auth.currentUser.getIdToken() : null,
|
|
11
|
+
getCustomerId: () => auth.currentUser?.uid ?? null,
|
|
12
|
+
getSession: () => toSession(auth.currentUser),
|
|
13
|
+
signIn: async (credentials) => {
|
|
14
|
+
const { user } = await auth.signInWithEmailAndPassword(
|
|
15
|
+
credentials.email,
|
|
16
|
+
credentials.password
|
|
17
|
+
);
|
|
18
|
+
return await toSession(user);
|
|
19
|
+
},
|
|
20
|
+
signOut: () => auth.signOut(),
|
|
21
|
+
onAuthChange: (handler) => auth.onAuthStateChanged((user) => {
|
|
22
|
+
void toSession(user).then(handler);
|
|
23
|
+
})
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { createFirebaseAuth };
|
|
28
|
+
//# sourceMappingURL=firebase.js.map
|
|
29
|
+
//# sourceMappingURL=firebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/firebase.ts"],"names":[],"mappings":";AAeA,eAAe,UAAU,IAAA,EAAwD;AAC/E,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,UAAA,EAAW;AACpC,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,EAAE,EAAA,EAAI,KAAK,GAAA,EAAK,GAAI,IAAA,CAAK,KAAA,GAAQ,EAAE,KAAA,EAAO,IAAA,CAAK,OAAM,GAAI,IAAI,EAAE;AACvF;AAQO,SAAS,mBAAmB,MAAA,EAAoD;AACrF,EAAA,MAAM,EAAE,MAAK,GAAI,MAAA;AAEjB,EAAA,OAAO;AAAA,IACL,UAAU,YAAa,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA,CAAY,YAAW,GAAI,IAAA;AAAA,IAC1E,aAAA,EAAe,MAAM,IAAA,CAAK,WAAA,EAAa,GAAA,IAAO,IAAA;AAAA,IAC9C,UAAA,EAAY,MAAM,SAAA,CAAU,IAAA,CAAK,WAAW,CAAA;AAAA,IAE5C,MAAA,EAAQ,OAAO,WAAA,KAAgB;AAC7B,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,IAAA,CAAK,0BAAA;AAAA,QAC1B,WAAA,CAAY,KAAA;AAAA,QACZ,WAAA,CAAY;AAAA,OACd;AACA,MAAA,OAAQ,MAAM,UAAU,IAAI,CAAA;AAAA,IAC9B,CAAA;AAAA,IAEA,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA,EAAQ;AAAA,IAE5B,cAAc,CAAC,OAAA,KACb,IAAA,CAAK,kBAAA,CAAmB,CAAC,IAAA,KAAS;AAChC,MAAA,KAAK,SAAA,CAAU,IAAI,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA;AAAA,IACnC,CAAC;AAAA,GACL;AACF","file":"firebase.js","sourcesContent":["import type { AuthSession, CommerceAuth, Unsubscribe } from \"./types.js\";\n\n/** Structural slice of the Firebase Auth client (v8/compat shape). */\ninterface FirebaseUser {\n uid: string;\n email: string | null;\n getIdToken(): Promise<string>;\n}\nexport interface FirebaseAuthClient {\n currentUser: FirebaseUser | null;\n signInWithEmailAndPassword(email: string, password: string): Promise<{ user: FirebaseUser }>;\n signOut(): Promise<void>;\n onAuthStateChanged(callback: (user: FirebaseUser | null) => void): () => void;\n}\n\nasync function toSession(user: FirebaseUser | null): Promise<AuthSession | null> {\n if (!user) return null;\n const token = await user.getIdToken();\n return { token, user: { id: user.uid, ...(user.email ? { email: user.email } : {}) } };\n}\n\n/**\n * Wraps a Firebase Auth client as a {@link CommerceAuth}.\n *\n * @example\n * const auth = createFirebaseAuth({ auth: firebase.auth() });\n */\nexport function createFirebaseAuth(config: { auth: FirebaseAuthClient }): CommerceAuth {\n const { auth } = config;\n\n return {\n getToken: async () => (auth.currentUser ? auth.currentUser.getIdToken() : null),\n getCustomerId: () => auth.currentUser?.uid ?? null,\n getSession: () => toSession(auth.currentUser),\n\n signIn: async (credentials) => {\n const { user } = await auth.signInWithEmailAndPassword(\n credentials.email,\n credentials.password,\n );\n return (await toSession(user))!;\n },\n\n signOut: () => auth.signOut(),\n\n onAuthChange: (handler): Unsubscribe =>\n auth.onAuthStateChanged((user) => {\n void toSession(user).then(handler);\n }),\n };\n}\n"]}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/cart-sync.ts
|
|
4
|
+
function attachCartSync(auth, options) {
|
|
5
|
+
return auth.onAuthChange((session) => {
|
|
6
|
+
if (!session) return;
|
|
7
|
+
const guestCartId = options.getGuestCartId();
|
|
8
|
+
if (!guestCartId) return;
|
|
9
|
+
const userCartId = options.resolveUserCartId(session);
|
|
10
|
+
if (guestCartId === userCartId) return;
|
|
11
|
+
void options.client.cart.merge(guestCartId, userCartId).then(() => options.onMerged?.(userCartId)).catch(() => {
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
exports.attachCartSync = attachCartSync;
|
|
17
|
+
//# sourceMappingURL=index.cjs.map
|
|
18
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cart-sync.ts"],"names":[],"mappings":";;;AA+BO,SAAS,cAAA,CAAe,MAAoB,OAAA,EAAuC;AACxF,EAAA,OAAO,IAAA,CAAK,YAAA,CAAa,CAAC,OAAA,KAAY;AACpC,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,WAAA,GAAc,QAAQ,cAAA,EAAe;AAC3C,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,iBAAA,CAAkB,OAAO,CAAA;AACpD,IAAA,IAAI,gBAAgB,UAAA,EAAY;AAChC,IAAA,KAAK,OAAA,CAAQ,MAAA,CAAO,IAAA,CACjB,KAAA,CAAM,aAAa,UAAU,CAAA,CAC7B,IAAA,CAAK,MAAM,QAAQ,QAAA,GAAW,UAAU,CAAC,CAAA,CACzC,MAAM,MAAM;AAAA,IAEb,CAAC,CAAA;AAAA,EACL,CAAC,CAAA;AACH","file":"index.cjs","sourcesContent":["import type { AuthSession, CommerceAuth, Unsubscribe } from \"./types.js\";\n\n/** The minimal slice of a CommerceClient the cart-sync needs. */\nexport interface CartMerger {\n cart: { merge(sourceCartId: string, targetCartId: string): Promise<unknown> };\n}\n\nexport interface CartSyncOptions {\n /** A CommerceClient (or anything exposing `cart.merge`). */\n client: CartMerger;\n /** Returns the current guest cart id, or `null` if there isn't one. */\n getGuestCartId: () => string | null;\n /** Resolves the signed-in user's cart id from their session. */\n resolveUserCartId: (session: AuthSession) => string;\n /** Called after a successful merge so the app can drop the guest cart id. */\n onMerged?: (userCartId: string) => void;\n}\n\n/**\n * Wires guest→user cart merging to a {@link CommerceAuth}. On sign-in, if a\n * guest cart exists and differs from the user's cart, it is merged via\n * `client.cart.merge` so the shopper keeps their items. Returns an unsubscribe.\n *\n * @example\n * const off = attachCartSync(auth, {\n * client,\n * getGuestCartId: () => localStorage.getItem(\"ck_cart\"),\n * resolveUserCartId: (s) => `cart:${s.user.id}`,\n * onMerged: () => localStorage.removeItem(\"ck_cart\"),\n * });\n */\nexport function attachCartSync(auth: CommerceAuth, options: CartSyncOptions): Unsubscribe {\n return auth.onAuthChange((session) => {\n if (!session) return;\n const guestCartId = options.getGuestCartId();\n if (!guestCartId) return;\n const userCartId = options.resolveUserCartId(session);\n if (guestCartId === userCartId) return;\n void options.client.cart\n .merge(guestCartId, userCartId)\n .then(() => options.onMerged?.(userCartId))\n .catch(() => {\n /* Non-fatal: keep the guest cart for a later retry. */\n });\n });\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { a as AuthSession, C as CommerceAuth, U as Unsubscribe } from './types-CSm6J3gP.cjs';
|
|
2
|
+
export { A as AuthChangeHandler, b as AuthUser, P as PasswordCredentials } from './types-CSm6J3gP.cjs';
|
|
3
|
+
import '@commercekitsdk/core';
|
|
4
|
+
|
|
5
|
+
/** The minimal slice of a CommerceClient the cart-sync needs. */
|
|
6
|
+
interface CartMerger {
|
|
7
|
+
cart: {
|
|
8
|
+
merge(sourceCartId: string, targetCartId: string): Promise<unknown>;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
interface CartSyncOptions {
|
|
12
|
+
/** A CommerceClient (or anything exposing `cart.merge`). */
|
|
13
|
+
client: CartMerger;
|
|
14
|
+
/** Returns the current guest cart id, or `null` if there isn't one. */
|
|
15
|
+
getGuestCartId: () => string | null;
|
|
16
|
+
/** Resolves the signed-in user's cart id from their session. */
|
|
17
|
+
resolveUserCartId: (session: AuthSession) => string;
|
|
18
|
+
/** Called after a successful merge so the app can drop the guest cart id. */
|
|
19
|
+
onMerged?: (userCartId: string) => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Wires guest→user cart merging to a {@link CommerceAuth}. On sign-in, if a
|
|
23
|
+
* guest cart exists and differs from the user's cart, it is merged via
|
|
24
|
+
* `client.cart.merge` so the shopper keeps their items. Returns an unsubscribe.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* const off = attachCartSync(auth, {
|
|
28
|
+
* client,
|
|
29
|
+
* getGuestCartId: () => localStorage.getItem("ck_cart"),
|
|
30
|
+
* resolveUserCartId: (s) => `cart:${s.user.id}`,
|
|
31
|
+
* onMerged: () => localStorage.removeItem("ck_cart"),
|
|
32
|
+
* });
|
|
33
|
+
*/
|
|
34
|
+
declare function attachCartSync(auth: CommerceAuth, options: CartSyncOptions): Unsubscribe;
|
|
35
|
+
|
|
36
|
+
export { AuthSession, type CartMerger, type CartSyncOptions, CommerceAuth, Unsubscribe, attachCartSync };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { a as AuthSession, C as CommerceAuth, U as Unsubscribe } from './types-CSm6J3gP.js';
|
|
2
|
+
export { A as AuthChangeHandler, b as AuthUser, P as PasswordCredentials } from './types-CSm6J3gP.js';
|
|
3
|
+
import '@commercekitsdk/core';
|
|
4
|
+
|
|
5
|
+
/** The minimal slice of a CommerceClient the cart-sync needs. */
|
|
6
|
+
interface CartMerger {
|
|
7
|
+
cart: {
|
|
8
|
+
merge(sourceCartId: string, targetCartId: string): Promise<unknown>;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
interface CartSyncOptions {
|
|
12
|
+
/** A CommerceClient (or anything exposing `cart.merge`). */
|
|
13
|
+
client: CartMerger;
|
|
14
|
+
/** Returns the current guest cart id, or `null` if there isn't one. */
|
|
15
|
+
getGuestCartId: () => string | null;
|
|
16
|
+
/** Resolves the signed-in user's cart id from their session. */
|
|
17
|
+
resolveUserCartId: (session: AuthSession) => string;
|
|
18
|
+
/** Called after a successful merge so the app can drop the guest cart id. */
|
|
19
|
+
onMerged?: (userCartId: string) => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Wires guest→user cart merging to a {@link CommerceAuth}. On sign-in, if a
|
|
23
|
+
* guest cart exists and differs from the user's cart, it is merged via
|
|
24
|
+
* `client.cart.merge` so the shopper keeps their items. Returns an unsubscribe.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* const off = attachCartSync(auth, {
|
|
28
|
+
* client,
|
|
29
|
+
* getGuestCartId: () => localStorage.getItem("ck_cart"),
|
|
30
|
+
* resolveUserCartId: (s) => `cart:${s.user.id}`,
|
|
31
|
+
* onMerged: () => localStorage.removeItem("ck_cart"),
|
|
32
|
+
* });
|
|
33
|
+
*/
|
|
34
|
+
declare function attachCartSync(auth: CommerceAuth, options: CartSyncOptions): Unsubscribe;
|
|
35
|
+
|
|
36
|
+
export { AuthSession, type CartMerger, type CartSyncOptions, CommerceAuth, Unsubscribe, attachCartSync };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// src/cart-sync.ts
|
|
2
|
+
function attachCartSync(auth, options) {
|
|
3
|
+
return auth.onAuthChange((session) => {
|
|
4
|
+
if (!session) return;
|
|
5
|
+
const guestCartId = options.getGuestCartId();
|
|
6
|
+
if (!guestCartId) return;
|
|
7
|
+
const userCartId = options.resolveUserCartId(session);
|
|
8
|
+
if (guestCartId === userCartId) return;
|
|
9
|
+
void options.client.cart.merge(guestCartId, userCartId).then(() => options.onMerged?.(userCartId)).catch(() => {
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { attachCartSync };
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cart-sync.ts"],"names":[],"mappings":";AA+BO,SAAS,cAAA,CAAe,MAAoB,OAAA,EAAuC;AACxF,EAAA,OAAO,IAAA,CAAK,YAAA,CAAa,CAAC,OAAA,KAAY;AACpC,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,WAAA,GAAc,QAAQ,cAAA,EAAe;AAC3C,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,iBAAA,CAAkB,OAAO,CAAA;AACpD,IAAA,IAAI,gBAAgB,UAAA,EAAY;AAChC,IAAA,KAAK,OAAA,CAAQ,MAAA,CAAO,IAAA,CACjB,KAAA,CAAM,aAAa,UAAU,CAAA,CAC7B,IAAA,CAAK,MAAM,QAAQ,QAAA,GAAW,UAAU,CAAC,CAAA,CACzC,MAAM,MAAM;AAAA,IAEb,CAAC,CAAA;AAAA,EACL,CAAC,CAAA;AACH","file":"index.js","sourcesContent":["import type { AuthSession, CommerceAuth, Unsubscribe } from \"./types.js\";\n\n/** The minimal slice of a CommerceClient the cart-sync needs. */\nexport interface CartMerger {\n cart: { merge(sourceCartId: string, targetCartId: string): Promise<unknown> };\n}\n\nexport interface CartSyncOptions {\n /** A CommerceClient (or anything exposing `cart.merge`). */\n client: CartMerger;\n /** Returns the current guest cart id, or `null` if there isn't one. */\n getGuestCartId: () => string | null;\n /** Resolves the signed-in user's cart id from their session. */\n resolveUserCartId: (session: AuthSession) => string;\n /** Called after a successful merge so the app can drop the guest cart id. */\n onMerged?: (userCartId: string) => void;\n}\n\n/**\n * Wires guest→user cart merging to a {@link CommerceAuth}. On sign-in, if a\n * guest cart exists and differs from the user's cart, it is merged via\n * `client.cart.merge` so the shopper keeps their items. Returns an unsubscribe.\n *\n * @example\n * const off = attachCartSync(auth, {\n * client,\n * getGuestCartId: () => localStorage.getItem(\"ck_cart\"),\n * resolveUserCartId: (s) => `cart:${s.user.id}`,\n * onMerged: () => localStorage.removeItem(\"ck_cart\"),\n * });\n */\nexport function attachCartSync(auth: CommerceAuth, options: CartSyncOptions): Unsubscribe {\n return auth.onAuthChange((session) => {\n if (!session) return;\n const guestCartId = options.getGuestCartId();\n if (!guestCartId) return;\n const userCartId = options.resolveUserCartId(session);\n if (guestCartId === userCartId) return;\n void options.client.cart\n .merge(guestCartId, userCartId)\n .then(() => options.onMerged?.(userCartId))\n .catch(() => {\n /* Non-fatal: keep the guest cart for a later retry. */\n });\n });\n}\n"]}
|
package/dist/jwt.cjs
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/jwt.ts
|
|
4
|
+
function createJwtAuth(config) {
|
|
5
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
6
|
+
let session = null;
|
|
7
|
+
if (config.initialToken && config.decode) {
|
|
8
|
+
const user = config.decode(config.initialToken);
|
|
9
|
+
if (user) session = { user, token: config.initialToken };
|
|
10
|
+
}
|
|
11
|
+
const emit = () => {
|
|
12
|
+
for (const listener of [...listeners]) listener(session);
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
getToken: () => session?.token ?? null,
|
|
16
|
+
getCustomerId: () => session?.user.id ?? null,
|
|
17
|
+
getSession: async () => session,
|
|
18
|
+
signIn: async (credentials) => {
|
|
19
|
+
const { token, user } = await config.signIn(credentials);
|
|
20
|
+
session = { user, token };
|
|
21
|
+
emit();
|
|
22
|
+
return session;
|
|
23
|
+
},
|
|
24
|
+
signOut: async () => {
|
|
25
|
+
await config.signOut?.();
|
|
26
|
+
session = null;
|
|
27
|
+
emit();
|
|
28
|
+
},
|
|
29
|
+
onAuthChange: (handler) => {
|
|
30
|
+
listeners.add(handler);
|
|
31
|
+
return () => void listeners.delete(handler);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
exports.createJwtAuth = createJwtAuth;
|
|
37
|
+
//# sourceMappingURL=jwt.cjs.map
|
|
38
|
+
//# sourceMappingURL=jwt.cjs.map
|
package/dist/jwt.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/jwt.ts"],"names":[],"mappings":";;;AA8BO,SAAS,cAAc,MAAA,EAAqC;AACjE,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAuB;AAC7C,EAAA,IAAI,OAAA,GAA8B,IAAA;AAElC,EAAA,IAAI,MAAA,CAAO,YAAA,IAAgB,MAAA,CAAO,MAAA,EAAQ;AACxC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA;AAC9C,IAAA,IAAI,MAAM,OAAA,GAAU,EAAE,IAAA,EAAM,KAAA,EAAO,OAAO,YAAA,EAAa;AAAA,EACzD;AAEA,EAAA,MAAM,OAAO,MAAY;AACvB,IAAA,KAAA,MAAW,YAAY,CAAC,GAAG,SAAS,CAAA,WAAY,OAAO,CAAA;AAAA,EACzD,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAM,OAAA,EAAS,KAAA,IAAS,IAAA;AAAA,IAClC,aAAA,EAAe,MAAM,OAAA,EAAS,IAAA,CAAK,EAAA,IAAM,IAAA;AAAA,IACzC,YAAY,YAAY,OAAA;AAAA,IAExB,MAAA,EAAQ,OAAO,WAAA,KAAgB;AAC7B,MAAA,MAAM,EAAE,KAAA,EAAO,IAAA,KAAS,MAAM,MAAA,CAAO,OAAO,WAAW,CAAA;AACvD,MAAA,OAAA,GAAU,EAAE,MAAM,KAAA,EAAM;AACxB,MAAA,IAAA,EAAK;AACL,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IAEA,SAAS,YAAY;AACnB,MAAA,MAAM,OAAO,OAAA,IAAU;AACvB,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,IAAA,EAAK;AAAA,IACP,CAAA;AAAA,IAEA,YAAA,EAAc,CAAC,OAAA,KAAyB;AACtC,MAAA,SAAA,CAAU,IAAI,OAAO,CAAA;AACrB,MAAA,OAAO,MAAM,KAAK,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA;AAAA,IAC5C;AAAA,GACF;AACF","file":"jwt.cjs","sourcesContent":["import type {\n AuthChangeHandler,\n AuthSession,\n AuthUser,\n CommerceAuth,\n PasswordCredentials,\n Unsubscribe,\n} from \"./types.js\";\n\nexport interface JwtAuthConfig {\n /** Exchanges credentials for a token + user (your backend login call). */\n signIn: (credentials: PasswordCredentials) => Promise<{ token: string; user: AuthUser }>;\n /** Optional logout hook (e.g. to revoke the token server-side). */\n signOut?: () => Promise<void> | void;\n /** Derives a user from a token, used to restore `initialToken`. */\n decode?: (token: string) => AuthUser | null;\n /** A persisted token to restore a session on construction. */\n initialToken?: string;\n}\n\n/**\n * A self-contained JWT/session auth provider. You supply how to exchange\n * credentials for a token; this manages the in-memory session, change\n * notifications, and the core `getToken`/`getCustomerId` hooks.\n *\n * @example\n * const auth = createJwtAuth({\n * signIn: (c) => fetch(\"/login\", { method: \"POST\", body: JSON.stringify(c) }).then((r) => r.json()),\n * });\n */\nexport function createJwtAuth(config: JwtAuthConfig): CommerceAuth {\n const listeners = new Set<AuthChangeHandler>();\n let session: AuthSession | null = null;\n\n if (config.initialToken && config.decode) {\n const user = config.decode(config.initialToken);\n if (user) session = { user, token: config.initialToken };\n }\n\n const emit = (): void => {\n for (const listener of [...listeners]) listener(session);\n };\n\n return {\n getToken: () => session?.token ?? null,\n getCustomerId: () => session?.user.id ?? null,\n getSession: async () => session,\n\n signIn: async (credentials) => {\n const { token, user } = await config.signIn(credentials);\n session = { user, token };\n emit();\n return session;\n },\n\n signOut: async () => {\n await config.signOut?.();\n session = null;\n emit();\n },\n\n onAuthChange: (handler): Unsubscribe => {\n listeners.add(handler);\n return () => void listeners.delete(handler);\n },\n };\n}\n"]}
|
package/dist/jwt.d.cts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { P as PasswordCredentials, b as AuthUser, C as CommerceAuth } from './types-CSm6J3gP.cjs';
|
|
2
|
+
import '@commercekitsdk/core';
|
|
3
|
+
|
|
4
|
+
interface JwtAuthConfig {
|
|
5
|
+
/** Exchanges credentials for a token + user (your backend login call). */
|
|
6
|
+
signIn: (credentials: PasswordCredentials) => Promise<{
|
|
7
|
+
token: string;
|
|
8
|
+
user: AuthUser;
|
|
9
|
+
}>;
|
|
10
|
+
/** Optional logout hook (e.g. to revoke the token server-side). */
|
|
11
|
+
signOut?: () => Promise<void> | void;
|
|
12
|
+
/** Derives a user from a token, used to restore `initialToken`. */
|
|
13
|
+
decode?: (token: string) => AuthUser | null;
|
|
14
|
+
/** A persisted token to restore a session on construction. */
|
|
15
|
+
initialToken?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A self-contained JWT/session auth provider. You supply how to exchange
|
|
19
|
+
* credentials for a token; this manages the in-memory session, change
|
|
20
|
+
* notifications, and the core `getToken`/`getCustomerId` hooks.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* const auth = createJwtAuth({
|
|
24
|
+
* signIn: (c) => fetch("/login", { method: "POST", body: JSON.stringify(c) }).then((r) => r.json()),
|
|
25
|
+
* });
|
|
26
|
+
*/
|
|
27
|
+
declare function createJwtAuth(config: JwtAuthConfig): CommerceAuth;
|
|
28
|
+
|
|
29
|
+
export { type JwtAuthConfig, createJwtAuth };
|
package/dist/jwt.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { P as PasswordCredentials, b as AuthUser, C as CommerceAuth } from './types-CSm6J3gP.js';
|
|
2
|
+
import '@commercekitsdk/core';
|
|
3
|
+
|
|
4
|
+
interface JwtAuthConfig {
|
|
5
|
+
/** Exchanges credentials for a token + user (your backend login call). */
|
|
6
|
+
signIn: (credentials: PasswordCredentials) => Promise<{
|
|
7
|
+
token: string;
|
|
8
|
+
user: AuthUser;
|
|
9
|
+
}>;
|
|
10
|
+
/** Optional logout hook (e.g. to revoke the token server-side). */
|
|
11
|
+
signOut?: () => Promise<void> | void;
|
|
12
|
+
/** Derives a user from a token, used to restore `initialToken`. */
|
|
13
|
+
decode?: (token: string) => AuthUser | null;
|
|
14
|
+
/** A persisted token to restore a session on construction. */
|
|
15
|
+
initialToken?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A self-contained JWT/session auth provider. You supply how to exchange
|
|
19
|
+
* credentials for a token; this manages the in-memory session, change
|
|
20
|
+
* notifications, and the core `getToken`/`getCustomerId` hooks.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* const auth = createJwtAuth({
|
|
24
|
+
* signIn: (c) => fetch("/login", { method: "POST", body: JSON.stringify(c) }).then((r) => r.json()),
|
|
25
|
+
* });
|
|
26
|
+
*/
|
|
27
|
+
declare function createJwtAuth(config: JwtAuthConfig): CommerceAuth;
|
|
28
|
+
|
|
29
|
+
export { type JwtAuthConfig, createJwtAuth };
|
package/dist/jwt.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// src/jwt.ts
|
|
2
|
+
function createJwtAuth(config) {
|
|
3
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
4
|
+
let session = null;
|
|
5
|
+
if (config.initialToken && config.decode) {
|
|
6
|
+
const user = config.decode(config.initialToken);
|
|
7
|
+
if (user) session = { user, token: config.initialToken };
|
|
8
|
+
}
|
|
9
|
+
const emit = () => {
|
|
10
|
+
for (const listener of [...listeners]) listener(session);
|
|
11
|
+
};
|
|
12
|
+
return {
|
|
13
|
+
getToken: () => session?.token ?? null,
|
|
14
|
+
getCustomerId: () => session?.user.id ?? null,
|
|
15
|
+
getSession: async () => session,
|
|
16
|
+
signIn: async (credentials) => {
|
|
17
|
+
const { token, user } = await config.signIn(credentials);
|
|
18
|
+
session = { user, token };
|
|
19
|
+
emit();
|
|
20
|
+
return session;
|
|
21
|
+
},
|
|
22
|
+
signOut: async () => {
|
|
23
|
+
await config.signOut?.();
|
|
24
|
+
session = null;
|
|
25
|
+
emit();
|
|
26
|
+
},
|
|
27
|
+
onAuthChange: (handler) => {
|
|
28
|
+
listeners.add(handler);
|
|
29
|
+
return () => void listeners.delete(handler);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { createJwtAuth };
|
|
35
|
+
//# sourceMappingURL=jwt.js.map
|
|
36
|
+
//# sourceMappingURL=jwt.js.map
|
package/dist/jwt.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/jwt.ts"],"names":[],"mappings":";AA8BO,SAAS,cAAc,MAAA,EAAqC;AACjE,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAuB;AAC7C,EAAA,IAAI,OAAA,GAA8B,IAAA;AAElC,EAAA,IAAI,MAAA,CAAO,YAAA,IAAgB,MAAA,CAAO,MAAA,EAAQ;AACxC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA;AAC9C,IAAA,IAAI,MAAM,OAAA,GAAU,EAAE,IAAA,EAAM,KAAA,EAAO,OAAO,YAAA,EAAa;AAAA,EACzD;AAEA,EAAA,MAAM,OAAO,MAAY;AACvB,IAAA,KAAA,MAAW,YAAY,CAAC,GAAG,SAAS,CAAA,WAAY,OAAO,CAAA;AAAA,EACzD,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAM,OAAA,EAAS,KAAA,IAAS,IAAA;AAAA,IAClC,aAAA,EAAe,MAAM,OAAA,EAAS,IAAA,CAAK,EAAA,IAAM,IAAA;AAAA,IACzC,YAAY,YAAY,OAAA;AAAA,IAExB,MAAA,EAAQ,OAAO,WAAA,KAAgB;AAC7B,MAAA,MAAM,EAAE,KAAA,EAAO,IAAA,KAAS,MAAM,MAAA,CAAO,OAAO,WAAW,CAAA;AACvD,MAAA,OAAA,GAAU,EAAE,MAAM,KAAA,EAAM;AACxB,MAAA,IAAA,EAAK;AACL,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IAEA,SAAS,YAAY;AACnB,MAAA,MAAM,OAAO,OAAA,IAAU;AACvB,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,IAAA,EAAK;AAAA,IACP,CAAA;AAAA,IAEA,YAAA,EAAc,CAAC,OAAA,KAAyB;AACtC,MAAA,SAAA,CAAU,IAAI,OAAO,CAAA;AACrB,MAAA,OAAO,MAAM,KAAK,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA;AAAA,IAC5C;AAAA,GACF;AACF","file":"jwt.js","sourcesContent":["import type {\n AuthChangeHandler,\n AuthSession,\n AuthUser,\n CommerceAuth,\n PasswordCredentials,\n Unsubscribe,\n} from \"./types.js\";\n\nexport interface JwtAuthConfig {\n /** Exchanges credentials for a token + user (your backend login call). */\n signIn: (credentials: PasswordCredentials) => Promise<{ token: string; user: AuthUser }>;\n /** Optional logout hook (e.g. to revoke the token server-side). */\n signOut?: () => Promise<void> | void;\n /** Derives a user from a token, used to restore `initialToken`. */\n decode?: (token: string) => AuthUser | null;\n /** A persisted token to restore a session on construction. */\n initialToken?: string;\n}\n\n/**\n * A self-contained JWT/session auth provider. You supply how to exchange\n * credentials for a token; this manages the in-memory session, change\n * notifications, and the core `getToken`/`getCustomerId` hooks.\n *\n * @example\n * const auth = createJwtAuth({\n * signIn: (c) => fetch(\"/login\", { method: \"POST\", body: JSON.stringify(c) }).then((r) => r.json()),\n * });\n */\nexport function createJwtAuth(config: JwtAuthConfig): CommerceAuth {\n const listeners = new Set<AuthChangeHandler>();\n let session: AuthSession | null = null;\n\n if (config.initialToken && config.decode) {\n const user = config.decode(config.initialToken);\n if (user) session = { user, token: config.initialToken };\n }\n\n const emit = (): void => {\n for (const listener of [...listeners]) listener(session);\n };\n\n return {\n getToken: () => session?.token ?? null,\n getCustomerId: () => session?.user.id ?? null,\n getSession: async () => session,\n\n signIn: async (credentials) => {\n const { token, user } = await config.signIn(credentials);\n session = { user, token };\n emit();\n return session;\n },\n\n signOut: async () => {\n await config.signOut?.();\n session = null;\n emit();\n },\n\n onAuthChange: (handler): Unsubscribe => {\n listeners.add(handler);\n return () => void listeners.delete(handler);\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@commercekitsdk/core');
|
|
4
|
+
|
|
5
|
+
// src/supabase.ts
|
|
6
|
+
function toSession(session) {
|
|
7
|
+
if (!session) return null;
|
|
8
|
+
return {
|
|
9
|
+
token: session.access_token,
|
|
10
|
+
user: { id: session.user.id, ...session.user.email ? { email: session.user.email } : {} }
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function createSupabaseAuth(config) {
|
|
14
|
+
const { auth } = config.client;
|
|
15
|
+
const getSession = async () => toSession((await auth.getSession()).data.session);
|
|
16
|
+
return {
|
|
17
|
+
getToken: async () => (await getSession())?.token ?? null,
|
|
18
|
+
getCustomerId: async () => (await getSession())?.user.id ?? null,
|
|
19
|
+
getSession,
|
|
20
|
+
signIn: async (credentials) => {
|
|
21
|
+
const { data, error } = await auth.signInWithPassword(credentials);
|
|
22
|
+
if (error || !data.session) {
|
|
23
|
+
throw new core.UnauthorizedError(error?.message ?? "Sign in failed");
|
|
24
|
+
}
|
|
25
|
+
return toSession(data.session);
|
|
26
|
+
},
|
|
27
|
+
signOut: async () => {
|
|
28
|
+
const { error } = await auth.signOut();
|
|
29
|
+
if (error) throw new core.UnauthorizedError(error.message);
|
|
30
|
+
},
|
|
31
|
+
onAuthChange: (handler) => {
|
|
32
|
+
const { data } = auth.onAuthStateChange((_event, session) => handler(toSession(session)));
|
|
33
|
+
return () => data.subscription.unsubscribe();
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
exports.createSupabaseAuth = createSupabaseAuth;
|
|
39
|
+
//# sourceMappingURL=supabase.cjs.map
|
|
40
|
+
//# sourceMappingURL=supabase.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/supabase.ts"],"names":["UnauthorizedError"],"mappings":";;;;;AAsBA,SAAS,UAAU,OAAA,EAAqD;AACtE,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,OAAO;AAAA,IACL,OAAO,OAAA,CAAQ,YAAA;AAAA,IACf,MAAM,EAAE,EAAA,EAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,GAAI,OAAA,CAAQ,IAAA,CAAK,KAAA,GAAQ,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAK,KAAA,EAAM,GAAI,EAAC;AAAG,GAC5F;AACF;AASO,SAAS,mBAAmB,MAAA,EAAsD;AACvF,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAA,CAAO,MAAA;AACxB,EAAA,MAAM,UAAA,GAAa,YACjB,SAAA,CAAA,CAAW,MAAM,KAAK,UAAA,EAAW,EAAG,KAAK,OAAO,CAAA;AAElD,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,YAAA,CAAa,MAAM,UAAA,KAAe,KAAA,IAAS,IAAA;AAAA,IACrD,eAAe,YAAA,CAAa,MAAM,UAAA,EAAW,GAAI,KAAK,EAAA,IAAM,IAAA;AAAA,IAC5D,UAAA;AAAA,IAEA,MAAA,EAAQ,OAAO,WAAA,KAAgB;AAC7B,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,KAAU,MAAM,IAAA,CAAK,mBAAmB,WAAW,CAAA;AACjE,MAAA,IAAI,KAAA,IAAS,CAAC,IAAA,CAAK,OAAA,EAAS;AAC1B,QAAA,MAAM,IAAIA,sBAAA,CAAkB,KAAA,EAAO,OAAA,IAAW,gBAAgB,CAAA;AAAA,MAChE;AACA,MAAA,OAAO,SAAA,CAAU,KAAK,OAAO,CAAA;AAAA,IAC/B,CAAA;AAAA,IAEA,SAAS,YAAY;AACnB,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,KAAK,OAAA,EAAQ;AACrC,MAAA,IAAI,KAAA,EAAO,MAAM,IAAIA,sBAAA,CAAkB,MAAM,OAAO,CAAA;AAAA,IACtD,CAAA;AAAA,IAEA,YAAA,EAAc,CAAC,OAAA,KAAyB;AACtC,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,IAAA,CAAK,iBAAA,CAAkB,CAAC,MAAA,EAAQ,OAAA,KAAY,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAC,CAAC,CAAA;AACxF,MAAA,OAAO,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,EAAY;AAAA,IAC7C;AAAA,GACF;AACF","file":"supabase.cjs","sourcesContent":["import { UnauthorizedError } from \"@commercekitsdk/core\";\nimport type { AuthSession, CommerceAuth, Unsubscribe } from \"./types.js\";\n\n/** Structural slice of `supabase.auth` (the v2 client) this wrapper uses. */\ninterface SupabaseSession {\n access_token: string;\n user: { id: string; email?: string };\n}\nexport interface SupabaseAuthClient {\n auth: {\n signInWithPassword(credentials: { email: string; password: string }): Promise<{\n data: { session: SupabaseSession | null };\n error: { message: string } | null;\n }>;\n signOut(): Promise<{ error: { message: string } | null }>;\n getSession(): Promise<{ data: { session: SupabaseSession | null } }>;\n onAuthStateChange(callback: (event: string, session: SupabaseSession | null) => void): {\n data: { subscription: { unsubscribe(): void } };\n };\n };\n}\n\nfunction toSession(session: SupabaseSession | null): AuthSession | null {\n if (!session) return null;\n return {\n token: session.access_token,\n user: { id: session.user.id, ...(session.user.email ? { email: session.user.email } : {}) },\n };\n}\n\n/**\n * Wraps a Supabase v2 client as a {@link CommerceAuth}.\n *\n * @example\n * import { createClient } from \"@supabase/supabase-js\";\n * const auth = createSupabaseAuth({ client: createClient(url, anonKey) });\n */\nexport function createSupabaseAuth(config: { client: SupabaseAuthClient }): CommerceAuth {\n const { auth } = config.client;\n const getSession = async (): Promise<AuthSession | null> =>\n toSession((await auth.getSession()).data.session);\n\n return {\n getToken: async () => (await getSession())?.token ?? null,\n getCustomerId: async () => (await getSession())?.user.id ?? null,\n getSession,\n\n signIn: async (credentials) => {\n const { data, error } = await auth.signInWithPassword(credentials);\n if (error || !data.session) {\n throw new UnauthorizedError(error?.message ?? \"Sign in failed\");\n }\n return toSession(data.session)!;\n },\n\n signOut: async () => {\n const { error } = await auth.signOut();\n if (error) throw new UnauthorizedError(error.message);\n },\n\n onAuthChange: (handler): Unsubscribe => {\n const { data } = auth.onAuthStateChange((_event, session) => handler(toSession(session)));\n return () => data.subscription.unsubscribe();\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { C as CommerceAuth } from './types-CSm6J3gP.cjs';
|
|
2
|
+
import '@commercekitsdk/core';
|
|
3
|
+
|
|
4
|
+
/** Structural slice of `supabase.auth` (the v2 client) this wrapper uses. */
|
|
5
|
+
interface SupabaseSession {
|
|
6
|
+
access_token: string;
|
|
7
|
+
user: {
|
|
8
|
+
id: string;
|
|
9
|
+
email?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
interface SupabaseAuthClient {
|
|
13
|
+
auth: {
|
|
14
|
+
signInWithPassword(credentials: {
|
|
15
|
+
email: string;
|
|
16
|
+
password: string;
|
|
17
|
+
}): Promise<{
|
|
18
|
+
data: {
|
|
19
|
+
session: SupabaseSession | null;
|
|
20
|
+
};
|
|
21
|
+
error: {
|
|
22
|
+
message: string;
|
|
23
|
+
} | null;
|
|
24
|
+
}>;
|
|
25
|
+
signOut(): Promise<{
|
|
26
|
+
error: {
|
|
27
|
+
message: string;
|
|
28
|
+
} | null;
|
|
29
|
+
}>;
|
|
30
|
+
getSession(): Promise<{
|
|
31
|
+
data: {
|
|
32
|
+
session: SupabaseSession | null;
|
|
33
|
+
};
|
|
34
|
+
}>;
|
|
35
|
+
onAuthStateChange(callback: (event: string, session: SupabaseSession | null) => void): {
|
|
36
|
+
data: {
|
|
37
|
+
subscription: {
|
|
38
|
+
unsubscribe(): void;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Wraps a Supabase v2 client as a {@link CommerceAuth}.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* import { createClient } from "@supabase/supabase-js";
|
|
49
|
+
* const auth = createSupabaseAuth({ client: createClient(url, anonKey) });
|
|
50
|
+
*/
|
|
51
|
+
declare function createSupabaseAuth(config: {
|
|
52
|
+
client: SupabaseAuthClient;
|
|
53
|
+
}): CommerceAuth;
|
|
54
|
+
|
|
55
|
+
export { type SupabaseAuthClient, createSupabaseAuth };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { C as CommerceAuth } from './types-CSm6J3gP.js';
|
|
2
|
+
import '@commercekitsdk/core';
|
|
3
|
+
|
|
4
|
+
/** Structural slice of `supabase.auth` (the v2 client) this wrapper uses. */
|
|
5
|
+
interface SupabaseSession {
|
|
6
|
+
access_token: string;
|
|
7
|
+
user: {
|
|
8
|
+
id: string;
|
|
9
|
+
email?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
interface SupabaseAuthClient {
|
|
13
|
+
auth: {
|
|
14
|
+
signInWithPassword(credentials: {
|
|
15
|
+
email: string;
|
|
16
|
+
password: string;
|
|
17
|
+
}): Promise<{
|
|
18
|
+
data: {
|
|
19
|
+
session: SupabaseSession | null;
|
|
20
|
+
};
|
|
21
|
+
error: {
|
|
22
|
+
message: string;
|
|
23
|
+
} | null;
|
|
24
|
+
}>;
|
|
25
|
+
signOut(): Promise<{
|
|
26
|
+
error: {
|
|
27
|
+
message: string;
|
|
28
|
+
} | null;
|
|
29
|
+
}>;
|
|
30
|
+
getSession(): Promise<{
|
|
31
|
+
data: {
|
|
32
|
+
session: SupabaseSession | null;
|
|
33
|
+
};
|
|
34
|
+
}>;
|
|
35
|
+
onAuthStateChange(callback: (event: string, session: SupabaseSession | null) => void): {
|
|
36
|
+
data: {
|
|
37
|
+
subscription: {
|
|
38
|
+
unsubscribe(): void;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Wraps a Supabase v2 client as a {@link CommerceAuth}.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* import { createClient } from "@supabase/supabase-js";
|
|
49
|
+
* const auth = createSupabaseAuth({ client: createClient(url, anonKey) });
|
|
50
|
+
*/
|
|
51
|
+
declare function createSupabaseAuth(config: {
|
|
52
|
+
client: SupabaseAuthClient;
|
|
53
|
+
}): CommerceAuth;
|
|
54
|
+
|
|
55
|
+
export { type SupabaseAuthClient, createSupabaseAuth };
|
package/dist/supabase.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { UnauthorizedError } from '@commercekitsdk/core';
|
|
2
|
+
|
|
3
|
+
// src/supabase.ts
|
|
4
|
+
function toSession(session) {
|
|
5
|
+
if (!session) return null;
|
|
6
|
+
return {
|
|
7
|
+
token: session.access_token,
|
|
8
|
+
user: { id: session.user.id, ...session.user.email ? { email: session.user.email } : {} }
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function createSupabaseAuth(config) {
|
|
12
|
+
const { auth } = config.client;
|
|
13
|
+
const getSession = async () => toSession((await auth.getSession()).data.session);
|
|
14
|
+
return {
|
|
15
|
+
getToken: async () => (await getSession())?.token ?? null,
|
|
16
|
+
getCustomerId: async () => (await getSession())?.user.id ?? null,
|
|
17
|
+
getSession,
|
|
18
|
+
signIn: async (credentials) => {
|
|
19
|
+
const { data, error } = await auth.signInWithPassword(credentials);
|
|
20
|
+
if (error || !data.session) {
|
|
21
|
+
throw new UnauthorizedError(error?.message ?? "Sign in failed");
|
|
22
|
+
}
|
|
23
|
+
return toSession(data.session);
|
|
24
|
+
},
|
|
25
|
+
signOut: async () => {
|
|
26
|
+
const { error } = await auth.signOut();
|
|
27
|
+
if (error) throw new UnauthorizedError(error.message);
|
|
28
|
+
},
|
|
29
|
+
onAuthChange: (handler) => {
|
|
30
|
+
const { data } = auth.onAuthStateChange((_event, session) => handler(toSession(session)));
|
|
31
|
+
return () => data.subscription.unsubscribe();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { createSupabaseAuth };
|
|
37
|
+
//# sourceMappingURL=supabase.js.map
|
|
38
|
+
//# sourceMappingURL=supabase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/supabase.ts"],"names":[],"mappings":";;;AAsBA,SAAS,UAAU,OAAA,EAAqD;AACtE,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,OAAO;AAAA,IACL,OAAO,OAAA,CAAQ,YAAA;AAAA,IACf,MAAM,EAAE,EAAA,EAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,GAAI,OAAA,CAAQ,IAAA,CAAK,KAAA,GAAQ,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAK,KAAA,EAAM,GAAI,EAAC;AAAG,GAC5F;AACF;AASO,SAAS,mBAAmB,MAAA,EAAsD;AACvF,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAA,CAAO,MAAA;AACxB,EAAA,MAAM,UAAA,GAAa,YACjB,SAAA,CAAA,CAAW,MAAM,KAAK,UAAA,EAAW,EAAG,KAAK,OAAO,CAAA;AAElD,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,YAAA,CAAa,MAAM,UAAA,KAAe,KAAA,IAAS,IAAA;AAAA,IACrD,eAAe,YAAA,CAAa,MAAM,UAAA,EAAW,GAAI,KAAK,EAAA,IAAM,IAAA;AAAA,IAC5D,UAAA;AAAA,IAEA,MAAA,EAAQ,OAAO,WAAA,KAAgB;AAC7B,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,KAAU,MAAM,IAAA,CAAK,mBAAmB,WAAW,CAAA;AACjE,MAAA,IAAI,KAAA,IAAS,CAAC,IAAA,CAAK,OAAA,EAAS;AAC1B,QAAA,MAAM,IAAI,iBAAA,CAAkB,KAAA,EAAO,OAAA,IAAW,gBAAgB,CAAA;AAAA,MAChE;AACA,MAAA,OAAO,SAAA,CAAU,KAAK,OAAO,CAAA;AAAA,IAC/B,CAAA;AAAA,IAEA,SAAS,YAAY;AACnB,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,KAAK,OAAA,EAAQ;AACrC,MAAA,IAAI,KAAA,EAAO,MAAM,IAAI,iBAAA,CAAkB,MAAM,OAAO,CAAA;AAAA,IACtD,CAAA;AAAA,IAEA,YAAA,EAAc,CAAC,OAAA,KAAyB;AACtC,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,IAAA,CAAK,iBAAA,CAAkB,CAAC,MAAA,EAAQ,OAAA,KAAY,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAC,CAAC,CAAA;AACxF,MAAA,OAAO,MAAM,IAAA,CAAK,YAAA,CAAa,WAAA,EAAY;AAAA,IAC7C;AAAA,GACF;AACF","file":"supabase.js","sourcesContent":["import { UnauthorizedError } from \"@commercekitsdk/core\";\nimport type { AuthSession, CommerceAuth, Unsubscribe } from \"./types.js\";\n\n/** Structural slice of `supabase.auth` (the v2 client) this wrapper uses. */\ninterface SupabaseSession {\n access_token: string;\n user: { id: string; email?: string };\n}\nexport interface SupabaseAuthClient {\n auth: {\n signInWithPassword(credentials: { email: string; password: string }): Promise<{\n data: { session: SupabaseSession | null };\n error: { message: string } | null;\n }>;\n signOut(): Promise<{ error: { message: string } | null }>;\n getSession(): Promise<{ data: { session: SupabaseSession | null } }>;\n onAuthStateChange(callback: (event: string, session: SupabaseSession | null) => void): {\n data: { subscription: { unsubscribe(): void } };\n };\n };\n}\n\nfunction toSession(session: SupabaseSession | null): AuthSession | null {\n if (!session) return null;\n return {\n token: session.access_token,\n user: { id: session.user.id, ...(session.user.email ? { email: session.user.email } : {}) },\n };\n}\n\n/**\n * Wraps a Supabase v2 client as a {@link CommerceAuth}.\n *\n * @example\n * import { createClient } from \"@supabase/supabase-js\";\n * const auth = createSupabaseAuth({ client: createClient(url, anonKey) });\n */\nexport function createSupabaseAuth(config: { client: SupabaseAuthClient }): CommerceAuth {\n const { auth } = config.client;\n const getSession = async (): Promise<AuthSession | null> =>\n toSession((await auth.getSession()).data.session);\n\n return {\n getToken: async () => (await getSession())?.token ?? null,\n getCustomerId: async () => (await getSession())?.user.id ?? null,\n getSession,\n\n signIn: async (credentials) => {\n const { data, error } = await auth.signInWithPassword(credentials);\n if (error || !data.session) {\n throw new UnauthorizedError(error?.message ?? \"Sign in failed\");\n }\n return toSession(data.session)!;\n },\n\n signOut: async () => {\n const { error } = await auth.signOut();\n if (error) throw new UnauthorizedError(error.message);\n },\n\n onAuthChange: (handler): Unsubscribe => {\n const { data } = auth.onAuthStateChange((_event, session) => handler(toSession(session)));\n return () => data.subscription.unsubscribe();\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AuthProvider } from '@commercekitsdk/core';
|
|
2
|
+
|
|
3
|
+
interface AuthUser {
|
|
4
|
+
id: string;
|
|
5
|
+
email?: string;
|
|
6
|
+
}
|
|
7
|
+
interface AuthSession {
|
|
8
|
+
user: AuthUser;
|
|
9
|
+
token: string;
|
|
10
|
+
}
|
|
11
|
+
interface PasswordCredentials {
|
|
12
|
+
email: string;
|
|
13
|
+
password: string;
|
|
14
|
+
}
|
|
15
|
+
type AuthChangeHandler = (session: AuthSession | null) => void;
|
|
16
|
+
type Unsubscribe = () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Unified auth surface across providers. Extends the core {@link AuthProvider}
|
|
19
|
+
* (`getToken`/`getCustomerId`) so an instance can be passed straight to
|
|
20
|
+
* `createCommerceClient({ auth })`, while adding session lifecycle methods.
|
|
21
|
+
*/
|
|
22
|
+
interface CommerceAuth extends AuthProvider {
|
|
23
|
+
signIn(credentials: PasswordCredentials): Promise<AuthSession>;
|
|
24
|
+
signOut(): Promise<void>;
|
|
25
|
+
getSession(): Promise<AuthSession | null>;
|
|
26
|
+
onAuthChange(handler: AuthChangeHandler): Unsubscribe;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type { AuthChangeHandler as A, CommerceAuth as C, PasswordCredentials as P, Unsubscribe as U, AuthSession as a, AuthUser as b };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AuthProvider } from '@commercekitsdk/core';
|
|
2
|
+
|
|
3
|
+
interface AuthUser {
|
|
4
|
+
id: string;
|
|
5
|
+
email?: string;
|
|
6
|
+
}
|
|
7
|
+
interface AuthSession {
|
|
8
|
+
user: AuthUser;
|
|
9
|
+
token: string;
|
|
10
|
+
}
|
|
11
|
+
interface PasswordCredentials {
|
|
12
|
+
email: string;
|
|
13
|
+
password: string;
|
|
14
|
+
}
|
|
15
|
+
type AuthChangeHandler = (session: AuthSession | null) => void;
|
|
16
|
+
type Unsubscribe = () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Unified auth surface across providers. Extends the core {@link AuthProvider}
|
|
19
|
+
* (`getToken`/`getCustomerId`) so an instance can be passed straight to
|
|
20
|
+
* `createCommerceClient({ auth })`, while adding session lifecycle methods.
|
|
21
|
+
*/
|
|
22
|
+
interface CommerceAuth extends AuthProvider {
|
|
23
|
+
signIn(credentials: PasswordCredentials): Promise<AuthSession>;
|
|
24
|
+
signOut(): Promise<void>;
|
|
25
|
+
getSession(): Promise<AuthSession | null>;
|
|
26
|
+
onAuthChange(handler: AuthChangeHandler): Unsubscribe;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type { AuthChangeHandler as A, CommerceAuth as C, PasswordCredentials as P, Unsubscribe as U, AuthSession as a, AuthUser as b };
|
package/package.json
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@commercekitsdk/auth",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Unified auth for CommerceKit — Supabase, Firebase, and JWT providers + guest-cart sync",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=20"
|
|
9
|
+
},
|
|
10
|
+
"sideEffects": false,
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"import": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"default": "./dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"require": {
|
|
21
|
+
"types": "./dist/index.d.cts",
|
|
22
|
+
"default": "./dist/index.cjs"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"./supabase": {
|
|
26
|
+
"import": {
|
|
27
|
+
"types": "./dist/supabase.d.ts",
|
|
28
|
+
"default": "./dist/supabase.js"
|
|
29
|
+
},
|
|
30
|
+
"require": {
|
|
31
|
+
"types": "./dist/supabase.d.cts",
|
|
32
|
+
"default": "./dist/supabase.cjs"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"./firebase": {
|
|
36
|
+
"import": {
|
|
37
|
+
"types": "./dist/firebase.d.ts",
|
|
38
|
+
"default": "./dist/firebase.js"
|
|
39
|
+
},
|
|
40
|
+
"require": {
|
|
41
|
+
"types": "./dist/firebase.d.cts",
|
|
42
|
+
"default": "./dist/firebase.cjs"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"./jwt": {
|
|
46
|
+
"import": {
|
|
47
|
+
"types": "./dist/jwt.d.ts",
|
|
48
|
+
"default": "./dist/jwt.js"
|
|
49
|
+
},
|
|
50
|
+
"require": {
|
|
51
|
+
"types": "./dist/jwt.d.cts",
|
|
52
|
+
"default": "./dist/jwt.cjs"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"./package.json": "./package.json"
|
|
56
|
+
},
|
|
57
|
+
"main": "./dist/index.cjs",
|
|
58
|
+
"module": "./dist/index.js",
|
|
59
|
+
"types": "./dist/index.d.ts",
|
|
60
|
+
"peerDependencies": {
|
|
61
|
+
"@commercekitsdk/core": "1.0.0"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@size-limit/preset-small-lib": "^11.1.4",
|
|
65
|
+
"@vitest/coverage-v8": "^2.0.5",
|
|
66
|
+
"eslint": "^9.8.0",
|
|
67
|
+
"size-limit": "^11.1.4",
|
|
68
|
+
"tsup": "^8.2.4",
|
|
69
|
+
"typescript": "^5.5.4",
|
|
70
|
+
"vitest": "^2.0.5",
|
|
71
|
+
"@commercekitsdk/core": "1.0.0",
|
|
72
|
+
"@commercekitsdk/tsconfig": "0.0.0",
|
|
73
|
+
"@commercekitsdk/eslint-config": "0.0.0"
|
|
74
|
+
},
|
|
75
|
+
"size-limit": [
|
|
76
|
+
{
|
|
77
|
+
"name": "@commercekitsdk/auth core (ESM)",
|
|
78
|
+
"path": "dist/index.js",
|
|
79
|
+
"limit": "6 kb",
|
|
80
|
+
"ignore": [
|
|
81
|
+
"@commercekitsdk/core"
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"publishConfig": {
|
|
86
|
+
"access": "public"
|
|
87
|
+
},
|
|
88
|
+
"scripts": {
|
|
89
|
+
"build": "tsup",
|
|
90
|
+
"dev": "tsup --watch",
|
|
91
|
+
"clean": "rm -rf dist .turbo coverage *.tsbuildinfo",
|
|
92
|
+
"lint": "eslint src",
|
|
93
|
+
"typecheck": "tsc --noEmit",
|
|
94
|
+
"test": "vitest run",
|
|
95
|
+
"test:coverage": "vitest run --coverage",
|
|
96
|
+
"size": "size-limit"
|
|
97
|
+
}
|
|
98
|
+
}
|