@ya-accelerators/nextjs-framework 0.0.82 → 0.0.84

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.
Files changed (32) hide show
  1. package/@types/next-auth.d.ts +0 -1
  2. package/dist/hooks/dispatch/index.jsx +8 -4
  3. package/dist/hooks/dispatch/index.jsx.map +1 -1
  4. package/dist/hooks/toast/index.jsx +3 -0
  5. package/dist/hooks/toast/index.jsx.map +1 -1
  6. package/dist/lib/next-auth/index.d.ts +1 -0
  7. package/dist/lib/next-auth/index.js +126 -115
  8. package/dist/lib/next-auth/index.js.map +1 -1
  9. package/dist/lib/trpc/index.js +32 -5
  10. package/dist/lib/trpc/index.js.map +1 -1
  11. package/dist/tsconfig.tsbuildinfo +1 -1
  12. package/dist/ui/composite/input/dateRange/index.jsx +13 -17
  13. package/dist/ui/composite/input/dateRange/index.jsx.map +1 -1
  14. package/dist/ui/composite/input/dateTimePicker/index.jsx +5 -3
  15. package/dist/ui/composite/input/dateTimePicker/index.jsx.map +1 -1
  16. package/dist/ui/composite/input/dateTimeRange/index.jsx +14 -21
  17. package/dist/ui/composite/input/dateTimeRange/index.jsx.map +1 -1
  18. package/dist/ui/functional/signInForm/index.jsx +1 -1
  19. package/dist/ui/functional/signInForm/index.jsx.map +1 -1
  20. package/dist/ui/functional/signOutForm/index.jsx +1 -1
  21. package/dist/ui/functional/signOutForm/index.jsx.map +1 -1
  22. package/dist/ui/layout/form/index.jsx +27 -23
  23. package/dist/ui/layout/form/index.jsx.map +1 -1
  24. package/dist/ui/layout/modal/index.jsx +23 -17
  25. package/dist/ui/layout/modal/index.jsx.map +1 -1
  26. package/dist/ui/layout/root/index.jsx +2 -2
  27. package/dist/ui/layout/root/index.jsx.map +1 -1
  28. package/dist/util/date/impl.js +5 -1
  29. package/dist/util/date/impl.js.map +1 -1
  30. package/dist/util/index.js +2 -3
  31. package/dist/util/index.js.map +1 -1
  32. package/package.json +1 -1
@@ -8,7 +8,6 @@ declare module 'next-auth' {
8
8
  headers?: Record<string, string>
9
9
  }
10
10
  interface Session extends DefaultSession {
11
- accessToken?: string
12
11
  scope?: string
13
12
  error?: string
14
13
  }
@@ -15,10 +15,14 @@ export const DispatchProvider = ({ children }) => {
15
15
  if (requestShowLoading !== false) {
16
16
  showLoading();
17
17
  }
18
- const ret = await promise;
19
- router.refresh();
20
- dismissLoading();
21
- return ret;
18
+ try {
19
+ const ret = await promise;
20
+ router.refresh();
21
+ return ret;
22
+ }
23
+ finally {
24
+ dismissLoading();
25
+ }
22
26
  };
23
27
  return <DispatchContext.Provider value={{ dispatch }}>{children}</DispatchContext.Provider>;
24
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../../../src/hooks/dispatch/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAK9C,MAAM,eAAe,GAAG,aAAa,CAAmB;IACtD,QAAQ,CAAI,OAAmB;QAC7B,OAAO,OAAO,CAAA;IAChB,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,QAAQ,EAA2B,EAAE,EAAE;IACxE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,iBAAiB,EAAE,CAAA;IAC3D,MAAM,QAAQ,GAAG,KAAK,WAAc,OAAmB,EAAE,kBAA4B;QACnF,IAAI,kBAAkB,KAAK,KAAK,EAAE,CAAC;YACjC,WAAW,EAAE,CAAA;QACf,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAA;QACzB,MAAM,CAAC,OAAO,EAAE,CAAA;QAChB,cAAc,EAAE,CAAA;QAChB,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;IACD,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;AAC7F,CAAC,CAAA"}
1
+ {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../../../src/hooks/dispatch/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAK9C,MAAM,eAAe,GAAG,aAAa,CAAmB;IACtD,QAAQ,CAAI,OAAmB;QAC7B,OAAO,OAAO,CAAA;IAChB,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,QAAQ,EAA2B,EAAE,EAAE;IACxE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,iBAAiB,EAAE,CAAA;IAC3D,MAAM,QAAQ,GAAG,KAAK,WAAc,OAAmB,EAAE,kBAA4B;QACnF,IAAI,kBAAkB,KAAK,KAAK,EAAE,CAAC;YACjC,WAAW,EAAE,CAAA;QACf,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAA;YACzB,MAAM,CAAC,OAAO,EAAE,CAAA;YAChB,OAAO,GAAG,CAAA;QACZ,CAAC;gBAAS,CAAC;YACT,cAAc,EAAE,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;IACD,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;AAC7F,CAAC,CAAA"}
@@ -26,6 +26,9 @@ export const ToastProvider = ({ children }) => {
26
26
  }
27
27
  };
28
28
  const dismissToast = () => {
29
+ if (h) {
30
+ clearTimeout(h);
31
+ }
29
32
  setContent(undefined);
30
33
  setH(undefined);
31
34
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../../../src/hooks/toast/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAGZ,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMjD,MAAM,YAAY,GAAG,aAAa,CAAgB;IAChD,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;IACnB,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC;CACvB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,QAAQ,EAA2B,EAAE,EAAE;IACrE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAa,CAAA;IACnD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAa,UAAU,CAAC,OAAO,CAAC,CAAA;IAClE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ,EAAkB,CAAA;IAC5C,MAAM,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAA+D,EAAE,EAAE;QAC5G,UAAU,CAAC,OAAO,CAAC,CAAA;QACnB,QAAQ,CAAC,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QACrC,IAAI,CAAC,EAAE,CAAC;YACN,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,IAAI,CAAC,SAAS,CAAC,CAAA;QACjB,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CACF,UAAU,CAAC,GAAG,EAAE;gBACd,UAAU,CAAC,SAAS,CAAC,CAAA;gBACrB,IAAI,CAAC,SAAS,CAAC,CAAA;YACjB,CAAC,EAAE,MAAM,CAAC,CACX,CAAA;QACH,CAAC;IACH,CAAC,CAAA;IACD,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,UAAU,CAAC,SAAS,CAAC,CAAA;QACrB,IAAI,CAAC,SAAS,CAAC,CAAA;IACjB,CAAC,CAAA;IACD,OAAO,CACL,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CACxD;MAAA,CAAC,QAAQ,CACT;MAAA,CAAC,OAAO,IAAI,CACV,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAC9C;UAAA,CAAC,OAAO,CACV;QAAA,EAAE,KAAK,CAAC,CACT,CACH;IAAA,EAAE,YAAY,CAAC,QAAQ,CAAC,CACzB,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../../../src/hooks/toast/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAGZ,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMjD,MAAM,YAAY,GAAG,aAAa,CAAgB;IAChD,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;IACnB,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC;CACvB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,QAAQ,EAA2B,EAAE,EAAE;IACrE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAa,CAAA;IACnD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAa,UAAU,CAAC,OAAO,CAAC,CAAA;IAClE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ,EAAkB,CAAA;IAC5C,MAAM,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAA+D,EAAE,EAAE;QAC5G,UAAU,CAAC,OAAO,CAAC,CAAA;QACnB,QAAQ,CAAC,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QACrC,IAAI,CAAC,EAAE,CAAC;YACN,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,IAAI,CAAC,SAAS,CAAC,CAAA;QACjB,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CACF,UAAU,CAAC,GAAG,EAAE;gBACd,UAAU,CAAC,SAAS,CAAC,CAAA;gBACrB,IAAI,CAAC,SAAS,CAAC,CAAA;YACjB,CAAC,EAAE,MAAM,CAAC,CACX,CAAA;QACH,CAAC;IACH,CAAC,CAAA;IACD,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,CAAC,EAAE,CAAC;YACN,YAAY,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,UAAU,CAAC,SAAS,CAAC,CAAA;QACrB,IAAI,CAAC,SAAS,CAAC,CAAA;IACjB,CAAC,CAAA;IACD,OAAO,CACL,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CACxD;MAAA,CAAC,QAAQ,CACT;MAAA,CAAC,OAAO,IAAI,CACV,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAC9C;UAAA,CAAC,OAAO,CACV;QAAA,EAAE,KAAK,CAAC,CACT,CACH;IAAA,EAAE,YAAY,CAAC,QAAQ,CAAC,CACzB,CAAA;AACH,CAAC,CAAA"}
@@ -5,4 +5,5 @@ export type TokenSet = {
5
5
  expiresAtSec: number;
6
6
  scope?: string;
7
7
  };
8
+ export declare const serverRefresh: (refreshToken: string) => Promise<TokenSet | undefined>;
8
9
  export declare const options: (authorize?: (email: string, password: string) => Promise<TokenSet | undefined>, refresh?: (refreshToken: string) => Promise<TokenSet | undefined>, externalAuthorize?: (credential: string) => Promise<TokenSet | undefined>) => NextAuthOptions;
@@ -19,131 +19,142 @@ const dedupedRefresh = (refreshToken, refresh) => {
19
19
  inflightRefreshes.set(refreshToken, p);
20
20
  return p;
21
21
  };
22
- export const options = (authorize, refresh, externalAuthorize) => ({
23
- secret: (() => {
24
- // next build (page-data collection) evaluates this module but never signs anything
25
- // the secret is a runtime-only concern (Secrets Manager / dev .env). Build must not require it.
26
- if (defaultServerEnv.NEXT_PHASE === 'phase-production-build') {
27
- return defaultServerEnv.NEXTAUTH_SECRET ?? 'build-only-not-used-at-runtime';
28
- }
29
- if (!defaultServerEnv.NEXTAUTH_SECRET) {
30
- throw new Error('NEXTAUTH_SECRET is not set');
31
- }
32
- if (defaultServerEnv.DEPLOY_ENV !== 'dev' &&
33
- defaultServerEnv.NEXTAUTH_SECRET === 'build-only-not-used-at-runtime') {
34
- throw new Error('NEXTAUTH_SECRET must be replaced with a real secret in non-dev environments');
35
- }
36
- return defaultServerEnv.NEXTAUTH_SECRET;
37
- })(),
38
- pages: {
39
- signIn: '/signin',
40
- },
41
- session: {
42
- maxAge: 60 * 60 * 24 * 30,
43
- strategy: 'jwt',
44
- },
45
- providers: [
46
- CredentialsProvider({
47
- credentials: {
48
- email: { type: 'email' },
49
- password: { type: 'password' },
50
- credential: { type: 'text' },
51
- },
52
- async authorize(credentials) {
53
- if (!credentials) {
54
- return null;
55
- }
56
- try {
57
- // Route an app-supplied opaque credential (e.g. a MicroHub OIDC broker
58
- // one-time code) through externalAuthorize; otherwise fall back to the
59
- // email/password path. Either callback maps to a TokenSet or undefined.
60
- let tokenSet;
61
- if (credentials.credential && externalAuthorize) {
62
- tokenSet = await externalAuthorize(credentials.credential);
22
+ // The app's refresh callback, captured (deduped) when options() is wired with one, so the server-side
23
+ // tRPC header builder (Lib.trpc) can refresh a near-expiry access token before forwarding it on the
24
+ // RSC / server-action path where the jwt callback's own refresh cannot persist a cookie. Only a
25
+ // non-undefined refresh is stored, so a no-arg options() call never clears an already-registered one.
26
+ let registeredRefresh;
27
+ export const serverRefresh = async (refreshToken) => registeredRefresh ? registeredRefresh(refreshToken) : undefined;
28
+ export const options = (authorize, refresh, externalAuthorize) => {
29
+ if (refresh) {
30
+ registeredRefresh = (refreshToken) => dedupedRefresh(refreshToken, refresh);
31
+ }
32
+ return {
33
+ secret: (() => {
34
+ // next build (page-data collection) evaluates this module but never signs anything
35
+ // the secret is a runtime-only concern (Secrets Manager / dev .env). Build must not require it.
36
+ if (defaultServerEnv.NEXT_PHASE === 'phase-production-build') {
37
+ return defaultServerEnv.NEXTAUTH_SECRET ?? 'build-only-not-used-at-runtime';
38
+ }
39
+ if (!defaultServerEnv.NEXTAUTH_SECRET) {
40
+ throw new Error('NEXTAUTH_SECRET is not set');
41
+ }
42
+ if (defaultServerEnv.DEPLOY_ENV !== 'dev' &&
43
+ defaultServerEnv.NEXTAUTH_SECRET === 'build-only-not-used-at-runtime') {
44
+ throw new Error('NEXTAUTH_SECRET must be replaced with a real secret in non-dev environments');
45
+ }
46
+ return defaultServerEnv.NEXTAUTH_SECRET;
47
+ })(),
48
+ pages: {
49
+ signIn: '/signin',
50
+ },
51
+ session: {
52
+ maxAge: 60 * 60 * 24 * 30,
53
+ strategy: 'jwt',
54
+ },
55
+ providers: [
56
+ CredentialsProvider({
57
+ credentials: {
58
+ email: { type: 'email' },
59
+ password: { type: 'password' },
60
+ credential: { type: 'text' },
61
+ },
62
+ async authorize(credentials) {
63
+ if (!credentials) {
64
+ return null;
63
65
  }
64
- else if (authorize) {
65
- tokenSet = await authorize(credentials.email, credentials.password);
66
+ try {
67
+ // Route an app-supplied opaque credential (e.g. a MicroHub OIDC broker
68
+ // one-time code) through externalAuthorize; otherwise fall back to the
69
+ // email/password path. Either callback maps to a TokenSet or undefined.
70
+ let tokenSet;
71
+ if (credentials.credential && externalAuthorize) {
72
+ tokenSet = await externalAuthorize(credentials.credential);
73
+ }
74
+ else if (authorize) {
75
+ tokenSet = await authorize(credentials.email, credentials.password);
76
+ }
77
+ if (!tokenSet) {
78
+ return null;
79
+ }
80
+ return {
81
+ tokenSet,
82
+ };
66
83
  }
67
- if (!tokenSet) {
84
+ catch (error) {
85
+ // NextAuth swallows authorize() exceptions silently and returns null —
86
+ // operationally indistinguishable from "wrong password". Log the throw so
87
+ // server-side bugs in the consumer's authorize callback are visible.
88
+ logger.error('auth', { op: 'authorize', error });
68
89
  return null;
69
90
  }
70
- return {
71
- tokenSet,
72
- };
91
+ },
92
+ }),
93
+ ],
94
+ callbacks: {
95
+ session: ({ session, token }) => {
96
+ // The access token is deliberately NOT copied onto the session: the session is serialized to the
97
+ // browser via /api/auth/session (SessionProvider), so exposing the bearer there hands any client
98
+ // script a usable credential. The server reads it from the JWT via getToken (see Lib.trpc).
99
+ if (token?.scope) {
100
+ session.scope = token.scope;
73
101
  }
74
- catch (error) {
75
- // NextAuth swallows authorize() exceptions silently and returns null —
76
- // operationally indistinguishable from "wrong password". Log the throw so
77
- // server-side bugs in the consumer's authorize callback are visible.
78
- logger.error('auth', { op: 'authorize', error });
79
- return null;
102
+ if (token?.error) {
103
+ session.error = token.error;
80
104
  }
105
+ return session;
81
106
  },
82
- }),
83
- ],
84
- callbacks: {
85
- session: ({ session, token }) => {
86
- if (token?.accessToken) {
87
- session.accessToken = token.accessToken;
88
- }
89
- if (token?.scope) {
90
- session.scope = token.scope;
91
- }
92
- if (token?.error) {
93
- session.error = token.error;
94
- }
95
- return session;
96
- },
97
- jwt: async ({ token, user }) => {
98
- // New sign-in path: authorize() returned a TokenSet; CredentialsProvider
99
- // hands it to us on `user.tokenSet`.
100
- if (user?.tokenSet) {
101
- token.accessToken = user.tokenSet.accessToken;
102
- token.refreshToken = user.tokenSet.refreshToken;
103
- token.expiresAtSec = user.tokenSet.expiresAtSec;
104
- token.scope = user.tokenSet.scope;
105
- token.error = undefined;
106
- return token;
107
- }
108
- // Existing session path: refresh the access token if expiry is within
109
- // the leeway. `refresh` is optional — without it, the access token
110
- // simply expires and downstream calls start failing 401 until the user
111
- // signs in again. The refreshToken is cleared on failure so subsequent
112
- // jwt() invocations don't loop and hammer the refresh endpoint until
113
- // session.maxAge.
114
- if (refresh &&
115
- token.refreshToken &&
116
- token.expiresAtSec &&
117
- Date.now() / 1000 >= token.expiresAtSec - REFRESH_LEEWAY_SEC) {
118
- try {
119
- const refreshed = await dedupedRefresh(token.refreshToken, refresh);
120
- if (!refreshed) {
107
+ jwt: async ({ token, user }) => {
108
+ // New sign-in path: authorize() returned a TokenSet; CredentialsProvider
109
+ // hands it to us on `user.tokenSet`.
110
+ if (user?.tokenSet) {
111
+ token.accessToken = user.tokenSet.accessToken;
112
+ token.refreshToken = user.tokenSet.refreshToken;
113
+ token.expiresAtSec = user.tokenSet.expiresAtSec;
114
+ token.scope = user.tokenSet.scope;
115
+ token.error = undefined;
116
+ return token;
117
+ }
118
+ // Existing session path: refresh the access token if expiry is within
119
+ // the leeway. `refresh` is optional — without it, the access token
120
+ // simply expires and downstream calls start failing 401 until the user
121
+ // signs in again. The refreshToken is cleared on failure so subsequent
122
+ // jwt() invocations don't loop and hammer the refresh endpoint until
123
+ // session.maxAge.
124
+ if (refresh &&
125
+ token.refreshToken &&
126
+ token.expiresAtSec &&
127
+ Date.now() / 1000 >= token.expiresAtSec - REFRESH_LEEWAY_SEC) {
128
+ try {
129
+ const refreshed = await dedupedRefresh(token.refreshToken, refresh);
130
+ if (!refreshed) {
131
+ return { ...token, refreshToken: undefined, error: 'RefreshAccessTokenError' };
132
+ }
133
+ return {
134
+ ...token,
135
+ accessToken: refreshed.accessToken,
136
+ refreshToken: refreshed.refreshToken,
137
+ expiresAtSec: refreshed.expiresAtSec,
138
+ scope: refreshed.scope,
139
+ error: undefined,
140
+ };
141
+ }
142
+ catch (error) {
143
+ logger.error('auth', { op: 'refresh', error });
121
144
  return { ...token, refreshToken: undefined, error: 'RefreshAccessTokenError' };
122
145
  }
123
- return {
124
- ...token,
125
- accessToken: refreshed.accessToken,
126
- refreshToken: refreshed.refreshToken,
127
- expiresAtSec: refreshed.expiresAtSec,
128
- scope: refreshed.scope,
129
- error: undefined,
130
- };
131
146
  }
132
- catch (error) {
133
- logger.error('auth', { op: 'refresh', error });
134
- return { ...token, refreshToken: undefined, error: 'RefreshAccessTokenError' };
147
+ return token;
148
+ },
149
+ redirect: ({ url, baseUrl }) => {
150
+ if (url.startsWith('/')) {
151
+ return `${baseUrl}${url}`;
135
152
  }
136
- }
137
- return token;
138
- },
139
- redirect: ({ url, baseUrl }) => {
140
- if (url.startsWith('/')) {
141
- return `${baseUrl}${url}`;
142
- }
143
- const searchParams = new URLSearchParams(new URL(url).search);
144
- const resolved = new URL(searchParams.get('callbackUrl') ?? '', baseUrl);
145
- return resolved.origin === new URL(baseUrl).origin ? resolved.toString() : baseUrl;
153
+ const searchParams = new URLSearchParams(new URL(url).search);
154
+ const resolved = new URL(searchParams.get('callbackUrl') ?? '', baseUrl);
155
+ return resolved.origin === new URL(baseUrl).origin ? resolved.toString() : baseUrl;
156
+ },
146
157
  },
147
- },
148
- });
158
+ };
159
+ };
149
160
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/next-auth/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/next-auth/index.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
- import { getServerSession } from 'next-auth';
1
+ import { REFRESH_LEEWAY_SEC } from '../../constants';
2
+ import { defaultServerEnv } from '../../env';
3
+ import { logger } from '../../logger';
2
4
  import { getCookieValue, setCookieValue } from '../cookie';
3
- import { options as nextAuthOptions } from '../next-auth';
5
+ import { serverRefresh } from '../next-auth';
4
6
  export const setHeaderValues = async (headers, options) => setCookieValue('headers', JSON.stringify(headers), options);
5
7
  // The `headers` cookie is client-controllable (tamperable via subdomain cookie injection or an
6
8
  // httpOnly:false setHeaderValues call), so auth / IP / routing headers must not be accepted from it.
7
- // The real authorization is applied server-side from the session below.
9
+ // The real authorization is applied server-side from the JWT (getToken) below.
8
10
  const SENSITIVE_HEADER_NAMES = new Set([
9
11
  'authorization',
10
12
  'cookie',
@@ -15,10 +17,36 @@ const SENSITIVE_HEADER_NAMES = new Set([
15
17
  ]);
16
18
  const createDefaultHeaders = async (defaultHeaders = {}) => {
17
19
  let baseHeaders = {};
20
+ let authorization;
18
21
  if (typeof window === 'undefined') {
19
22
  const { headers: nextHeaders } = await import('next/headers');
20
23
  const headersList = await nextHeaders();
21
24
  baseHeaders = { 'user-agent': headersList.get('user-agent') || 'unknown' };
25
+ // Read the access token from the server-side JWT (getToken decodes the same session cookie
26
+ // getServerSession does) rather than the session — the session no longer carries the bearer, so it is
27
+ // never exposed to client JS. Refresh it here when it is within the expiry leeway so an RSC /
28
+ // server-action call in an expired-token window forwards a fresh bearer instead of a stale one (the
29
+ // jwt callback's refresh cannot persist a cookie on this path). Refresh reaches the app's callback via
30
+ // Lib.nextAuth registration; when none is wired, the current token is forwarded unchanged.
31
+ const { getToken } = await import('next-auth/jwt');
32
+ const { NextRequest } = await import('next/server');
33
+ const token = await getToken({
34
+ req: new NextRequest('http://localhost', { headers: { cookie: headersList.get('cookie') ?? '' } }),
35
+ secret: defaultServerEnv.NEXTAUTH_SECRET,
36
+ });
37
+ let accessToken = token?.accessToken;
38
+ if (token?.refreshToken && token.expiresAtSec && Date.now() / 1000 >= token.expiresAtSec - REFRESH_LEEWAY_SEC) {
39
+ const refreshed = await serverRefresh(token.refreshToken).catch((error) => {
40
+ logger.error('auth', { op: 'refresh', error });
41
+ return undefined;
42
+ });
43
+ if (refreshed) {
44
+ accessToken = refreshed.accessToken;
45
+ }
46
+ }
47
+ if (accessToken) {
48
+ authorization = `Bearer ${accessToken}`;
49
+ }
22
50
  }
23
51
  const savedHeaders = {};
24
52
  const headersCookie = await getCookieValue('headers');
@@ -35,11 +63,10 @@ const createDefaultHeaders = async (defaultHeaders = {}) => {
35
63
  // Ignore if JSON parse fails
36
64
  }
37
65
  }
38
- const session = await getServerSession(nextAuthOptions());
39
66
  return {
40
67
  ...baseHeaders,
41
68
  ...savedHeaders,
42
- ...(session?.accessToken ? { authorization: `Bearer ${session.accessToken}` } : {}),
69
+ ...(authorization ? { authorization } : {}),
43
70
  ...defaultHeaders,
44
71
  };
45
72
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/trpc/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,cAAc,CAAA;AAEzD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,OAAoB,EACpB,OAKC,EACD,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;AAEhE,+FAA+F;AAC/F,qGAAqG;AACrG,wEAAwE;AACxE,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,eAAe;IACf,QAAQ;IACR,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,WAAW;CACZ,CAAC,CAAA;AAEF,MAAM,oBAAoB,GAAG,KAAK,EAAE,iBAA8B,EAAE,EAAwB,EAAE;IAC5F,IAAI,WAAW,GAAgB,EAAE,CAAA;IAEjC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;QAC7D,MAAM,WAAW,GAAG,MAAM,WAAW,EAAE,CAAA;QACvC,WAAW,GAAG,EAAE,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,SAAS,EAAE,CAAA;IAC5E,CAAC;IAED,MAAM,YAAY,GAAgB,EAAE,CAAA;IACpC,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAA;IACrD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAA2B,CAAA;YACzE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACnD,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAA;IACzD,OAAO;QACL,GAAG,WAAW;QACd,GAAG,YAAY;QACf,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,GAAG,cAAc;KAClB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAAmB,EAAwB,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/trpc/index.ts"],"names":[],"mappings":"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"}