diff --git a/404.html b/404.html
index 729387921..16f87a99c 100644
--- a/404.html
+++ b/404.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/api/authorization/nestjs-auth-jwt-75ce68b46d83bc99.js b/_next/static/chunks/pages/documentation/api/authorization/nestjs-auth-jwt-75ce68b46d83bc99.js
new file mode 100644
index 000000000..2d4e1ca42
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/api/authorization/nestjs-auth-jwt-75ce68b46d83bc99.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4806],{8275:function(e,s,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/api/authorization/nestjs-auth-jwt",function(){return n(3550)}])},3962:function(e,s,n){"use strict";n.d(s,{Z:function(){return l}});var o=n(5893),r=(n(6428),n(2076));var i=function(){return(0,o.jsx)(r.F,{apiKey:"4489c6b7099ffc6fccea33de59f4d0e0",indexName:"rockets",appId:"2R6I07Q0HG"})},l={github:"https://github.com/conceptadev/rockets",projectLink:"https://github.com/conceptadev/rockets",docsRepositoryBase:"https://github.com/conceptadev/rockets/blob/main",search:!0,customSearch:(0,o.jsx)(i,{}),titleSuffix:" \u2013 Rockets",logo:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("img",{className:"md:inline object-contain hidden",height:16,width:16,alt:"Rockets Logo",src:"/assets/rockets-icon.svg"}),(0,o.jsx)("span",{className:"mr-2 font-extrabold mx-2 hidden md:inline",children:"Rockets"})]}),head:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("meta",{name:"msapplication-TileColor",content:"#ffffff"}),(0,o.jsx)("meta",{name:"theme-color",content:"#ffffff"}),(0,o.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),(0,o.jsx)("meta",{httpEquiv:"Content-Language",content:"en"}),(0,o.jsx)("meta",{name:"description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,o.jsx)("meta",{name:"twitter:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"twitter:site:domain",content:"rockets.tools"}),(0,o.jsx)("meta",{name:"twitter:url",content:"https://www.rockets.tools"}),(0,o.jsx)("meta",{name:"og:title",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"apple-mobile-web-app-title",content:"Rockets"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossorigin:!0}),(0,o.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Roboto&display=swap",rel:"stylesheet"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/apple-icon-180x180.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"192x192",href:"/android-icon-192x192.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/favicon-32x32.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/favicon-16x16.png"}),(0,o.jsx)("link",{rel:"manifest",href:"/site.webmanifest"}),(0,o.jsx)("meta",{name:"msapplication-TileImage",content:"/ms-icon-150x150.png"}),(0,o.jsx)("script",{async:!0,src:"https://www.googletagmanager.com/gtag/js?id=G-E2EF28D6TS"}),(0,o.jsx)("script",{dangerouslySetInnerHTML:{__html:"\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', 'G-E2EF28D6TS', {\n page_path: window.location.pathname,\n });\n "}})]}),prevLinks:!0,nextLinks:!0,floatTOC:!0,footer:!0,footerEditLink:"Edit this page on GitHub",footerText:(0,o.jsx)(o.Fragment,{children:(0,o.jsxs)("span",{children:["2022 \xa9 ",(0,o.jsx)("a",{href:"https://conceptatech.com",target:"_blank",rel:"noreferrer",children:" Concepta"})]})})}},3550:function(e,s,n){"use strict";n.r(s),n.d(s,{default:function(){return k}});var o=n(5893),r=n(7270),i=n(3805),l=n(3962),t=n(1151);function c(e,s,n){return s in e?Object.defineProperty(e,s,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[s]=n,e}function a(e){for(var s=1;s0&&void 0!==arguments[0]?arguments[0]:{},s=function(){var s=Object.assign({h1:"h1",p:"p",h2:"h2",ul:"ul",li:"li",a:"a",h3:"h3",h4:"h4",code:"code",strong:"strong",div:"div",pre:"pre",span:"span",blockquote:"blockquote",h5:"h5"},(0,t.ah)(),e.components);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{children:"Rockets NestJS JWT Authentication"}),"\n",(0,o.jsx)(s.p,{children:"Authenticate requests using JWT tokens passed via the request (headers, cookies, body, query, etc)."}),"\n",(0,o.jsx)(s.h2,{id:"project",children:"Project"}),"\n",(0,o.jsx)(s.h2,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#tutorials",children:"Tutorials"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#1-getting-started-with-authjwtmodule",children:"1. Getting Started with AuthJwtModule"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#11-introduction",children:"1.1 Introduction"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#overview-of-the-library",children:"Overview of the Library"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#purpose-and-key-features",children:"Purpose and Key Features"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#12-installation",children:"1.2 Installation"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#install-the-authjwtmodule-package",children:"Install the AuthJwtModule package"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#add-the-authjwtmodule-to-your-nestjs-application",children:"Add the AuthJwtModule to Your NestJS Application"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#13-basic-setup-in-a-nestjs-project",children:"1.3 Basic Setup in a NestJS Project"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#scenario-users-have-a-list-of-pets",children:"Scenario: Users have a list of pets"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#step-1-create-entities",children:"Step 1: Create Entities"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#step-2-create-services",children:"Step 2: Create Services"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#step-3-create-controller",children:"Step 3: Create Controller"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#step-4-configure-the-module",children:"Step 4: Configure the Module"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#14-first-authentication-with-jwt",children:"1.4 First Authentication with JWT"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#validating-the-setup",children:"Validating the Setup"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#step-1-obtain-a-jwt-token",children:"Step 1: Obtain a JWT Token"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#step-2-make-an-authenticated-request",children:"Step 2: Make an Authenticated Request"})}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#example-curl-calls",children:"Example CURL Calls"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#obtain-a-jwt-token",children:"Obtain a JWT token"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#example-jwt-response",children:"Example JWT response"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#make-an-authenticated-request-using-the-token",children:"Make an authenticated request using the token"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#example-authenticated-response",children:"Example authenticated response"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#how-to-guides",children:"How-To Guides"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#setting-up-a-custom-module-for-providers",children:"Setting Up a custom Module for Providers"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#1-registering-authjwtmodule-synchronously",children:"1. Registering AuthJwtModule Synchronously"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#2-registering-authjwtmodule-asynchronously",children:"2. Registering AuthJwtModule Asynchronously"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#3-global-registering-authjwtmodule-asynchronously",children:"3. Global Registering AuthJwtModule Asynchronously"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#4-using-custom-user-lookup-service",children:"4. Using Custom User Lookup Service"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#5-implementing-and-using-custom-token-verification-service",children:"5. Implementing and Using Custom Token Verification Service"})}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#6-setting-up-a-custom-guard",children:"6. Setting Up a Custom Guard"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#step-1-implement-the-custom-guard",children:"Step 1: Implement the Custom Guard"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#step-2-provide-the-custom-guard-in-module-configuration",children:"Step 2: Provide the Custom Guard in Module Configuration"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#7-disabling-the-guard",children:"7. Disabling the Guard"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#disable-the-guard-in-module-configuration",children:"Disable the Guard in Module Configuration"})}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#8-overwriting-the-settings",children:"8. Overwriting the Settings"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#9-integration-with-other-nestjs-modules",children:"9. Integration with Other NestJS Modules"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#reference",children:"Reference"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#1-authjwtmodule-api-reference",children:"1. AuthJwtModule API Reference"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#2-authjwtoptionsinterface",children:"2. AuthJwtOptionsInterface"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#3-authjwtmodule-classes-and-interfaces",children:"3. AuthJwtModule Classes and Interfaces"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#engineering-concepts",children:"Engineering Concepts"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#conceptual-overview-of-jwt-authentication",children:"Conceptual Overview of JWT Authentication"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#what-is-jwt",children:"What is JWT?"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#benefits-of-using-jwt",children:"Benefits of Using JWT"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#design-choices-in-authjwtmodule",children:"Design Choices in AuthJwtModule"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#why-use-nestjs-guards",children:"Why Use NestJS Guards?"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#synchronous-vs-asynchronous-registration",children:"Synchronous vs Asynchronous Registration"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#global-vs-feature-specific-registration",children:"Global vs Feature-Specific Registration"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.a,{href:"#integrating-authjwtmodule-with-other-modules",children:"Integrating AuthJwtModule with Other Modules"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#how-authjwtmodule-works-with-authlocalmodule",children:"How AuthJwtModule Works with AuthLocalModule"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"#integrating-with-authrefreshmodule",children:"Integrating with AuthRefreshModule"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h1,{children:"Tutorials"}),"\n",(0,o.jsx)(s.h3,{id:"1-getting-started-with-authjwtmodule",children:"1. Getting Started with AuthJwtModule"}),"\n",(0,o.jsx)(s.h3,{id:"11-introduction",children:"1.1 Introduction"}),"\n",(0,o.jsx)(s.h4,{id:"overview-of-the-library",children:"Overview of the Library"}),"\n",(0,o.jsxs)(s.p,{children:["The ",(0,o.jsx)(s.code,{children:"AuthJwtModule"})," is a powerful yet easy-to-use NestJS module designed for\nimplementing JWT-based authentication. With a few simple steps, you can integrate\nsecure authentication into your application without hassle."]}),"\n",(0,o.jsx)(s.h4,{id:"purpose-and-key-features",children:"Purpose and Key Features"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Ease of Use"}),": The primary goal of ",(0,o.jsx)(s.code,{children:"AuthJwtModule"})," is to simplify the process\nof adding JWT authentication to your NestJS application. All you need to do is provide\nconfiguration data, and the module handles the rest."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Protect By Default"}),": Be default the ",(0,o.jsx)(s.code,{children:"AuthJwtModule"})," provides a global ",(0,o.jsx)(s.code,{children:"APP_GUARD"}),"\nto protect all routes by default. This can easily be overridden using the\n",(0,o.jsx)(s.code,{children:"@AuthPublic"})," decorator."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Synchronous and Asynchronous Registration"}),": Flexibly register the module either\nsynchronously or asynchronously, depending on your application's needs."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Global and Feature-Specific Registration"}),": Use the module globally across your\napplication or tailor it for specific features."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Seamless Integration"}),": Easily integrates with other NestJS modules like\n",(0,o.jsx)(s.code,{children:"@concepta/nestjs-auth-local"}),", ",(0,o.jsx)(s.code,{children:"@concepta/nestjs-auth-refresh"}),", and more."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h3,{id:"12-installation",children:"1.2 Installation"}),"\n",(0,o.jsx)(s.h4,{id:"install-the-authjwtmodule-package",children:"Install the AuthJwtModule package:"}),"\n",(0,o.jsxs)(s.p,{children:["To get started, install the ",(0,o.jsx)(s.code,{children:"@concepta/nestjs-auth-jwt"})," packages and some other dependencies from npm or yarn:"]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install class-transformer"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install class-validator"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install @nestjs/jwt"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install @concepta/ts-core"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install @concepta/nestjs-authentication"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install @concepta/nestjs-jwt"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"npm install @concepta/nestjs-auth-jwt"})})]})})}),"\n",(0,o.jsx)(s.p,{children:"or"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add class-transformer"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add class-validator"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add @nestjs/jwt"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add @concepta/ts-core"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add @concepta/nestjs-authentication"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add @concepta/nestjs-jwt"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"yarn add @concepta/nestjs-auth-jwt"})})]})})}),"\n",(0,o.jsx)(s.h4,{id:"add-the-authjwtmodule-to-your-nestjs-application",children:"Add the AuthJwtModule to Your NestJS Application:"}),"\n",(0,o.jsxs)(s.p,{children:["Import the ",(0,o.jsx)(s.code,{children:"AuthJwtModule"})," and required services in your application module.\nEnsure to import ",(0,o.jsx)(s.code,{children:"JwtModule"})," and provide the necessary configuration options,\nincluding the required ",(0,o.jsx)(s.code,{children:"userLookupService"}),"."]}),"\n",(0,o.jsx)(s.h3,{id:"13-basic-setup-in-a-nestjs-project",children:"1.3 Basic Setup in a NestJS Project"}),"\n",(0,o.jsx)(s.h4,{id:"scenario-users-have-a-list-of-pets",children:"Scenario: Users have a list of pets"}),"\n",(0,o.jsx)(s.p,{children:"To demonstrate this scenario, we will set up an application where users can have a list of pets.\nWe will create the necessary entities, services, module configurations to simulate the environment."}),"\n",(0,o.jsxs)(s.blockquote,{children:["\n",(0,o.jsxs)(s.p,{children:["Note: The ",(0,o.jsx)(s.code,{children:"@concepta/nestjs-user"})," module can be used in place of our example ",(0,o.jsx)(s.code,{children:"User"})," related prerequisites."]}),"\n"]}),"\n",(0,o.jsx)(s.h4,{id:"step-1-create-entities",children:"Step 1: Create Entities"}),"\n",(0,o.jsxs)(s.p,{children:["First, create the ",(0,o.jsx)(s.code,{children:"User"})," and ",(0,o.jsx)(s.code,{children:"Pet"})," entities."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// user.entity.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Entity"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" PrimaryGeneratedColumn"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" Column"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" OneToMany } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'typeorm'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Pet } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./pet.entity'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Entity"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"User"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" @"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"PrimaryGeneratedColumn"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'uuid'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:")"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" id"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" @"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Column"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" name"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" @"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"OneToMany"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(() "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" Pet"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" pet "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"pet"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:".user)"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" pets"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Pet"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"[];"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// pet.entity.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Entity"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" PrimaryGeneratedColumn"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" Column"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ManyToOne } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'typeorm'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { User } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./user.entity'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Entity"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Pet"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" @"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"PrimaryGeneratedColumn"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'uuid'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:")"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" id"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" @"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Column"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" name"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" @"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ManyToOne"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(() "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" User"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" user "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"user"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:".pets)"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" user"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"User"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h4,{id:"step-2-create-services",children:"Step 2: Create Services"}),"\n",(0,o.jsxs)(s.p,{children:["Next, create services for ",(0,o.jsx)(s.code,{children:"User"})," and ",(0,o.jsx)(s.code,{children:"Pet"})," to handle the business logic."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// user.service.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { InjectRepository } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/typeorm'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Repository } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'typeorm'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { User } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./user.entity'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"constructor"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" @"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"InjectRepository"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(User)"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"private"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userRepository"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Repository"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"User"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:">"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ) {}"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"findAll"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"User"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"[]> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"this"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"userRepository"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".find"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({ relations"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ["}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'pets'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"] });"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"findOne"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(id"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:")"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"User"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"this"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"userRepository"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".findOne"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" where"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { id }"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" relations"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ["}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'pets'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" });"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// user-lookup.service.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { AuthJwtUserLookupServiceInterface } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { ReferenceIdInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ReferenceSubject } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/ts-core'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { InjectRepository } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/typeorm'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Repository } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'typeorm'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"implements"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AuthJwtUserLookupServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"constructor"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"private"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ) {}"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"bySubject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(subject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReferenceSubject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:")"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReferenceIdInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// return authorized user"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"this"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"userService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".findOne"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(subject);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// pet.service.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { InjectRepository } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/typeorm'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Repository } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'typeorm'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Pet } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./pet.entity'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"PetService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"constructor"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" @"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"InjectRepository"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(Pet)"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"private"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" petRepository"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Repository"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Pet"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:">"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ) {}"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"findAll"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Pet"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"[]> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"this"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"petRepository"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".find"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"();"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"findByUserId"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(userId"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"number"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:")"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Pet"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"[]> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"this"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"petRepository"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".find"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({ where"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { user"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { id"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userId } } });"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h4,{id:"step-3-create-controller",children:"Step 3: Create Controller"}),"\n",(0,o.jsx)(s.p,{children:"Create a controller to handle the HTTP requests."}),"\n",(0,o.jsxs)(s.blockquote,{children:["\n",(0,o.jsxs)(s.p,{children:["Use ",(0,o.jsx)(s.code,{children:"@AuthPublic"})," decorator from ",(0,o.jsx)(s.code,{children:"@concepta/nestjs-authentication"})," on the controller or\nindividual routes if you want to override the global JWT guard to make the route public."]}),"\n"]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// user.controller.ts"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Controller"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" Get"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" Param } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { UserService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./user.service'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { PetService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./pet.service'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { AuthJwtGuard } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Controller"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'user'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:")"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserController"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"constructor"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"private"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"private"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" petService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"PetService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ) {}"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" @"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Get"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"':id/pets'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:")"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"getPets"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Param"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'id'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") userId"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"number"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"this"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"petService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".findByUserId"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(userId);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h4,{id:"step-4-configure-the-module",children:"Step 4: Configure the Module"}),"\n",(0,o.jsx)(s.p,{children:"Configure the module to include the necessary services, controllers, and guards."}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Module } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { TypeOrmModule } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/typeorm'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { AuthJwtModule } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { UserController } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./user.controller'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { UserService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./user.service'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { PetService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./pet.service'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { User } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./user.entity'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Pet } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./pet.entity'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { JwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ExtractJwt } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { ConfigService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/config'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Module"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" imports"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ["})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"TypeOrmModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".forFeature"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"([User"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" Pet])"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"JwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".forRoot"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({})"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// <- required for AuthJwtModule to work"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthJwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".registerAsync"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" inject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [UserService]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"useFactory"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" controllers"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [UserController]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" providers"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [UserService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" PetService]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"});"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {};"})]})]})})}),"\n",(0,o.jsx)(s.h3,{id:"14-first-authentication-with-jwt",children:"1.4 First Authentication with JWT"}),"\n",(0,o.jsx)(s.h4,{id:"validating-the-setup",children:"Validating the Setup"}),"\n",(0,o.jsxs)(s.p,{children:["To validate the setup, you can use ",(0,o.jsx)(s.code,{children:"curl"})," commands to simulate frontend requests."]}),"\n",(0,o.jsxs)(s.p,{children:["By following these steps, you can validate that the setup is working correctly and that\nauthenticated requests to the ",(0,o.jsx)(s.code,{children:"user/:id/pets"})," endpoint return the expected list of pets for a given user."]}),"\n",(0,o.jsxs)(s.p,{children:["Here are the steps to test the ",(0,o.jsx)(s.code,{children:"user/:id/pets"})," endpoint:"]}),"\n",(0,o.jsx)(s.h4,{id:"step-1-obtain-a-jwt-token",children:"Step 1: Obtain a JWT Token"}),"\n",(0,o.jsxs)(s.p,{children:["Assuming you have an authentication endpoint to obtain a JWT token,\nuse ",(0,o.jsx)(s.code,{children:"curl"})," to get the token. Replace ",(0,o.jsx)(s.code,{children:"[auth-url]"})," with your actual\nauthentication URL, and ",(0,o.jsx)(s.code,{children:"[username]"})," and ",(0,o.jsx)(s.code,{children:"[password]"})," with valid credentials."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"curl -X POST [auth-url] \\"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -H "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"Content-Type: application/json"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -d "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'\'{"username": "[username]", "password": "[password]"}\''})]})]})})}),"\n",(0,o.jsx)(s.p,{children:"This should return a response with a JWT token, which you'll use for authenticated requests."}),"\n",(0,o.jsx)(s.h4,{id:"step-2-make-an-authenticated-request",children:"Step 2: Make an Authenticated Request"}),"\n",(0,o.jsxs)(s.p,{children:["Use the JWT token obtained in the previous step to make an authenticated request to\nthe ",(0,o.jsx)(s.code,{children:"user/:id/pets"})," endpoint. Replace ",(0,o.jsx)(s.code,{children:"[jwt-token]"})," with the actual token and ",(0,o.jsx)(s.code,{children:"[user-id]"})," with a valid user ID."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"curl -X GET http://localhost:3000/user/[user-id]/pets \\"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -H "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"Authorization: Bearer [jwt-token]"'})]})]})})}),"\n",(0,o.jsx)(s.h4,{id:"example-curl-calls",children:"Example Curl Calls:"}),"\n",(0,o.jsx)(s.p,{children:"Here is an example sequence of curl commands:"}),"\n",(0,o.jsx)(s.h5,{id:"obtain-a-jwt-token",children:"Obtain a JWT token:"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"curl -X POST http://localhost:3000/auth/login \\"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -H "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"Content-Type: application/json"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -d "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'\'{"username": "testuser", "password": "testpassword"}\''})]})]})})}),"\n",(0,o.jsx)(s.h5,{id:"example-jwt-response",children:"Example JWT response:"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"json","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"{"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:'"accessToken"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."'})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h5,{id:"make-an-authenticated-request-using-the-token",children:"Make an authenticated request using the token:"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"curl -X GET http://localhost:3000/user/1/pets \\"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" -H "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."'})]})]})})}),"\n",(0,o.jsx)(s.h5,{id:"example-authenticated-response",children:"Example authenticated response:"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"json","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"["})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:'"id"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"1"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:'"name"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"Fluffy"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:'"user"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:'"id"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"1"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:'"name"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"John Doe"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:'"pets"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" []"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"]"})})]})})}),"\n",(0,o.jsx)(s.h1,{children:"How-To Guides"}),"\n",(0,o.jsx)(s.h3,{id:"setting-up-a-custom-module-for-providers",children:"Setting Up a Custom Module for Providers"}),"\n",(0,o.jsxs)(s.p,{children:["Before diving into the How-To Guides, we'll set up a custom module that\nincludes the necessary providers and exports for ",(0,o.jsx)(s.code,{children:"UserLookupService"}),",\n",(0,o.jsx)(s.code,{children:"MyVerifyTokenService"}),", and ",(0,o.jsx)(s.code,{children:"MyAppGuard"}),"."]}),"\n",(0,o.jsx)(s.p,{children:"This will ensure that our asynchronous registration examples can\ninject these services correctly."}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Module } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { UserLookupService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./user-lookup.service'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { MyVerifyTokenService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./verify-token.service'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { MyAppGuard } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./my-app-guard'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Module"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" providers"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" MyVerifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" MyAppGuard]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" exports"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" MyVerifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" MyAppGuard]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"});"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyProviderModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {};"})]})]})})}),"\n",(0,o.jsx)(s.h3,{id:"1-registering-authjwtmodule-synchronously",children:"1. Registering AuthJwtModule Synchronously"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"*"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"as"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" jwt "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'jsonwebtoken'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Module } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { AuthJwtModule } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { JwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ExtractJwt } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { UserLookupService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./user-lookup.service'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// define the verifyToken function"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"verifyToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" token"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (error"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"any"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" payload"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"?:"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"any"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"void"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"try"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"payload"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"await"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"jwt"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".verify"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(token"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'your-secret-key'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:");"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"null"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" payload);"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"catch"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (error) {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(error);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"};"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Module"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" imports"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ["})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"JwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".forRoot"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({})"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// <- required for AuthJwtModule to work"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthJwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".register"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"new"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// <- required"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" settings"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" jwtFromRequest"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"ExtractJwt"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".fromAuthHeaderAsBearerToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" verifyToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" verifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"new"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyVerifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// <- optional custom service"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" appGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"new"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyAppGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// <- optional custom guard"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"})"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AppModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {}"})]})]})})}),"\n",(0,o.jsx)(s.h3,{id:"2-registering-authjwtmodule-asynchronously",children:"2. Registering AuthJwtModule Asynchronously"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"*"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"as"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" jwt "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'jsonwebtoken'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Module } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { AuthJwtModule } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { JwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ExtractJwt } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { ConfigService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/config'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { MyProviderModule } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./my-provider.module'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// define the verifyToken function"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"verifyToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (configService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ConfigService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" token"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (error"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"any"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" payload"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"?:"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"any"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"void"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"try"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"payload"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"await"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"jwt"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".verify"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(token"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"configService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".get"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'JWT_SECRET'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"));"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"null"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" payload);"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"catch"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (error) {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(error);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"};"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Module"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" imports"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ["})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"JwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".forRoot"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({})"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// <- required for AuthJwtModule to work"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" MyProviderModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// <- import the my provider module"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthJwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".registerAsync"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" imports"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [MyProviderModule]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"useFactory"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" configService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ConfigService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" verifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyVerifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" appGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyAppGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ) "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// injected via useFactory"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" settings"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" jwtFromRequest"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"ExtractJwt"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".fromAuthHeaderAsBearerToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" verifyToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"verifyToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(configService)"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" verifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// injected via useFactory"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" appGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// injected via useFactory"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" inject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [ConfigService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" MyVerifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" MyAppGuard]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"});"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AppModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {};"})]})]})})}),"\n",(0,o.jsx)(s.h3,{id:"3-global-registering-authjwtmodule-asynchronously",children:"3. Global Registering AuthJwtModule Asynchronously"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"*"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"as"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" jwt "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'jsonwebtoken'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Module } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { AuthJwtModule } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { JwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ExtractJwt } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { ConfigService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/config'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { MyProviderModule } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'./my-provider.module'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// define the verifyToken function"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"verifyToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (configService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ConfigService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" token"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (error"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"any"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" payload"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"?:"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"any"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"void"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"try"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"payload"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"await"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"jwt"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".verify"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(token"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"configService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".get"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'JWT_SECRET'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"));"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"null"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" payload);"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"catch"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (error) {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(error);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"};"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Module"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" imports"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ["})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"JwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".forRoot"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({})"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// <- required for AuthJwtModule to work"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" MyProviderModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// <- import the my provider module"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthJwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".forRootAsync"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" imports"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [MyProviderModule]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"useFactory"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" configService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ConfigService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" verifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyVerifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" appGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyAppGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ) "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// injected via useFactory"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" settings"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" jwtFromRequest"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"ExtractJwt"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".fromAuthHeaderAsBearerToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" verifyToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"verifyToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(configService)"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" verifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// injected via useFactory"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" appGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// injected via useFactory"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" inject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [ConfigService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" MyVerifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" MyAppGuard]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"});"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AppModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {};"})]})]})})}),"\n",(0,o.jsx)(s.h3,{id:"4-using-custom-user-lookup-service",children:"4. Using Custom User Lookup Service"}),"\n",(0,o.jsxs)(s.p,{children:["This service is responsible for looking up user information based on the JWT payload.\nIt implements the ",(0,o.jsx)(s.code,{children:"AuthJwtUserLookupServiceInterface"})," and must be provided to the module."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { AuthJwtUserLookupServiceInterface } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-auth-jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { ReferenceIdInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ReferenceSubject } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/ts-core'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"implements"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AuthJwtUserLookupServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"bySubject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(subject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReferenceSubject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:")"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReferenceIdInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// implement user lookup logic here"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h4,{id:"5-implementing-and-using-custom-token-verification-service",children:"5. Implementing and Using Custom Token Verification Service"}),"\n",(0,o.jsxs)(s.p,{children:["This service verifies JWT tokens. If not provided, the default verification logic will be used. It extends the ",(0,o.jsx)(s.code,{children:"VerifyTokenServiceInterface"}),"."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { JwtService } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/jwt'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { VerifyTokenServiceInterface } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-authentication'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyVerifyTokenService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"implements"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"VerifyTokenServiceInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"accessToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReturnType"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"JwtService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"["}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'verifyAsync'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"]> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"new"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"((resolve"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" reject) "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"try"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// your custom logic to sign and validate the the token"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"resolve"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({ accessToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'access-token'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" });"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"catch"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (error) {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"reject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(error);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" });"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"refreshToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"..."}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"args"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Parameters"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"JwtService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"["}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'verifyAsync'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"]>"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" )"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ReturnType"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"<"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"JwtService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"["}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'verifyAsync'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"]> {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"new"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"Promise"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"((resolve"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" reject) "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"try"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// your custom logic to sign and validate the the token"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"resolve"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({ accessToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'refresh-token'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" });"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"catch"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (error) {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"reject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(error);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" });"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h3,{id:"6-setting-up-a-custom-guard",children:"6. Setting Up a Custom Guard"}),"\n",(0,o.jsxs)(s.p,{children:["To use a custom guard, you need to implement the ",(0,o.jsx)(s.code,{children:"CanActivate"})," interface\nfrom NestJS and provide it in the module configuration."]}),"\n",(0,o.jsxs)(s.p,{children:["To take advantage of the ability to enable/disable guards via configuration\nsettings or with the ",(0,o.jsx)(s.code,{children:"@AuthPublic"})," decorator, it is highly recommended that\nyou extend ",(0,o.jsx)(s.code,{children:"AuthJwtGuard"})," class or call the ",(0,o.jsx)(s.code,{children:"AuthGuard()"})," class factory from the\n",(0,o.jsx)(s.code,{children:"@concepta/nestjs-authentication"})," module."]}),"\n",(0,o.jsx)(s.h4,{id:"step-1-implement-the-custom-guard",children:"Step 1: Implement the Custom Guard"}),"\n",(0,o.jsxs)(s.p,{children:["Create a custom guard by extending the ",(0,o.jsx)(s.code,{children:"AuthJwtGuard"}),"."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ExecutionContext } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@nestjs/common'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { AuthGuard } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'@concepta/nestjs-authentication'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"@"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"Injectable"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"export"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"class"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"MyAppGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"extends"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"AuthJwtGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"canActivate"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(context"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"ExecutionContext"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// call super class first"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"if"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"!"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"super.canActivate"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(context)) {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"false"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// implement your custom authentication logic here"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"return"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"true"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"}"})})]})})}),"\n",(0,o.jsx)(s.h4,{id:"step-2-provide-the-custom-guard-in-module-configuration",children:"Step 2: Provide the Custom Guard in Module Configuration"}),"\n",(0,o.jsx)(s.p,{children:"Update the module configuration to use the custom guard."}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// ..."})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthJwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".registerAsync"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"useFactory"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" appGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" MyAppGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// use the custom guard"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" inject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [UserService]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"})"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// ..."})})]})})}),"\n",(0,o.jsx)(s.h3,{id:"7-disabling-the-guard",children:"7. Disabling the Guard"}),"\n",(0,o.jsx)(s.p,{children:"To completely disable the global guard for all routes, you can set the appGuard option to false."}),"\n",(0,o.jsx)(s.h4,{id:"disable-the-guard-in-module-configuration",children:"Disable the Guard in Module Configuration"}),"\n",(0,o.jsxs)(s.p,{children:["Update the module configuration to disable the global ",(0,o.jsx)(s.code,{children:"APP_GUARD"}),"."]}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// ..."})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthJwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".registerAsync"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"useFactory"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" appGuard"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"false"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// disable the global APP_GUARD"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" inject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [UserService]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"})"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// ..."})})]})})}),"\n",(0,o.jsx)(s.h3,{id:"8-overwriting-the-settings",children:"8. Overwriting the settings"}),"\n",(0,o.jsx)(s.div,{"data-rehype-pretty-code-fragment":"","data-nextra-code":"",children:(0,o.jsx)(s.pre,{children:(0,o.jsxs)(s.code,{"data-language":"typescript","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"import"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { ExtractJwt"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" JwtStrategyOptionsInterface } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"from"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"@concepta/nestjs-jwt"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:";"})]}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"settings"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"JwtStrategyOptionsInterface"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" jwtFromRequest"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"ExtractJwt"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".fromAuthHeaderAsBearerToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"()"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"verifyToken"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ("})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" token"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"string"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (error"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"any"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" payload"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"?:"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"any"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"void"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ) "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"try"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// add custom logic ot validate token"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"payload"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" { id"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'user-id'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" };"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"null"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" payload);"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" } "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"catch"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (error) {"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"done"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"(error);"})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" }"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"};"})}),"\n",(0,o.jsx)(s.span,{className:"line"}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// ..."})}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"AuthJwtModule"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:".registerAsync"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"useFactory"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"async"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" (userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"UserService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:") "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"=>"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" ({"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" userLookupService"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" settings"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" })"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" inject"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" [UserService]"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"})"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:","})]}),"\n",(0,o.jsx)(s.span,{className:"line",children:(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"// ..."})})]})})}),"\n",(0,o.jsx)(s.h3,{id:"9-integration-with-other-nestjs-modules",children:"9. Integration with Other NestJS Modules"}),"\n",(0,o.jsxs)(s.p,{children:["Integrate ",(0,o.jsx)(s.code,{children:"@concepta/nestjs-auth-jwt"})," with other NestJS modules like\n",(0,o.jsx)(s.code,{children:"@concepta/nestjs-user"}),", ",(0,o.jsx)(s.code,{children:"@concepta/nestjs-auth-local"}),", ",(0,o.jsx)(s.code,{children:"@concepta/nestjs-auth-refresh"}),",\nand more for a comprehensive authentication system."]}),"\n",(0,o.jsx)(s.h1,{children:"Reference"}),"\n",(0,o.jsx)(s.p,{children:"Detailed Descriptions of All Classes, Methods, and Properties"}),"\n",(0,o.jsx)(s.h2,{id:"1-authjwtmodule-api-reference",children:"1. AuthJwtModule API Reference"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.h3,{id:"registeroptions-authjwtoptions",children:"register(options: AuthJwtOptions):"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Registers the module with synchronous options."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.h3,{id:"registerasyncoptions-authjwtasyncoptions",children:"registerAsync(options: AuthJwtAsyncOptions):"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Registers the module with asynchronous options."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.h3,{id:"forrootoptions-authjwtoptions",children:"forRoot(options: AuthJwtOptions):"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Registers the module globally with synchronous options."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.h3,{id:"forrootasyncoptions-authjwtasyncoptions",children:"forRootAsync(options: AuthJwtAsyncOptions):"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Registers the module globally with asynchronous options."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.h3,{id:"forfeatureoptions-authjwtoptions",children:"forFeature(options: AuthJwtOptions):"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Registers the module for specific features with custom options."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"2-authjwtoptionsinterface",children:"2. AuthJwtOptionsInterface"}),"\n",(0,o.jsxs)(s.p,{children:["The ",(0,o.jsx)(s.code,{children:"AuthJwtOptionsInterface"})," provides various configuration options to customize the behavior of the ",(0,o.jsx)(s.code,{children:"AuthJwtModule"}),". Below is a summary of the key options:"]}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.h3,{id:"userlookupservice-required",children:"userLookupService (required):"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Service for looking up user information based on JWT payload."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.h3,{id:"verifytokenservice-optional",children:"verifyTokenService (optional):"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Service for verifying JWT tokens."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.h3,{id:"appguard-optional",children:"appGuard (optional):"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["Custom guard to protect routes; can be set to a custom guard or ",(0,o.jsx)(s.code,{children:"false"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.h3,{id:"settings-optional",children:"settings (optional):"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"JWT strategy settings, including token extraction and verification logic."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"3-authjwtmodule-classes-and-interfaces",children:"3. AuthJwtModule Classes and Interfaces"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"AuthJwtUserLookupServiceInterface"}),"\n",(0,o.jsx)(s.li,{children:"VerifyTokenServiceInterface"}),"\n",(0,o.jsx)(s.li,{children:"JwtStrategyOptionsInterface"}),"\n"]}),"\n",(0,o.jsx)(s.h1,{children:"Engineering Concepts"}),"\n",(0,o.jsx)(s.h2,{id:"conceptual-overview-of-jwt-authentication",children:"Conceptual Overview of JWT Authentication"}),"\n",(0,o.jsx)(s.h3,{id:"what-is-jwt",children:"What is JWT?"}),"\n",(0,o.jsx)(s.p,{children:"JSON Web Tokens (JWT) are a compact, URL-safe means of representing claims to\nbe transferred between two parties."}),"\n",(0,o.jsx)(s.p,{children:"The token is composed of three parts: the header, payload, and signature.\nThe header typically consists of the token type (JWT) and the signing algorithm (e.g., HMAC SHA256)."}),"\n",(0,o.jsx)(s.p,{children:"The payload contains the claims, which are statements about an entity\n(typically, the user) and additional data. The signature is used to verify that the\nsender of the JWT is who it says it is and to ensure that the message wasn't changed along the way."}),"\n",(0,o.jsxs)(s.p,{children:["For more details on JWT, see the ",(0,o.jsx)(s.a,{href:"https://jwt.io/introduction/",children:"JWT Introduction"}),"."]}),"\n",(0,o.jsx)(s.h3,{id:"benefits-of-using-jwt",children:"Benefits of Using JWT"}),"\n",(0,o.jsx)(s.p,{children:"JWTs offer several benefits for authentication and authorization:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Stateless"}),": JWTs do not require storing user session information on the server,\nwhich makes them ideal for scalable applications."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Compact"}),": Their small size allows them to be easily passed in URLs, POST parameters,\nor inside HTTP headers."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Self-contained"}),": JWTs contain all the necessary information about the user, avoiding\nthe need to query the database for each request once the user is authenticated."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Security"}),": JWTs can be signed using a secret (with HMAC algorithm) or a public/private\nkey pair (with RSA or ECDSA), ensuring the data integrity."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.p,{children:["For more benefits, see the ",(0,o.jsx)(s.a,{href:"https://auth0.com/learn/json-web-tokens/",children:"JWT Handbook"}),"."]}),"\n",(0,o.jsx)(s.h2,{id:"design-choices-in-authjwtmodule",children:"Design Choices in AuthJwtModule"}),"\n",(0,o.jsx)(s.h3,{id:"why-use-nestjs-guards",children:"Why Use NestJS Guards?"}),"\n",(0,o.jsx)(s.p,{children:"Description: NestJS guards provide a way to control the access to various parts\nof the application by checking certain conditions before the route handler is executed."}),"\n",(0,o.jsxs)(s.p,{children:["In ",(0,o.jsx)(s.code,{children:"AuthJwtModule"}),", guards are used to implement authentication and authorization logic.\nBy using guards, developers can apply security policies across routes efficiently, ensuring\nthat only authenticated and authorized users can access protected resources."]}),"\n",(0,o.jsxs)(s.p,{children:["Read more about ",(0,o.jsx)(s.a,{href:"https://docs.nestjs.com/guards",children:"NestJS Guards"}),"."]}),"\n",(0,o.jsx)(s.h3,{id:"synchronous-vs-asynchronous-registration",children:"Synchronous vs Asynchronous Registration"}),"\n",(0,o.jsxs)(s.p,{children:["The ",(0,o.jsx)(s.code,{children:"AuthJwtModule"})," supports both synchronous and asynchronous registration:"]}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Synchronous Registration"}),": This method is used when the configuration options\nare static and available at application startup. It simplifies the setup process and\nis suitable for most use cases where configuration values do not depend on external services."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Asynchronous Registration"}),": This method is beneficial when configuration options\nneed to be retrieved from external sources, such as a database or an external API,\nat runtime. It allows for more flexible and dynamic configuration but requires an\nasynchronous factory function."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.p,{children:["For more on module registration, see the ",(0,o.jsx)(s.a,{href:"https://docs.nestjs.com/modules",children:"NestJS Documentation"}),"."]}),"\n",(0,o.jsx)(s.h3,{id:"global-vs-feature-specific-registration",children:"Global vs Feature-Specific Registration"}),"\n",(0,o.jsxs)(s.p,{children:["The ",(0,o.jsx)(s.code,{children:"AuthJwtModule"})," can be registered globally or for specific features:"]}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Global Registration"}),": Makes the module available throughout the entire application.\nThis approach is useful when JWT authentication is required across all or most routes in the application."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Feature-Specific Registration"}),": Allows the module to be registered only for specific\nfeatures or modules within the application. This provides more granular control, enabling\ndifferent parts of the application to have distinct authentication and authorization requirements."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.p,{children:["To understand more about global and feature-specific registration, refer to the\n",(0,o.jsx)(s.a,{href:"https://docs.nestjs.com/modules#global-modules",children:"NestJS Module Documentation"}),"."]}),"\n",(0,o.jsx)(s.h2,{id:"integrating-authjwtmodule-with-other-modules",children:"Integrating AuthJwtModule with Other Modules"}),"\n",(0,o.jsx)(s.h3,{id:"how-authjwtmodule-works-with-authlocalmodule",children:"How AuthJwtModule Works with AuthLocalModule"}),"\n",(0,o.jsxs)(s.p,{children:["The ",(0,o.jsx)(s.code,{children:"AuthJwtModule"})," can be seamlessly integrated with the\n",(0,o.jsx)(s.code,{children:"AuthLocalModule"})," to provide a comprehensive authentication solution. ",(0,o.jsx)(s.code,{children:"AuthLocalModule"}),"\nhandles the initial authentication using local strategies such as username and password."]}),"\n",(0,o.jsxs)(s.p,{children:["Once the user is authenticated, ",(0,o.jsx)(s.code,{children:"AuthJwtModule"})," can issue a JWT that the user can use for\nsubsequent requests. This integration allows for secure and efficient authentication\nprocesses combining the strengths of both modules."]}),"\n",(0,o.jsx)(s.h3,{id:"integrating-with-authrefreshmodule",children:"Integrating with AuthRefreshModule"}),"\n",(0,o.jsxs)(s.p,{children:["Integrating ",(0,o.jsx)(s.code,{children:"AuthJwtModule"})," with ",(0,o.jsx)(s.code,{children:"AuthRefreshModule"})," enables the\napplication to handle token refresh logic. Refresh tokens are used to obtain new access\ntokens without requiring the user to re-authenticate."]}),"\n",(0,o.jsx)(s.p,{children:"This setup enhances the user experience by maintaining sessions securely and seamlessly.\nThe integration involves configuring both modules to use the same token issuance and\nverification mechanisms, ensuring smooth interoperability and security."})]})},n=Object.assign({},(0,t.ah)(),e.components),r=n.wrapper;return r?(0,o.jsx)(r,a({},e,{children:(0,o.jsx)(s,{})})):s()}function k(e){return(0,o.jsx)(x,a({},e,{children:d}))}k.getLayout=x.withLayout}},function(e){e.O(0,[4936,9774,2888,179],(function(){return s=8275,e(e.s=s);var s}));var s=e.O();_N_E=s}]);
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/api/authorization/nestjs-auth-jwt-8effb78aac8adb19.js b/_next/static/chunks/pages/documentation/api/authorization/nestjs-auth-jwt-8effb78aac8adb19.js
deleted file mode 100644
index ceaa794da..000000000
--- a/_next/static/chunks/pages/documentation/api/authorization/nestjs-auth-jwt-8effb78aac8adb19.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4806],{8275:function(t,e,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/api/authorization/nestjs-auth-jwt",function(){return n(3550)}])},3962:function(t,e,n){"use strict";n.d(e,{Z:function(){return s}});var o=n(5893),i=(n(6428),n(2076));var a=function(){return(0,o.jsx)(i.F,{apiKey:"4489c6b7099ffc6fccea33de59f4d0e0",indexName:"rockets",appId:"2R6I07Q0HG"})},s={github:"https://github.com/conceptadev/rockets",projectLink:"https://github.com/conceptadev/rockets",docsRepositoryBase:"https://github.com/conceptadev/rockets/blob/main",search:!0,customSearch:(0,o.jsx)(a,{}),titleSuffix:" \u2013 Rockets",logo:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("img",{className:"md:inline object-contain hidden",height:16,width:16,alt:"Rockets Logo",src:"/assets/rockets-icon.svg"}),(0,o.jsx)("span",{className:"mr-2 font-extrabold mx-2 hidden md:inline",children:"Rockets"})]}),head:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("meta",{name:"msapplication-TileColor",content:"#ffffff"}),(0,o.jsx)("meta",{name:"theme-color",content:"#ffffff"}),(0,o.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),(0,o.jsx)("meta",{httpEquiv:"Content-Language",content:"en"}),(0,o.jsx)("meta",{name:"description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:description",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,o.jsx)("meta",{name:"twitter:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"twitter:site:domain",content:"rockets.tools"}),(0,o.jsx)("meta",{name:"twitter:url",content:"https://www.rockets.tools"}),(0,o.jsx)("meta",{name:"og:title",content:"Rockets: Rapid Enterprise Development Toolkit"}),(0,o.jsx)("meta",{name:"og:image",content:"https://www.rockets.tools/og.png"}),(0,o.jsx)("meta",{name:"apple-mobile-web-app-title",content:"Rockets"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,o.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossorigin:!0}),(0,o.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Roboto&display=swap",rel:"stylesheet"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/apple-icon-180x180.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"192x192",href:"/android-icon-192x192.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/favicon-32x32.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/favicon-16x16.png"}),(0,o.jsx)("link",{rel:"manifest",href:"/site.webmanifest"}),(0,o.jsx)("meta",{name:"msapplication-TileImage",content:"/ms-icon-150x150.png"}),(0,o.jsx)("script",{async:!0,src:"https://www.googletagmanager.com/gtag/js?id=G-E2EF28D6TS"}),(0,o.jsx)("script",{dangerouslySetInnerHTML:{__html:"\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', 'G-E2EF28D6TS', {\n page_path: window.location.pathname,\n });\n "}})]}),prevLinks:!0,nextLinks:!0,floatTOC:!0,footer:!0,footerEditLink:"Edit this page on GitHub",footerText:(0,o.jsx)(o.Fragment,{children:(0,o.jsxs)("span",{children:["2022 \xa9 ",(0,o.jsx)("a",{href:"https://conceptatech.com",target:"_blank",rel:"noreferrer",children:" Concepta"})]})})}},3550:function(t,e,n){"use strict";n.r(e),n.d(e,{default:function(){return h}});var o=n(5893),i=n(7270),a=n(3805),s=n(3962),c=n(1151);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},e=function(){var e=Object.assign({h1:"h1",p:"p",h2:"h2",code:"code"},(0,c.ah)(),t.components);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(e.h1,{children:"Rockets NestJS JWT Authentication"}),"\n",(0,o.jsx)(e.p,{children:"Authenticate requests using JWT tokens passed via the request (headers, cookies, body, query, etc)."}),"\n",(0,o.jsx)(e.h2,{id:"project",children:"Project"}),"\n",(0,o.jsx)(e.h2,{id:"installation",children:"Installation"}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.code,{children:"yarn add @concepta/nestjs-auth-jwt"})})]})},n=Object.assign({},(0,c.ah)(),t.components),i=n.wrapper;return i?(0,o.jsx)(i,l({},t,{children:(0,o.jsx)(e,{})})):e()}function h(t){return(0,o.jsx)(p,l({},t,{children:m}))}h.getLayout=p.withLayout}},function(t){t.O(0,[4936,9774,2888,179],(function(){return e=8275,t(t.s=e);var e}));var e=t.O();_N_E=e}]);
\ No newline at end of file
diff --git a/_next/static/chunks/webpack-0811ae032e65ae06.js b/_next/static/chunks/webpack-31178e6dfd1ccd63.js
similarity index 98%
rename from _next/static/chunks/webpack-0811ae032e65ae06.js
rename to _next/static/chunks/webpack-31178e6dfd1ccd63.js
index ab1e58755..ef516b839 100644
--- a/_next/static/chunks/webpack-0811ae032e65ae06.js
+++ b/_next/static/chunks/webpack-31178e6dfd1ccd63.js
@@ -1 +1 @@
-!function(){"use strict";var e={},a={};function n(t){var c=a[t];if(void 0!==c)return c.exports;var r=a[t]={id:t,loaded:!1,exports:{}},f=!0;try{e[t].call(r.exports,r,r.exports,n),f=!1}finally{f&&delete a[t]}return r.loaded=!0,r.exports}n.m=e,function(){var e=[];n.O=function(a,t,c,r){if(!t){var f=1/0;for(u=0;u=r)&&Object.keys(n.O).every((function(e){return n.O[e](t[o])}))?t.splice(o--,1):(d=!1,r0&&e[u-1][2]>r;u--)e[u]=e[u-1];e[u]=[t,c,r]}}(),n.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(a,{a:a}),a},n.d=function(e,a){for(var t in a)n.o(a,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(a,t){return n.f[t](e,a),a}),[]))},n.u=function(e){return"static/chunks/"+({5471:"d488728f",5987:"72fdc299"}[e]||e)+"."+{425:"676c468f164972b9",580:"d8b52169d235965d",924:"8abc59d032a87c11",1554:"4564a2a1800c7905",1644:"613d1c1c0ad8af7c",2022:"64ddb6a9d81f23c5",2069:"ec5495276f45654e",2693:"e19e8d99b47ef36e",2990:"51f430a7339da784",3366:"0e2c7ce0946954dc",3880:"02581d6b9fd42425",4206:"19705eb3c893515c",4284:"e12c6eaa332a846a",4626:"79cca8c6d07eabe7",5086:"f5deaa821da750a2",5411:"ac625ddb70516ff4",5471:"417bded28d4eb9c2",5987:"cf4dc5daa31cad1f",6086:"c2968fe8f418aa18",6281:"515b7c8a0911ab7c",6320:"2d44b06b5a9cbfd7",7254:"3649c07f3197bd6b",7644:"9ade481fd13c4961",7875:"4edcbe49eeb89c8f",8031:"ba0a0ea2a9deb751",8309:"9d5139f1dddd762e",8764:"4f02667b8333149f",8841:"ab13f7c2b640d200",9770:"262dd46f53ea1e3f"}[e]+".js"},n.miniCssF=function(e){return"static/css/"+{15:"cbe0d6ee4dd5617e",298:"cbe0d6ee4dd5617e",347:"cbe0d6ee4dd5617e",529:"cbe0d6ee4dd5617e",1407:"cbe0d6ee4dd5617e",1617:"cbe0d6ee4dd5617e",2545:"cbe0d6ee4dd5617e",2888:"a1b0653f77c58d91",3067:"cbe0d6ee4dd5617e",3132:"cbe0d6ee4dd5617e",3287:"cbe0d6ee4dd5617e",3731:"cbe0d6ee4dd5617e",4123:"cbe0d6ee4dd5617e",4494:"cbe0d6ee4dd5617e",4527:"cbe0d6ee4dd5617e",4564:"cbe0d6ee4dd5617e",4806:"cbe0d6ee4dd5617e",5282:"cbe0d6ee4dd5617e",5405:"cbe0d6ee4dd5617e",5487:"cbe0d6ee4dd5617e",5498:"cbe0d6ee4dd5617e",5602:"cbe0d6ee4dd5617e",6139:"cbe0d6ee4dd5617e",7100:"cbe0d6ee4dd5617e",8111:"cbe0d6ee4dd5617e",8343:"cbe0d6ee4dd5617e",8418:"cbe0d6ee4dd5617e",8552:"cbe0d6ee4dd5617e",9171:"cbe0d6ee4dd5617e"}[e]+".css"},n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}(),n.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},function(){var e={},a="_N_E:";n.l=function(t,c,r,f){if(e[t])e[t].push(c);else{var d,o;if(void 0!==r)for(var i=document.getElementsByTagName("script"),u=0;u=r)&&Object.keys(n.O).every((function(e){return n.O[e](t[o])}))?t.splice(o--,1):(d=!1,r0&&e[u-1][2]>r;u--)e[u]=e[u-1];e[u]=[t,c,r]}}(),n.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(a,{a:a}),a},n.d=function(e,a){for(var t in a)n.o(a,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(a,t){return n.f[t](e,a),a}),[]))},n.u=function(e){return"static/chunks/"+({5471:"d488728f",5987:"72fdc299"}[e]||e)+"."+{425:"676c468f164972b9",580:"d8b52169d235965d",924:"8abc59d032a87c11",1554:"4564a2a1800c7905",1644:"613d1c1c0ad8af7c",2022:"64ddb6a9d81f23c5",2069:"ec5495276f45654e",2693:"e19e8d99b47ef36e",2990:"51f430a7339da784",3366:"0e2c7ce0946954dc",3880:"02581d6b9fd42425",4206:"19705eb3c893515c",4284:"e12c6eaa332a846a",4626:"79cca8c6d07eabe7",5086:"f5deaa821da750a2",5411:"ac625ddb70516ff4",5471:"417bded28d4eb9c2",5987:"cf4dc5daa31cad1f",6086:"c2968fe8f418aa18",6281:"515b7c8a0911ab7c",6320:"2d44b06b5a9cbfd7",7254:"3649c07f3197bd6b",7644:"9ade481fd13c4961",7875:"4edcbe49eeb89c8f",8031:"ba0a0ea2a9deb751",8309:"9d5139f1dddd762e",8764:"4f02667b8333149f",8841:"ab13f7c2b640d200",9770:"262dd46f53ea1e3f"}[e]+".js"},n.miniCssF=function(e){return"static/css/"+{15:"cbe0d6ee4dd5617e",298:"cbe0d6ee4dd5617e",347:"cbe0d6ee4dd5617e",529:"cbe0d6ee4dd5617e",1407:"cbe0d6ee4dd5617e",1617:"cbe0d6ee4dd5617e",2545:"cbe0d6ee4dd5617e",2888:"0822c92eca2d1ca0",3067:"cbe0d6ee4dd5617e",3132:"cbe0d6ee4dd5617e",3287:"cbe0d6ee4dd5617e",3731:"cbe0d6ee4dd5617e",4123:"cbe0d6ee4dd5617e",4494:"cbe0d6ee4dd5617e",4527:"cbe0d6ee4dd5617e",4564:"cbe0d6ee4dd5617e",4806:"cbe0d6ee4dd5617e",5282:"cbe0d6ee4dd5617e",5405:"cbe0d6ee4dd5617e",5487:"cbe0d6ee4dd5617e",5498:"cbe0d6ee4dd5617e",5602:"cbe0d6ee4dd5617e",6139:"cbe0d6ee4dd5617e",7100:"cbe0d6ee4dd5617e",8111:"cbe0d6ee4dd5617e",8343:"cbe0d6ee4dd5617e",8418:"cbe0d6ee4dd5617e",8552:"cbe0d6ee4dd5617e",9171:"cbe0d6ee4dd5617e"}[e]+".css"},n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}(),n.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},function(){var e={},a="_N_E:";n.l=function(t,c,r,f){if(e[t])e[t].push(c);else{var d,o;if(void 0!==r)for(var i=document.getElementsByTagName("script"),u=0;u:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.border-transparent{border-color:transparent}.object-contain{-o-object-fit:contain;object-fit:contain}.px-8{padding-left:2rem;padding-right:2rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-1{padding-left:.25rem;padding-right:.25rem}.pt-0{padding-top:0}.text-sm{line-height:1.25rem}.text-base{line-height:1.5rem}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}
+*/fieldset,legend{padding:0}*,:after,:before{--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.static{position:static}.my-12{margin-top:3rem;margin-bottom:3rem}.my-0{margin-top:0;margin-bottom:0}.mt-5{margin-top:1.25rem}.mt-3{margin-top:.75rem}.grid{display:grid}.contents{display:contents}.h-4{height:1rem}.h-8{height:2rem}.w-8{width:2rem}.max-w-xl{max-width:36rem}.max-w-7xl{max-width:80rem}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.gap-6{gap:1.5rem}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.border-transparent{border-color:transparent}.object-contain{-o-object-fit:contain;object-fit:contain}.px-8{padding-left:2rem;padding-right:2rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-1{padding-left:.25rem;padding-right:.25rem}.pt-0{padding-top:0}.text-sm{line-height:1.25rem}.text-base{line-height:1.5rem}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}
/*! tailwindcss v3.0.23 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;font-feature-settings:"rlig" 1,"calt" 1,"ss01" 1,"ss06" 1;-webkit-tap-highlight-color:transparent}body{width:100%;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.dark body,body{--tw-bg-opacity:1}.dark body{background-color:rgb(17 17 17/var(--tw-bg-opacity));color:rgb(243 244 246/var(--tw-text-opacity))}.dark body,a{--tw-text-opacity:1}a{color:rgb(59 130 246/var(--tw-text-opacity));-webkit-text-decoration-line:underline;text-decoration-line:underline;text-underline-position:under}p{line-height:1.75rem}.table-container:not(:first-child),blockquote:not(:first-child),p:not(:first-child){margin-top:1.5rem}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-y-0{top:0;bottom:0}.right-0{right:0}.top-full{top:100%}.top-0{top:0}.left-0{left:0}.bottom-\[130\%\]{bottom:130%}.top-16{top:4rem}.bottom-0{bottom:0}.z-10{z-index:10}.z-20{z-index:20}.z-\[15\]{z-index:15}.z-\[1\]{z-index:1}.m-0{margin:0}.-m-4{margin:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-auto{margin-left:auto;margin-right:auto}.mx-4{margin-left:1rem;margin-right:1rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mt-6{margin-top:1.5rem}.mt-2\.5{margin-top:.625rem}.mt-2{margin-top:.5rem}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.-ml-1{margin-left:-.25rem}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.ml-1{margin-left:.25rem}.mt-16{margin-top:4rem}.mb-8{margin-bottom:2rem}.mr-4{margin-right:1rem}.-mr-2{margin-right:-.5rem}.mb-4{margin-bottom:1rem}.ml-5{margin-left:1.25rem}.ml-6{margin-left:1.5rem}.mr-5{margin-right:1.25rem}.ml-0{margin-left:0}.-mr-4{margin-right:-1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.hidden{display:none}.h-5{height:1.25rem}.h-full{height:100%}.h-16{height:4rem}.h-7{height:1.75rem}.h-\[18px\]{height:18px}.h-\[calc\(100vh-4rem\)\]{height:calc(100vh - 4rem)}.max-h-64{max-height:16rem}.max-h-\[calc\(100vh-4rem-env\(safe-area-inset-bottom\)\)\]{max-height:calc(100vh - 4rem - env(safe-area-inset-bottom))}.min-h-\[calc\(100vh-4rem-61px\)\]{min-height:calc(100vh - 4rem - 61px)}.w-full{width:100%}.w-5{width:1.25rem}.w-64{width:16rem}.min-w-\[24px\]{min-width:24px}.min-w-0{min-width:0}.min-w-full{min-width:100%}.min-w-\[18px\]{min-width:18px}.max-w-\[90rem\]{max-width:90rem}.max-w-full{max-width:100%}.max-w-4xl{max-width:56rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.grow-0{flex-grow:0}.origin-center{transform-origin:center}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-none{transform:none}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.resize{resize:both}.scroll-my-6{scroll-margin-top:1.5rem;scroll-margin-bottom:1.5rem}.scroll-py-6{scroll-padding-top:1.5rem;scroll-padding-bottom:1.5rem}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-1{gap:.25rem}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.truncate{overflow:hidden;white-space:nowrap}.text-ellipsis,.truncate{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded-lg{border-radius:.5rem}.rounded{border-radius:.25rem}.rounded-xl{border-radius:.75rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-none{border-radius:0}.border{border-width:1px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r-2{border-right-width:2px}.border-none{border-style:none}.border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.border-yellow-100{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity))}.border-prime-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-black{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-neutral-800{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.border-opacity-5{--tw-border-opacity:0.05}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-prime-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity))}.bg-dark{--tw-bg-opacity:1;background-color:rgb(17 17 17/var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-prime-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.bg-prime-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-opacity-\[\.03\]{--tw-bg-opacity:.03}.bg-opacity-\[\.85\]{--tw-bg-opacity:.85}.bg-opacity-5{--tw-bg-opacity:0.05}.bg-opacity-10{--tw-bg-opacity:0.1}.p-8{padding:2rem}.p-4{padding:1rem}.p-2{padding:.5rem}.p-0{padding:0}.p-\[2px\]{padding:2px}.p-1{padding:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-0{padding-left:0;padding-right:0}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.px-4{padding-left:1rem;padding-right:1rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pl-3{padding-left:.75rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pb-1\.5{padding-bottom:.375rem}.pb-1{padding-bottom:.25rem}.pr-1\.5{padding-right:.375rem}.pr-1{padding-right:.25rem}.pt-8{padding-top:2rem}.pb-\[env\(safe-area-inset-bottom\)\]{padding-bottom:env(safe-area-inset-bottom)}.pl-\[max\(env\(safe-area-inset-left\)\2c 1\.5rem\)\]{padding-left:max(env(safe-area-inset-left),1.5rem)}.pr-\[max\(env\(safe-area-inset-right\)\2c 1\.5rem\)\]{padding-right:max(env(safe-area-inset-right),1.5rem)}.pb-8{padding-bottom:2rem}.pr-\[calc\(env\(safe-area-inset-right\)-1\.5rem\)\]{padding-right:calc(env(safe-area-inset-right) - 1.5rem)}.pt-4{padding-top:1rem}.pr-9{padding-right:2.25rem}.pr-3{padding-right:.75rem}.pl-\[calc\(env\(safe-area-inset-left\)-1\.5rem\)\]{padding-left:calc(env(safe-area-inset-left) - 1.5rem)}.pb-4{padding-bottom:1rem}.pt-16{padding-top:4rem}.pl-6{padding-left:1.5rem}.pl-2{padding-left:.5rem}.pr-6{padding-right:1.5rem}.pl-0{padding-left:0}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-sm{font-size:.875rem}.text-xl{font-size:1.25rem}.text-xs{font-size:.75rem}.text-lg{font-size:1.125rem}.text-4xl{font-size:2.25rem}.text-3xl{font-size:1.875rem}.text-2xl{font-size:1.5rem}.text-base{font-size:1rem}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-medium{font-weight:500}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-\[1\.35rem\]{line-height:1.35rem}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.015em}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-current{color:currentColor}.text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity))}.text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-prime-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.no-underline{-webkit-text-decoration-line:none;text-decoration-line:none}.decoration-prime-400{-webkit-text-decoration-color:#60a5fa;text-decoration-color:#60a5fa}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-100{opacity:1}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.shadow-md,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-\[0_-12px_16px_white\],.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.shadow-\[0_-12px_16px_white\]{--tw-shadow:0 -12px 16px #fff;--tw-shadow-colored:0 -12px 16px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.ring-prime-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity))}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity:0.05}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-colors{transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-500{transition-duration:.5s}.duration-300{transition-duration:.3s}.duration-100{transition-duration:.1s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.main-container{min-height:100vh}.nextra-container .nextra-nav-container a:focus,.nextra-container .nextra-nav-container summary:focus{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:2px solid transparent;outline-offset:2px}.nextra-container .nextra-nav-container a:focus-visible,.nextra-container .nextra-nav-container summary:focus-visible{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent);--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity))}.nextra-container .nextra-nav-container .nextra-nav-container-blur{z-index:-1;box-shadow:0 2px 4px rgba(0,0,0,.02),inset 0 -1px 0 rgba(0,0,0,.06)}.dark .nextra-container .nextra-nav-container .nextra-nav-container-blur{box-shadow:inset 0 -1px 0 hsla(0,0%,100%,.1)}@supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.nextra-container .nextra-nav-container .nextra-nav-container-blur{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);--tw-bg-opacity:.85}.dark .nextra-container .nextra-nav-container .nextra-nav-container-blur{--tw-bg-opacity:0.8}}.nextra-container .nextra-nav-container .nextra-menu-icon{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:.25rem;outline:2px solid transparent;outline-offset:2px}.nextra-container .nextra-nav-container .nextra-menu-icon:active{background-color:rgb(156 163 175/var(--tw-bg-opacity));--tw-bg-opacity:0.2}.nextra-container .nextra-nav-container .nextra-menu-icon svg g{transform-origin:center}.nextra-container .nextra-nav-container .nextra-menu-icon svg path{opacity:1;transition:transform .2s cubic-bezier(.25,1,.5,1) .2s,opacity .2s ease .2s}.nextra-container .nextra-nav-container .nextra-menu-icon svg g{transition:transform .2s cubic-bezier(.25,1,.5,1)}.nextra-container .nextra-nav-container .nextra-menu-icon svg.open path{transition:transform .2s cubic-bezier(.25,1,.5,1),opacity 0s ease .2s}.nextra-container .nextra-nav-container .nextra-menu-icon svg.open g{transition:transform .2s cubic-bezier(.25,1,.5,1) .2s}.nextra-container .nextra-nav-container .nextra-menu-icon svg.open>path{opacity:0}.nextra-container .nextra-nav-container .nextra-menu-icon svg.open>g:first-of-type{transform:rotate(45deg)}.nextra-container .nextra-nav-container .nextra-menu-icon svg.open>g:first-of-type path{transform:translate3d(0,6px,0)}.nextra-container .nextra-nav-container .nextra-menu-icon svg.open>g:nth-of-type(2){transform:rotate(-45deg)}.nextra-container .nextra-nav-container .nextra-menu-icon svg.open>g:nth-of-type(2) path{transform:translate3d(0,-6px,0)}.nextra-container .nextra-sidebar{-webkit-touch-callout:none}.nextra-container .nextra-sidebar ul a:focus-visible,.nextra-container .nextra-sidebar ul button:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent);--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity))}.nextra-container .nextra-sidebar ul .active-anchor{font-weight:600;--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.dark .nextra-container .nextra-sidebar ul .active-anchor{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.nextra-container .nextra-sidebar ul li.active>a,.nextra-container .nextra-sidebar ul li.active>a:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity));font-weight:700;--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.dark .nextra-container .nextra-sidebar ul li.active>a,.dark .nextra-container .nextra-sidebar ul li.active>a:hover{background-color:rgb(59 130 246/var(--tw-bg-opacity));--tw-bg-opacity:0.1;--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.nextra-container .nextra-sidebar ul button,.nextra-container .nextra-sidebar ul li a,.nextra-container .nextra-sidebar ul summary{margin-top:.25rem;display:block;width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:.25rem;padding:.375rem .5rem;text-align:left;font-size:.875rem;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity));-webkit-text-decoration-line:none;text-decoration-line:none;outline:2px solid transparent;outline-offset:2px;transition-property:background-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.dark .nextra-container .nextra-sidebar ul button,.dark .nextra-container .nextra-sidebar ul li a,.dark .nextra-container .nextra-sidebar ul summary{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.nextra-container .nextra-sidebar ul button,.nextra-container .nextra-sidebar ul li a,.nextra-container .nextra-sidebar ul summary{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.nextra-container .nextra-sidebar ul button:hover,.nextra-container .nextra-sidebar ul li a:hover,.nextra-container .nextra-sidebar ul summary:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.dark .nextra-container .nextra-sidebar ul button:hover,.dark .nextra-container .nextra-sidebar ul li a:hover,.dark .nextra-container .nextra-sidebar ul summary:hover{background-color:rgb(219 234 254/var(--tw-bg-opacity));--tw-bg-opacity:0.05;--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.nextra-container .nextra-sidebar ul ul{position:relative;margin-left:1.25rem}.nextra-container .nextra-sidebar .locale .menu{right:0}.nextra-container .nextra-sidebar .nextra-sidebar-search{position:-webkit-sticky;position:sticky;top:0;margin-top:-1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding-top:1rem}.dark .nextra-container .nextra-sidebar .nextra-sidebar-search{--tw-bg-opacity:1;background-color:rgb(17 17 17/var(--tw-bg-opacity))}.nextra-container .nextra-sidebar .nextra-sidebar-search{box-shadow:0 2px 14px 6px #fff;z-index:1}.dark .nextra-container .nextra-sidebar .nextra-sidebar-search{box-shadow:0 2px 14px 6px #111}.nextra-container .nextra-sidebar .nextra-sidebar-menu{position:-webkit-sticky;position:sticky;bottom:0}@media (max-width:767px){.nextra-body:before{content:"";position:fixed;top:0;left:0;right:0;bottom:-200px;pointer-events:none;transition:opacity 1.5s ease;opacity:0;z-index:14;background-color:#000}.nextra-container.menu-active .nextra-body:before{opacity:.8}.nextra-sidebar-container{top:0;-ms-scroll-chaining:none;overscroll-behavior:contain;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding-top:4rem}.dark .nextra-sidebar-container{--tw-bg-opacity:1;background-color:rgb(17 17 17/var(--tw-bg-opacity))}.nextra-sidebar-container{height:100vh;height:-webkit-fill-available;opacity:0;transform:translate3d(0,-110%,0);transition:transform .8s cubic-bezier(.52,.16,.04,1),opacity 0s linear 1s;will-change:transform,opacity;contain:layout style;-webkit-backface-visibility:hidden;backface-visibility:hidden}.nextra-sidebar-container.open{opacity:1;transform:translateZ(0);transition:transform .8s cubic-bezier(.52,.16,.04,1)}body.resizing .nextra-sidebar-container{transition:none}}@media (prefers-reduced-motion:reduce) and (max-width:767px){.nextra-body:before,.nextra-sidebar-container,.nextra-sidebar-container.open{transition:none}}article.nextra-body{min-height:calc(100vh - 64px)}article.nextra-body.full{width:100%}article.nextra-body.full.expand{width:100vw;margin:0 calc(50% - 50vw)}article.nextra-body h1{margin-top:.5rem;font-size:2.25rem;font-weight:700;letter-spacing:-.015em}article.nextra-body h2{margin-top:2.5rem;font-size:1.875rem;font-weight:600;letter-spacing:-.015em;border-bottom-width:1px;padding-bottom:.25rem}.dark article.nextra-body h2{border-color:rgb(219 234 254/var(--tw-border-opacity));--tw-border-opacity:0.1}article.nextra-body h3{font-size:1.5rem}article.nextra-body h3,article.nextra-body h4{margin-top:2rem;font-weight:600;letter-spacing:-.015em}article.nextra-body h4{font-size:1.25rem}article.nextra-body h5{font-size:1.125rem}article.nextra-body h5,article.nextra-body h6{margin-top:2rem;font-weight:600;letter-spacing:-.015em}article.nextra-body h6{font-size:1rem}article.nextra-body ul{margin-left:1.5rem;margin-top:1.5rem;list-style-type:disc}article.nextra-body ul:first-child{margin-top:0}article.nextra-body li{margin-top:.5rem;margin-bottom:.5rem}article.nextra-body ol{margin-left:1.5rem;margin-top:1.5rem;list-style-type:decimal}article.nextra-body blockquote{border-left-width:2px;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity));padding-left:1.5rem;font-style:italic;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.dark article.nextra-body blockquote{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity));--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}article.nextra-body h2 a{-webkit-text-decoration-line:none;text-decoration-line:none}article.nextra-body code{overflow-wrap:break-word;border-radius:.375rem;border-width:1px;border-color:rgb(0 0 0/var(--tw-border-opacity));--tw-border-opacity:0.05;background-color:rgb(0 0 0/var(--tw-bg-opacity));--tw-bg-opacity:0.05;font-size:.9em;padding:2px .25em;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-feature-settings:"rlig" 1,"calt" 1,"ss01" 1}.dark article.nextra-body code{border-color:rgb(255 255 255/var(--tw-border-opacity));--tw-border-opacity:0.1;background-color:rgb(255 255 255/var(--tw-bg-opacity));--tw-bg-opacity:0.1}article.nextra-body pre{contain:paint;margin-top:1.5rem;margin-bottom:1rem;overflow-x:auto;border-radius:.75rem;--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity));padding:1rem;font-weight:500;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.dark article.nextra-body pre{background-color:rgb(147 197 253/var(--tw-bg-opacity));--tw-bg-opacity:0.1}article.nextra-body pre code{line-height:1.25rem;position:relative;display:inline-block;min-width:100%;border-radius:0;border-style:none;padding:0;font-size:.875rem;color:currentColor}.dark article.nextra-body pre code,article.nextra-body pre code{background-color:transparent}article.nextra-body pre code .line.highlighted:before{pointer-events:none;position:absolute;left:-1rem;right:-1rem;display:block;height:1.25rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:rgb(107 114 128/var(--tw-bg-opacity));content:var(--tw-content);--tw-bg-opacity:0.1}article.nextra-body pre code .line.highlighted span{position:relative}article.nextra-body a code{color:currentColor;-webkit-text-decoration-line:none;text-decoration-line:none}article.nextra-body [data-nextra-code][data-filename]{position:relative;display:block}article.nextra-body [data-nextra-code][data-filename]:before{content:attr(data-filename);position:absolute;top:0;z-index:1;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-top-left-radius:.75rem;border-top-right-radius:.75rem;--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity));padding:.5rem 1rem;font-size:.75rem;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.dark article.nextra-body [data-nextra-code][data-filename]:before{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}article.nextra-body [data-nextra-code][data-filename] pre{padding-top:3rem}article.nextra-body hr{margin-top:2rem;margin-bottom:2rem}.dark article.nextra-body hr{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity))}article.nextra-body details{margin-top:1rem;margin-bottom:1rem;border-radius:.25rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.dark article.nextra-body details{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}article.nextra-body details:first-child{margin-top:0}article.nextra-body details:last-child{margin-bottom:0}article.nextra-body details .nextra-collapse-content{padding:.5rem}article.nextra-body summary{cursor:pointer;border-radius:.25rem;padding:.25rem;outline:2px solid transparent;outline-offset:2px;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}article.nextra-body summary:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.dark article.nextra-body summary:hover{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}article.nextra-body summary::-webkit-details-marker{display:none}article.nextra-body details>summary{list-style-type:none}article.nextra-body details>summary:before{content:"";background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'/%3E%3C/svg%3E");height:1.2em;width:1.2em;margin-right:.125em;vertical-align:-4px;display:inline-block;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.dark article.nextra-body details>summary:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='%23fff'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd'/%3E%3C/svg%3E")}article.nextra-body details[data-open]>summary{list-style-type:none}article.nextra-body details[data-open]>summary:before{--tw-rotate:90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}article.nextra-body .subheading-anchor{margin-top:-84px;display:inline-block;position:absolute;width:1px}article.nextra-body .subheading-anchor+a:hover .anchor-icon{opacity:1}article.nextra-body .subheading-anchor:target+a .anchor-icon{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity));opacity:1}.dark article.nextra-body .subheading-anchor:target+a .anchor-icon{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}article.nextra-body .anchor-icon{position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-left:.5rem;--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity));opacity:0;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.dark article.nextra-body .anchor-icon{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}article.nextra-body .nextra-toc ul{margin:0;list-style-type:none;overflow-wrap:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}.nextra-search input{background-color:rgb(0 0 0/var(--tw-bg-opacity));--tw-bg-opacity:.03;--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.dark .nextra-search input{background-color:rgb(249 250 251/var(--tw-bg-opacity));--tw-bg-opacity:0.1;--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity));--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.nextra-search input::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.nextra-search input:-ms-input-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.nextra-search input::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.dark .nextra-search input::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.dark .nextra-search input:-ms-input-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.dark .nextra-search input::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.nextra-search.nextra-flexsearch ul{left:0;overflow:auto}@media (min-width:768px){.nextra-search.nextra-flexsearch ul{left:-20rem;right:0}}.nextra-search.nextra-flexsearch ul{min-height:100px;max-height:min(calc(100vh - 5rem - env(safe-area-inset-bottom)),400px);max-width:min(calc(100vw - 2rem),calc(100% + 20rem));transition:max-height .2s ease;width:100vw}.nextra-search ul a{scroll-margin:50px}.nextra-search ul{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity));--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent);--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity));--tw-ring-opacity:0.05}.nextra-search ul li{margin-left:.625rem;margin-right:.625rem;overflow-wrap:break-word;border-radius:.375rem;padding:.5rem .625rem;--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.nextra-search ul li .highlight{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity));-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-color:#60a5fa;text-decoration-color:#60a5fa}.nextra-search ul a:focus li,.nextra-search ul li.active{background-color:rgb(96 165 250/var(--tw-bg-opacity));--tw-bg-opacity:.1;--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.nextra-search ul .nextra-search-section{border-bottom-width:1px;border-color:rgb(0 0 0/var(--tw-border-opacity));--tw-border-opacity:0.1}.dark .nextra-search ul .nextra-search-section{border-bottom-width:1px;border-color:rgb(255 255 255/var(--tw-border-opacity));--tw-border-opacity:0.2}.dark .nextra-search ul{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity));--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity));--tw-ring-opacity:0.1}.dark .nextra-search ul li{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.dark .nextra-search ul li .highlight{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity));-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-color:#60a5fa;text-decoration-color:#60a5fa}.dark .nextra-search ul a:focus li,.dark .nextra-search ul li.active{background-color:rgb(59 130 246/var(--tw-bg-opacity));--tw-bg-opacity:.1;--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}@supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.nextra-search ul{-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);--tw-bg-opacity:.7}.dark .nextra-search ul{--tw-bg-opacity:.8}}@media screen and (max-width:767px){.nextra-search .excerpt{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical}.nextra-search.nextra-flexsearch ul{max-height:min(calc(50vh - 11rem - env(safe-area-inset-bottom)),400px)}}.search-overlay{position:fixed;top:0;bottom:0;left:0;right:0}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-results-button,input[type=search]::-webkit-search-results-decoration{-webkit-appearance:none}.locale-switch summary::-webkit-details-marker{content:"";display:none}.locale-switch summary::marker{content:"";display:none}.locale-switch[open] summary:before{content:" ";position:fixed;top:0;right:0;bottom:0;left:0;z-index:10;display:block;cursor:default;background:transparent}.locale-switch .locale-dropdown{position:absolute;z-index:11}table{margin-top:.5rem;padding:0}table:first-child{margin-top:0}table tr{margin:0;border-top-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity));padding:0}.dark table tr{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}table tr:nth-child(2n){--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.dark table tr:nth-child(2n){background-color:rgb(75 85 99/var(--tw-bg-opacity));--tw-bg-opacity:0.2}table tr th{font-weight:600}table tr td[align=center],table tr th[align=center]{text-align:center}table tr td[align=right],table tr th[align=right]{text-align:right}table tr td,table tr th{text-align:left;margin:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity));padding:.5rem 1rem}.dark table tr td,.dark table tr th{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.table-container{overflow:auto}.contains-task-list{margin-left:0;list-style-type:none}.contains-task-list input[type=checkbox]{margin-right:.25rem}.nextra-container.rtl{direction:rtl}.nextra-container.rtl .nextra-sidebar ul ul{margin-right:1.25rem;margin-left:0}.nextra-container.rtl .nextra-sidebar a,.nextra-container.rtl .nextra-sidebar button{text-align:right}.nextra-container.rtl article.nextra-body blockquote{border-right-width:2px;border-left-width:0;padding-right:1.5rem;padding-left:0}@media (min-width:768px){.nextra-container:not(.page) article.nextra-body .bleed.full{margin-left:calc(-50vw + 50% + 8rem);margin-right:calc(-50vw + 50% + 8rem)}.nextra-container.page article.nextra-body .bleed.full{margin-left:calc(-50vw + 50%);margin-right:calc(-50vw + 50%)}}@media (min-width:1280px){.nextra-container:not(.rtl):not(.page) article.nextra-body .bleed.full{margin-left:calc(50% - 50vw + 16rem);margin-right:calc(50% - 50vw)}.nextra-container.rtl:not(.page) article.nextra-body .bleed.full{margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw + 16rem)}.nextra-container.page article.nextra-body .bleed.full{margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw)}}.nextra-container.rtl code{direction:ltr}.nextra-container.rtl .anchor-icon{margin-left:0;margin-right:.5rem;display:inline-block}.nextra-container.rtl article.nextra-body ol,.nextra-container.rtl article.nextra-body ul{margin-left:0;margin-right:1.5rem}@media (min-width:768px){.nextra-container.rtl .nextra-sidebar{border-left-width:1px}}:root{--shiki-color-text:#414141;--shiki-color-background:transparent;--shiki-token-constant:#1976d2;--shiki-token-string:#22863a;--shiki-token-comment:#aaa;--shiki-token-keyword:#d32f2f;--shiki-token-parameter:#ff9800;--shiki-token-function:#6f42c1;--shiki-token-string-expression:#22863a;--shiki-token-punctuation:#212121;--shiki-token-link:#22863a;--nextra-shiki-deleted:red;--nextra-shiki-inserted:red}.dark{--shiki-color-text:#d1d1d1;--shiki-token-constant:#79b8ff;--shiki-token-string:#ffab70;--shiki-token-comment:#6b737c;--shiki-token-keyword:#f97583;--shiki-token-parameter:#ff9800;--shiki-token-function:#b392f0;--shiki-token-string-expression:#4bb74a;--shiki-token-punctuation:#bbb;--shiki-token-link:#ffab70}.before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:-inset-x-4:before{content:var(--tw-content);left:-1rem;right:-1rem}.before\:block:before{content:var(--tw-content);display:block}.before\:h-5:before{content:var(--tw-content);height:1.25rem}.before\:bg-gray-500:before{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.before\:bg-opacity-10:before{content:var(--tw-content);--tw-bg-opacity:0.1}.first\:mt-0:first-child{margin-top:0}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.hover\:bg-opacity-5:hover{--tw-bg-opacity:0.05}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-prime-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.hover\:opacity-75:hover{opacity:.75}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.focus\:ring:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-gray-200:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}.dark .dark\:border-orange-400{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity))}.dark .dark\:border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.dark .dark\:border-neutral-800{--tw-border-opacity:1;border-color:rgb(38 38 38/var(--tw-border-opacity))}.dark .dark\:border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.dark .dark\:border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.dark .dark\:border-opacity-30{--tw-border-opacity:0.3}.dark .dark\:border-opacity-20{--tw-border-opacity:0.2}.dark .dark\:bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity))}.dark .dark\:bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.dark .dark\:bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity))}.dark .dark\:bg-dark{--tw-bg-opacity:1;background-color:rgb(17 17 17/var(--tw-bg-opacity))}.dark .dark\:bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity))}.dark .dark\:bg-prime-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.dark .dark\:bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity))}.dark .dark\:bg-prime-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.dark .dark\:bg-prime-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity))}.dark .dark\:bg-transparent{background-color:transparent}.dark .dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark .dark\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.dark .dark\:bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.dark .dark\:bg-opacity-20{--tw-bg-opacity:0.2}.dark .dark\:bg-opacity-30{--tw-bg-opacity:0.3}.dark .dark\:bg-opacity-50{--tw-bg-opacity:0.5}.dark .dark\:bg-opacity-10{--tw-bg-opacity:0.1}.dark .dark\:text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.dark .dark\:text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity))}.dark .dark\:text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity))}.dark .dark\:text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity))}.dark .dark\:text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.dark .dark\:text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.dark .dark\:text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.dark .dark\:text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.dark .dark\:text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.dark .dark\:text-prime-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.dark .dark\:text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.dark .dark\:text-neutral-700{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity))}.dark .dark\:shadow-\[0_-12px_16px_\#111\]{--tw-shadow:0 -12px 16px #111;--tw-shadow-colored:0 -12px 16px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.dark .dark\:ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.dark .dark\:ring-opacity-20{--tw-ring-opacity:0.2}.dark .dark\:hover\:bg-prime-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.dark .dark\:hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.dark .dark\:hover\:bg-opacity-5:hover{--tw-bg-opacity:0.05}.dark .dark\:hover\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.dark .dark\:hover\:text-prime-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.dark .dark\:hover\:text-gray-50:hover{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.dark .dark\:hover\:text-gray-100:hover{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.dark .dark\:hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.dark .dark\:focus\:bg-dark:focus{--tw-bg-opacity:1;background-color:rgb(17 17 17/var(--tw-bg-opacity))}.dark .dark\:focus\:ring-gray-100:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(243 244 246/var(--tw-ring-opacity))}.dark .dark\:focus\:ring-opacity-20:focus{--tw-ring-opacity:0.2}@media (min-width:640px){.sm\:flex{display:flex}}@media (min-width:768px){.md\:sticky{position:-webkit-sticky;position:sticky}.md\:right-0{right:0}.md\:-left-80{left:-20rem}.md\:-mx-8{margin-left:-2rem;margin-right:-2rem}.md\:block{display:block}.md\:inline-block{display:inline-block}.md\:inline{display:inline}.md\:hidden{display:none}.md\:h-auto{height:auto}.md\:w-64{width:16rem}.md\:w-auto{width:auto}.md\:flex-row{flex-direction:row}.md\:items-end{align-items:flex-end}.md\:overflow-auto{overflow:auto}.md\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width:1280px){.xl\:block{display:block}}@media (min-width:1536px){.\32xl\:-mx-24{margin-left:-6rem;margin-right:-6rem}}body{font-weight:400}body,h1,h2,h3,h4,h5,h6{font-family:Inter,sans-serif}h1,h2,h3,h4,h5,h6{font-weight:700}b,em,i{font-family:Inter,sans-serif;font-weight:600}.mermaid .generic rect,.mermaid .nestjs rect,.mermaid .rockets rect,.mermaid .rockets-muted rect{fill:#fc985b!important;stroke-width:0!important}.mermaid .rockets-muted rect{stroke-width:2px!important;stroke-dasharray:2 2!important}.mermaid .nestjs rect{fill:#eb6a7d!important}.mermaid .generic rect{fill:#bbb!important}.mermaid .generic span,.mermaid .nestjs span,.mermaid .rockets span,.mermaid .rockets-muted span{color:#fff!important}.dark .dark\:bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.dark .dark\:text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.dark .dark\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}@media (min-width:640px){.sm\:mt-0{margin-top:0}.sm\:ml-3{margin-left:.75rem}.sm\:flex{display:flex}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:justify-center{justify-content:center}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pt-4{padding-top:1rem}}@media (min-width:768px){.md\:mt-8{margin-top:2rem}.md\:inline{display:inline}.md\:py-3{padding-top:.75rem;padding-bottom:.75rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-2{padding-left:.5rem;padding-right:.5rem}.md\:text-lg{font-size:1.125rem;line-height:1.75rem}.md\:leading-6{line-height:1.5rem}}@media (min-width:1024px){.lg\:px-8{padding-left:2rem;padding-right:2rem}}
\ No newline at end of file
diff --git a/_next/static/BqGR5Udf-N_TfabuDuApP/_buildManifest.js b/_next/static/g7esqge5Rb2gOEYyhm1q7/_buildManifest.js
similarity index 97%
rename from _next/static/BqGR5Udf-N_TfabuDuApP/_buildManifest.js
rename to _next/static/g7esqge5Rb2gOEYyhm1q7/_buildManifest.js
index 2acc1de01..00b59348b 100644
--- a/_next/static/BqGR5Udf-N_TfabuDuApP/_buildManifest.js
+++ b/_next/static/g7esqge5Rb2gOEYyhm1q7/_buildManifest.js
@@ -1 +1 @@
-self.__BUILD_MANIFEST=function(t,a,n){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static/chunks/622007c3-89f8f4242088221c.js",t,"static/chunks/9717-d22e8787e3f1ff41.js",a,"static/chunks/pages/index-e211aa1ac7f4f7b0.js"],"/_error":["static/chunks/pages/_error-08bfa774c299c0ab.js"],"/documentation/api/_toc_list":[t,n,a,"static/chunks/pages/documentation/api/_toc_list-7c7c136277b58b1c.js"],"/documentation/api/authentication/_toc_list":[t,a,"static/chunks/pages/documentation/api/authentication/_toc_list-a4ebe265511c52ad.js"],"/documentation/api/authentication/nestjs-auth-github":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-github-5be0f637fb6f925a.js"],"/documentation/api/authentication/nestjs-auth-local":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-local-f28088acf9c75f11.js"],"/documentation/api/authentication/nestjs-auth-refresh":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-refresh-d6f5de933db6eede.js"],"/documentation/api/authentication/nestjs-authentication":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-authentication-3faab9b21f2385a1.js"],"/documentation/api/authorization/_toc_list":[t,a,"static/chunks/pages/documentation/api/authorization/_toc_list-d85ebf620e8f7196.js"],"/documentation/api/authorization/nestjs-access-control":[t,a,"static/chunks/pages/documentation/api/authorization/nestjs-access-control-a9cbdd4d097ed97f.js"],"/documentation/api/authorization/nestjs-auth-jwt":[t,a,"static/chunks/pages/documentation/api/authorization/nestjs-auth-jwt-8effb78aac8adb19.js"],"/documentation/api/controller/_toc_list":[t,a,"static/chunks/pages/documentation/api/controller/_toc_list-4f3938232c4c6e46.js"],"/documentation/api/controller/nestjs-crud":[t,a,"static/chunks/pages/documentation/api/controller/nestjs-crud-12c9cdc543236086.js"],"/documentation/api/controller/nestjs-swagger-ui":[t,a,"static/chunks/pages/documentation/api/controller/nestjs-swagger-ui-1a5784e9ad65d761.js"],"/documentation/api/core/_toc_list":[t,a,"static/chunks/pages/documentation/api/core/_toc_list-accbc72f043d255d.js"],"/documentation/api/core/nestjs-common":[t,a,"static/chunks/pages/documentation/api/core/nestjs-common-4cb9cb7bae185468.js"],"/documentation/api/core/nestjs-core":[t,a,"static/chunks/pages/documentation/api/core/nestjs-core-3c040e1dcdec3d3e.js"],"/documentation/api/core/nestjs-event":[t,a,"static/chunks/pages/documentation/api/core/nestjs-event-88f6d62ebc6ff9ba.js"],"/documentation/api/core/nestjs-exception":[t,a,"static/chunks/pages/documentation/api/core/nestjs-exception-430b7dba13d0fdd1.js"],"/documentation/api/core/nestjs-typeorm-ext":[t,a,"static/chunks/pages/documentation/api/core/nestjs-typeorm-ext-71141fefc1ca0e38.js"],"/documentation/api/model/_toc_list":[t,a,"static/chunks/pages/documentation/api/model/_toc_list-0a0c23d255210c8e.js"],"/documentation/api/model/nestjs-user":[t,a,"static/chunks/pages/documentation/api/model/nestjs-user-8462e4a1d4e0b7d5.js"],"/documentation/api/notification/_toc_list":[t,a,"static/chunks/pages/documentation/api/notification/_toc_list-06432e852e47423b.js"],"/documentation/api/notification/nestjs-email":[t,a,"static/chunks/pages/documentation/api/notification/nestjs-email-48047d340ab8b809.js"],"/documentation/api/util/_toc_list":[t,a,"static/chunks/pages/documentation/api/util/_toc_list-90e0671d22edfbf6.js"],"/documentation/api/util/nestjs-jwt":[t,a,"static/chunks/pages/documentation/api/util/nestjs-jwt-1ad4a690358b3ec4.js"],"/documentation/api/util/nestjs-logger":[t,a,"static/chunks/pages/documentation/api/util/nestjs-logger-3c1fa9b87ee56d07.js"],"/documentation/api/util/nestjs-password":[t,a,"static/chunks/pages/documentation/api/util/nestjs-password-2533a3a0abc27d18.js"],"/documentation/getting-started":[t,n,a,"static/chunks/pages/documentation/getting-started-82126a420b9b8b0a.js"],sortedPages:["/","/_app","/_error","/documentation/api/_toc_list","/documentation/api/authentication/_toc_list","/documentation/api/authentication/nestjs-auth-github","/documentation/api/authentication/nestjs-auth-local","/documentation/api/authentication/nestjs-auth-refresh","/documentation/api/authentication/nestjs-authentication","/documentation/api/authorization/_toc_list","/documentation/api/authorization/nestjs-access-control","/documentation/api/authorization/nestjs-auth-jwt","/documentation/api/controller/_toc_list","/documentation/api/controller/nestjs-crud","/documentation/api/controller/nestjs-swagger-ui","/documentation/api/core/_toc_list","/documentation/api/core/nestjs-common","/documentation/api/core/nestjs-core","/documentation/api/core/nestjs-event","/documentation/api/core/nestjs-exception","/documentation/api/core/nestjs-typeorm-ext","/documentation/api/model/_toc_list","/documentation/api/model/nestjs-user","/documentation/api/notification/_toc_list","/documentation/api/notification/nestjs-email","/documentation/api/util/_toc_list","/documentation/api/util/nestjs-jwt","/documentation/api/util/nestjs-logger","/documentation/api/util/nestjs-password","/documentation/getting-started"]}}("static/chunks/4936-449195fb22f496c1.js","static/css/cbe0d6ee4dd5617e.css","static/chunks/4294-2f4fb656a61708e6.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
\ No newline at end of file
+self.__BUILD_MANIFEST=function(t,a,n){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static/chunks/622007c3-89f8f4242088221c.js",t,"static/chunks/9717-d22e8787e3f1ff41.js",a,"static/chunks/pages/index-e211aa1ac7f4f7b0.js"],"/_error":["static/chunks/pages/_error-08bfa774c299c0ab.js"],"/documentation/api/_toc_list":[t,n,a,"static/chunks/pages/documentation/api/_toc_list-7c7c136277b58b1c.js"],"/documentation/api/authentication/_toc_list":[t,a,"static/chunks/pages/documentation/api/authentication/_toc_list-a4ebe265511c52ad.js"],"/documentation/api/authentication/nestjs-auth-github":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-github-5be0f637fb6f925a.js"],"/documentation/api/authentication/nestjs-auth-local":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-local-f28088acf9c75f11.js"],"/documentation/api/authentication/nestjs-auth-refresh":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-auth-refresh-d6f5de933db6eede.js"],"/documentation/api/authentication/nestjs-authentication":[t,a,"static/chunks/pages/documentation/api/authentication/nestjs-authentication-3faab9b21f2385a1.js"],"/documentation/api/authorization/_toc_list":[t,a,"static/chunks/pages/documentation/api/authorization/_toc_list-d85ebf620e8f7196.js"],"/documentation/api/authorization/nestjs-access-control":[t,a,"static/chunks/pages/documentation/api/authorization/nestjs-access-control-a9cbdd4d097ed97f.js"],"/documentation/api/authorization/nestjs-auth-jwt":[t,a,"static/chunks/pages/documentation/api/authorization/nestjs-auth-jwt-75ce68b46d83bc99.js"],"/documentation/api/controller/_toc_list":[t,a,"static/chunks/pages/documentation/api/controller/_toc_list-4f3938232c4c6e46.js"],"/documentation/api/controller/nestjs-crud":[t,a,"static/chunks/pages/documentation/api/controller/nestjs-crud-12c9cdc543236086.js"],"/documentation/api/controller/nestjs-swagger-ui":[t,a,"static/chunks/pages/documentation/api/controller/nestjs-swagger-ui-1a5784e9ad65d761.js"],"/documentation/api/core/_toc_list":[t,a,"static/chunks/pages/documentation/api/core/_toc_list-accbc72f043d255d.js"],"/documentation/api/core/nestjs-common":[t,a,"static/chunks/pages/documentation/api/core/nestjs-common-4cb9cb7bae185468.js"],"/documentation/api/core/nestjs-core":[t,a,"static/chunks/pages/documentation/api/core/nestjs-core-3c040e1dcdec3d3e.js"],"/documentation/api/core/nestjs-event":[t,a,"static/chunks/pages/documentation/api/core/nestjs-event-88f6d62ebc6ff9ba.js"],"/documentation/api/core/nestjs-exception":[t,a,"static/chunks/pages/documentation/api/core/nestjs-exception-430b7dba13d0fdd1.js"],"/documentation/api/core/nestjs-typeorm-ext":[t,a,"static/chunks/pages/documentation/api/core/nestjs-typeorm-ext-71141fefc1ca0e38.js"],"/documentation/api/model/_toc_list":[t,a,"static/chunks/pages/documentation/api/model/_toc_list-0a0c23d255210c8e.js"],"/documentation/api/model/nestjs-user":[t,a,"static/chunks/pages/documentation/api/model/nestjs-user-8462e4a1d4e0b7d5.js"],"/documentation/api/notification/_toc_list":[t,a,"static/chunks/pages/documentation/api/notification/_toc_list-06432e852e47423b.js"],"/documentation/api/notification/nestjs-email":[t,a,"static/chunks/pages/documentation/api/notification/nestjs-email-48047d340ab8b809.js"],"/documentation/api/util/_toc_list":[t,a,"static/chunks/pages/documentation/api/util/_toc_list-90e0671d22edfbf6.js"],"/documentation/api/util/nestjs-jwt":[t,a,"static/chunks/pages/documentation/api/util/nestjs-jwt-1ad4a690358b3ec4.js"],"/documentation/api/util/nestjs-logger":[t,a,"static/chunks/pages/documentation/api/util/nestjs-logger-3c1fa9b87ee56d07.js"],"/documentation/api/util/nestjs-password":[t,a,"static/chunks/pages/documentation/api/util/nestjs-password-2533a3a0abc27d18.js"],"/documentation/getting-started":[t,n,a,"static/chunks/pages/documentation/getting-started-82126a420b9b8b0a.js"],sortedPages:["/","/_app","/_error","/documentation/api/_toc_list","/documentation/api/authentication/_toc_list","/documentation/api/authentication/nestjs-auth-github","/documentation/api/authentication/nestjs-auth-local","/documentation/api/authentication/nestjs-auth-refresh","/documentation/api/authentication/nestjs-authentication","/documentation/api/authorization/_toc_list","/documentation/api/authorization/nestjs-access-control","/documentation/api/authorization/nestjs-auth-jwt","/documentation/api/controller/_toc_list","/documentation/api/controller/nestjs-crud","/documentation/api/controller/nestjs-swagger-ui","/documentation/api/core/_toc_list","/documentation/api/core/nestjs-common","/documentation/api/core/nestjs-core","/documentation/api/core/nestjs-event","/documentation/api/core/nestjs-exception","/documentation/api/core/nestjs-typeorm-ext","/documentation/api/model/_toc_list","/documentation/api/model/nestjs-user","/documentation/api/notification/_toc_list","/documentation/api/notification/nestjs-email","/documentation/api/util/_toc_list","/documentation/api/util/nestjs-jwt","/documentation/api/util/nestjs-logger","/documentation/api/util/nestjs-password","/documentation/getting-started"]}}("static/chunks/4936-449195fb22f496c1.js","static/css/cbe0d6ee4dd5617e.css","static/chunks/4294-2f4fb656a61708e6.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
\ No newline at end of file
diff --git a/_next/static/BqGR5Udf-N_TfabuDuApP/_middlewareManifest.js b/_next/static/g7esqge5Rb2gOEYyhm1q7/_middlewareManifest.js
similarity index 100%
rename from _next/static/BqGR5Udf-N_TfabuDuApP/_middlewareManifest.js
rename to _next/static/g7esqge5Rb2gOEYyhm1q7/_middlewareManifest.js
diff --git a/_next/static/BqGR5Udf-N_TfabuDuApP/_ssgManifest.js b/_next/static/g7esqge5Rb2gOEYyhm1q7/_ssgManifest.js
similarity index 100%
rename from _next/static/BqGR5Udf-N_TfabuDuApP/_ssgManifest.js
rename to _next/static/g7esqge5Rb2gOEYyhm1q7/_ssgManifest.js
diff --git a/documentation/api/_toc_list.html b/documentation/api/_toc_list.html
index b065f436d..ba5200ef8 100644
--- a/documentation/api/_toc_list.html
+++ b/documentation/api/_toc_list.html
@@ -5,4 +5,4 @@
gtag('config', 'G-E2EF28D6TS', {
page_path: window.location.pathname,
});
-