@insforge/sdk 1.3.0-ssr.1 → 1.3.0-ssr.2
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 +13 -1
- package/dist/ssr.d.mts +16 -5
- package/dist/ssr.d.ts +16 -5
- package/dist/ssr.js +46 -31
- package/dist/ssr.js.map +1 -1
- package/dist/ssr.mjs +46 -31
- package/dist/ssr.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -295,7 +295,19 @@ import { createRefreshAuthRouter } from "@insforge/sdk/ssr";
|
|
|
295
295
|
export const { POST } = createRefreshAuthRouter();
|
|
296
296
|
```
|
|
297
297
|
|
|
298
|
-
For server-owned refresh cookies, run sign-in in a Route Handler or Server Action and use `setAuthCookies()` from `@insforge/sdk/ssr` with the
|
|
298
|
+
For server-owned refresh cookies, run sign-in in a Route Handler or Server Action and use `setAuthCookies()` from `@insforge/sdk/ssr` with the framework cookie writer. In Next.js Route Handlers, pass `response.cookies`:
|
|
299
|
+
|
|
300
|
+
```typescript
|
|
301
|
+
import { NextResponse } from "next/server";
|
|
302
|
+
import { setAuthCookies } from "@insforge/sdk/ssr";
|
|
303
|
+
|
|
304
|
+
const response = NextResponse.json({ user: data.user });
|
|
305
|
+
setAuthCookies(response.cookies, {
|
|
306
|
+
accessToken: data.accessToken,
|
|
307
|
+
refreshToken: data.refreshToken,
|
|
308
|
+
});
|
|
309
|
+
return response;
|
|
310
|
+
```
|
|
299
311
|
|
|
300
312
|
If your refresh route needs custom side effects:
|
|
301
313
|
|
package/dist/ssr.d.mts
CHANGED
|
@@ -24,10 +24,21 @@ interface AuthCookieOptions {
|
|
|
24
24
|
type CookieStoreValue = string | {
|
|
25
25
|
value?: string | null;
|
|
26
26
|
} | undefined | null;
|
|
27
|
-
interface
|
|
27
|
+
interface CookieReader {
|
|
28
28
|
get(name: string): CookieStoreValue;
|
|
29
|
+
}
|
|
30
|
+
interface CookieWriter {
|
|
29
31
|
set?(name: string, value: string, options?: CookieOptions): unknown;
|
|
30
|
-
|
|
32
|
+
set?(options: {
|
|
33
|
+
name: string;
|
|
34
|
+
value: string;
|
|
35
|
+
} & CookieOptions): unknown;
|
|
36
|
+
delete?(name: string): unknown;
|
|
37
|
+
delete?(options: {
|
|
38
|
+
name: string;
|
|
39
|
+
} & CookieOptions): unknown;
|
|
40
|
+
}
|
|
41
|
+
interface CookieStore extends CookieReader, CookieWriter {
|
|
31
42
|
}
|
|
32
43
|
interface AuthCookieSettings {
|
|
33
44
|
names?: AuthCookieNames;
|
|
@@ -37,11 +48,11 @@ declare function getAccessTokenCookieName(names?: AuthCookieNames): string;
|
|
|
37
48
|
declare function getRefreshTokenCookieName(names?: AuthCookieNames): string;
|
|
38
49
|
declare function accessTokenCookieOptions(token: string, overrides?: CookieOptions): CookieOptions;
|
|
39
50
|
declare function refreshTokenCookieOptions(token: string, overrides?: CookieOptions): CookieOptions;
|
|
40
|
-
declare function setAuthCookies(
|
|
51
|
+
declare function setAuthCookies(cookies: CookieWriter | undefined, tokens: {
|
|
41
52
|
accessToken: string;
|
|
42
53
|
refreshToken?: string | null;
|
|
43
54
|
}, settings?: AuthCookieSettings): void;
|
|
44
|
-
declare function clearAuthCookies(
|
|
55
|
+
declare function clearAuthCookies(cookies: CookieWriter | undefined, settings?: AuthCookieSettings): void;
|
|
45
56
|
|
|
46
57
|
interface CreateBrowserClientOptions extends Omit<InsForgeConfig, 'edgeFunctionToken' | 'isServerMode' | 'auth'>, AuthCookieSettings {
|
|
47
58
|
refreshUrl?: string;
|
|
@@ -85,4 +96,4 @@ interface UpdateSessionResult {
|
|
|
85
96
|
}
|
|
86
97
|
declare function updateSession(options: UpdateSessionOptions): Promise<UpdateSessionResult>;
|
|
87
98
|
|
|
88
|
-
export { type AuthCookieNames, type AuthCookieOptions, type AuthCookieSettings, type CookieOptions, type CookieStore, type CreateBrowserClientOptions, type CreateServerClientOptions, DEFAULT_ACCESS_TOKEN_COOKIE, DEFAULT_REFRESH_TOKEN_COOKIE, type RefreshAuthOptions, type RefreshAuthResult, type RefreshAuthRouteHandler, type UpdateSessionOptions, type UpdateSessionResult, accessTokenCookieOptions, clearAuthCookies, createBrowserClient, createRefreshAuthRouter, createServerClient, getAccessTokenCookieName, getRefreshTokenCookieName, refreshAuth, refreshTokenCookieOptions, setAuthCookies, updateSession };
|
|
99
|
+
export { type AuthCookieNames, type AuthCookieOptions, type AuthCookieSettings, type CookieOptions, type CookieReader, type CookieStore, type CookieWriter, type CreateBrowserClientOptions, type CreateServerClientOptions, DEFAULT_ACCESS_TOKEN_COOKIE, DEFAULT_REFRESH_TOKEN_COOKIE, type RefreshAuthOptions, type RefreshAuthResult, type RefreshAuthRouteHandler, type UpdateSessionOptions, type UpdateSessionResult, accessTokenCookieOptions, clearAuthCookies, createBrowserClient, createRefreshAuthRouter, createServerClient, getAccessTokenCookieName, getRefreshTokenCookieName, refreshAuth, refreshTokenCookieOptions, setAuthCookies, updateSession };
|
package/dist/ssr.d.ts
CHANGED
|
@@ -24,10 +24,21 @@ interface AuthCookieOptions {
|
|
|
24
24
|
type CookieStoreValue = string | {
|
|
25
25
|
value?: string | null;
|
|
26
26
|
} | undefined | null;
|
|
27
|
-
interface
|
|
27
|
+
interface CookieReader {
|
|
28
28
|
get(name: string): CookieStoreValue;
|
|
29
|
+
}
|
|
30
|
+
interface CookieWriter {
|
|
29
31
|
set?(name: string, value: string, options?: CookieOptions): unknown;
|
|
30
|
-
|
|
32
|
+
set?(options: {
|
|
33
|
+
name: string;
|
|
34
|
+
value: string;
|
|
35
|
+
} & CookieOptions): unknown;
|
|
36
|
+
delete?(name: string): unknown;
|
|
37
|
+
delete?(options: {
|
|
38
|
+
name: string;
|
|
39
|
+
} & CookieOptions): unknown;
|
|
40
|
+
}
|
|
41
|
+
interface CookieStore extends CookieReader, CookieWriter {
|
|
31
42
|
}
|
|
32
43
|
interface AuthCookieSettings {
|
|
33
44
|
names?: AuthCookieNames;
|
|
@@ -37,11 +48,11 @@ declare function getAccessTokenCookieName(names?: AuthCookieNames): string;
|
|
|
37
48
|
declare function getRefreshTokenCookieName(names?: AuthCookieNames): string;
|
|
38
49
|
declare function accessTokenCookieOptions(token: string, overrides?: CookieOptions): CookieOptions;
|
|
39
50
|
declare function refreshTokenCookieOptions(token: string, overrides?: CookieOptions): CookieOptions;
|
|
40
|
-
declare function setAuthCookies(
|
|
51
|
+
declare function setAuthCookies(cookies: CookieWriter | undefined, tokens: {
|
|
41
52
|
accessToken: string;
|
|
42
53
|
refreshToken?: string | null;
|
|
43
54
|
}, settings?: AuthCookieSettings): void;
|
|
44
|
-
declare function clearAuthCookies(
|
|
55
|
+
declare function clearAuthCookies(cookies: CookieWriter | undefined, settings?: AuthCookieSettings): void;
|
|
45
56
|
|
|
46
57
|
interface CreateBrowserClientOptions extends Omit<InsForgeConfig, 'edgeFunctionToken' | 'isServerMode' | 'auth'>, AuthCookieSettings {
|
|
47
58
|
refreshUrl?: string;
|
|
@@ -85,4 +96,4 @@ interface UpdateSessionResult {
|
|
|
85
96
|
}
|
|
86
97
|
declare function updateSession(options: UpdateSessionOptions): Promise<UpdateSessionResult>;
|
|
87
98
|
|
|
88
|
-
export { type AuthCookieNames, type AuthCookieOptions, type AuthCookieSettings, type CookieOptions, type CookieStore, type CreateBrowserClientOptions, type CreateServerClientOptions, DEFAULT_ACCESS_TOKEN_COOKIE, DEFAULT_REFRESH_TOKEN_COOKIE, type RefreshAuthOptions, type RefreshAuthResult, type RefreshAuthRouteHandler, type UpdateSessionOptions, type UpdateSessionResult, accessTokenCookieOptions, clearAuthCookies, createBrowserClient, createRefreshAuthRouter, createServerClient, getAccessTokenCookieName, getRefreshTokenCookieName, refreshAuth, refreshTokenCookieOptions, setAuthCookies, updateSession };
|
|
99
|
+
export { type AuthCookieNames, type AuthCookieOptions, type AuthCookieSettings, type CookieOptions, type CookieReader, type CookieStore, type CookieWriter, type CreateBrowserClientOptions, type CreateServerClientOptions, DEFAULT_ACCESS_TOKEN_COOKIE, DEFAULT_REFRESH_TOKEN_COOKIE, type RefreshAuthOptions, type RefreshAuthResult, type RefreshAuthRouteHandler, type UpdateSessionOptions, type UpdateSessionResult, accessTokenCookieOptions, clearAuthCookies, createBrowserClient, createRefreshAuthRouter, createServerClient, getAccessTokenCookieName, getRefreshTokenCookieName, refreshAuth, refreshTokenCookieOptions, setAuthCookies, updateSession };
|
package/dist/ssr.js
CHANGED
|
@@ -2735,11 +2735,11 @@ function setCookie(cookies, name, value, options) {
|
|
|
2735
2735
|
}
|
|
2736
2736
|
function deleteCookie(cookies, name, options) {
|
|
2737
2737
|
if (!cookies) return;
|
|
2738
|
-
if (cookies.
|
|
2739
|
-
cookies.
|
|
2738
|
+
if (cookies.set) {
|
|
2739
|
+
cookies.set(name, "", expiredCookieOptions(options));
|
|
2740
2740
|
return;
|
|
2741
2741
|
}
|
|
2742
|
-
cookies.
|
|
2742
|
+
cookies.delete?.(name);
|
|
2743
2743
|
}
|
|
2744
2744
|
function serializeCookie(name, value, options = {}) {
|
|
2745
2745
|
const parts = [`${encodeURIComponent(name)}=${encodeURIComponent(value)}`];
|
|
@@ -2758,32 +2758,17 @@ function serializeCookie(name, value, options = {}) {
|
|
|
2758
2758
|
function appendSetCookie(headers, name, value, options) {
|
|
2759
2759
|
headers.append("Set-Cookie", serializeCookie(name, value, options));
|
|
2760
2760
|
}
|
|
2761
|
-
function setAuthCookies(
|
|
2761
|
+
function setAuthCookies(cookies, tokens, settings = {}) {
|
|
2762
2762
|
const accessName = getAccessTokenCookieName(settings.names);
|
|
2763
2763
|
const refreshName = getRefreshTokenCookieName(settings.names);
|
|
2764
2764
|
const accessOptions = accessTokenCookieOptions(
|
|
2765
2765
|
tokens.accessToken,
|
|
2766
2766
|
settings.options?.accessToken
|
|
2767
2767
|
);
|
|
2768
|
-
|
|
2769
|
-
appendSetCookie(target, accessName, tokens.accessToken, accessOptions);
|
|
2770
|
-
if (tokens.refreshToken) {
|
|
2771
|
-
appendSetCookie(
|
|
2772
|
-
target,
|
|
2773
|
-
refreshName,
|
|
2774
|
-
tokens.refreshToken,
|
|
2775
|
-
refreshTokenCookieOptions(
|
|
2776
|
-
tokens.refreshToken,
|
|
2777
|
-
settings.options?.refreshToken
|
|
2778
|
-
)
|
|
2779
|
-
);
|
|
2780
|
-
}
|
|
2781
|
-
return;
|
|
2782
|
-
}
|
|
2783
|
-
setCookie(target, accessName, tokens.accessToken, accessOptions);
|
|
2768
|
+
setCookie(cookies, accessName, tokens.accessToken, accessOptions);
|
|
2784
2769
|
if (tokens.refreshToken) {
|
|
2785
2770
|
setCookie(
|
|
2786
|
-
|
|
2771
|
+
cookies,
|
|
2787
2772
|
refreshName,
|
|
2788
2773
|
tokens.refreshToken,
|
|
2789
2774
|
refreshTokenCookieOptions(
|
|
@@ -2793,18 +2778,48 @@ function setAuthCookies(target, tokens, settings = {}) {
|
|
|
2793
2778
|
);
|
|
2794
2779
|
}
|
|
2795
2780
|
}
|
|
2796
|
-
function clearAuthCookies(
|
|
2781
|
+
function clearAuthCookies(cookies, settings = {}) {
|
|
2797
2782
|
const accessName = getAccessTokenCookieName(settings.names);
|
|
2798
2783
|
const refreshName = getRefreshTokenCookieName(settings.names);
|
|
2799
2784
|
const accessOptions = expiredCookieOptions(settings.options?.accessToken);
|
|
2800
2785
|
const refreshOptions = expiredCookieOptions(settings.options?.refreshToken);
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
|
|
2786
|
+
deleteCookie(cookies, accessName, accessOptions);
|
|
2787
|
+
deleteCookie(cookies, refreshName, refreshOptions);
|
|
2788
|
+
}
|
|
2789
|
+
function setAuthCookieHeaders(headers, tokens, settings = {}) {
|
|
2790
|
+
const accessName = getAccessTokenCookieName(settings.names);
|
|
2791
|
+
const refreshName = getRefreshTokenCookieName(settings.names);
|
|
2792
|
+
appendSetCookie(
|
|
2793
|
+
headers,
|
|
2794
|
+
accessName,
|
|
2795
|
+
tokens.accessToken,
|
|
2796
|
+
accessTokenCookieOptions(tokens.accessToken, settings.options?.accessToken)
|
|
2797
|
+
);
|
|
2798
|
+
if (tokens.refreshToken) {
|
|
2799
|
+
appendSetCookie(
|
|
2800
|
+
headers,
|
|
2801
|
+
refreshName,
|
|
2802
|
+
tokens.refreshToken,
|
|
2803
|
+
refreshTokenCookieOptions(
|
|
2804
|
+
tokens.refreshToken,
|
|
2805
|
+
settings.options?.refreshToken
|
|
2806
|
+
)
|
|
2807
|
+
);
|
|
2805
2808
|
}
|
|
2806
|
-
|
|
2807
|
-
|
|
2809
|
+
}
|
|
2810
|
+
function clearAuthCookieHeaders(headers, settings = {}) {
|
|
2811
|
+
appendSetCookie(
|
|
2812
|
+
headers,
|
|
2813
|
+
getAccessTokenCookieName(settings.names),
|
|
2814
|
+
"",
|
|
2815
|
+
expiredCookieOptions(settings.options?.accessToken)
|
|
2816
|
+
);
|
|
2817
|
+
appendSetCookie(
|
|
2818
|
+
headers,
|
|
2819
|
+
getRefreshTokenCookieName(settings.names),
|
|
2820
|
+
"",
|
|
2821
|
+
expiredCookieOptions(settings.options?.refreshToken)
|
|
2822
|
+
);
|
|
2808
2823
|
}
|
|
2809
2824
|
|
|
2810
2825
|
// src/ssr/browser-client.ts
|
|
@@ -3029,7 +3044,7 @@ async function refreshAuth(options = {}) {
|
|
|
3029
3044
|
const headers = new Headers();
|
|
3030
3045
|
const refreshToken = readRefreshToken(options);
|
|
3031
3046
|
if (!refreshToken) {
|
|
3032
|
-
|
|
3047
|
+
clearAuthCookieHeaders(headers, options);
|
|
3033
3048
|
const error2 = new InsForgeError(
|
|
3034
3049
|
"Refresh token cookie is missing",
|
|
3035
3050
|
401,
|
|
@@ -3099,7 +3114,7 @@ async function refreshAuth(options = {}) {
|
|
|
3099
3114
|
error = normalizeError(caught);
|
|
3100
3115
|
}
|
|
3101
3116
|
if (error || !data?.accessToken) {
|
|
3102
|
-
|
|
3117
|
+
clearAuthCookieHeaders(headers, options);
|
|
3103
3118
|
const normalized = normalizeError(error);
|
|
3104
3119
|
return {
|
|
3105
3120
|
response: jsonResponse(
|
|
@@ -3118,7 +3133,7 @@ async function refreshAuth(options = {}) {
|
|
|
3118
3133
|
};
|
|
3119
3134
|
}
|
|
3120
3135
|
const nextRefreshToken = data.refreshToken ?? refreshToken;
|
|
3121
|
-
|
|
3136
|
+
setAuthCookieHeaders(
|
|
3122
3137
|
headers,
|
|
3123
3138
|
{
|
|
3124
3139
|
accessToken: data.accessToken,
|