@authticon/client 0.0.0-beta37 → 0.0.0-beta39
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/TokenStorage.d.ts +6 -18
- package/dist/TokenStorage.d.ts.map +1 -1
- package/dist/TokenStorage.js +83 -135
- package/dist/TokenStorage.js.map +1 -1
- package/dist/TokenVerifier.d.ts +3 -10
- package/dist/TokenVerifier.d.ts.map +1 -1
- package/dist/TokenVerifier.js +39 -46
- 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 +88 -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 +91 -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 +164 -0
- package/dist/clients/generated/sdk.gen.d.ts.map +1 -0
- package/dist/clients/generated/sdk.gen.js +415 -0
- package/dist/clients/generated/sdk.gen.js.map +1 -0
- package/dist/clients/generated/types.gen.d.ts +1234 -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 +44 -0
- package/dist/clients/user.d.ts.map +1 -0
- package/dist/clients/user.js +68 -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 +3 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +4 -4
- package/dist/errors.js.map +1 -1
- 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 +149 -43
- package/dist/generated/sdk.gen.d.ts.map +1 -1
- package/dist/generated/sdk.gen.js +231 -153
- package/dist/generated/sdk.gen.js.map +1 -1
- package/dist/generated/types.gen.d.ts +613 -738
- package/dist/generated/types.gen.d.ts.map +1 -1
- package/dist/index.d.ts +1 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -8
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +169 -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 +57 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +273 -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/{TokenManager.d.ts → tokens.d.ts} +17 -22
- 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 +31 -5
- 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 +22 -8
- 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 -29
- package/dist/Auth.d.ts.map +0 -1
- package/dist/Auth.js +0 -47
- package/dist/Auth.js.map +0 -1
- package/dist/Authticon.d.ts +0 -207
- package/dist/Authticon.d.ts.map +0 -1
- package/dist/Authticon.js +0 -127
- 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/Challange.d.ts +0 -8
- package/dist/Challange.d.ts.map +0 -1
- package/dist/Challange.js +0 -24
- package/dist/Challange.js.map +0 -1
- package/dist/CookieStorageAdapter.test.d.ts +0 -2
- package/dist/CookieStorageAdapter.test.d.ts.map +0 -1
- package/dist/CookieStorageAdapter.test.js +0 -137
- package/dist/CookieStorageAdapter.test.js.map +0 -1
- package/dist/InMemoryCacheAdapter.test.d.ts +0 -2
- package/dist/InMemoryCacheAdapter.test.d.ts.map +0 -1
- package/dist/InMemoryCacheAdapter.test.js +0 -38
- package/dist/InMemoryCacheAdapter.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/Session.d.ts +0 -10
- package/dist/Session.d.ts.map +0 -1
- package/dist/Session.js +0 -16
- package/dist/Session.js.map +0 -1
- package/dist/TokenManager.d.ts.map +0 -1
- package/dist/TokenManager.js +0 -49
- 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 -120
- 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 -318
- 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 -139
- package/dist/TokenVerifier.test.js.map +0 -1
- package/dist/TwoFa.d.ts +0 -26
- package/dist/TwoFa.d.ts.map +0 -1
- package/dist/TwoFa.js +0 -55
- 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 -68
- package/dist/Users.d.ts.map +0 -1
- package/dist/Users.js +0 -64
- 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/errors.test.d.ts +0 -2
- package/dist/errors.test.d.ts.map +0 -1
- package/dist/errors.test.js +0 -99
- package/dist/errors.test.js.map +0 -1
- package/dist/user.d.ts +0 -117
- package/dist/user.d.ts.map +0 -1
- package/dist/user.js +0 -84
- package/dist/user.js.map +0 -1
package/dist/session.js
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
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 createSession = 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 getMe = async () => {
|
|
134
|
+
const userApi = buildUserApi();
|
|
135
|
+
return userApi.getMe();
|
|
136
|
+
};
|
|
137
|
+
const getUser = () => cachedUser;
|
|
138
|
+
const requireUser = () => {
|
|
139
|
+
if (!cachedUser)
|
|
140
|
+
throw new AuthticonError("User is not authenticated");
|
|
141
|
+
return cachedUser;
|
|
142
|
+
};
|
|
143
|
+
const getFirstChallenge = () => {
|
|
144
|
+
if (!cachedUser)
|
|
145
|
+
throw new AuthticonError("User is not authenticated");
|
|
146
|
+
return cachedUser.challenges[0];
|
|
147
|
+
};
|
|
148
|
+
const isLoggedIn = () => storage.getAccessToken() !== null;
|
|
149
|
+
const logout = async () => {
|
|
150
|
+
const refreshToken = storage.getRefreshToken();
|
|
151
|
+
if (refreshToken) {
|
|
152
|
+
try {
|
|
153
|
+
const userApi = buildUserApi();
|
|
154
|
+
await userApi.logout(refreshToken);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// Best-effort server-side logout
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
storage.clear();
|
|
161
|
+
cachedUser = null;
|
|
162
|
+
};
|
|
163
|
+
const refreshSession = async () => {
|
|
164
|
+
const newToken = await tryRefresh();
|
|
165
|
+
if (!newToken)
|
|
166
|
+
throw new AuthticonError("Token refresh failed");
|
|
167
|
+
cachedUser = await verifyAndBuildUser(newToken);
|
|
168
|
+
};
|
|
169
|
+
const changeEmail = async (params) => {
|
|
170
|
+
const userApi = buildUserApi();
|
|
171
|
+
await userApi.changeEmail(params);
|
|
172
|
+
};
|
|
173
|
+
const changePassword = async (params) => {
|
|
174
|
+
const userApi = buildUserApi();
|
|
175
|
+
await userApi.changePassword(params);
|
|
176
|
+
};
|
|
177
|
+
const setPassword = async (params) => {
|
|
178
|
+
const userApi = buildUserApi();
|
|
179
|
+
await userApi.setPassword(params);
|
|
180
|
+
};
|
|
181
|
+
const changePhone = async (params) => {
|
|
182
|
+
const userApi = buildUserApi();
|
|
183
|
+
await userApi.changePhone(params);
|
|
184
|
+
};
|
|
185
|
+
const verifyPhone = async (params) => {
|
|
186
|
+
const userApi = buildUserApi();
|
|
187
|
+
await userApi.verifyPhone(params);
|
|
188
|
+
};
|
|
189
|
+
const getTwoFaSecret = async () => {
|
|
190
|
+
const userApi = buildUserApi();
|
|
191
|
+
const result = await userApi.getTwoFaSecret();
|
|
192
|
+
if (!result)
|
|
193
|
+
throw new AuthticonError("Failed to get 2FA secret");
|
|
194
|
+
return result;
|
|
195
|
+
};
|
|
196
|
+
const enableTwoFa = async (params) => {
|
|
197
|
+
const userApi = buildUserApi();
|
|
198
|
+
await userApi.enableTwoFa(params);
|
|
199
|
+
};
|
|
200
|
+
const disableTwoFa = async (params) => {
|
|
201
|
+
const userApi = buildUserApi();
|
|
202
|
+
await userApi.disableTwoFa(params);
|
|
203
|
+
};
|
|
204
|
+
const sendTwoFaCode = async (params) => {
|
|
205
|
+
const userApi = buildUserApi();
|
|
206
|
+
await userApi.sendTwoFaCode(params);
|
|
207
|
+
};
|
|
208
|
+
const completeTwoFaChallenge = async (code, remember = false) => {
|
|
209
|
+
const userApi = buildUserApi();
|
|
210
|
+
const result = await userApi.verifyTwoFa({ code, remember });
|
|
211
|
+
if (!result)
|
|
212
|
+
throw new AuthticonError("2FA verification failed");
|
|
213
|
+
cachedUser = await resolveUser();
|
|
214
|
+
if (!cachedUser)
|
|
215
|
+
throw new AuthticonError("User is not authenticated");
|
|
216
|
+
return cachedUser;
|
|
217
|
+
};
|
|
218
|
+
const createInvitation = async (params) => {
|
|
219
|
+
const userApi = buildUserApi();
|
|
220
|
+
await userApi.createInvitation(params);
|
|
221
|
+
};
|
|
222
|
+
const deleteInvitation = async (params) => {
|
|
223
|
+
const userApi = buildUserApi();
|
|
224
|
+
await userApi.deleteInvitation(params);
|
|
225
|
+
};
|
|
226
|
+
const tokens = {
|
|
227
|
+
getAccessToken: () => storage.getAccessToken(),
|
|
228
|
+
getRefreshToken: () => storage.getRefreshToken(),
|
|
229
|
+
verify: async (token) => {
|
|
230
|
+
const accessToken = token ?? storage.getAccessToken();
|
|
231
|
+
if (!accessToken)
|
|
232
|
+
throw new AuthticonError("No access token found");
|
|
233
|
+
return verifier.verifyToken(accessToken);
|
|
234
|
+
},
|
|
235
|
+
clear: () => {
|
|
236
|
+
storage.clear();
|
|
237
|
+
cachedUser = null;
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
return {
|
|
241
|
+
getFirstChallenge,
|
|
242
|
+
getMe,
|
|
243
|
+
login,
|
|
244
|
+
register,
|
|
245
|
+
sendMagicLink,
|
|
246
|
+
loginWithMagicLink,
|
|
247
|
+
forgotPassword,
|
|
248
|
+
verifyEmail,
|
|
249
|
+
createGuest,
|
|
250
|
+
acceptInvitation,
|
|
251
|
+
resendConfirmation,
|
|
252
|
+
getUser,
|
|
253
|
+
requireUser,
|
|
254
|
+
hasSession: isLoggedIn,
|
|
255
|
+
logout,
|
|
256
|
+
refresh: refreshSession,
|
|
257
|
+
changeEmail,
|
|
258
|
+
changePassword,
|
|
259
|
+
setPassword,
|
|
260
|
+
changePhone,
|
|
261
|
+
verifyPhone,
|
|
262
|
+
getTwoFaSecret,
|
|
263
|
+
enableTwoFa,
|
|
264
|
+
disableTwoFa,
|
|
265
|
+
sendTwoFaCode,
|
|
266
|
+
completeTwoFaChallenge,
|
|
267
|
+
createInvitation,
|
|
268
|
+
deleteInvitation,
|
|
269
|
+
tokens,
|
|
270
|
+
cookies,
|
|
271
|
+
};
|
|
272
|
+
};
|
|
273
|
+
//# 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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"}
|