@cellarnode/auth 0.8.0 → 0.10.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/auth-guard.d.ts +10 -1
- package/dist/auth-guard.d.ts.map +1 -1
- package/dist/auth-guard.js +11 -0
- package/dist/auth-guard.js.map +1 -1
- package/dist/auth-store.d.ts +1 -1
- package/dist/auth-store.d.ts.map +1 -1
- package/dist/auth-store.js +168 -5
- package/dist/auth-store.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +63 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +46 -23
package/dist/auth-guard.d.ts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
-
import type { AuthUser, UserType } from "./types.js";
|
|
1
|
+
import type { AuthUser, SessionClaims, UserType } from "./types.js";
|
|
2
2
|
export declare function validateUserType(user: AuthUser, expected: UserType): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* True if the user/session holds the given entitlement (CEL-599 / Epic A).
|
|
5
|
+
*
|
|
6
|
+
* Accepts an `AuthUser` (from `getMe`, where `entitlements` may be absent on
|
|
7
|
+
* older backends) OR `SessionClaims` (from `authStore.getSessionClaims()`,
|
|
8
|
+
* always populated). Null-safe — returns false for a missing source or a source
|
|
9
|
+
* with no entitlements. Mirrors the `validateUserType` guard shape.
|
|
10
|
+
*/
|
|
11
|
+
export declare function hasEntitlement(source: AuthUser | SessionClaims | null | undefined, entitlement: string): boolean;
|
|
3
12
|
//# sourceMappingURL=auth-guard.d.ts.map
|
package/dist/auth-guard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-guard.d.ts","sourceRoot":"","sources":["../src/auth-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-guard.d.ts","sourceRoot":"","sources":["../src/auth-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEpE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE5E;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,IAAI,GAAG,SAAS,EACnD,WAAW,EAAE,MAAM,GAClB,OAAO,CAET"}
|
package/dist/auth-guard.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
export function validateUserType(user, expected) {
|
|
2
2
|
return user.userType === expected;
|
|
3
3
|
}
|
|
4
|
+
/**
|
|
5
|
+
* True if the user/session holds the given entitlement (CEL-599 / Epic A).
|
|
6
|
+
*
|
|
7
|
+
* Accepts an `AuthUser` (from `getMe`, where `entitlements` may be absent on
|
|
8
|
+
* older backends) OR `SessionClaims` (from `authStore.getSessionClaims()`,
|
|
9
|
+
* always populated). Null-safe — returns false for a missing source or a source
|
|
10
|
+
* with no entitlements. Mirrors the `validateUserType` guard shape.
|
|
11
|
+
*/
|
|
12
|
+
export function hasEntitlement(source, entitlement) {
|
|
13
|
+
return source?.entitlements?.includes(entitlement) ?? false;
|
|
14
|
+
}
|
|
4
15
|
//# sourceMappingURL=auth-guard.js.map
|
package/dist/auth-guard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-guard.js","sourceRoot":"","sources":["../src/auth-guard.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,QAAkB;IACjE,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"auth-guard.js","sourceRoot":"","sources":["../src/auth-guard.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,QAAkB;IACjE,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAmD,EACnD,WAAmB;IAEnB,OAAO,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;AAC9D,CAAC"}
|
package/dist/auth-store.d.ts
CHANGED
package/dist/auth-store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../src/auth-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../src/auth-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,SAAS,EACT,eAAe,EAKhB,MAAM,YAAY,CAAC;AAqEpB,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CA4LlE"}
|
package/dist/auth-store.js
CHANGED
|
@@ -1,9 +1,107 @@
|
|
|
1
|
+
import { decodeJwt } from "jose";
|
|
1
2
|
import { extractAccessToken } from "./extract-token.js";
|
|
3
|
+
const VALID_USER_TYPES = new Set([
|
|
4
|
+
"importer",
|
|
5
|
+
"producer",
|
|
6
|
+
"distributor",
|
|
7
|
+
"admin",
|
|
8
|
+
]);
|
|
9
|
+
/**
|
|
10
|
+
* Decode a JWT payload into SessionClaims.
|
|
11
|
+
*
|
|
12
|
+
* Returns null on any decode failure or if required fields are missing /
|
|
13
|
+
* mistyped. Signature verification is intentionally NOT performed — that
|
|
14
|
+
* is the backend's job at the next authenticated request. This decode is
|
|
15
|
+
* informational only (used for clientId / orgId / userType lookups in the
|
|
16
|
+
* UI layer).
|
|
17
|
+
*/
|
|
18
|
+
function decodeSessionClaims(token) {
|
|
19
|
+
let payload;
|
|
20
|
+
try {
|
|
21
|
+
payload = decodeJwt(token);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const userId = payload.userId;
|
|
27
|
+
const email = payload.email;
|
|
28
|
+
const sessionId = payload.sessionId;
|
|
29
|
+
const orgIdRaw = payload.orgId;
|
|
30
|
+
const rolesRaw = payload.roles;
|
|
31
|
+
const userTypeRaw = payload.userType;
|
|
32
|
+
const entitlementsRaw = payload.entitlements;
|
|
33
|
+
if (typeof userId !== "string" || userId.length === 0)
|
|
34
|
+
return null;
|
|
35
|
+
if (typeof email !== "string")
|
|
36
|
+
return null;
|
|
37
|
+
if (typeof sessionId !== "string" || sessionId.length === 0)
|
|
38
|
+
return null;
|
|
39
|
+
const orgId = orgIdRaw === null || orgIdRaw === undefined
|
|
40
|
+
? null
|
|
41
|
+
: typeof orgIdRaw === "string"
|
|
42
|
+
? orgIdRaw
|
|
43
|
+
: null;
|
|
44
|
+
const roles = Array.isArray(rolesRaw)
|
|
45
|
+
? rolesRaw.filter((r) => typeof r === "string")
|
|
46
|
+
: [];
|
|
47
|
+
// CEL-599: tolerate tokens minted before entitlements existed (→ []).
|
|
48
|
+
const entitlements = Array.isArray(entitlementsRaw)
|
|
49
|
+
? entitlementsRaw.filter((e) => typeof e === "string")
|
|
50
|
+
: [];
|
|
51
|
+
if (typeof userTypeRaw !== "string")
|
|
52
|
+
return null;
|
|
53
|
+
if (!VALID_USER_TYPES.has(userTypeRaw))
|
|
54
|
+
return null;
|
|
55
|
+
return {
|
|
56
|
+
userId,
|
|
57
|
+
email,
|
|
58
|
+
orgId,
|
|
59
|
+
roles,
|
|
60
|
+
sessionId,
|
|
61
|
+
userType: userTypeRaw,
|
|
62
|
+
entitlements,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
2
65
|
export function createAuthStore(config) {
|
|
3
66
|
const { baseUrl, refreshPath = "/auth/refresh", refreshBuffer = 60 } = config;
|
|
4
67
|
let accessToken = null;
|
|
68
|
+
let claims = null;
|
|
5
69
|
let refreshTimer = null;
|
|
6
70
|
let refreshPromise = null;
|
|
71
|
+
const orgChangeListeners = new Set();
|
|
72
|
+
const accessTokenSetListeners = new Set();
|
|
73
|
+
const logoutListeners = new Set();
|
|
74
|
+
function emitOrgChange(orgId) {
|
|
75
|
+
for (const listener of orgChangeListeners) {
|
|
76
|
+
try {
|
|
77
|
+
listener(orgId);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Swallow listener errors so a single bad subscriber cannot
|
|
81
|
+
// break event fan-out to other subscribers.
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function emitAccessTokenSet(token) {
|
|
86
|
+
for (const listener of accessTokenSetListeners) {
|
|
87
|
+
try {
|
|
88
|
+
listener(token);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Swallow.
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function emitLogout() {
|
|
96
|
+
for (const listener of logoutListeners) {
|
|
97
|
+
try {
|
|
98
|
+
listener();
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Swallow.
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
7
105
|
function scheduleRefresh(expiresInSeconds) {
|
|
8
106
|
if (refreshTimer)
|
|
9
107
|
clearTimeout(refreshTimer);
|
|
@@ -12,6 +110,30 @@ export function createAuthStore(config) {
|
|
|
12
110
|
performRefresh();
|
|
13
111
|
}, delay);
|
|
14
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Apply a new access-token value to internal state.
|
|
115
|
+
*
|
|
116
|
+
* - Decodes the JWT via `jose.decodeJwt` (no signature verify).
|
|
117
|
+
* - Caches the decoded claims.
|
|
118
|
+
* - Fires `onOrgChange` listeners ONLY when `orgId` actually changes
|
|
119
|
+
* (no-op on a same-orgId refresh).
|
|
120
|
+
* - Always fires `onAccessTokenSet` listeners after the token + claims
|
|
121
|
+
* are committed.
|
|
122
|
+
*
|
|
123
|
+
* Malformed JWTs are tolerated: claims become `null` and `onOrgChange`
|
|
124
|
+
* fires with `null` only if the previous orgId was non-null (i.e. the
|
|
125
|
+
* effective orgId transitioned).
|
|
126
|
+
*/
|
|
127
|
+
function applyToken(token) {
|
|
128
|
+
const previousOrgId = claims?.orgId ?? null;
|
|
129
|
+
accessToken = token;
|
|
130
|
+
claims = token ? decodeSessionClaims(token) : null;
|
|
131
|
+
const nextOrgId = claims?.orgId ?? null;
|
|
132
|
+
if (nextOrgId !== previousOrgId) {
|
|
133
|
+
emitOrgChange(nextOrgId);
|
|
134
|
+
}
|
|
135
|
+
emitAccessTokenSet(token);
|
|
136
|
+
}
|
|
15
137
|
async function performRefresh() {
|
|
16
138
|
try {
|
|
17
139
|
const res = await fetch(`${baseUrl}${refreshPath}`, {
|
|
@@ -20,20 +142,20 @@ export function createAuthStore(config) {
|
|
|
20
142
|
headers: { "Content-Type": "application/json" },
|
|
21
143
|
});
|
|
22
144
|
if (!res.ok) {
|
|
23
|
-
|
|
145
|
+
applyToken(null);
|
|
24
146
|
return null;
|
|
25
147
|
}
|
|
26
148
|
const json = (await res.json());
|
|
27
149
|
const token = extractAccessToken(json);
|
|
28
150
|
if (token) {
|
|
29
151
|
const expiresIn = typeof json.expiresIn === "number" ? json.expiresIn : 900;
|
|
30
|
-
|
|
152
|
+
applyToken(token);
|
|
31
153
|
scheduleRefresh(expiresIn);
|
|
32
154
|
}
|
|
33
155
|
return token;
|
|
34
156
|
}
|
|
35
157
|
catch {
|
|
36
|
-
|
|
158
|
+
applyToken(null);
|
|
37
159
|
return null;
|
|
38
160
|
}
|
|
39
161
|
}
|
|
@@ -45,15 +167,18 @@ export function createAuthStore(config) {
|
|
|
45
167
|
return accessToken !== null;
|
|
46
168
|
},
|
|
47
169
|
setAccessToken(token, expiresIn) {
|
|
48
|
-
|
|
170
|
+
applyToken(token);
|
|
49
171
|
scheduleRefresh(expiresIn);
|
|
50
172
|
},
|
|
51
173
|
clearAccessToken() {
|
|
52
|
-
|
|
174
|
+
applyToken(null);
|
|
53
175
|
if (refreshTimer) {
|
|
54
176
|
clearTimeout(refreshTimer);
|
|
55
177
|
refreshTimer = null;
|
|
56
178
|
}
|
|
179
|
+
// Emits unconditionally so consumers can rely on `onLogout` as a
|
|
180
|
+
// canonical logout signal regardless of prior token state.
|
|
181
|
+
emitLogout();
|
|
57
182
|
},
|
|
58
183
|
async ensureAccessToken(forceRefresh = false) {
|
|
59
184
|
if (!forceRefresh && accessToken)
|
|
@@ -65,6 +190,44 @@ export function createAuthStore(config) {
|
|
|
65
190
|
});
|
|
66
191
|
return refreshPromise;
|
|
67
192
|
},
|
|
193
|
+
getSessionClaims() {
|
|
194
|
+
// Return a defensive copy so external callers cannot mutate the
|
|
195
|
+
// internal claims object (e.g. push to roles, reassign userType).
|
|
196
|
+
return claims
|
|
197
|
+
? { ...claims, roles: [...claims.roles], entitlements: [...claims.entitlements] }
|
|
198
|
+
: null;
|
|
199
|
+
},
|
|
200
|
+
getUserId() {
|
|
201
|
+
return claims?.userId ?? null;
|
|
202
|
+
},
|
|
203
|
+
getOrgId() {
|
|
204
|
+
return claims?.orgId ?? null;
|
|
205
|
+
},
|
|
206
|
+
getUserType() {
|
|
207
|
+
return claims?.userType ?? null;
|
|
208
|
+
},
|
|
209
|
+
getEntitlements() {
|
|
210
|
+
// Defensive copy; [] when logged out (consistent with roles).
|
|
211
|
+
return claims ? [...claims.entitlements] : [];
|
|
212
|
+
},
|
|
213
|
+
onOrgChange(listener) {
|
|
214
|
+
orgChangeListeners.add(listener);
|
|
215
|
+
return () => {
|
|
216
|
+
orgChangeListeners.delete(listener);
|
|
217
|
+
};
|
|
218
|
+
},
|
|
219
|
+
onAccessTokenSet(listener) {
|
|
220
|
+
accessTokenSetListeners.add(listener);
|
|
221
|
+
return () => {
|
|
222
|
+
accessTokenSetListeners.delete(listener);
|
|
223
|
+
};
|
|
224
|
+
},
|
|
225
|
+
onLogout(listener) {
|
|
226
|
+
logoutListeners.add(listener);
|
|
227
|
+
return () => {
|
|
228
|
+
logoutListeners.delete(listener);
|
|
229
|
+
};
|
|
230
|
+
},
|
|
68
231
|
};
|
|
69
232
|
return store;
|
|
70
233
|
}
|
package/dist/auth-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../src/auth-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../src/auth-store.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { createAuthStore } from "./auth-store.js";
|
|
2
2
|
export { createAuthClient } from "./auth-client.js";
|
|
3
3
|
export { createAuthApi } from "./auth-api.js";
|
|
4
|
-
export { validateUserType } from "./auth-guard.js";
|
|
4
|
+
export { validateUserType, hasEntitlement } from "./auth-guard.js";
|
|
5
5
|
export { extractAccessToken } from "./extract-token.js";
|
|
6
|
-
export { AuthError, type AuthUser, type AuthStore, type AuthStoreConfig, type AuthClient, type AuthClientConfig, type AuthApi, type RegisterInput, type RequestOtpResponse, type VerifyOtpResponse, type AuthErrorResponse, type UserType, type DashboardLink, } from "./types.js";
|
|
6
|
+
export { AuthError, type AuthUser, type AuthStore, type AuthStoreConfig, type AuthClient, type AuthClientConfig, type AuthApi, type RegisterInput, type RequestOtpResponse, type VerifyOtpResponse, type AuthErrorResponse, type UserType, type DashboardLink, type SessionClaims, type SessionUserType, type OrgChangeListener, type AccessTokenSetListener, type LogoutListener, } from "./types.js";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EACL,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,GACpB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { createAuthStore } from "./auth-store.js";
|
|
2
2
|
export { createAuthClient } from "./auth-client.js";
|
|
3
3
|
export { createAuthApi } from "./auth-api.js";
|
|
4
|
-
export { validateUserType } from "./auth-guard.js";
|
|
4
|
+
export { validateUserType, hasEntitlement } from "./auth-guard.js";
|
|
5
5
|
export { extractAccessToken } from "./extract-token.js";
|
|
6
6
|
export { AuthError, } from "./types.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EACL,SAAS,GAkBV,MAAM,YAAY,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -6,6 +6,13 @@ export interface AuthUser {
|
|
|
6
6
|
userType: "importer" | "producer" | "admin";
|
|
7
7
|
orgId: string | null;
|
|
8
8
|
roles: string[];
|
|
9
|
+
/**
|
|
10
|
+
* Per-user entitlements (CEL-599 / Epic A). Optional on the `/auth/me` wire
|
|
11
|
+
* shape: present once the backend's `/auth/me` mapper returns it, absent for
|
|
12
|
+
* older backends. Consumers should read it as `user.entitlements ?? []`, or
|
|
13
|
+
* prefer `authStore.getEntitlements()` (decoded from the JWT, always present).
|
|
14
|
+
*/
|
|
15
|
+
entitlements?: string[];
|
|
9
16
|
createdAt: string;
|
|
10
17
|
}
|
|
11
18
|
export interface RegisterInput {
|
|
@@ -39,12 +46,68 @@ export interface AuthStoreConfig {
|
|
|
39
46
|
refreshPath?: string;
|
|
40
47
|
refreshBuffer?: number;
|
|
41
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* userType values carried in the V2 access-token JWT.
|
|
51
|
+
*
|
|
52
|
+
* Mirrors `SessionClaims["userType"]` in cellarnode-backend-v2
|
|
53
|
+
* (`src/middleware/auth.ts`). Kept as a distinct type from `UserType`
|
|
54
|
+
* because the session JWT may also carry `"distributor"` (reserved for
|
|
55
|
+
* future use) whereas the public-facing `UserType` enum currently only
|
|
56
|
+
* advertises importer/producer/admin to consumers.
|
|
57
|
+
*/
|
|
58
|
+
export type SessionUserType = "importer" | "producer" | "distributor" | "admin";
|
|
59
|
+
/**
|
|
60
|
+
* Decoded claims from a V2 access-token JWT.
|
|
61
|
+
*
|
|
62
|
+
* Mirrors the backend `SessionClaims` shape in `cellarnode-backend-v2`
|
|
63
|
+
* (`src/middleware/auth.ts`) — copied locally so consumers do not need
|
|
64
|
+
* to import from the backend. Signature verification still happens
|
|
65
|
+
* server-side; the client-side decode is informational only.
|
|
66
|
+
*/
|
|
67
|
+
export interface SessionClaims {
|
|
68
|
+
userId: string;
|
|
69
|
+
email: string;
|
|
70
|
+
orgId: string | null;
|
|
71
|
+
roles: string[];
|
|
72
|
+
sessionId: string;
|
|
73
|
+
userType: SessionUserType;
|
|
74
|
+
/**
|
|
75
|
+
* Per-user entitlements carried in the JWT (CEL-599 / Epic A) — e.g.
|
|
76
|
+
* `"producer-dashboard"`, `"importer-dashboard"`, `"elabel"`. Always an array
|
|
77
|
+
* on the decoded claims (empty if the token predates entitlements or the user
|
|
78
|
+
* holds none); the backend mints them from the `user_entitlements` table.
|
|
79
|
+
*/
|
|
80
|
+
entitlements: string[];
|
|
81
|
+
}
|
|
82
|
+
export type OrgChangeListener = (orgId: string | null) => void;
|
|
83
|
+
export type AccessTokenSetListener = (token: string | null) => void;
|
|
84
|
+
export type LogoutListener = () => void;
|
|
42
85
|
export interface AuthStore {
|
|
43
86
|
getAccessToken(): string | null;
|
|
44
87
|
hasAccessToken(): boolean;
|
|
45
88
|
setAccessToken(token: string, expiresIn: number): void;
|
|
46
89
|
clearAccessToken(): void;
|
|
47
90
|
ensureAccessToken(forceRefresh?: boolean): Promise<string | null>;
|
|
91
|
+
/** Decoded session claims from the current access token, or null. */
|
|
92
|
+
getSessionClaims(): SessionClaims | null;
|
|
93
|
+
/** userId from the current access token, or null. */
|
|
94
|
+
getUserId(): string | null;
|
|
95
|
+
/** orgId from the current access token, or null. Admin returns null. */
|
|
96
|
+
getOrgId(): string | null;
|
|
97
|
+
/** userType from the current access token, or null. */
|
|
98
|
+
getUserType(): SessionUserType | null;
|
|
99
|
+
/**
|
|
100
|
+
* Per-user entitlements from the current access token (CEL-599). Always an
|
|
101
|
+
* array — empty when logged out or when the token carries none. Decoded from
|
|
102
|
+
* the JWT, so it reflects the freshest minted token.
|
|
103
|
+
*/
|
|
104
|
+
getEntitlements(): string[];
|
|
105
|
+
/** Subscribe to orgId change events. Returns unsubscribe. */
|
|
106
|
+
onOrgChange(listener: OrgChangeListener): () => void;
|
|
107
|
+
/** Subscribe to access-token (re-)set events. Fires after the token is set. Returns unsubscribe. */
|
|
108
|
+
onAccessTokenSet(listener: AccessTokenSetListener): () => void;
|
|
109
|
+
/** Subscribe to logout events. Returns unsubscribe. */
|
|
110
|
+
onLogout(listener: LogoutListener): () => void;
|
|
48
111
|
}
|
|
49
112
|
export interface AuthClientConfig {
|
|
50
113
|
baseUrl: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,SAAU,SAAQ,KAAK;aAEhB,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;aAEZ,iBAAiB,CAAC,EAAE,MAAM;gBAH1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,iBAAiB,CAAC,EAAE,MAAM,YAAA;CAK7C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,IAAI,OAAO,CAAC;IAC1B,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,gBAAgB,IAAI,IAAI,CAAC;IACzB,iBAAiB,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA0CA,MAAM,OAAO,SAAU,SAAQ,KAAK;IAEhB;IACA;IAEA;IAJlB,YACkB,MAAc,EACd,IAAY,EAC5B,OAAe,EACC,iBAA0B;QAE1C,KAAK,CAAC,OAAO,CAAC,CAAC;QALC,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAQ;QAEZ,sBAAiB,GAAjB,iBAAiB,CAAS;QAG1C,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cellarnode/auth",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Shared OTP-based authentication — token store, API client, React UI components for CellarNode dashboards.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -23,8 +23,16 @@
|
|
|
23
23
|
},
|
|
24
24
|
"types": "./dist/index.d.ts",
|
|
25
25
|
"sideEffects": false,
|
|
26
|
-
"files": [
|
|
27
|
-
|
|
26
|
+
"files": [
|
|
27
|
+
"dist"
|
|
28
|
+
],
|
|
29
|
+
"keywords": [
|
|
30
|
+
"cellarnode",
|
|
31
|
+
"auth",
|
|
32
|
+
"otp",
|
|
33
|
+
"jwt",
|
|
34
|
+
"react"
|
|
35
|
+
],
|
|
28
36
|
"scripts": {
|
|
29
37
|
"build": "tsc",
|
|
30
38
|
"prepublishOnly": "npm run build",
|
|
@@ -34,39 +42,54 @@
|
|
|
34
42
|
"typecheck": "tsc --noEmit"
|
|
35
43
|
},
|
|
36
44
|
"dependencies": {
|
|
37
|
-
"clsx": "^2.1.0"
|
|
45
|
+
"clsx": "^2.1.0",
|
|
46
|
+
"jose": "^6.2.3"
|
|
38
47
|
},
|
|
39
48
|
"peerDependencies": {
|
|
49
|
+
"@react-three/fiber": ">=8.0.0",
|
|
50
|
+
"input-otp": ">=1.4.0",
|
|
51
|
+
"lucide-react": ">=0.400.0",
|
|
40
52
|
"react": "^18.0.0 || ^19.0.0",
|
|
41
53
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"@react-three/fiber": ">=8.0.0",
|
|
45
|
-
"three": ">=0.160.0",
|
|
46
|
-
"tailwindcss": ">=4.0.0"
|
|
54
|
+
"tailwindcss": ">=4.0.0",
|
|
55
|
+
"three": ">=0.160.0"
|
|
47
56
|
},
|
|
48
57
|
"peerDependenciesMeta": {
|
|
49
|
-
"react": {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"
|
|
58
|
+
"react": {
|
|
59
|
+
"optional": true
|
|
60
|
+
},
|
|
61
|
+
"react-dom": {
|
|
62
|
+
"optional": true
|
|
63
|
+
},
|
|
64
|
+
"lucide-react": {
|
|
65
|
+
"optional": true
|
|
66
|
+
},
|
|
67
|
+
"input-otp": {
|
|
68
|
+
"optional": true
|
|
69
|
+
},
|
|
70
|
+
"@react-three/fiber": {
|
|
71
|
+
"optional": true
|
|
72
|
+
},
|
|
73
|
+
"three": {
|
|
74
|
+
"optional": true
|
|
75
|
+
},
|
|
76
|
+
"tailwindcss": {
|
|
77
|
+
"optional": true
|
|
78
|
+
}
|
|
56
79
|
},
|
|
57
80
|
"engines": {
|
|
58
81
|
"node": ">=20.19.0"
|
|
59
82
|
},
|
|
60
83
|
"devDependencies": {
|
|
61
|
-
"
|
|
62
|
-
"vitest": "^3.0.0",
|
|
63
|
-
"react": "^19.0.0",
|
|
64
|
-
"react-dom": "^19.0.0",
|
|
84
|
+
"@react-three/fiber": ">=8.0.0",
|
|
65
85
|
"@types/react": "^19.0.0",
|
|
66
86
|
"@types/three": ">=0.160.0",
|
|
67
|
-
"
|
|
68
|
-
"three": ">=0.160.0",
|
|
87
|
+
"input-otp": ">=1.4.0",
|
|
69
88
|
"lucide-react": ">=0.400.0",
|
|
70
|
-
"
|
|
89
|
+
"react": "^19.0.0",
|
|
90
|
+
"react-dom": "^19.0.0",
|
|
91
|
+
"three": ">=0.160.0",
|
|
92
|
+
"typescript": "^5.7.0",
|
|
93
|
+
"vitest": "^3.0.0"
|
|
71
94
|
}
|
|
72
95
|
}
|