@authticon/client 0.0.0-beta4 → 0.0.0-beta40
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/README.md +375 -0
- package/dist/CookieStorageAdapter.d.ts +15 -0
- package/dist/CookieStorageAdapter.d.ts.map +1 -0
- package/dist/CookieStorageAdapter.js +60 -0
- package/dist/CookieStorageAdapter.js.map +1 -0
- package/dist/InMemoryCacheAdapter.d.ts +3 -0
- package/dist/InMemoryCacheAdapter.d.ts.map +1 -0
- package/dist/InMemoryCacheAdapter.js +13 -0
- package/dist/InMemoryCacheAdapter.js.map +1 -0
- package/dist/TokenStorage.d.ts +14 -10
- package/dist/TokenStorage.d.ts.map +1 -1
- package/dist/TokenStorage.js +92 -59
- package/dist/TokenStorage.js.map +1 -1
- package/dist/TokenVerifier.d.ts +6 -11
- package/dist/TokenVerifier.d.ts.map +1 -1
- package/dist/TokenVerifier.js +48 -34
- package/dist/TokenVerifier.js.map +1 -1
- package/dist/admin.d.ts +2 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/admin.js +2 -0
- package/dist/admin.js.map +1 -0
- package/dist/adminClient.d.ts +104 -0
- package/dist/adminClient.d.ts.map +1 -0
- package/dist/adminClient.js +108 -0
- package/dist/adminClient.js.map +1 -0
- package/dist/apiClient.d.ts +8 -0
- package/dist/apiClient.d.ts.map +1 -0
- package/dist/apiClient.js +18 -0
- package/dist/apiClient.js.map +1 -0
- package/dist/authClient.d.ts +42 -0
- package/dist/authClient.d.ts.map +1 -0
- package/dist/authClient.js +75 -0
- package/dist/authClient.js.map +1 -0
- package/dist/authticon.d.ts +130 -0
- package/dist/authticon.d.ts.map +1 -0
- package/dist/authticon.js +24 -0
- package/dist/authticon.js.map +1 -0
- package/dist/browser.d.ts +133 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +7 -0
- package/dist/browser.js.map +1 -0
- package/dist/clients/admin.d.ts +106 -0
- package/dist/clients/admin.d.ts.map +1 -0
- package/dist/clients/admin.js +126 -0
- package/dist/clients/admin.js.map +1 -0
- package/dist/clients/auth.d.ts +42 -0
- package/dist/clients/auth.d.ts.map +1 -0
- package/dist/clients/auth.js +74 -0
- package/dist/clients/auth.js.map +1 -0
- package/dist/clients/base.d.ts +8 -0
- package/dist/clients/base.d.ts.map +1 -0
- package/dist/clients/base.js +18 -0
- package/dist/clients/base.js.map +1 -0
- package/dist/clients/generated/client/client.gen.d.ts +3 -0
- package/dist/clients/generated/client/client.gen.d.ts.map +1 -0
- package/dist/clients/generated/client/client.gen.js +236 -0
- package/dist/clients/generated/client/client.gen.js.map +1 -0
- package/dist/clients/generated/client/index.d.ts +9 -0
- package/dist/clients/generated/client/index.d.ts.map +1 -0
- package/dist/clients/generated/client/index.js +7 -0
- package/dist/clients/generated/client/index.js.map +1 -0
- package/dist/clients/generated/client/types.gen.d.ts +118 -0
- package/dist/clients/generated/client/types.gen.d.ts.map +1 -0
- package/dist/clients/generated/client/types.gen.js +3 -0
- package/dist/clients/generated/client/types.gen.js.map +1 -0
- package/dist/clients/generated/client/utils.gen.d.ts +34 -0
- package/dist/clients/generated/client/utils.gen.d.ts.map +1 -0
- package/dist/clients/generated/client/utils.gen.js +229 -0
- package/dist/clients/generated/client/utils.gen.js.map +1 -0
- package/dist/clients/generated/client.gen.d.ts +13 -0
- package/dist/clients/generated/client.gen.d.ts.map +1 -0
- package/dist/clients/generated/client.gen.js +4 -0
- package/dist/clients/generated/client.gen.js.map +1 -0
- package/dist/clients/generated/core/auth.gen.d.ts +19 -0
- package/dist/clients/generated/core/auth.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/auth.gen.js +15 -0
- package/dist/clients/generated/core/auth.gen.js.map +1 -0
- package/dist/clients/generated/core/bodySerializer.gen.d.ts +26 -0
- package/dist/clients/generated/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/bodySerializer.gen.js +58 -0
- package/dist/clients/generated/core/bodySerializer.gen.js.map +1 -0
- package/dist/clients/generated/core/params.gen.d.ts +44 -0
- package/dist/clients/generated/core/params.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/params.gen.js +101 -0
- package/dist/clients/generated/core/params.gen.js.map +1 -0
- package/dist/clients/generated/core/pathSerializer.gen.d.ts +34 -0
- package/dist/clients/generated/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/pathSerializer.gen.js +107 -0
- package/dist/clients/generated/core/pathSerializer.gen.js.map +1 -0
- package/dist/clients/generated/core/queryKeySerializer.gen.d.ts +19 -0
- package/dist/clients/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/queryKeySerializer.gen.js +93 -0
- package/dist/clients/generated/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/clients/generated/core/serverSentEvents.gen.d.ts +72 -0
- package/dist/clients/generated/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/serverSentEvents.gen.js +134 -0
- package/dist/clients/generated/core/serverSentEvents.gen.js.map +1 -0
- package/dist/clients/generated/core/types.gen.d.ts +79 -0
- package/dist/clients/generated/core/types.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/types.gen.js +3 -0
- package/dist/clients/generated/core/types.gen.js.map +1 -0
- package/dist/clients/generated/core/utils.gen.d.ts +20 -0
- package/dist/clients/generated/core/utils.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/utils.gen.js +88 -0
- package/dist/clients/generated/core/utils.gen.js.map +1 -0
- package/dist/clients/generated/index.d.ts +3 -0
- package/dist/clients/generated/index.d.ts.map +1 -0
- package/dist/clients/generated/index.js +3 -0
- package/dist/clients/generated/index.js.map +1 -0
- package/dist/clients/generated/sdk.gen.d.ts +168 -0
- package/dist/clients/generated/sdk.gen.d.ts.map +1 -0
- package/dist/clients/generated/sdk.gen.js +427 -0
- package/dist/clients/generated/sdk.gen.js.map +1 -0
- package/dist/clients/generated/types.gen.d.ts +1261 -0
- package/dist/clients/generated/types.gen.d.ts.map +1 -0
- package/dist/clients/generated/types.gen.js +3 -0
- package/dist/clients/generated/types.gen.js.map +1 -0
- package/dist/clients/user.d.ts +67 -0
- package/dist/clients/user.d.ts.map +1 -0
- package/dist/clients/user.js +72 -0
- package/dist/clients/user.js.map +1 -0
- package/dist/cookies/browser.d.ts +3 -0
- package/dist/cookies/browser.d.ts.map +1 -0
- package/dist/cookies/browser.js +31 -0
- package/dist/cookies/browser.js.map +1 -0
- package/dist/cookies/node.d.ts +8 -0
- package/dist/cookies/node.d.ts.map +1 -0
- package/dist/cookies/node.js +50 -0
- package/dist/cookies/node.js.map +1 -0
- package/dist/createSessionUser.d.ts +3 -0
- package/dist/createSessionUser.d.ts.map +1 -0
- package/dist/createSessionUser.js +15 -0
- package/dist/createSessionUser.js.map +1 -0
- package/dist/errors.d.ts +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +40 -0
- package/dist/errors.js.map +1 -0
- package/dist/generated/client/client.gen.d.ts.map +1 -1
- package/dist/generated/client/client.gen.js +151 -50
- package/dist/generated/client/client.gen.js.map +1 -1
- package/dist/generated/client/index.d.ts +2 -2
- package/dist/generated/client/index.d.ts.map +1 -1
- package/dist/generated/client/index.js +1 -1
- package/dist/generated/client/index.js.map +1 -1
- package/dist/generated/client/types.gen.d.ts +53 -24
- package/dist/generated/client/types.gen.d.ts.map +1 -1
- package/dist/generated/client/utils.gen.d.ts +25 -6
- package/dist/generated/client/utils.gen.d.ts.map +1 -1
- package/dist/generated/client/utils.gen.js +117 -57
- package/dist/generated/client/utils.gen.js.map +1 -1
- package/dist/generated/client.gen.js +1 -1
- package/dist/generated/index.d.ts +2 -2
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/generated/index.js +1 -1
- package/dist/generated/index.js.map +1 -1
- package/dist/generated/sdk.gen.d.ts +153 -52
- package/dist/generated/sdk.gen.d.ts.map +1 -1
- package/dist/generated/sdk.gen.js +234 -209
- package/dist/generated/sdk.gen.js.map +1 -1
- package/dist/generated/types.gen.d.ts +557 -971
- package/dist/generated/types.gen.d.ts.map +1 -1
- package/dist/index.d.ts +2 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -6
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +171 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +46 -0
- package/dist/node.js.map +1 -0
- package/dist/session.d.ts +99 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +202 -0
- package/dist/session.js.map +1 -0
- package/dist/sessionClient.d.ts +53 -0
- package/dist/sessionClient.d.ts.map +1 -0
- package/dist/sessionClient.js +267 -0
- package/dist/sessionClient.js.map +1 -0
- package/dist/tokens.d.ts +27 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +188 -0
- package/dist/tokens.js.map +1 -0
- package/dist/types.d.ts +45 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/userClient.d.ts +41 -0
- package/dist/userClient.d.ts.map +1 -0
- package/dist/userClient.js +64 -0
- package/dist/userClient.js.map +1 -0
- package/package.json +24 -7
- package/dist/Acccount.d.ts +0 -9
- package/dist/Acccount.d.ts.map +0 -1
- package/dist/Acccount.js +0 -22
- package/dist/Acccount.js.map +0 -1
- package/dist/Auth.d.ts +0 -19
- package/dist/Auth.d.ts.map +0 -1
- package/dist/Auth.js +0 -24
- package/dist/Auth.js.map +0 -1
- package/dist/Authticon.d.ts +0 -27
- package/dist/Authticon.d.ts.map +0 -1
- package/dist/Authticon.js +0 -41
- package/dist/Authticon.js.map +0 -1
- package/dist/BrowserCookieAdapter.d.ts +0 -13
- package/dist/BrowserCookieAdapter.d.ts.map +0 -1
- package/dist/BrowserCookieAdapter.js +0 -18
- package/dist/BrowserCookieAdapter.js.map +0 -1
- package/dist/BrowserCookieAdapter.test.d.ts +0 -2
- package/dist/BrowserCookieAdapter.test.d.ts.map +0 -1
- package/dist/BrowserCookieAdapter.test.js +0 -145
- package/dist/BrowserCookieAdapter.test.js.map +0 -1
- package/dist/RemixCookieAdapter.d.ts +0 -12
- package/dist/RemixCookieAdapter.d.ts.map +0 -1
- package/dist/RemixCookieAdapter.js +0 -25
- package/dist/RemixCookieAdapter.js.map +0 -1
- package/dist/RemixCookieAdapter.test.d.ts +0 -2
- package/dist/RemixCookieAdapter.test.d.ts.map +0 -1
- package/dist/RemixCookieAdapter.test.js +0 -136
- package/dist/RemixCookieAdapter.test.js.map +0 -1
- package/dist/TokenManager.d.ts +0 -22
- package/dist/TokenManager.d.ts.map +0 -1
- package/dist/TokenManager.js +0 -45
- package/dist/TokenManager.js.map +0 -1
- package/dist/TokenManager.test.d.ts +0 -2
- package/dist/TokenManager.test.d.ts.map +0 -1
- package/dist/TokenManager.test.js +0 -118
- package/dist/TokenManager.test.js.map +0 -1
- package/dist/TokenStorage.test.d.ts +0 -2
- package/dist/TokenStorage.test.d.ts.map +0 -1
- package/dist/TokenStorage.test.js +0 -179
- package/dist/TokenStorage.test.js.map +0 -1
- package/dist/TokenVerifier.test.d.ts +0 -2
- package/dist/TokenVerifier.test.d.ts.map +0 -1
- package/dist/TokenVerifier.test.js +0 -117
- package/dist/TokenVerifier.test.js.map +0 -1
- package/dist/TwoFa.d.ts +0 -22
- package/dist/TwoFa.d.ts.map +0 -1
- package/dist/TwoFa.js +0 -47
- package/dist/TwoFa.js.map +0 -1
- package/dist/User.d.ts +0 -25
- package/dist/User.d.ts.map +0 -1
- package/dist/User.js +0 -27
- package/dist/User.js.map +0 -1
- package/dist/Users.d.ts +0 -57
- package/dist/Users.d.ts.map +0 -1
- package/dist/Users.js +0 -54
- package/dist/Users.js.map +0 -1
- package/dist/cookie-utils.d.ts +0 -5
- package/dist/cookie-utils.d.ts.map +0 -1
- package/dist/cookie-utils.js +0 -33
- package/dist/cookie-utils.js.map +0 -1
package/dist/session.js
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { createAuthClient } from "./clients/auth.js";
|
|
2
|
+
import { createUserClient } from "./clients/user.js";
|
|
3
|
+
import { AuthticonError } from "./errors.js";
|
|
4
|
+
import { createTokenStorage } from "./tokens.js";
|
|
5
|
+
export const createSessionUser = (tokenPayload) => {
|
|
6
|
+
const { authticon, iat, exp, nbf, iss, sub, aud, jti, ...userPayload } = tokenPayload;
|
|
7
|
+
return {
|
|
8
|
+
id: authticon.userId,
|
|
9
|
+
sessionId: authticon.sessionId,
|
|
10
|
+
projectId: authticon.projectId,
|
|
11
|
+
role: authticon.role,
|
|
12
|
+
isGuest: authticon.role === "guest",
|
|
13
|
+
challenges: authticon.challenges,
|
|
14
|
+
payload: userPayload,
|
|
15
|
+
raw: tokenPayload,
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export const createSession = async (deps, cookies, tokenStorageOptions) => {
|
|
19
|
+
const storage = createTokenStorage(cookies, tokenStorageOptions, deps.logger?.child({ authticon: "token-storage" }));
|
|
20
|
+
const { projectId, baseUrl, verifier, logger } = deps;
|
|
21
|
+
const authApi = createAuthClient({ projectId, baseUrl, logger });
|
|
22
|
+
let cachedUser = null;
|
|
23
|
+
const buildUserApi = () => {
|
|
24
|
+
const accessToken = storage.getAccessToken();
|
|
25
|
+
if (!accessToken)
|
|
26
|
+
throw new AuthticonError("No access token available");
|
|
27
|
+
return createUserClient({ accessToken, baseUrl, logger });
|
|
28
|
+
};
|
|
29
|
+
const saveTokens = (tokens) => {
|
|
30
|
+
storage.setAccessToken(tokens.accessToken);
|
|
31
|
+
storage.setRefreshToken(tokens.refreshToken);
|
|
32
|
+
if (tokens.deviceId)
|
|
33
|
+
storage.setDeviceId(tokens.deviceId);
|
|
34
|
+
};
|
|
35
|
+
const verifyAndBuildUser = async (token) => {
|
|
36
|
+
const accessToken = token ?? storage.getAccessToken();
|
|
37
|
+
if (!accessToken)
|
|
38
|
+
throw new AuthticonError("No access token found");
|
|
39
|
+
const payload = await verifier.verifyToken(accessToken);
|
|
40
|
+
return createSessionUser(payload);
|
|
41
|
+
};
|
|
42
|
+
const tryRefresh = async () => {
|
|
43
|
+
const refreshToken = storage.getRefreshToken();
|
|
44
|
+
if (!refreshToken)
|
|
45
|
+
return null;
|
|
46
|
+
try {
|
|
47
|
+
const result = await buildUserApi().refresh(refreshToken);
|
|
48
|
+
if (!result)
|
|
49
|
+
return null;
|
|
50
|
+
storage.setAccessToken(result.accessToken);
|
|
51
|
+
storage.setRefreshToken(result.refreshToken);
|
|
52
|
+
return result.accessToken;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
storage.clear();
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const resolveUser = async () => {
|
|
60
|
+
const accessToken = storage.getAccessToken();
|
|
61
|
+
if (!accessToken)
|
|
62
|
+
return null;
|
|
63
|
+
try {
|
|
64
|
+
return await verifyAndBuildUser(accessToken);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
const newToken = await tryRefresh();
|
|
68
|
+
return newToken ? verifyAndBuildUser(newToken) : null;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const authenticateWith = async (apiCall, errorMsg) => {
|
|
72
|
+
const result = await apiCall();
|
|
73
|
+
if (!result)
|
|
74
|
+
throw new AuthticonError(errorMsg);
|
|
75
|
+
saveTokens(result);
|
|
76
|
+
cachedUser = await verifyAndBuildUser(result.accessToken);
|
|
77
|
+
return cachedUser;
|
|
78
|
+
};
|
|
79
|
+
const refreshAfterCall = async (apiCall) => {
|
|
80
|
+
const result = await apiCall();
|
|
81
|
+
await tryRefresh();
|
|
82
|
+
cachedUser = await resolveUser();
|
|
83
|
+
if (!cachedUser)
|
|
84
|
+
throw new AuthticonError("User is not authenticated");
|
|
85
|
+
return result;
|
|
86
|
+
};
|
|
87
|
+
cachedUser = await resolveUser();
|
|
88
|
+
return {
|
|
89
|
+
login: (params) => {
|
|
90
|
+
const deviceId = storage.getDeviceId() || undefined;
|
|
91
|
+
return authenticateWith(() => authApi.login({
|
|
92
|
+
...params,
|
|
93
|
+
deviceId,
|
|
94
|
+
}), "Login failed");
|
|
95
|
+
},
|
|
96
|
+
register: async (params) => {
|
|
97
|
+
const result = await authApi.register(params);
|
|
98
|
+
if (!result)
|
|
99
|
+
throw new AuthticonError("Register failed");
|
|
100
|
+
return result;
|
|
101
|
+
},
|
|
102
|
+
sendMagicLink: (params) => authApi.sendMagicLink(params),
|
|
103
|
+
loginWithMagicLink: async (params) => {
|
|
104
|
+
const result = await authApi.verifyMagicLink(params);
|
|
105
|
+
if (!result)
|
|
106
|
+
throw new AuthticonError("Magic link verification failed");
|
|
107
|
+
if (!("accessToken" in result))
|
|
108
|
+
throw new AuthticonError("2FA challenge required");
|
|
109
|
+
saveTokens(result);
|
|
110
|
+
cachedUser = await verifyAndBuildUser(result.accessToken);
|
|
111
|
+
return cachedUser;
|
|
112
|
+
},
|
|
113
|
+
forgotPassword: (params) => authApi.forgotPassword(params),
|
|
114
|
+
verifyEmail: (params) => authApi.verifyEmail(params),
|
|
115
|
+
createGuest: async (params) => {
|
|
116
|
+
const result = await authApi.createGuestUser(params);
|
|
117
|
+
if (!result)
|
|
118
|
+
throw new AuthticonError("Guest creation failed");
|
|
119
|
+
storage.setAccessToken(result.token);
|
|
120
|
+
cachedUser = await verifyAndBuildUser(result.token);
|
|
121
|
+
return cachedUser;
|
|
122
|
+
},
|
|
123
|
+
acceptInvitation: (params) => authenticateWith(() => authApi.acceptInvitation(params), "Invitation acceptance failed"),
|
|
124
|
+
resendConfirmation: (params) => authApi.resendConfirmation(params),
|
|
125
|
+
getMe: async () => buildUserApi().getMe(),
|
|
126
|
+
updateUser: async (params) => buildUserApi().updateMe(params),
|
|
127
|
+
updateMe: async (params) => buildUserApi().updateMe(params),
|
|
128
|
+
getUser: () => cachedUser,
|
|
129
|
+
requireUser: () => {
|
|
130
|
+
if (!cachedUser)
|
|
131
|
+
throw new AuthticonError("User is not authenticated");
|
|
132
|
+
return cachedUser;
|
|
133
|
+
},
|
|
134
|
+
getFirstChallenge: () => {
|
|
135
|
+
if (!cachedUser)
|
|
136
|
+
throw new AuthticonError("User is not authenticated");
|
|
137
|
+
return cachedUser.challenges[0];
|
|
138
|
+
},
|
|
139
|
+
hasSession: () => storage.getAccessToken() !== null,
|
|
140
|
+
logout: async () => {
|
|
141
|
+
const refreshToken = storage.getRefreshToken();
|
|
142
|
+
if (refreshToken) {
|
|
143
|
+
try {
|
|
144
|
+
await buildUserApi().logout(refreshToken);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Best-effort server-side logout
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
storage.clearAccessToken();
|
|
151
|
+
storage.clearRefreshToken();
|
|
152
|
+
storage.clearAdminRefreshToken();
|
|
153
|
+
cachedUser = null;
|
|
154
|
+
},
|
|
155
|
+
refresh: async () => {
|
|
156
|
+
const newToken = await tryRefresh();
|
|
157
|
+
if (!newToken)
|
|
158
|
+
throw new AuthticonError("Token refresh failed");
|
|
159
|
+
cachedUser = await verifyAndBuildUser(newToken);
|
|
160
|
+
},
|
|
161
|
+
changeEmail: async (params) => buildUserApi().changeEmail(params),
|
|
162
|
+
changePassword: async (params) => buildUserApi().changePassword(params),
|
|
163
|
+
setPassword: async (params) => buildUserApi().setPassword(params),
|
|
164
|
+
changePhone: async (params) => buildUserApi().changePhone(params),
|
|
165
|
+
verifyPhone: async (params) => buildUserApi().verifyPhone(params),
|
|
166
|
+
getTwoFaSecret: async () => {
|
|
167
|
+
const result = await buildUserApi().getTwoFaSecret();
|
|
168
|
+
if (!result)
|
|
169
|
+
throw new AuthticonError("Failed to get 2FA secret");
|
|
170
|
+
return result;
|
|
171
|
+
},
|
|
172
|
+
enableTwoFa: async (params) => refreshAfterCall(() => buildUserApi().enableTwoFa(params)),
|
|
173
|
+
disableTwoFa: async (params) => refreshAfterCall(() => buildUserApi().disableTwoFa(params)),
|
|
174
|
+
sendTwoFaCode: async (params) => buildUserApi().sendTwoFaCode(params),
|
|
175
|
+
verifyTwoFaCode: async (code, remember = false) => {
|
|
176
|
+
await buildUserApi().verifyTwoFa({ code, remember });
|
|
177
|
+
await tryRefresh();
|
|
178
|
+
cachedUser = await resolveUser();
|
|
179
|
+
if (!cachedUser)
|
|
180
|
+
throw new AuthticonError("User is not authenticated");
|
|
181
|
+
return cachedUser;
|
|
182
|
+
},
|
|
183
|
+
createInvitation: async (params) => buildUserApi().createInvitation(params),
|
|
184
|
+
deleteInvitation: async (params) => buildUserApi().deleteInvitation(params),
|
|
185
|
+
tokens: {
|
|
186
|
+
getAccessToken: () => storage.getAccessToken(),
|
|
187
|
+
getRefreshToken: () => storage.getRefreshToken(),
|
|
188
|
+
verify: async (token) => {
|
|
189
|
+
const accessToken = token ?? storage.getAccessToken();
|
|
190
|
+
if (!accessToken)
|
|
191
|
+
throw new AuthticonError("No access token found");
|
|
192
|
+
return verifier.verifyToken(accessToken);
|
|
193
|
+
},
|
|
194
|
+
clear: () => {
|
|
195
|
+
storage.clear();
|
|
196
|
+
cachedUser = null;
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
cookies,
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Logger } from "pino";
|
|
2
|
+
import type { AcceptInvitationData, ChangeEmailData, ChangePasswordData, ChangePhoneData, CreateGuestUserData, CreateInvitationData, DeleteInvitationData, DisableTwoFaData, EnableTwoFaData, ForgotPasswordData, LoginData, RegisterData, ResendEmailConfirmationData, SendMagicLinkData, SendTwoFaCodeData, SetPasswordData, VerifyEmailData, VerifyMagicLinkData, VerifyPhoneData } from "./clients/generated/types.gen.js";
|
|
3
|
+
import { type TokenVerifier } from "./tokens.js";
|
|
4
|
+
import type { AccessTokenPayload, Challenge, CookieAdapter, SessionUser, TokenStorageOptions } from "./types.js";
|
|
5
|
+
export type SessionClientDeps = {
|
|
6
|
+
readonly projectId: string;
|
|
7
|
+
readonly baseUrl: string;
|
|
8
|
+
readonly verifier: TokenVerifier<any>;
|
|
9
|
+
readonly logger?: Logger;
|
|
10
|
+
};
|
|
11
|
+
export declare const createSessionUser: <Payload extends Record<string, any> = Record<string, any>>(tokenPayload: AccessTokenPayload<Payload>) => SessionUser<Payload>;
|
|
12
|
+
export type SessionClient<Payload extends Record<string, any> = Record<string, any>> = Awaited<ReturnType<typeof createSessionClient<Payload>>>;
|
|
13
|
+
export declare const createSessionClient: <Payload extends Record<string, any> = Record<string, any>>(deps: SessionClientDeps, cookies: CookieAdapter, tokenStorageOptions?: TokenStorageOptions) => Promise<{
|
|
14
|
+
getFirstChallenge: () => Challenge | undefined;
|
|
15
|
+
login: (params: LoginData["body"]) => Promise<SessionUser<Payload>>;
|
|
16
|
+
register: (params: RegisterData["body"]) => Promise<{
|
|
17
|
+
userId: string;
|
|
18
|
+
}>;
|
|
19
|
+
sendMagicLink: (params: SendMagicLinkData["body"]) => Promise<void>;
|
|
20
|
+
loginWithMagicLink: (params: VerifyMagicLinkData["body"]) => Promise<SessionUser<Payload>>;
|
|
21
|
+
forgotPassword: (params: ForgotPasswordData["body"]) => Promise<void>;
|
|
22
|
+
verifyEmail: (params: VerifyEmailData["body"]) => Promise<void>;
|
|
23
|
+
createGuest: (params: CreateGuestUserData["body"]) => Promise<SessionUser<Payload>>;
|
|
24
|
+
acceptInvitation: (params: AcceptInvitationData["body"]) => Promise<SessionUser<Payload>>;
|
|
25
|
+
resendConfirmation: (params: ResendEmailConfirmationData["body"]) => Promise<void>;
|
|
26
|
+
getUser: () => SessionUser<Payload> | null;
|
|
27
|
+
requireUser: () => SessionUser<Payload>;
|
|
28
|
+
hasSession: () => boolean;
|
|
29
|
+
logout: () => Promise<void>;
|
|
30
|
+
refresh: () => Promise<void>;
|
|
31
|
+
changeEmail: (params: ChangeEmailData["body"]) => Promise<void>;
|
|
32
|
+
changePassword: (params: ChangePasswordData["body"]) => Promise<void>;
|
|
33
|
+
setPassword: (params: SetPasswordData["body"]) => Promise<void>;
|
|
34
|
+
changePhone: (params: ChangePhoneData["body"]) => Promise<void>;
|
|
35
|
+
verifyPhone: (params: VerifyPhoneData["body"]) => Promise<void>;
|
|
36
|
+
getTwoFaSecret: () => Promise<{
|
|
37
|
+
secret: string;
|
|
38
|
+
uri: string;
|
|
39
|
+
}>;
|
|
40
|
+
enableTwoFa: (params: EnableTwoFaData["body"]) => Promise<void>;
|
|
41
|
+
disableTwoFa: (params: DisableTwoFaData["body"]) => Promise<void>;
|
|
42
|
+
sendTwoFaCode: (params: SendTwoFaCodeData["body"]) => Promise<void>;
|
|
43
|
+
completeTwoFaChallenge: (code: string, remember?: boolean) => Promise<SessionUser<Payload>>;
|
|
44
|
+
createInvitation: (params: CreateInvitationData["body"]) => Promise<void>;
|
|
45
|
+
deleteInvitation: (params: DeleteInvitationData["path"]) => Promise<void>;
|
|
46
|
+
tokens: {
|
|
47
|
+
getAccessToken: () => string | null;
|
|
48
|
+
getRefreshToken: () => string | null;
|
|
49
|
+
verify: (token?: string) => Promise<AccessTokenPayload<Payload>>;
|
|
50
|
+
clear: () => void;
|
|
51
|
+
};
|
|
52
|
+
}>;
|
|
53
|
+
//# sourceMappingURL=sessionClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionClient.d.ts","sourceRoot":"","sources":["../src/sessionClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EACV,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,WAAW,EACX,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEzD,cAAc,kBAAkB,CAAC,OAAO,CAAC,KACxC,WAAW,CAAC,OAAO,CAcrB,CAAC;AAEF,MAAM,MAAM,aAAa,CACvB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IACvD,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7D,eAAO,MAAM,mBAAmB,GAC9B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEzD,MAAM,iBAAiB,EACvB,SAAS,aAAa,EACtB,sBAAsB,mBAAmB;6BAgJX,SAAS,GAAG,SAAS;oBAlEtB,SAAS,CAAC,MAAM,CAAC;uBAQd,YAAY,CAAC,MAAM,CAAC;;;4BAMf,iBAAiB,CAAC,MAAM,CAAC;iCAIpB,mBAAmB,CAAC,MAAM,CAAC;6BAW/B,kBAAkB,CAAC,MAAM,CAAC;0BAI7B,eAAe,CAAC,MAAM,CAAC;0BAIvB,mBAAmB,CAAC,MAAM,CAAC;+BAQtB,oBAAoB,CAAC,MAAM,CAAC;iCAS1D,2BAA2B,CAAC,MAAM,CAAC;mBAKzB,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;uBAEvB,WAAW,CAAC,OAAO,CAAC;;;;0BAgCT,eAAe,CAAC,MAAM,CAAC;6BAKpB,kBAAkB,CAAC,MAAM,CAAC;0BAK7B,eAAe,CAAC,MAAM,CAAC;0BAKvB,eAAe,CAAC,MAAM,CAAC;0BAKvB,eAAe,CAAC,MAAM,CAAC;;;;;0BAYvB,eAAe,CAAC,MAAM,CAAC;2BAKtB,gBAAgB,CAAC,MAAM,CAAC;4BAKvB,iBAAiB,CAAC,MAAM,CAAC;mCAKlB,MAAM;+BASV,oBAAoB,CAAC,MAAM,CAAC;+BAK5B,oBAAoB,CAAC,MAAM,CAAC;;;;yBAQ3C,MAAM;;;EA2ChC,CAAC"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { createAuthClient } from "./clients/auth.js";
|
|
2
|
+
import { createUserClient } from "./clients/user.js";
|
|
3
|
+
import { AuthticonError } from "./errors.js";
|
|
4
|
+
import { createTokenStorage } from "./tokens.js";
|
|
5
|
+
export const createSessionUser = (tokenPayload) => {
|
|
6
|
+
const { authticon, ...rest } = tokenPayload;
|
|
7
|
+
const { iat, exp, nbf, iss, sub, aud, jti, ...userPayload } = rest;
|
|
8
|
+
return {
|
|
9
|
+
id: authticon.userId,
|
|
10
|
+
sessionId: authticon.sessionId,
|
|
11
|
+
projectId: authticon.projectId,
|
|
12
|
+
role: authticon.role,
|
|
13
|
+
isGuest: authticon.role === "guest",
|
|
14
|
+
challenges: authticon.challenges,
|
|
15
|
+
payload: userPayload,
|
|
16
|
+
raw: tokenPayload,
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export const createSessionClient = async (deps, cookies, tokenStorageOptions) => {
|
|
20
|
+
const storage = createTokenStorage(cookies, tokenStorageOptions, deps.logger?.child({ authticon: "token-storage" }));
|
|
21
|
+
const { projectId, baseUrl, verifier, logger } = deps;
|
|
22
|
+
const authApi = createAuthClient({ projectId, baseUrl, logger });
|
|
23
|
+
let cachedUser = null;
|
|
24
|
+
const buildUserApi = () => {
|
|
25
|
+
const accessToken = storage.getAccessToken();
|
|
26
|
+
if (!accessToken) {
|
|
27
|
+
throw new AuthticonError("No access token available");
|
|
28
|
+
}
|
|
29
|
+
return createUserClient({ accessToken, baseUrl, logger });
|
|
30
|
+
};
|
|
31
|
+
const saveTokens = (tokens) => {
|
|
32
|
+
storage.setAccessToken(tokens.accessToken);
|
|
33
|
+
storage.setRefreshToken(tokens.refreshToken);
|
|
34
|
+
if (tokens.deviceId) {
|
|
35
|
+
storage.setDeviceId(tokens.deviceId);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const verifyAndBuildUser = async (token) => {
|
|
39
|
+
const accessToken = token ?? storage.getAccessToken();
|
|
40
|
+
if (!accessToken) {
|
|
41
|
+
throw new AuthticonError("No access token found");
|
|
42
|
+
}
|
|
43
|
+
const payload = await verifier.verifyToken(accessToken);
|
|
44
|
+
return createSessionUser(payload);
|
|
45
|
+
};
|
|
46
|
+
const tryRefresh = async () => {
|
|
47
|
+
const refreshToken = storage.getRefreshToken();
|
|
48
|
+
if (!refreshToken)
|
|
49
|
+
return null;
|
|
50
|
+
try {
|
|
51
|
+
const userApi = buildUserApi();
|
|
52
|
+
const result = await userApi.refresh(refreshToken);
|
|
53
|
+
if (result) {
|
|
54
|
+
storage.setAccessToken(result.accessToken);
|
|
55
|
+
storage.setRefreshToken(result.refreshToken);
|
|
56
|
+
return result.accessToken;
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
storage.clear();
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const resolveUser = async () => {
|
|
66
|
+
const accessToken = storage.getAccessToken();
|
|
67
|
+
if (!accessToken)
|
|
68
|
+
return null;
|
|
69
|
+
try {
|
|
70
|
+
return await verifyAndBuildUser(accessToken);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
const newToken = await tryRefresh();
|
|
74
|
+
if (!newToken)
|
|
75
|
+
return null;
|
|
76
|
+
return verifyAndBuildUser(newToken);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
cachedUser = await resolveUser();
|
|
80
|
+
const login = async (params) => {
|
|
81
|
+
const result = await authApi.login(params);
|
|
82
|
+
if (!result)
|
|
83
|
+
throw new AuthticonError("Login failed: no response data");
|
|
84
|
+
saveTokens(result);
|
|
85
|
+
cachedUser = await verifyAndBuildUser(result.accessToken);
|
|
86
|
+
return cachedUser;
|
|
87
|
+
};
|
|
88
|
+
const register = async (params) => {
|
|
89
|
+
const result = await authApi.register(params);
|
|
90
|
+
if (!result)
|
|
91
|
+
throw new AuthticonError("Register failed: no response data");
|
|
92
|
+
return result;
|
|
93
|
+
};
|
|
94
|
+
const sendMagicLink = async (params) => {
|
|
95
|
+
await authApi.sendMagicLink(params);
|
|
96
|
+
};
|
|
97
|
+
const loginWithMagicLink = async (params) => {
|
|
98
|
+
const result = await authApi.verifyMagicLink(params);
|
|
99
|
+
if (!result)
|
|
100
|
+
throw new AuthticonError("Magic link verification failed");
|
|
101
|
+
if ("accessToken" in result) {
|
|
102
|
+
saveTokens(result);
|
|
103
|
+
cachedUser = await verifyAndBuildUser(result.accessToken);
|
|
104
|
+
return cachedUser;
|
|
105
|
+
}
|
|
106
|
+
throw new AuthticonError("2FA challenge required");
|
|
107
|
+
};
|
|
108
|
+
const forgotPassword = async (params) => {
|
|
109
|
+
await authApi.forgotPassword(params);
|
|
110
|
+
};
|
|
111
|
+
const verifyEmail = async (params) => {
|
|
112
|
+
await authApi.verifyEmail(params);
|
|
113
|
+
};
|
|
114
|
+
const createGuest = async (params) => {
|
|
115
|
+
const result = await authApi.createGuestUser(params);
|
|
116
|
+
if (!result)
|
|
117
|
+
throw new AuthticonError("Guest creation failed");
|
|
118
|
+
storage.setAccessToken(result.token);
|
|
119
|
+
cachedUser = await verifyAndBuildUser(result.token);
|
|
120
|
+
return cachedUser;
|
|
121
|
+
};
|
|
122
|
+
const acceptInvitation = async (params) => {
|
|
123
|
+
const result = await authApi.acceptInvitation(params);
|
|
124
|
+
if (!result)
|
|
125
|
+
throw new AuthticonError("Invitation acceptance failed");
|
|
126
|
+
saveTokens(result);
|
|
127
|
+
cachedUser = await verifyAndBuildUser(result.accessToken);
|
|
128
|
+
return cachedUser;
|
|
129
|
+
};
|
|
130
|
+
const resendConfirmation = async (params) => {
|
|
131
|
+
await authApi.resendConfirmation(params);
|
|
132
|
+
};
|
|
133
|
+
const getUser = () => cachedUser;
|
|
134
|
+
const requireUser = () => {
|
|
135
|
+
if (!cachedUser)
|
|
136
|
+
throw new AuthticonError("User is not authenticated");
|
|
137
|
+
return cachedUser;
|
|
138
|
+
};
|
|
139
|
+
const getFirstChallenge = () => {
|
|
140
|
+
if (!cachedUser)
|
|
141
|
+
throw new AuthticonError("User is not authenticated");
|
|
142
|
+
return cachedUser.challenges[0];
|
|
143
|
+
};
|
|
144
|
+
const isLoggedIn = () => storage.getAccessToken() !== null;
|
|
145
|
+
const logout = async () => {
|
|
146
|
+
const refreshToken = storage.getRefreshToken();
|
|
147
|
+
if (refreshToken) {
|
|
148
|
+
try {
|
|
149
|
+
const userApi = buildUserApi();
|
|
150
|
+
await userApi.logout(refreshToken);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Best-effort server-side logout
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
storage.clear();
|
|
157
|
+
cachedUser = null;
|
|
158
|
+
};
|
|
159
|
+
const refreshSession = async () => {
|
|
160
|
+
const newToken = await tryRefresh();
|
|
161
|
+
if (!newToken)
|
|
162
|
+
throw new AuthticonError("Token refresh failed");
|
|
163
|
+
cachedUser = await verifyAndBuildUser(newToken);
|
|
164
|
+
};
|
|
165
|
+
const changeEmail = async (params) => {
|
|
166
|
+
const userApi = buildUserApi();
|
|
167
|
+
await userApi.changeEmail(params);
|
|
168
|
+
};
|
|
169
|
+
const changePassword = async (params) => {
|
|
170
|
+
const userApi = buildUserApi();
|
|
171
|
+
await userApi.changePassword(params);
|
|
172
|
+
};
|
|
173
|
+
const setPassword = async (params) => {
|
|
174
|
+
const userApi = buildUserApi();
|
|
175
|
+
await userApi.setPassword(params);
|
|
176
|
+
};
|
|
177
|
+
const changePhone = async (params) => {
|
|
178
|
+
const userApi = buildUserApi();
|
|
179
|
+
await userApi.changePhone(params);
|
|
180
|
+
};
|
|
181
|
+
const verifyPhone = async (params) => {
|
|
182
|
+
const userApi = buildUserApi();
|
|
183
|
+
await userApi.verifyPhone(params);
|
|
184
|
+
};
|
|
185
|
+
const getTwoFaSecret = async () => {
|
|
186
|
+
const userApi = buildUserApi();
|
|
187
|
+
const result = await userApi.getTwoFaSecret();
|
|
188
|
+
if (!result)
|
|
189
|
+
throw new AuthticonError("Failed to get 2FA secret");
|
|
190
|
+
return result;
|
|
191
|
+
};
|
|
192
|
+
const enableTwoFa = async (params) => {
|
|
193
|
+
const userApi = buildUserApi();
|
|
194
|
+
await userApi.enableTwoFa(params);
|
|
195
|
+
};
|
|
196
|
+
const disableTwoFa = async (params) => {
|
|
197
|
+
const userApi = buildUserApi();
|
|
198
|
+
await userApi.disableTwoFa(params);
|
|
199
|
+
};
|
|
200
|
+
const sendTwoFaCode = async (params) => {
|
|
201
|
+
const userApi = buildUserApi();
|
|
202
|
+
await userApi.sendTwoFaCode(params);
|
|
203
|
+
};
|
|
204
|
+
const completeTwoFaChallenge = async (code, remember = false) => {
|
|
205
|
+
const userApi = buildUserApi();
|
|
206
|
+
const result = await userApi.verifyTwoFa({ code, remember });
|
|
207
|
+
if (!result)
|
|
208
|
+
throw new AuthticonError("2FA verification failed");
|
|
209
|
+
cachedUser = await resolveUser();
|
|
210
|
+
if (!cachedUser)
|
|
211
|
+
throw new AuthticonError("User is not authenticated");
|
|
212
|
+
return cachedUser;
|
|
213
|
+
};
|
|
214
|
+
const createInvitation = async (params) => {
|
|
215
|
+
const userApi = buildUserApi();
|
|
216
|
+
await userApi.createInvitation(params);
|
|
217
|
+
};
|
|
218
|
+
const deleteInvitation = async (params) => {
|
|
219
|
+
const userApi = buildUserApi();
|
|
220
|
+
await userApi.deleteInvitation(params);
|
|
221
|
+
};
|
|
222
|
+
const tokens = {
|
|
223
|
+
getAccessToken: () => storage.getAccessToken(),
|
|
224
|
+
getRefreshToken: () => storage.getRefreshToken(),
|
|
225
|
+
verify: async (token) => {
|
|
226
|
+
const accessToken = token ?? storage.getAccessToken();
|
|
227
|
+
if (!accessToken)
|
|
228
|
+
throw new AuthticonError("No access token found");
|
|
229
|
+
return verifier.verifyToken(accessToken);
|
|
230
|
+
},
|
|
231
|
+
clear: () => {
|
|
232
|
+
storage.clear();
|
|
233
|
+
cachedUser = null;
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
return {
|
|
237
|
+
getFirstChallenge,
|
|
238
|
+
login,
|
|
239
|
+
register,
|
|
240
|
+
sendMagicLink,
|
|
241
|
+
loginWithMagicLink,
|
|
242
|
+
forgotPassword,
|
|
243
|
+
verifyEmail,
|
|
244
|
+
createGuest,
|
|
245
|
+
acceptInvitation,
|
|
246
|
+
resendConfirmation,
|
|
247
|
+
getUser,
|
|
248
|
+
requireUser,
|
|
249
|
+
hasSession: isLoggedIn,
|
|
250
|
+
logout,
|
|
251
|
+
refresh: refreshSession,
|
|
252
|
+
changeEmail,
|
|
253
|
+
changePassword,
|
|
254
|
+
setPassword,
|
|
255
|
+
changePhone,
|
|
256
|
+
verifyPhone,
|
|
257
|
+
getTwoFaSecret,
|
|
258
|
+
enableTwoFa,
|
|
259
|
+
disableTwoFa,
|
|
260
|
+
sendTwoFaCode,
|
|
261
|
+
completeTwoFaChallenge,
|
|
262
|
+
createInvitation,
|
|
263
|
+
deleteInvitation,
|
|
264
|
+
tokens,
|
|
265
|
+
};
|
|
266
|
+
};
|
|
267
|
+
//# sourceMappingURL=sessionClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionClient.js","sourceRoot":"","sources":["../src/sessionClient.ts"],"names":[],"mappings":"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"}
|
package/dist/tokens.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Logger } from "pino";
|
|
2
|
+
import type { AccessTokenPayload, CacheAdapter, CookieAdapter, TokenPair, TokenStorageOptions } from "./types.js";
|
|
3
|
+
export declare const createInMemoryCacheAdapter: () => CacheAdapter;
|
|
4
|
+
export type TokenStorage = {
|
|
5
|
+
readonly save: (tokens: TokenPair) => void;
|
|
6
|
+
readonly clear: () => void;
|
|
7
|
+
readonly getAccessToken: () => string | null;
|
|
8
|
+
readonly getRefreshToken: () => string | null;
|
|
9
|
+
readonly getDeviceId: () => string | null;
|
|
10
|
+
readonly getAdminRefreshToken: () => string | null;
|
|
11
|
+
readonly setAccessToken: (accessToken: string) => void;
|
|
12
|
+
readonly setRefreshToken: (refreshToken: string) => void;
|
|
13
|
+
readonly setAdminRefreshToken: (adminRefreshToken: string) => void;
|
|
14
|
+
readonly setDeviceId: (deviceId: string) => void;
|
|
15
|
+
readonly clearAccessToken: () => void;
|
|
16
|
+
readonly clearRefreshToken: () => void;
|
|
17
|
+
readonly clearDeviceId: () => void;
|
|
18
|
+
readonly clearAdminRefreshToken: () => void;
|
|
19
|
+
readonly getAll: () => TokenPair | null;
|
|
20
|
+
};
|
|
21
|
+
export declare const createTokenStorage: (cookies: CookieAdapter, options?: TokenStorageOptions, logger?: Logger) => TokenStorage;
|
|
22
|
+
export type TokenVerifier<Payload extends Record<string, any>> = {
|
|
23
|
+
readonly verifyToken: (token: string) => Promise<AccessTokenPayload<Payload>>;
|
|
24
|
+
readonly clearKeyCache: () => void;
|
|
25
|
+
};
|
|
26
|
+
export declare const createTokenVerifier: <Payload extends Record<string, any> = Record<string, any>>(jwksUrl: string, cacheTtlMs?: number, logger?: Logger, externalCache?: CacheAdapter) => TokenVerifier<Payload>;
|
|
27
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,aAAa,EAGb,SAAS,EACT,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAIpB,eAAO,MAAM,0BAA0B,QAAO,YAY7C,CAAC;AAYF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,QAAQ,CAAC,oBAAoB,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC;IACnC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,IAAI,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,aAAa,EACtB,UAAS,mBAAwB,EACjC,SAAS,MAAM,KACd,YAuGF,CAAC;AAoCF,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI;IAC/D,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9E,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEzD,SAAS,MAAM,EACf,aAAY,MAA6B,EACzC,SAAS,MAAM,EACf,gBAAgB,YAAY,KAC3B,aAAa,CAAC,OAAO,CA4DvB,CAAC"}
|