@sylphx/sdk 0.12.2 → 0.13.8
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/nextjs/index.mjs +63 -33
- package/dist/nextjs/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/nextjs/index.mjs
CHANGED
|
@@ -681,6 +681,33 @@ function authCookieJsonResponse(ctx, data) {
|
|
|
681
681
|
setAuthCookiesMiddleware(response, ctx.namespace, data);
|
|
682
682
|
return response;
|
|
683
683
|
}
|
|
684
|
+
function sessionMetadataBody(sessionToken, user) {
|
|
685
|
+
const payload = decodeJwtPayload(sessionToken);
|
|
686
|
+
const userId = payload?.sub ?? user.id;
|
|
687
|
+
const expiresAt = typeof payload?.exp === "number" ? new Date(payload.exp * 1e3).toISOString() : new Date(Date.now() + SESSION_TOKEN_LIFETIME * 1e3).toISOString();
|
|
688
|
+
return {
|
|
689
|
+
success: true,
|
|
690
|
+
session: {
|
|
691
|
+
id: `platform:${userId}`,
|
|
692
|
+
userId,
|
|
693
|
+
expiresAt
|
|
694
|
+
},
|
|
695
|
+
user
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
function setRestoredSessionCookies(response, ctx, restored) {
|
|
699
|
+
setAuthCookiesMiddleware(response, ctx.namespace, restored.tokens);
|
|
700
|
+
if (restored.activeOrganization) {
|
|
701
|
+
setActiveOrganizationCookies(response, ctx, restored.activeOrganization);
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
async function refreshSessionFromCookie(request, ctx, previousSessionToken) {
|
|
705
|
+
const refreshToken = request.cookies.get(ctx.cookieNames.REFRESH)?.value;
|
|
706
|
+
if (!refreshToken) return null;
|
|
707
|
+
const refreshedTokens = await refreshTokens(refreshToken, ctx);
|
|
708
|
+
if (!refreshedTokens) return null;
|
|
709
|
+
return restoreOrganizationScopeAfterRefresh(request, ctx, refreshedTokens, previousSessionToken);
|
|
710
|
+
}
|
|
684
711
|
function headersForProjectAuth(ctx) {
|
|
685
712
|
return {
|
|
686
713
|
"Content-Type": "application/json",
|
|
@@ -768,35 +795,28 @@ async function handleVerifyTwoFactor(request, ctx) {
|
|
|
768
795
|
}
|
|
769
796
|
return authCookieJsonResponse(ctx, data);
|
|
770
797
|
}
|
|
771
|
-
function handleSession(request, ctx) {
|
|
798
|
+
async function handleSession(request, ctx) {
|
|
772
799
|
if (request.method !== "GET") {
|
|
773
800
|
return NextResponse.json({ error: "Method not allowed" }, { status: 405 });
|
|
774
801
|
}
|
|
775
802
|
const sessionToken = request.cookies.get(ctx.cookieNames.SESSION)?.value;
|
|
776
|
-
const
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
803
|
+
const userCookie = parseUserCookie2(request.cookies.get(ctx.cookieNames.USER)?.value);
|
|
804
|
+
if (sessionToken && !isTokenExpired(sessionToken) && userCookie?.user) {
|
|
805
|
+
return NextResponse.json(sessionMetadataBody(sessionToken, userCookie.user));
|
|
806
|
+
}
|
|
807
|
+
const restored = await refreshSessionFromCookie(request, ctx, sessionToken);
|
|
808
|
+
if (restored) {
|
|
809
|
+
const response2 = NextResponse.json(
|
|
810
|
+
sessionMetadataBody(restored.tokens.accessToken, restored.tokens.user)
|
|
811
|
+
);
|
|
812
|
+
setRestoredSessionCookies(response2, ctx, restored);
|
|
813
|
+
return response2;
|
|
784
814
|
}
|
|
785
|
-
|
|
786
|
-
|
|
815
|
+
const response = NextResponse.json({ success: true, session: null, user: null });
|
|
816
|
+
if (sessionToken || request.cookies.has(ctx.cookieNames.REFRESH) || userCookie) {
|
|
817
|
+
clearAuthCookiesMiddleware(response, ctx.namespace);
|
|
787
818
|
}
|
|
788
|
-
|
|
789
|
-
const userId = payload?.sub ?? userCookie.user.id;
|
|
790
|
-
const expiresAt = typeof payload?.exp === "number" ? new Date(payload.exp * 1e3).toISOString() : new Date(userCookie.expiresAt).toISOString();
|
|
791
|
-
return NextResponse.json({
|
|
792
|
-
success: true,
|
|
793
|
-
session: {
|
|
794
|
-
id: `platform:${userId}`,
|
|
795
|
-
userId,
|
|
796
|
-
expiresAt
|
|
797
|
-
},
|
|
798
|
-
user: userCookie.user
|
|
799
|
-
});
|
|
819
|
+
return response;
|
|
800
820
|
}
|
|
801
821
|
async function handleOAuthProviders(ctx) {
|
|
802
822
|
const res = await fetch(`${ctx.platformUrl}/v1/auth/oauth-providers`, {
|
|
@@ -999,19 +1019,29 @@ async function handleSignOut(request, ctx) {
|
|
|
999
1019
|
ctx.log("Signout complete");
|
|
1000
1020
|
return response;
|
|
1001
1021
|
}
|
|
1002
|
-
function handleToken(request, ctx) {
|
|
1022
|
+
async function handleToken(request, ctx) {
|
|
1003
1023
|
ctx.log("Token request");
|
|
1004
1024
|
const sessionToken = request.cookies.get(ctx.cookieNames.SESSION)?.value;
|
|
1005
|
-
if (!sessionToken) {
|
|
1006
|
-
ctx.log("
|
|
1007
|
-
return NextResponse.json({
|
|
1008
|
-
}
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1025
|
+
if (sessionToken && !isTokenExpired(sessionToken)) {
|
|
1026
|
+
ctx.log("Token returned");
|
|
1027
|
+
return NextResponse.json({ accessToken: sessionToken });
|
|
1028
|
+
}
|
|
1029
|
+
const restored = await refreshSessionFromCookie(request, ctx, sessionToken);
|
|
1030
|
+
if (restored) {
|
|
1031
|
+
ctx.log("Token refreshed and returned");
|
|
1032
|
+
const response2 = NextResponse.json({ accessToken: restored.tokens.accessToken });
|
|
1033
|
+
setRestoredSessionCookies(response2, ctx, restored);
|
|
1034
|
+
return response2;
|
|
1035
|
+
}
|
|
1036
|
+
ctx.log(sessionToken ? "Session token expired" : "No session token");
|
|
1037
|
+
const response = NextResponse.json(
|
|
1038
|
+
{ error: sessionToken ? "Session expired" : "Not authenticated", accessToken: null },
|
|
1039
|
+
{ status: 401 }
|
|
1040
|
+
);
|
|
1041
|
+
if (sessionToken || request.cookies.has(ctx.cookieNames.REFRESH)) {
|
|
1042
|
+
clearAuthCookiesMiddleware(response, ctx.namespace);
|
|
1012
1043
|
}
|
|
1013
|
-
|
|
1014
|
-
return NextResponse.json({ accessToken: sessionToken });
|
|
1044
|
+
return response;
|
|
1015
1045
|
}
|
|
1016
1046
|
function resolveOrgScopedTokenExpiresIn(data) {
|
|
1017
1047
|
if (typeof data.expiresIn === "number") return data.expiresIn;
|