@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 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 auth response.
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 CookieStore {
27
+ interface CookieReader {
28
28
  get(name: string): CookieStoreValue;
29
+ }
30
+ interface CookieWriter {
29
31
  set?(name: string, value: string, options?: CookieOptions): unknown;
30
- delete?(name: string, options?: CookieOptions): unknown;
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(target: Headers | CookieStore | undefined, tokens: {
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(target: Headers | CookieStore | undefined, settings?: AuthCookieSettings): void;
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 CookieStore {
27
+ interface CookieReader {
28
28
  get(name: string): CookieStoreValue;
29
+ }
30
+ interface CookieWriter {
29
31
  set?(name: string, value: string, options?: CookieOptions): unknown;
30
- delete?(name: string, options?: CookieOptions): unknown;
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(target: Headers | CookieStore | undefined, tokens: {
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(target: Headers | CookieStore | undefined, settings?: AuthCookieSettings): void;
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.delete) {
2739
- cookies.delete(name, options);
2738
+ if (cookies.set) {
2739
+ cookies.set(name, "", expiredCookieOptions(options));
2740
2740
  return;
2741
2741
  }
2742
- cookies.set?.(name, "", expiredCookieOptions(options));
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(target, tokens, settings = {}) {
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
- if (target instanceof Headers) {
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
- target,
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(target, settings = {}) {
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
- if (target instanceof Headers) {
2802
- appendSetCookie(target, accessName, "", accessOptions);
2803
- appendSetCookie(target, refreshName, "", refreshOptions);
2804
- return;
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
- deleteCookie(target, accessName, accessOptions);
2807
- deleteCookie(target, refreshName, refreshOptions);
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
- clearAuthCookies(headers, options);
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
- clearAuthCookies(headers, options);
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
- setAuthCookies(
3136
+ setAuthCookieHeaders(
3122
3137
  headers,
3123
3138
  {
3124
3139
  accessToken: data.accessToken,