@logto/next 1.0.0-beta.2 → 1.0.0-beta.4
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 +44 -0
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -4
- package/lib/index.js.map +1 -1
- package/lib/module.js +4 -4
- package/lib/module.js.map +1 -1
- package/package.json +13 -13
package/README.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Logto Next.js SDK
|
|
2
|
+
[](https://www.npmjs.com/package/@logto/next)
|
|
3
|
+
[](https://github.com/logto-io/js/actions/workflows/main.yml)
|
|
4
|
+
[](https://app.codecov.io/gh/logto-io/js?branch=master)
|
|
5
|
+
|
|
6
|
+
The Logto Next.js SDK written in TypeScript. Check out our [integration guide](https://docs.logto.io/docs/recipes/integrate-logto/next) or [docs](https://docs.logto.io/sdk/JavaScript/next/) for more information.
|
|
7
|
+
|
|
8
|
+
We also provide [集成指南](https://docs.logto.io/zh-cn/docs/recipes/integrate-logto/next/) and [文档](https://docs.logto.io/zh-cn/sdk/JavaScript/next/) in Simplified Chinese.
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
### Using npm
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install @logto/next
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Using yarn
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
yarn add @logto/next
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Using pnpm
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
pnpm add @logto/next
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Get sample
|
|
31
|
+
|
|
32
|
+
A sample project can be found at [Next.js Sample](https://github.com/logto-io/js/tree/master/packages/next-sample)
|
|
33
|
+
|
|
34
|
+
Check out the source code and try it with ease.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
pnpm i && pnpm start
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Resources
|
|
41
|
+
|
|
42
|
+
[](https://logto.io/)
|
|
43
|
+
[](https://docs.logto.io/sdk/JavaScript/next/)
|
|
44
|
+
[](https://discord.gg/UEPaF3j5e6)
|
package/lib/index.d.ts
CHANGED
|
@@ -27,8 +27,8 @@ export default class LogtoClient {
|
|
|
27
27
|
handleSignIn: (redirectUri?: string) => NextApiHandler;
|
|
28
28
|
handleSignInCallback: (redirectTo?: string) => NextApiHandler;
|
|
29
29
|
handleSignOut: (redirectUri?: string) => NextApiHandler;
|
|
30
|
-
handleUser: (config?: WithLogtoConfig
|
|
31
|
-
handleAuthRoutes: (configs?: WithLogtoConfig
|
|
30
|
+
handleUser: (config?: WithLogtoConfig) => NextApiHandler<any>;
|
|
31
|
+
handleAuthRoutes: (configs?: WithLogtoConfig) => NextApiHandler;
|
|
32
32
|
withLogtoApiRoute: (handler: NextApiHandler, config?: WithLogtoConfig) => NextApiHandler;
|
|
33
33
|
withLogtoSsr: <P extends Record<string, unknown> = Record<string, unknown>>(handler: (context: GetServerSidePropsContext) => GetServerSidePropsResult<P> | Promise<GetServerSidePropsResult<P>>, config?: WithLogtoConfig) => (context: GetServerSidePropsContext<import("querystring").ParsedUrlQuery, import("next").PreviewData>) => Promise<GetServerSidePropsResult<P>>;
|
|
34
34
|
private get ironSessionConfigs();
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;ACMA,eAAe,cAAc,CAAC;
|
|
1
|
+
{"mappings":";;ACMA,eAAe,cAAc,CAAC;IAG5B,UAAU,eAAe;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;CACF;AAED,uBAA8B,WAAW,GAAG;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,uBAA8B;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;ACrBF,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;gBAG+B,MAAM,EAAE,eAAe;IAEpD,YAAY,4BAET,cAAc,CASa;IAE9B,oBAAoB,2BAAuC,cAAc,CAS3C;IAE9B,aAAa,4BAAwC,cAAc,CAWrC;IAE9B,UAAU,YAAa,eAAe,yBAGzB;IAEb,gBAAgB,aACH,eAAe,KAAG,cAAc,CAqBzC;IAEJ,iBAAiB,YAAa,cAAc,WAAU,eAAe,KAAQ,cAAc,CAQ7D;IAE9B,YAAY,mFAEC,yBAAyB,kFAE5B,eAAe,oJAQK;IAmB9B,OAAO,KAAK,kBAAkB,GAS7B;CAOF","sources":["packages/next/src/src/storage.ts","packages/next/src/src/types.ts","packages/next/src/src/index.ts","packages/next/src/index.ts"],"sourcesContent":[null,null,null,"import { IncomingMessage } from 'http';\n\nimport NodeClient from '@logto/node';\nimport { withIronSessionApiRoute, withIronSessionSsr } from 'iron-session/next';\nimport { GetServerSidePropsContext, GetServerSidePropsResult, NextApiHandler } from 'next';\n\nimport NextStorage from './storage';\nimport { LogtoNextConfig, WithLogtoConfig } from './types';\n\nexport type { LogtoContext } from '@logto/node';\n\nexport default class LogtoClient {\n private navigateUrl?: string;\n private storage?: NextStorage;\n constructor(private readonly config: LogtoNextConfig) {}\n\n handleSignIn = (\n redirectUri = `${this.config.baseUrl}/api/logto/sign-in-callback`\n ): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const nodeClient = this.createNodeClient(request);\n await nodeClient.signIn(redirectUri);\n await this.storage?.save();\n\n if (this.navigateUrl) {\n response.redirect(this.navigateUrl);\n }\n }, this.ironSessionConfigs);\n\n handleSignInCallback = (redirectTo = this.config.baseUrl): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const nodeClient = this.createNodeClient(request);\n\n if (request.url) {\n await nodeClient.handleSignInCallback(`${this.config.baseUrl}${request.url}`);\n await this.storage?.save();\n response.redirect(redirectTo);\n }\n }, this.ironSessionConfigs);\n\n handleSignOut = (redirectUri = this.config.baseUrl): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const nodeClient = this.createNodeClient(request);\n await nodeClient.signOut(redirectUri);\n\n request.session.destroy();\n await this.storage?.save();\n\n if (this.navigateUrl) {\n response.redirect(this.navigateUrl);\n }\n }, this.ironSessionConfigs);\n\n handleUser = (config?: WithLogtoConfig) =>\n this.withLogtoApiRoute((request, response) => {\n response.json(request.user);\n }, config);\n\n handleAuthRoutes =\n (configs?: WithLogtoConfig): NextApiHandler =>\n (request, response) => {\n const { action } = request.query;\n\n if (action === 'sign-in') {\n return this.handleSignIn()(request, response);\n }\n\n if (action === 'sign-in-callback') {\n return this.handleSignInCallback()(request, response);\n }\n\n if (action === 'sign-out') {\n return this.handleSignOut()(request, response);\n }\n\n if (action === 'user') {\n return this.handleUser(configs)(request, response);\n }\n\n response.status(404).end();\n };\n\n withLogtoApiRoute = (handler: NextApiHandler, config: WithLogtoConfig = {}): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const user = await this.getLogtoUserFromRequest(request, config.getAccessToken);\n\n // eslint-disable-next-line @silverhand/fp/no-mutating-methods\n Object.defineProperty(request, 'user', { enumerable: true, get: () => user });\n\n return handler(request, response);\n }, this.ironSessionConfigs);\n\n withLogtoSsr = <P extends Record<string, unknown> = Record<string, unknown>>(\n handler: (\n context: GetServerSidePropsContext\n ) => GetServerSidePropsResult<P> | Promise<GetServerSidePropsResult<P>>,\n config: WithLogtoConfig = {}\n ) =>\n withIronSessionSsr(async (context) => {\n const user = await this.getLogtoUserFromRequest(context.req, config.getAccessToken);\n // eslint-disable-next-line @silverhand/fp/no-mutating-methods\n Object.defineProperty(context.req, 'user', { enumerable: true, get: () => user });\n\n return handler(context);\n }, this.ironSessionConfigs);\n\n private createNodeClient(request: IncomingMessage) {\n this.storage = new NextStorage(request);\n\n return new NodeClient(\n {\n ...this.config,\n persistAccessToken: this.config.persistAccessToken ?? true,\n },\n {\n storage: this.storage,\n navigate: (url) => {\n this.navigateUrl = url;\n },\n }\n );\n }\n\n private get ironSessionConfigs() {\n return {\n cookieName: `logto:${this.config.appId}`,\n password: this.config.cookieSecret,\n cookieOptions: {\n secure: this.config.cookieSecure,\n maxAge: 14 * 24 * 60 * 60,\n },\n };\n }\n\n private async getLogtoUserFromRequest(request: IncomingMessage, getAccessToken?: boolean) {\n const nodeClient = this.createNodeClient(request);\n\n return nodeClient.getContext(getAccessToken);\n }\n}\n"],"names":[],"version":3,"file":"index.d.ts.map"}
|
package/lib/index.js
CHANGED
|
@@ -25,12 +25,12 @@ class $1abf01985e812f74$export$2e2bcd8739ae039 {
|
|
|
25
25
|
this.request.session[key] = value;
|
|
26
26
|
this.sessionChanged = true;
|
|
27
27
|
}
|
|
28
|
-
getItem(key) {
|
|
28
|
+
async getItem(key) {
|
|
29
29
|
const value = this.request.session[key];
|
|
30
30
|
if (value === undefined) return null;
|
|
31
31
|
return String(value);
|
|
32
32
|
}
|
|
33
|
-
removeItem(key) {
|
|
33
|
+
async removeItem(key) {
|
|
34
34
|
this.request.session[key] = undefined;
|
|
35
35
|
this.sessionChanged = true;
|
|
36
36
|
}
|
|
@@ -43,8 +43,8 @@ class $1abf01985e812f74$export$2e2bcd8739ae039 {
|
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
class $3556748a90dddf6c$export$2e2bcd8739ae039 {
|
|
46
|
-
constructor(
|
|
47
|
-
this.config =
|
|
46
|
+
constructor(config){
|
|
47
|
+
this.config = config;
|
|
48
48
|
this.handleSignIn = (redirectUri = `${this.config.baseUrl}/api/logto/sign-in-callback`)=>(0, $j3Dy6$ironsessionnext.withIronSessionApiRoute)(async (request, response)=>{
|
|
49
49
|
const nodeClient = this.createNodeClient(request);
|
|
50
50
|
await nodeClient.signIn(redirectUri);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;;;;;;;AAAA;;ACIe;IAEb,YAA6B,OAAwB,CAAE;aAA1B,OAAwB,GAAxB,OAAwB;aAD7C,cAAc,GAAG,KAAK;KAC2B;IAEzD,MAAM,OAAO,CAAC,GAAe,EAAE,KAAa,EAAE;QAC5C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC5B;IAED,OAAO,CAAC,GAAe,EAAE;
|
|
1
|
+
{"mappings":"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","sources":["packages/next/src/index.ts","packages/next/src/storage.ts"],"sourcesContent":["import { IncomingMessage } from 'http';\n\nimport NodeClient from '@logto/node';\nimport { withIronSessionApiRoute, withIronSessionSsr } from 'iron-session/next';\nimport { GetServerSidePropsContext, GetServerSidePropsResult, NextApiHandler } from 'next';\n\nimport NextStorage from './storage';\nimport { LogtoNextConfig, WithLogtoConfig } from './types';\n\nexport type { LogtoContext } from '@logto/node';\n\nexport default class LogtoClient {\n private navigateUrl?: string;\n private storage?: NextStorage;\n constructor(private readonly config: LogtoNextConfig) {}\n\n handleSignIn = (\n redirectUri = `${this.config.baseUrl}/api/logto/sign-in-callback`\n ): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const nodeClient = this.createNodeClient(request);\n await nodeClient.signIn(redirectUri);\n await this.storage?.save();\n\n if (this.navigateUrl) {\n response.redirect(this.navigateUrl);\n }\n }, this.ironSessionConfigs);\n\n handleSignInCallback = (redirectTo = this.config.baseUrl): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const nodeClient = this.createNodeClient(request);\n\n if (request.url) {\n await nodeClient.handleSignInCallback(`${this.config.baseUrl}${request.url}`);\n await this.storage?.save();\n response.redirect(redirectTo);\n }\n }, this.ironSessionConfigs);\n\n handleSignOut = (redirectUri = this.config.baseUrl): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const nodeClient = this.createNodeClient(request);\n await nodeClient.signOut(redirectUri);\n\n request.session.destroy();\n await this.storage?.save();\n\n if (this.navigateUrl) {\n response.redirect(this.navigateUrl);\n }\n }, this.ironSessionConfigs);\n\n handleUser = (config?: WithLogtoConfig) =>\n this.withLogtoApiRoute((request, response) => {\n response.json(request.user);\n }, config);\n\n handleAuthRoutes =\n (configs?: WithLogtoConfig): NextApiHandler =>\n (request, response) => {\n const { action } = request.query;\n\n if (action === 'sign-in') {\n return this.handleSignIn()(request, response);\n }\n\n if (action === 'sign-in-callback') {\n return this.handleSignInCallback()(request, response);\n }\n\n if (action === 'sign-out') {\n return this.handleSignOut()(request, response);\n }\n\n if (action === 'user') {\n return this.handleUser(configs)(request, response);\n }\n\n response.status(404).end();\n };\n\n withLogtoApiRoute = (handler: NextApiHandler, config: WithLogtoConfig = {}): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const user = await this.getLogtoUserFromRequest(request, config.getAccessToken);\n\n // eslint-disable-next-line @silverhand/fp/no-mutating-methods\n Object.defineProperty(request, 'user', { enumerable: true, get: () => user });\n\n return handler(request, response);\n }, this.ironSessionConfigs);\n\n withLogtoSsr = <P extends Record<string, unknown> = Record<string, unknown>>(\n handler: (\n context: GetServerSidePropsContext\n ) => GetServerSidePropsResult<P> | Promise<GetServerSidePropsResult<P>>,\n config: WithLogtoConfig = {}\n ) =>\n withIronSessionSsr(async (context) => {\n const user = await this.getLogtoUserFromRequest(context.req, config.getAccessToken);\n // eslint-disable-next-line @silverhand/fp/no-mutating-methods\n Object.defineProperty(context.req, 'user', { enumerable: true, get: () => user });\n\n return handler(context);\n }, this.ironSessionConfigs);\n\n private createNodeClient(request: IncomingMessage) {\n this.storage = new NextStorage(request);\n\n return new NodeClient(\n {\n ...this.config,\n persistAccessToken: this.config.persistAccessToken ?? true,\n },\n {\n storage: this.storage,\n navigate: (url) => {\n this.navigateUrl = url;\n },\n }\n );\n }\n\n private get ironSessionConfigs() {\n return {\n cookieName: `logto:${this.config.appId}`,\n password: this.config.cookieSecret,\n cookieOptions: {\n secure: this.config.cookieSecure,\n maxAge: 14 * 24 * 60 * 60,\n },\n };\n }\n\n private async getLogtoUserFromRequest(request: IncomingMessage, getAccessToken?: boolean) {\n const nodeClient = this.createNodeClient(request);\n\n return nodeClient.getContext(getAccessToken);\n }\n}\n","import { IncomingMessage } from 'http';\n\nimport { Storage, StorageKey } from '@logto/node';\n\nexport default class NextStorage implements Storage {\n private sessionChanged = false;\n constructor(private readonly request: IncomingMessage) {}\n\n async setItem(key: StorageKey, value: string) {\n this.request.session[key] = value;\n this.sessionChanged = true;\n }\n\n async getItem(key: StorageKey) {\n const value = this.request.session[key];\n\n if (value === undefined) {\n return null;\n }\n\n return String(value);\n }\n\n async removeItem(key: StorageKey) {\n this.request.session[key] = undefined;\n this.sessionChanged = true;\n }\n\n async save() {\n if (!this.sessionChanged) {\n return;\n }\n\n await this.request.session.save();\n this.sessionChanged = false;\n }\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"}
|
package/lib/module.js
CHANGED
|
@@ -12,12 +12,12 @@ class $8fa7922f9b3d24ed$export$2e2bcd8739ae039 {
|
|
|
12
12
|
this.request.session[key] = value;
|
|
13
13
|
this.sessionChanged = true;
|
|
14
14
|
}
|
|
15
|
-
getItem(key) {
|
|
15
|
+
async getItem(key) {
|
|
16
16
|
const value = this.request.session[key];
|
|
17
17
|
if (value === undefined) return null;
|
|
18
18
|
return String(value);
|
|
19
19
|
}
|
|
20
|
-
removeItem(key) {
|
|
20
|
+
async removeItem(key) {
|
|
21
21
|
this.request.session[key] = undefined;
|
|
22
22
|
this.sessionChanged = true;
|
|
23
23
|
}
|
|
@@ -30,8 +30,8 @@ class $8fa7922f9b3d24ed$export$2e2bcd8739ae039 {
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class $7d6712a39300ba99$export$2e2bcd8739ae039 {
|
|
33
|
-
constructor(
|
|
34
|
-
this.config =
|
|
33
|
+
constructor(config){
|
|
34
|
+
this.config = config;
|
|
35
35
|
this.handleSignIn = (redirectUri = `${this.config.baseUrl}/api/logto/sign-in-callback`)=>(0, $a8eQ2$withIronSessionApiRoute)(async (request, response)=>{
|
|
36
36
|
const nodeClient = this.createNodeClient(request);
|
|
37
37
|
await nodeClient.signIn(redirectUri);
|
package/lib/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;AAAA;;ACIe;IAEb,YAA6B,OAAwB,CAAE;aAA1B,OAAwB,GAAxB,OAAwB;aAD7C,cAAc,GAAG,KAAK;KAC2B;IAEzD,MAAM,OAAO,CAAC,GAAe,EAAE,KAAa,EAAE;QAC5C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC5B;IAED,OAAO,CAAC,GAAe,EAAE;
|
|
1
|
+
{"mappings":"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","sources":["packages/next/src/index.ts","packages/next/src/storage.ts"],"sourcesContent":["import { IncomingMessage } from 'http';\n\nimport NodeClient from '@logto/node';\nimport { withIronSessionApiRoute, withIronSessionSsr } from 'iron-session/next';\nimport { GetServerSidePropsContext, GetServerSidePropsResult, NextApiHandler } from 'next';\n\nimport NextStorage from './storage';\nimport { LogtoNextConfig, WithLogtoConfig } from './types';\n\nexport type { LogtoContext } from '@logto/node';\n\nexport default class LogtoClient {\n private navigateUrl?: string;\n private storage?: NextStorage;\n constructor(private readonly config: LogtoNextConfig) {}\n\n handleSignIn = (\n redirectUri = `${this.config.baseUrl}/api/logto/sign-in-callback`\n ): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const nodeClient = this.createNodeClient(request);\n await nodeClient.signIn(redirectUri);\n await this.storage?.save();\n\n if (this.navigateUrl) {\n response.redirect(this.navigateUrl);\n }\n }, this.ironSessionConfigs);\n\n handleSignInCallback = (redirectTo = this.config.baseUrl): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const nodeClient = this.createNodeClient(request);\n\n if (request.url) {\n await nodeClient.handleSignInCallback(`${this.config.baseUrl}${request.url}`);\n await this.storage?.save();\n response.redirect(redirectTo);\n }\n }, this.ironSessionConfigs);\n\n handleSignOut = (redirectUri = this.config.baseUrl): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const nodeClient = this.createNodeClient(request);\n await nodeClient.signOut(redirectUri);\n\n request.session.destroy();\n await this.storage?.save();\n\n if (this.navigateUrl) {\n response.redirect(this.navigateUrl);\n }\n }, this.ironSessionConfigs);\n\n handleUser = (config?: WithLogtoConfig) =>\n this.withLogtoApiRoute((request, response) => {\n response.json(request.user);\n }, config);\n\n handleAuthRoutes =\n (configs?: WithLogtoConfig): NextApiHandler =>\n (request, response) => {\n const { action } = request.query;\n\n if (action === 'sign-in') {\n return this.handleSignIn()(request, response);\n }\n\n if (action === 'sign-in-callback') {\n return this.handleSignInCallback()(request, response);\n }\n\n if (action === 'sign-out') {\n return this.handleSignOut()(request, response);\n }\n\n if (action === 'user') {\n return this.handleUser(configs)(request, response);\n }\n\n response.status(404).end();\n };\n\n withLogtoApiRoute = (handler: NextApiHandler, config: WithLogtoConfig = {}): NextApiHandler =>\n withIronSessionApiRoute(async (request, response) => {\n const user = await this.getLogtoUserFromRequest(request, config.getAccessToken);\n\n // eslint-disable-next-line @silverhand/fp/no-mutating-methods\n Object.defineProperty(request, 'user', { enumerable: true, get: () => user });\n\n return handler(request, response);\n }, this.ironSessionConfigs);\n\n withLogtoSsr = <P extends Record<string, unknown> = Record<string, unknown>>(\n handler: (\n context: GetServerSidePropsContext\n ) => GetServerSidePropsResult<P> | Promise<GetServerSidePropsResult<P>>,\n config: WithLogtoConfig = {}\n ) =>\n withIronSessionSsr(async (context) => {\n const user = await this.getLogtoUserFromRequest(context.req, config.getAccessToken);\n // eslint-disable-next-line @silverhand/fp/no-mutating-methods\n Object.defineProperty(context.req, 'user', { enumerable: true, get: () => user });\n\n return handler(context);\n }, this.ironSessionConfigs);\n\n private createNodeClient(request: IncomingMessage) {\n this.storage = new NextStorage(request);\n\n return new NodeClient(\n {\n ...this.config,\n persistAccessToken: this.config.persistAccessToken ?? true,\n },\n {\n storage: this.storage,\n navigate: (url) => {\n this.navigateUrl = url;\n },\n }\n );\n }\n\n private get ironSessionConfigs() {\n return {\n cookieName: `logto:${this.config.appId}`,\n password: this.config.cookieSecret,\n cookieOptions: {\n secure: this.config.cookieSecure,\n maxAge: 14 * 24 * 60 * 60,\n },\n };\n }\n\n private async getLogtoUserFromRequest(request: IncomingMessage, getAccessToken?: boolean) {\n const nodeClient = this.createNodeClient(request);\n\n return nodeClient.getContext(getAccessToken);\n }\n}\n","import { IncomingMessage } from 'http';\n\nimport { Storage, StorageKey } from '@logto/node';\n\nexport default class NextStorage implements Storage {\n private sessionChanged = false;\n constructor(private readonly request: IncomingMessage) {}\n\n async setItem(key: StorageKey, value: string) {\n this.request.session[key] = value;\n this.sessionChanged = true;\n }\n\n async getItem(key: StorageKey) {\n const value = this.request.session[key];\n\n if (value === undefined) {\n return null;\n }\n\n return String(value);\n }\n\n async removeItem(key: StorageKey) {\n this.request.session[key] = undefined;\n this.sessionChanged = true;\n }\n\n async save() {\n if (!this.sessionChanged) {\n return;\n }\n\n await this.request.session.save();\n this.sessionChanged = false;\n }\n}\n"],"names":[],"version":3,"file":"module.js.map"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@logto/next",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.4",
|
|
4
4
|
"source": "./src/index.ts",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -29,31 +29,31 @@
|
|
|
29
29
|
"prepack": "pnpm test"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@logto/node": "^1.0.0-beta.
|
|
32
|
+
"@logto/node": "^1.0.0-beta.4",
|
|
33
33
|
"iron-session": "^6.1.3"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@jest/types": "^27.5.1",
|
|
37
|
-
"@parcel/core": "^2.
|
|
38
|
-
"@parcel/packager-ts": "^2.
|
|
39
|
-
"@parcel/transformer-typescript-types": "^2.
|
|
40
|
-
"@silverhand/eslint-config": "^0.
|
|
41
|
-
"@silverhand/ts-config": "^0.
|
|
42
|
-
"@silverhand/ts-config-react": "^0.
|
|
37
|
+
"@parcel/core": "^2.7.0",
|
|
38
|
+
"@parcel/packager-ts": "^2.7.0",
|
|
39
|
+
"@parcel/transformer-typescript-types": "^2.7.0",
|
|
40
|
+
"@silverhand/eslint-config": "^1.0.0",
|
|
41
|
+
"@silverhand/ts-config": "^1.0.0",
|
|
42
|
+
"@silverhand/ts-config-react": "^1.0.0",
|
|
43
43
|
"@types/jest": "^27.4.0",
|
|
44
|
-
"eslint": "^8.
|
|
44
|
+
"eslint": "^8.23.0",
|
|
45
45
|
"jest": "^27.5.1",
|
|
46
46
|
"jest-location-mock": "^1.0.9",
|
|
47
47
|
"jest-matcher-specific-error": "^1.0.0",
|
|
48
48
|
"lint-staged": "^13.0.0",
|
|
49
49
|
"next": "^12.2.2",
|
|
50
50
|
"next-test-api-route-handler": "^3.1.6",
|
|
51
|
-
"parcel": "^2.
|
|
52
|
-
"prettier": "^2.
|
|
51
|
+
"parcel": "^2.7.0",
|
|
52
|
+
"prettier": "^2.7.1",
|
|
53
53
|
"react": "^17.0.2",
|
|
54
54
|
"react-dom": "^17.0.2",
|
|
55
55
|
"ts-jest": "^27.0.4",
|
|
56
|
-
"typescript": "
|
|
56
|
+
"typescript": "4.7.4"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
59
|
"next": ">=12"
|
|
@@ -73,5 +73,5 @@
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
},
|
|
76
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "8b0f8947ac211fd8d4b6e2e00ce6acfc9dd344db"
|
|
77
77
|
}
|