[{"data":1,"prerenderedAt":2019},["ShallowReactive",2],{"navigation":3,"-adapters-h3-sessions":167,"-adapters-h3-sessions-surround":2016},[4,22,78,106,141,148],{"title":5,"path":6,"stem":7,"children":8},"Introduction","\u002Fgetting-started","0.Getting-Started\u002F0.index",[9,10,14,18],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Installation","\u002Fgetting-started\u002Finstallation","0.Getting-Started\u002F1.installation",{"title":15,"path":16,"stem":17},"Quickstart","\u002Fgetting-started\u002Fquickstart","0.Getting-Started\u002F2.quickstart",{"title":19,"path":20,"stem":21},"Core concepts","\u002Fgetting-started\u002Fcore-concepts","0.Getting-Started\u002F3.core-concepts",{"title":23,"path":24,"stem":25,"children":26,"icon":28},"JWT","\u002Fjwt","1.JWT\u002F0.index",[27,29,52],{"title":23,"path":24,"stem":25,"icon":28},"i-carbon-certificate",{"title":30,"path":31,"stem":32,"children":33,"icon":35},"JWS","\u002Fjwt\u002Fjws","1.JWT\u002F1.JWS\u002F0.index",[34,36,40,44,48],{"title":30,"path":31,"stem":32,"icon":35},"i-carbon-document-signed",{"title":37,"path":38,"stem":39},"Signing","\u002Fjwt\u002Fjws\u002Fsigning","1.JWT\u002F1.JWS\u002F1.signing",{"title":41,"path":42,"stem":43},"Verifying","\u002Fjwt\u002Fjws\u002Fverifying","1.JWT\u002F1.JWS\u002F2.verifying",{"title":45,"path":46,"stem":47},"Multi-signature","\u002Fjwt\u002Fjws\u002Fmulti-signature","1.JWT\u002F1.JWS\u002F3.multi-signature",{"title":49,"path":50,"stem":51},"Algorithms","\u002Fjwt\u002Fjws\u002Falgorithms","1.JWT\u002F1.JWS\u002F4.algorithms",{"title":53,"path":54,"stem":55,"children":56,"icon":58},"JWE","\u002Fjwt\u002Fjwe","1.JWT\u002F2.JWE\u002F0.index",[57,59,63,67,71,75],{"title":53,"path":54,"stem":55,"icon":58},"i-carbon-locked",{"title":60,"path":61,"stem":62},"Encrypting","\u002Fjwt\u002Fjwe\u002Fencrypting","1.JWT\u002F2.JWE\u002F1.encrypting",{"title":64,"path":65,"stem":66},"Decrypting","\u002Fjwt\u002Fjwe\u002Fdecrypting","1.JWT\u002F2.JWE\u002F2.decrypting",{"title":68,"path":69,"stem":70},"Multi-recipient","\u002Fjwt\u002Fjwe\u002Fmulti-recipient","1.JWT\u002F2.JWE\u002F3.multi-recipient",{"title":72,"path":73,"stem":74},"ECDH-ES and end-to-end encryption","\u002Fjwt\u002Fjwe\u002Fecdh-es","1.JWT\u002F2.JWE\u002F4.ecdh-es",{"title":49,"path":76,"stem":77},"\u002Fjwt\u002Fjwe\u002Falgorithms","1.JWT\u002F2.JWE\u002F5.algorithms",{"title":79,"path":80,"stem":81,"children":82,"icon":84},"Examples","\u002Fexamples","10.Examples\u002F0.index",[83,85,90,94,98,102],{"title":79,"path":80,"stem":81,"icon":84},"i-carbon-code-reference",{"title":86,"path":87,"stem":88,"icon":89},"Authentication basics","\u002Fexamples\u002Fauthentication-basics","10.Examples\u002F1.authentication-basics","i-lucide-code",{"title":91,"path":92,"stem":93,"icon":89},"Consuming a JWKS endpoint","\u002Fexamples\u002Fjwks-endpoint","10.Examples\u002F2.jwks-endpoint",{"title":95,"path":96,"stem":97,"icon":89},"Refresh token pattern","\u002Fexamples\u002Frefresh-token-pattern","10.Examples\u002F3.refresh-token-pattern",{"title":99,"path":100,"stem":101,"icon":89},"End-to-end encryption","\u002Fexamples\u002Fend-to-end-encryption","10.Examples\u002F4.end-to-end-encryption",{"title":103,"path":104,"stem":105,"icon":89},"Signed receipts","\u002Fexamples\u002Fsigned-receipts","10.Examples\u002F5.signed-receipts",{"title":107,"path":108,"stem":109,"children":110,"icon":112},"JWK","\u002Fjwk","2.JWK\u002F0.index",[111,113,117,121,125,129,133,137],{"title":107,"path":108,"stem":109,"icon":112},"i-carbon-two-factor-authentication",{"title":114,"path":115,"stem":116},"Generating keys","\u002Fjwk\u002Fgenerating","2.JWK\u002F1.generating",{"title":118,"path":119,"stem":120},"Importing and exporting","\u002Fjwk\u002Fimport-export","2.JWK\u002F2.import-export",{"title":122,"path":123,"stem":124},"PEM conversion","\u002Fjwk\u002Fpem","2.JWK\u002F3.pem",{"title":126,"path":127,"stem":128},"Key wrapping","\u002Fjwk\u002Fwrapping","2.JWK\u002F4.wrapping",{"title":130,"path":131,"stem":132},"Password derivation","\u002Fjwk\u002Fpassword-derivation","2.JWK\u002F5.password-derivation",{"title":134,"path":135,"stem":136},"JWK Sets","\u002Fjwk\u002Fjwk-sets","2.JWK\u002F6.jwk-sets",{"title":138,"path":139,"stem":140},"JWK cache","\u002Fjwk\u002Fcache","2.JWK\u002F7.cache",{"title":142,"path":143,"stem":144,"children":145,"icon":147},"Utilities","\u002Futilities","3.Utilities\u002F0.index",[146],{"title":142,"path":143,"stem":144,"icon":147},"i-carbon-tool-box",{"title":149,"path":150,"stem":151,"children":152,"icon":154},"Adapters","\u002Fadapters","99.Adapters\u002F0.index",[153,155,159,163],{"title":149,"path":150,"stem":151,"icon":154},"i-carbon-plug",{"title":156,"path":157,"stem":158},"H3 sessions","\u002Fadapters\u002Fh3-sessions","99.Adapters\u002F1.h3-sessions",{"title":160,"path":161,"stem":162},"Lifecycle hooks","\u002Fadapters\u002Fhooks","99.Adapters\u002F2.hooks",{"title":164,"path":165,"stem":166},"Lower-level functions","\u002Fadapters\u002Flower-level","99.Adapters\u002F3.lower-level",{"id":168,"title":156,"body":169,"description":198,"extension":2011,"meta":2012,"navigation":2013,"path":157,"seo":2014,"stem":158,"__hash__":2015},"content\u002F99.Adapters\u002F1.h3-sessions.md",{"type":170,"value":171,"toc":1986},"minimark",[172,189,192,231,236,241,438,442,567,571,578,855,862,1112,1116,1119,1405,1409,1427,1434,1528,1535,1557,1574,1578,1581,1598,1604,1695,1702,1706,1723,1727,1730,1772,1775,1793,1799,1811,1815,1955,1961,1965,1982],[173,174,175,176,183,184,188],"p",{},"Cookie-based JWT session management for ",[177,178,182],"a",{"href":179,"rel":180},"https:\u002F\u002Fh3.dev",[181],"nofollow","H3"," applications. Sessions are stored as encrypted (JWE) or signed (JWS) tokens in chunked cookies, or read from an ",[185,186,187],"code",{},"Authorization"," header.",[173,190,191],{},"Import paths (pick the one that matches your H3 version):",[193,194,199],"pre",{"className":195,"code":196,"language":197,"meta":198,"style":198},"language-ts shiki shiki-themes github-light github-dark github-dark","import { useJWESession, useJWSSession } from \"unjwt\u002Fadapters\u002Fh3v2\";\n\u002F\u002F or \"unjwt\u002Fadapters\u002Fh3v1\" for H3 v1 \u002F Nuxt v4 \u002F Nitro v2\n","ts","",[185,200,201,224],{"__ignoreMap":198},[202,203,206,210,214,217,221],"span",{"class":204,"line":205},"line",1,[202,207,209],{"class":208},"so5gQ","import",[202,211,213],{"class":212},"slsVL"," { useJWESession, useJWSSession } ",[202,215,216],{"class":208},"from",[202,218,220],{"class":219},"sfrk1"," \"unjwt\u002Fadapters\u002Fh3v2\"",[202,222,223],{"class":212},";\n",[202,225,227],{"class":204,"line":226},2,[202,228,230],{"class":229},"sCsY4","\u002F\u002F or \"unjwt\u002Fadapters\u002Fh3v1\" for H3 v1 \u002F Nuxt v4 \u002F Nitro v2\n",[232,233,235],"h2",{"id":234},"basic-usage","Basic usage",[237,238,240],"h3",{"id":239},"encrypted-session-jwe","Encrypted session (JWE)",[193,242,245],{"className":195,"code":243,"filename":244,"language":197,"meta":198,"style":198},"import { useJWESession } from \"unjwt\u002Fadapters\u002Fh3v2\";\n\napp.get(\"\u002F\", async (event) => {\n  const session = await useJWESession(event, {\n    key: process.env.SESSION_SECRET!, \u002F\u002F password, symmetric JWK, or asymmetric keypair\n    maxAge: \"7D\",\n  });\n\n  if (!session.id) {\n    \u002F\u002F No active session yet — create one\n    await session.update({ userId: \"123\", email: \"user@example.com\" });\n  }\n\n  return { user: session.data };\n});\n","basic-jwe.ts",[185,246,247,260,266,304,326,343,355,361,366,379,385,412,418,423,432],{"__ignoreMap":198},[202,248,249,251,254,256,258],{"class":204,"line":205},[202,250,209],{"class":208},[202,252,253],{"class":212}," { useJWESession } ",[202,255,216],{"class":208},[202,257,220],{"class":219},[202,259,223],{"class":212},[202,261,262],{"class":204,"line":226},[202,263,265],{"emptyLinePlaceholder":264},true,"\n",[202,267,269,272,276,279,282,285,288,291,295,298,301],{"class":204,"line":268},3,[202,270,271],{"class":212},"app.",[202,273,275],{"class":274},"shcOC","get",[202,277,278],{"class":212},"(",[202,280,281],{"class":219},"\"\u002F\"",[202,283,284],{"class":212},", ",[202,286,287],{"class":208},"async",[202,289,290],{"class":212}," (",[202,292,294],{"class":293},"sQHwn","event",[202,296,297],{"class":212},") ",[202,299,300],{"class":208},"=>",[202,302,303],{"class":212}," {\n",[202,305,307,310,314,317,320,323],{"class":204,"line":306},4,[202,308,309],{"class":208},"  const",[202,311,313],{"class":312},"suiK_"," session",[202,315,316],{"class":208}," =",[202,318,319],{"class":208}," await",[202,321,322],{"class":274}," useJWESession",[202,324,325],{"class":212},"(event, {\n",[202,327,329,332,335,338,340],{"class":204,"line":328},5,[202,330,331],{"class":212},"    key: process.env.",[202,333,334],{"class":312},"SESSION_SECRET",[202,336,337],{"class":208},"!",[202,339,284],{"class":212},[202,341,342],{"class":229},"\u002F\u002F password, symmetric JWK, or asymmetric keypair\n",[202,344,346,349,352],{"class":204,"line":345},6,[202,347,348],{"class":212},"    maxAge: ",[202,350,351],{"class":219},"\"7D\"",[202,353,354],{"class":212},",\n",[202,356,358],{"class":204,"line":357},7,[202,359,360],{"class":212},"  });\n",[202,362,364],{"class":204,"line":363},8,[202,365,265],{"emptyLinePlaceholder":264},[202,367,369,372,374,376],{"class":204,"line":368},9,[202,370,371],{"class":208},"  if",[202,373,290],{"class":212},[202,375,337],{"class":208},[202,377,378],{"class":212},"session.id) {\n",[202,380,382],{"class":204,"line":381},10,[202,383,384],{"class":229},"    \u002F\u002F No active session yet — create one\n",[202,386,388,391,394,397,400,403,406,409],{"class":204,"line":387},11,[202,389,390],{"class":208},"    await",[202,392,393],{"class":212}," session.",[202,395,396],{"class":274},"update",[202,398,399],{"class":212},"({ userId: ",[202,401,402],{"class":219},"\"123\"",[202,404,405],{"class":212},", email: ",[202,407,408],{"class":219},"\"user@example.com\"",[202,410,411],{"class":212}," });\n",[202,413,415],{"class":204,"line":414},12,[202,416,417],{"class":212},"  }\n",[202,419,421],{"class":204,"line":420},13,[202,422,265],{"emptyLinePlaceholder":264},[202,424,426,429],{"class":204,"line":425},14,[202,427,428],{"class":208},"  return",[202,430,431],{"class":212}," { user: session.data };\n",[202,433,435],{"class":204,"line":434},15,[202,436,437],{"class":212},"});\n",[237,439,441],{"id":440},"signed-session-jws","Signed session (JWS)",[193,443,446],{"className":195,"code":444,"filename":445,"language":197,"meta":198,"style":198},"import { useJWSSession, generateJWK } from \"unjwt\u002Fadapters\u002Fh3v2\";\n\nconst keys = await generateJWK(\"RS256\"); \u002F\u002F persist these!\n\napp.get(\"\u002F\", async (event) => {\n  const session = await useJWSSession(event, {\n    key: keys,\n    maxAge: \"1h\",\n  });\n\n  return { data: session.data };\n});\n","basic-jws.ts",[185,447,448,461,465,491,495,519,534,539,548,552,556,563],{"__ignoreMap":198},[202,449,450,452,455,457,459],{"class":204,"line":205},[202,451,209],{"class":208},[202,453,454],{"class":212}," { useJWSSession, generateJWK } ",[202,456,216],{"class":208},[202,458,220],{"class":219},[202,460,223],{"class":212},[202,462,463],{"class":204,"line":226},[202,464,265],{"emptyLinePlaceholder":264},[202,466,467,470,473,475,477,480,482,485,488],{"class":204,"line":268},[202,468,469],{"class":208},"const",[202,471,472],{"class":312}," keys",[202,474,316],{"class":208},[202,476,319],{"class":208},[202,478,479],{"class":274}," generateJWK",[202,481,278],{"class":212},[202,483,484],{"class":219},"\"RS256\"",[202,486,487],{"class":212},"); ",[202,489,490],{"class":229},"\u002F\u002F persist these!\n",[202,492,493],{"class":204,"line":306},[202,494,265],{"emptyLinePlaceholder":264},[202,496,497,499,501,503,505,507,509,511,513,515,517],{"class":204,"line":328},[202,498,271],{"class":212},[202,500,275],{"class":274},[202,502,278],{"class":212},[202,504,281],{"class":219},[202,506,284],{"class":212},[202,508,287],{"class":208},[202,510,290],{"class":212},[202,512,294],{"class":293},[202,514,297],{"class":212},[202,516,300],{"class":208},[202,518,303],{"class":212},[202,520,521,523,525,527,529,532],{"class":204,"line":345},[202,522,309],{"class":208},[202,524,313],{"class":312},[202,526,316],{"class":208},[202,528,319],{"class":208},[202,530,531],{"class":274}," useJWSSession",[202,533,325],{"class":212},[202,535,536],{"class":204,"line":357},[202,537,538],{"class":212},"    key: keys,\n",[202,540,541,543,546],{"class":204,"line":363},[202,542,348],{"class":212},[202,544,545],{"class":219},"\"1h\"",[202,547,354],{"class":212},[202,549,550],{"class":204,"line":368},[202,551,360],{"class":212},[202,553,554],{"class":204,"line":381},[202,555,265],{"emptyLinePlaceholder":264},[202,557,558,560],{"class":204,"line":387},[202,559,428],{"class":208},[202,561,562],{"class":212}," { data: session.data };\n",[202,564,565],{"class":204,"line":414},[202,566,437],{"class":212},[232,568,570],{"id":569},"configuration","Configuration",[237,572,574,575],{"id":573},"jwe-sessionconfigjwe","JWE — ",[185,576,577],{},"SessionConfigJWE",[193,579,581],{"className":195,"code":580,"language":197,"meta":198,"style":198},"interface SessionConfigJWE\u003CT, MaxAge, TEvent> {\n  key:\n    | string \u002F\u002F password for PBES2\n    | JWEEncryptJWK \u002F\u002F symmetric or public asymmetric JWK (alg in the JWE family)\n    | { privateKey: JWEAsymmetricPrivateJWK; publicKey?: JWEAsymmetricPublicJWK }; \u002F\u002F asymmetric pair\n\n  maxAge?: MaxAge; \u002F\u002F ExpiresIn duration\n  name?: string; \u002F\u002F cookie name (default: \"h3-jwe\")\n  cookie?: false | (CookieSerializeOptions & { chunkMaxLength?: number });\n  sessionHeader?: false | string; \u002F\u002F e.g. \"Authorization\"\n  generateId?: () => string; \u002F\u002F default: crypto.randomUUID()\n\n  jwe?: {\n    encryptOptions?: Omit\u003CJWEEncryptOptions, \"expiresIn\">;\n    decryptOptions?: JWTClaimValidationOptions;\n  };\n\n  hooks?: SessionHooksJWE\u003CT, MaxAge, TEvent>;\n}\n",[185,582,583,610,618,629,639,661,665,681,695,728,746,765,769,778,801,813,819,824,849],{"__ignoreMap":198},[202,584,585,588,591,594,597,599,602,604,607],{"class":204,"line":205},[202,586,587],{"class":208},"interface",[202,589,590],{"class":274}," SessionConfigJWE",[202,592,593],{"class":212},"\u003C",[202,595,596],{"class":274},"T",[202,598,284],{"class":212},[202,600,601],{"class":274},"MaxAge",[202,603,284],{"class":212},[202,605,606],{"class":274},"TEvent",[202,608,609],{"class":212},"> {\n",[202,611,612,615],{"class":204,"line":226},[202,613,614],{"class":293},"  key",[202,616,617],{"class":208},":\n",[202,619,620,623,626],{"class":204,"line":268},[202,621,622],{"class":208},"    |",[202,624,625],{"class":312}," string",[202,627,628],{"class":229}," \u002F\u002F password for PBES2\n",[202,630,631,633,636],{"class":204,"line":306},[202,632,622],{"class":208},[202,634,635],{"class":212}," JWEEncryptJWK ",[202,637,638],{"class":229},"\u002F\u002F symmetric or public asymmetric JWK (alg in the JWE family)\n",[202,640,641,643,646,649,652,655,658],{"class":204,"line":328},[202,642,622],{"class":208},[202,644,645],{"class":212}," { ",[202,647,648],{"class":274},"privateKey",[202,650,651],{"class":212},": JWEAsymmetricPrivateJWK; publicKey",[202,653,654],{"class":208},"?:",[202,656,657],{"class":212}," JWEAsymmetricPublicJWK }; ",[202,659,660],{"class":229},"\u002F\u002F asymmetric pair\n",[202,662,663],{"class":204,"line":345},[202,664,265],{"emptyLinePlaceholder":264},[202,666,667,670,672,675,678],{"class":204,"line":357},[202,668,669],{"class":293},"  maxAge",[202,671,654],{"class":208},[202,673,674],{"class":274}," MaxAge",[202,676,677],{"class":212},"; ",[202,679,680],{"class":229},"\u002F\u002F ExpiresIn duration\n",[202,682,683,686,688,690,692],{"class":204,"line":363},[202,684,685],{"class":293},"  name",[202,687,654],{"class":208},[202,689,625],{"class":312},[202,691,677],{"class":212},[202,693,694],{"class":229},"\u002F\u002F cookie name (default: \"h3-jwe\")\n",[202,696,697,700,702,705,708,710,713,716,718,721,723,726],{"class":204,"line":368},[202,698,699],{"class":293},"  cookie",[202,701,654],{"class":208},[202,703,704],{"class":312}," false",[202,706,707],{"class":208}," |",[202,709,290],{"class":212},[202,711,712],{"class":274},"CookieSerializeOptions",[202,714,715],{"class":208}," &",[202,717,645],{"class":212},[202,719,720],{"class":293},"chunkMaxLength",[202,722,654],{"class":208},[202,724,725],{"class":312}," number",[202,727,411],{"class":212},[202,729,730,733,735,737,739,741,743],{"class":204,"line":381},[202,731,732],{"class":293},"  sessionHeader",[202,734,654],{"class":208},[202,736,704],{"class":312},[202,738,707],{"class":208},[202,740,625],{"class":312},[202,742,677],{"class":212},[202,744,745],{"class":229},"\u002F\u002F e.g. \"Authorization\"\n",[202,747,748,751,753,756,758,760,762],{"class":204,"line":387},[202,749,750],{"class":274},"  generateId",[202,752,654],{"class":208},[202,754,755],{"class":212}," () ",[202,757,300],{"class":208},[202,759,625],{"class":312},[202,761,677],{"class":212},[202,763,764],{"class":229},"\u002F\u002F default: crypto.randomUUID()\n",[202,766,767],{"class":204,"line":414},[202,768,265],{"emptyLinePlaceholder":264},[202,770,771,774,776],{"class":204,"line":420},[202,772,773],{"class":293},"  jwe",[202,775,654],{"class":208},[202,777,303],{"class":212},[202,779,780,783,785,788,790,793,795,798],{"class":204,"line":425},[202,781,782],{"class":293},"    encryptOptions",[202,784,654],{"class":208},[202,786,787],{"class":274}," Omit",[202,789,593],{"class":212},[202,791,792],{"class":274},"JWEEncryptOptions",[202,794,284],{"class":212},[202,796,797],{"class":219},"\"expiresIn\"",[202,799,800],{"class":212},">;\n",[202,802,803,806,808,811],{"class":204,"line":434},[202,804,805],{"class":293},"    decryptOptions",[202,807,654],{"class":208},[202,809,810],{"class":274}," JWTClaimValidationOptions",[202,812,223],{"class":212},[202,814,816],{"class":204,"line":815},16,[202,817,818],{"class":212},"  };\n",[202,820,822],{"class":204,"line":821},17,[202,823,265],{"emptyLinePlaceholder":264},[202,825,827,830,832,835,837,839,841,843,845,847],{"class":204,"line":826},18,[202,828,829],{"class":293},"  hooks",[202,831,654],{"class":208},[202,833,834],{"class":274}," SessionHooksJWE",[202,836,593],{"class":212},[202,838,596],{"class":274},[202,840,284],{"class":212},[202,842,601],{"class":274},[202,844,284],{"class":212},[202,846,606],{"class":274},[202,848,800],{"class":212},[202,850,852],{"class":204,"line":851},19,[202,853,854],{"class":212},"}\n",[237,856,858,859],{"id":857},"jws-sessionconfigjws","JWS — ",[185,860,861],{},"SessionConfigJWS",[193,863,865],{"className":195,"code":864,"language":197,"meta":198,"style":198},"interface SessionConfigJWS\u003CT, MaxAge, TEvent> {\n  key:\n    | JWK_oct\u003CJWK_HMAC> \u002F\u002F symmetric (HMAC) JWK\n    | {\n        privateKey: JWSAsymmetricPrivateJWK;\n        publicKey: JWSAsymmetricPublicJWK | JWSAsymmetricPublicJWK[] | JWKSet;\n      };\n\n  maxAge?: MaxAge;\n  name?: string; \u002F\u002F default: \"h3-jws\"\n  cookie?: false | (CookieSerializeOptions & { chunkMaxLength?: number });\n  sessionHeader?: false | string;\n  generateId?: () => string;\n\n  jws?: {\n    signOptions?: Omit\u003CJWSSignOptions, \"expiresIn\">;\n    verifyOptions?: JWTClaimValidationOptions;\n  };\n\n  hooks?: SessionHooksJWS\u003CT, MaxAge, TEvent>;\n}\n",[185,866,867,888,894,912,918,926,945,950,954,964,977,1003,1017,1031,1035,1044,1064,1075,1079,1083,1107],{"__ignoreMap":198},[202,868,869,871,874,876,878,880,882,884,886],{"class":204,"line":205},[202,870,587],{"class":208},[202,872,873],{"class":274}," SessionConfigJWS",[202,875,593],{"class":212},[202,877,596],{"class":274},[202,879,284],{"class":212},[202,881,601],{"class":274},[202,883,284],{"class":212},[202,885,606],{"class":274},[202,887,609],{"class":212},[202,889,890,892],{"class":204,"line":226},[202,891,614],{"class":293},[202,893,617],{"class":208},[202,895,896,898,901,903,906,909],{"class":204,"line":268},[202,897,622],{"class":208},[202,899,900],{"class":274}," JWK_oct",[202,902,593],{"class":212},[202,904,905],{"class":274},"JWK_HMAC",[202,907,908],{"class":212},"> ",[202,910,911],{"class":229},"\u002F\u002F symmetric (HMAC) JWK\n",[202,913,914,916],{"class":204,"line":306},[202,915,622],{"class":208},[202,917,303],{"class":212},[202,919,920,923],{"class":204,"line":328},[202,921,922],{"class":274},"        privateKey",[202,924,925],{"class":212},": JWSAsymmetricPrivateJWK;\n",[202,927,928,931,934,937,940,942],{"class":204,"line":345},[202,929,930],{"class":274},"        publicKey",[202,932,933],{"class":212},": JWSAsymmetricPublicJWK ",[202,935,936],{"class":208},"|",[202,938,939],{"class":212}," JWSAsymmetricPublicJWK[] ",[202,941,936],{"class":208},[202,943,944],{"class":212}," JWKSet;\n",[202,946,947],{"class":204,"line":357},[202,948,949],{"class":212},"      };\n",[202,951,952],{"class":204,"line":363},[202,953,265],{"emptyLinePlaceholder":264},[202,955,956,958,960,962],{"class":204,"line":368},[202,957,669],{"class":293},[202,959,654],{"class":208},[202,961,674],{"class":274},[202,963,223],{"class":212},[202,965,966,968,970,972,974],{"class":204,"line":381},[202,967,685],{"class":293},[202,969,654],{"class":208},[202,971,625],{"class":312},[202,973,677],{"class":212},[202,975,976],{"class":229},"\u002F\u002F default: \"h3-jws\"\n",[202,978,979,981,983,985,987,989,991,993,995,997,999,1001],{"class":204,"line":387},[202,980,699],{"class":293},[202,982,654],{"class":208},[202,984,704],{"class":312},[202,986,707],{"class":208},[202,988,290],{"class":212},[202,990,712],{"class":274},[202,992,715],{"class":208},[202,994,645],{"class":212},[202,996,720],{"class":293},[202,998,654],{"class":208},[202,1000,725],{"class":312},[202,1002,411],{"class":212},[202,1004,1005,1007,1009,1011,1013,1015],{"class":204,"line":414},[202,1006,732],{"class":293},[202,1008,654],{"class":208},[202,1010,704],{"class":312},[202,1012,707],{"class":208},[202,1014,625],{"class":312},[202,1016,223],{"class":212},[202,1018,1019,1021,1023,1025,1027,1029],{"class":204,"line":420},[202,1020,750],{"class":274},[202,1022,654],{"class":208},[202,1024,755],{"class":212},[202,1026,300],{"class":208},[202,1028,625],{"class":312},[202,1030,223],{"class":212},[202,1032,1033],{"class":204,"line":425},[202,1034,265],{"emptyLinePlaceholder":264},[202,1036,1037,1040,1042],{"class":204,"line":434},[202,1038,1039],{"class":293},"  jws",[202,1041,654],{"class":208},[202,1043,303],{"class":212},[202,1045,1046,1049,1051,1053,1055,1058,1060,1062],{"class":204,"line":815},[202,1047,1048],{"class":293},"    signOptions",[202,1050,654],{"class":208},[202,1052,787],{"class":274},[202,1054,593],{"class":212},[202,1056,1057],{"class":274},"JWSSignOptions",[202,1059,284],{"class":212},[202,1061,797],{"class":219},[202,1063,800],{"class":212},[202,1065,1066,1069,1071,1073],{"class":204,"line":821},[202,1067,1068],{"class":293},"    verifyOptions",[202,1070,654],{"class":208},[202,1072,810],{"class":274},[202,1074,223],{"class":212},[202,1076,1077],{"class":204,"line":826},[202,1078,818],{"class":212},[202,1080,1081],{"class":204,"line":851},[202,1082,265],{"emptyLinePlaceholder":264},[202,1084,1086,1088,1090,1093,1095,1097,1099,1101,1103,1105],{"class":204,"line":1085},20,[202,1087,829],{"class":293},[202,1089,654],{"class":208},[202,1091,1092],{"class":274}," SessionHooksJWS",[202,1094,593],{"class":212},[202,1096,596],{"class":274},[202,1098,284],{"class":212},[202,1100,601],{"class":274},[202,1102,284],{"class":212},[202,1104,606],{"class":274},[202,1106,800],{"class":212},[202,1108,1110],{"class":204,"line":1109},21,[202,1111,854],{"class":212},[232,1113,1115],{"id":1114},"the-session-manager","The session manager",[173,1117,1118],{},"Both adapters return the same shape:",[193,1120,1122],{"className":195,"code":1121,"language":197,"meta":198,"style":198},"interface SessionManager\u003CT, ConfigMaxAge> {\n  readonly id: string | undefined;\n  readonly createdAt: number;\n  readonly expiresAt: ConfigMaxAge extends ExpiresIn ? number : number | undefined;\n  readonly data: SessionData\u003CT>;\n  readonly token: string | undefined;\n\n  update: (update?: SessionUpdate\u003CT>) => Promise\u003CSessionManager\u003CT, ConfigMaxAge>>;\n  clear: () => Promise\u003CSessionManager\u003CT, ConfigMaxAge>>;\n}\n\ntype SessionUpdate\u003CT> =\n  | Partial\u003CSessionData\u003CT>>\n  | ((oldData: SessionData\u003CT>) => Partial\u003CSessionData\u003CT>> | undefined);\n",[185,1123,1124,1142,1162,1175,1209,1227,1244,1248,1292,1319,1323,1327,1343,1363],{"__ignoreMap":198},[202,1125,1126,1128,1131,1133,1135,1137,1140],{"class":204,"line":205},[202,1127,587],{"class":208},[202,1129,1130],{"class":274}," SessionManager",[202,1132,593],{"class":212},[202,1134,596],{"class":274},[202,1136,284],{"class":212},[202,1138,1139],{"class":274},"ConfigMaxAge",[202,1141,609],{"class":212},[202,1143,1144,1147,1150,1153,1155,1157,1160],{"class":204,"line":226},[202,1145,1146],{"class":208},"  readonly",[202,1148,1149],{"class":293}," id",[202,1151,1152],{"class":208},":",[202,1154,625],{"class":312},[202,1156,707],{"class":208},[202,1158,1159],{"class":312}," undefined",[202,1161,223],{"class":212},[202,1163,1164,1166,1169,1171,1173],{"class":204,"line":268},[202,1165,1146],{"class":208},[202,1167,1168],{"class":293}," createdAt",[202,1170,1152],{"class":208},[202,1172,725],{"class":312},[202,1174,223],{"class":212},[202,1176,1177,1179,1182,1184,1187,1190,1193,1196,1198,1201,1203,1205,1207],{"class":204,"line":306},[202,1178,1146],{"class":208},[202,1180,1181],{"class":293}," expiresAt",[202,1183,1152],{"class":208},[202,1185,1186],{"class":274}," ConfigMaxAge",[202,1188,1189],{"class":208}," extends",[202,1191,1192],{"class":274}," ExpiresIn",[202,1194,1195],{"class":208}," ?",[202,1197,725],{"class":312},[202,1199,1200],{"class":208}," :",[202,1202,725],{"class":312},[202,1204,707],{"class":208},[202,1206,1159],{"class":312},[202,1208,223],{"class":212},[202,1210,1211,1213,1216,1218,1221,1223,1225],{"class":204,"line":328},[202,1212,1146],{"class":208},[202,1214,1215],{"class":293}," data",[202,1217,1152],{"class":208},[202,1219,1220],{"class":274}," SessionData",[202,1222,593],{"class":212},[202,1224,596],{"class":274},[202,1226,800],{"class":212},[202,1228,1229,1231,1234,1236,1238,1240,1242],{"class":204,"line":345},[202,1230,1146],{"class":208},[202,1232,1233],{"class":293}," token",[202,1235,1152],{"class":208},[202,1237,625],{"class":312},[202,1239,707],{"class":208},[202,1241,1159],{"class":312},[202,1243,223],{"class":212},[202,1245,1246],{"class":204,"line":357},[202,1247,265],{"emptyLinePlaceholder":264},[202,1249,1250,1253,1255,1257,1259,1261,1264,1266,1268,1271,1273,1276,1278,1281,1283,1285,1287,1289],{"class":204,"line":363},[202,1251,1252],{"class":274},"  update",[202,1254,1152],{"class":208},[202,1256,290],{"class":212},[202,1258,396],{"class":293},[202,1260,654],{"class":208},[202,1262,1263],{"class":274}," SessionUpdate",[202,1265,593],{"class":212},[202,1267,596],{"class":274},[202,1269,1270],{"class":212},">) ",[202,1272,300],{"class":208},[202,1274,1275],{"class":274}," Promise",[202,1277,593],{"class":212},[202,1279,1280],{"class":274},"SessionManager",[202,1282,593],{"class":212},[202,1284,596],{"class":274},[202,1286,284],{"class":212},[202,1288,1139],{"class":274},[202,1290,1291],{"class":212},">>;\n",[202,1293,1294,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317],{"class":204,"line":368},[202,1295,1296],{"class":274},"  clear",[202,1298,1152],{"class":208},[202,1300,755],{"class":212},[202,1302,300],{"class":208},[202,1304,1275],{"class":274},[202,1306,593],{"class":212},[202,1308,1280],{"class":274},[202,1310,593],{"class":212},[202,1312,596],{"class":274},[202,1314,284],{"class":212},[202,1316,1139],{"class":274},[202,1318,1291],{"class":212},[202,1320,1321],{"class":204,"line":381},[202,1322,854],{"class":212},[202,1324,1325],{"class":204,"line":387},[202,1326,265],{"emptyLinePlaceholder":264},[202,1328,1329,1332,1334,1336,1338,1340],{"class":204,"line":414},[202,1330,1331],{"class":208},"type",[202,1333,1263],{"class":274},[202,1335,593],{"class":212},[202,1337,596],{"class":274},[202,1339,908],{"class":212},[202,1341,1342],{"class":208},"=\n",[202,1344,1345,1348,1351,1353,1356,1358,1360],{"class":204,"line":420},[202,1346,1347],{"class":208},"  |",[202,1349,1350],{"class":274}," Partial",[202,1352,593],{"class":212},[202,1354,1355],{"class":274},"SessionData",[202,1357,593],{"class":212},[202,1359,596],{"class":274},[202,1361,1362],{"class":212},">>\n",[202,1364,1365,1367,1370,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1398,1400,1402],{"class":204,"line":425},[202,1366,1347],{"class":208},[202,1368,1369],{"class":212}," ((",[202,1371,1372],{"class":293},"oldData",[202,1374,1152],{"class":208},[202,1376,1220],{"class":274},[202,1378,593],{"class":212},[202,1380,596],{"class":274},[202,1382,1270],{"class":212},[202,1384,300],{"class":208},[202,1386,1350],{"class":274},[202,1388,593],{"class":212},[202,1390,1355],{"class":274},[202,1392,593],{"class":212},[202,1394,596],{"class":274},[202,1396,1397],{"class":212},">> ",[202,1399,936],{"class":208},[202,1401,1159],{"class":312},[202,1403,1404],{"class":212},");\n",[237,1406,1408],{"id":1407},"lazy-by-design","Lazy by design",[173,1410,1411,1414,1415,1418,1419,1422,1423,1426],{},[185,1412,1413],{},"session.id"," is ",[185,1416,1417],{},"undefined"," until ",[185,1420,1421],{},"session.update()"," is first called. This is intentional — it aligns with OAuth and spec-compliant flows where a session should only exist once a valid operation has created it. Calling ",[185,1424,1425],{},"useJWESession(event, config)"," alone doesn't set a cookie.",[237,1428,1430,1433],{"id":1429},"update-forms",[185,1431,1432],{},"update()"," forms",[193,1435,1438],{"className":195,"code":1436,"filename":1437,"language":197,"meta":198,"style":198},"\u002F\u002F Partial merge\nawait session.update({ theme: \"dark\" });\n\n\u002F\u002F Updater function\nawait session.update((oldData) => ({ count: (oldData.count ?? 0) + 1 }));\n\n\u002F\u002F Token rotation (new jti\u002Fiat\u002Fexp) without changing data\nawait session.update();\n","update.ts",[185,1439,1440,1445,1462,1466,1471,1508,1512,1517],{"__ignoreMap":198},[202,1441,1442],{"class":204,"line":205},[202,1443,1444],{"class":229},"\u002F\u002F Partial merge\n",[202,1446,1447,1450,1452,1454,1457,1460],{"class":204,"line":226},[202,1448,1449],{"class":208},"await",[202,1451,393],{"class":212},[202,1453,396],{"class":274},[202,1455,1456],{"class":212},"({ theme: ",[202,1458,1459],{"class":219},"\"dark\"",[202,1461,411],{"class":212},[202,1463,1464],{"class":204,"line":268},[202,1465,265],{"emptyLinePlaceholder":264},[202,1467,1468],{"class":204,"line":306},[202,1469,1470],{"class":229},"\u002F\u002F Updater function\n",[202,1472,1473,1475,1477,1479,1482,1484,1486,1488,1491,1494,1497,1499,1502,1505],{"class":204,"line":328},[202,1474,1449],{"class":208},[202,1476,393],{"class":212},[202,1478,396],{"class":274},[202,1480,1481],{"class":212},"((",[202,1483,1372],{"class":293},[202,1485,297],{"class":212},[202,1487,300],{"class":208},[202,1489,1490],{"class":212}," ({ count: (oldData.count ",[202,1492,1493],{"class":208},"??",[202,1495,1496],{"class":312}," 0",[202,1498,297],{"class":212},[202,1500,1501],{"class":208},"+",[202,1503,1504],{"class":312}," 1",[202,1506,1507],{"class":212}," }));\n",[202,1509,1510],{"class":204,"line":345},[202,1511,265],{"emptyLinePlaceholder":264},[202,1513,1514],{"class":204,"line":357},[202,1515,1516],{"class":229},"\u002F\u002F Token rotation (new jti\u002Fiat\u002Fexp) without changing data\n",[202,1518,1519,1521,1523,1525],{"class":204,"line":363},[202,1520,1449],{"class":208},[202,1522,393],{"class":212},[202,1524,396],{"class":274},[202,1526,1527],{"class":212},"();\n",[237,1529,1531,1534],{"id":1530},"clear-explicit-termination",[185,1532,1533],{},"clear()"," — explicit termination",[193,1536,1539],{"className":195,"code":1537,"filename":1538,"language":197,"meta":198,"style":198},"await session.clear();\n\u002F\u002F Session removed from event context; cookie expired in response.\n","clear.ts",[185,1540,1541,1552],{"__ignoreMap":198},[202,1542,1543,1545,1547,1550],{"class":204,"line":205},[202,1544,1449],{"class":208},[202,1546,393],{"class":212},[202,1548,1549],{"class":274},"clear",[202,1551,1527],{"class":212},[202,1553,1554],{"class":204,"line":226},[202,1555,1556],{"class":229},"\u002F\u002F Session removed from event context; cookie expired in response.\n",[173,1558,1559,1561,1562,1565,1566,1569,1570,1573],{},[185,1560,1533],{}," is semantically different from \"token expired\" — they trigger different hooks (",[185,1563,1564],{},"onClear"," vs. ",[185,1567,1568],{},"onExpire","). See ",[177,1571,1572],{"href":161},"Hooks",".",[232,1575,1577],{"id":1576},"cookies","Cookies",[173,1579,1580],{},"By default:",[1582,1583,1584,1591],"ul",{},[1585,1586,1587,1588,1573],"li",{},"JWE: ",[185,1589,1590],{},"path: \"\u002F\", secure: true, httpOnly: true",[1585,1592,1593,1594,1597],{},"JWS: ",[185,1595,1596],{},"path: \"\u002F\", secure: true, httpOnly: false"," (the payload is meant to be readable).",[173,1599,1600,1601,1152],{},"Customize via ",[185,1602,1603],{},"cookie",[193,1605,1608],{"className":195,"code":1606,"filename":1607,"language":197,"meta":198,"style":198},"const session = await useJWSSession(event, {\n  key: keys,\n  maxAge: \"1h\",\n  cookie: {\n    sameSite: \"strict\",\n    domain: \".example.com\",\n    path: \"\u002Fapp\",\n    chunkMaxLength: 3000, \u002F\u002F split into chunks if the token exceeds this many bytes\n  },\n});\n","cookie-opts.ts",[185,1609,1610,1624,1629,1638,1643,1653,1663,1673,1686,1691],{"__ignoreMap":198},[202,1611,1612,1614,1616,1618,1620,1622],{"class":204,"line":205},[202,1613,469],{"class":208},[202,1615,313],{"class":312},[202,1617,316],{"class":208},[202,1619,319],{"class":208},[202,1621,531],{"class":274},[202,1623,325],{"class":212},[202,1625,1626],{"class":204,"line":226},[202,1627,1628],{"class":212},"  key: keys,\n",[202,1630,1631,1634,1636],{"class":204,"line":268},[202,1632,1633],{"class":212},"  maxAge: ",[202,1635,545],{"class":219},[202,1637,354],{"class":212},[202,1639,1640],{"class":204,"line":306},[202,1641,1642],{"class":212},"  cookie: {\n",[202,1644,1645,1648,1651],{"class":204,"line":328},[202,1646,1647],{"class":212},"    sameSite: ",[202,1649,1650],{"class":219},"\"strict\"",[202,1652,354],{"class":212},[202,1654,1655,1658,1661],{"class":204,"line":345},[202,1656,1657],{"class":212},"    domain: ",[202,1659,1660],{"class":219},"\".example.com\"",[202,1662,354],{"class":212},[202,1664,1665,1668,1671],{"class":204,"line":357},[202,1666,1667],{"class":212},"    path: ",[202,1669,1670],{"class":219},"\"\u002Fapp\"",[202,1672,354],{"class":212},[202,1674,1675,1678,1681,1683],{"class":204,"line":363},[202,1676,1677],{"class":212},"    chunkMaxLength: ",[202,1679,1680],{"class":312},"3000",[202,1682,284],{"class":212},[202,1684,1685],{"class":229},"\u002F\u002F split into chunks if the token exceeds this many bytes\n",[202,1687,1688],{"class":204,"line":368},[202,1689,1690],{"class":212},"  },\n",[202,1692,1693],{"class":204,"line":381},[202,1694,437],{"class":212},[173,1696,1697,1698,1701],{},"Pass ",[185,1699,1700],{},"cookie: false"," to disable cookie writing entirely (header-only mode — see below).",[237,1703,1705],{"id":1704},"chunking","Chunking",[173,1707,1708,1709,1712,1713,284,1716,1719,1720,1573],{},"JWE tokens can easily exceed the 4KB cookie limit when the session payload is large. unjwt uses H3's ",[185,1710,1711],{},"setChunkedCookie"," to split tokens across ",[185,1714,1715],{},"name.0",[185,1717,1718],{},"name.1",", ..., transparently reassembled on read. Default chunk size is 4000 bytes. Override via ",[185,1721,1722],{},"cookie.chunkMaxLength",[232,1724,1726],{"id":1725},"header-based-tokens","Header-based tokens",[173,1728,1729],{},"For API clients (mobile, SPA, service-to-service) that can't use cookies, read the token from a header:",[193,1731,1734],{"className":195,"code":1732,"filename":1733,"language":197,"meta":198,"style":198},"const session = await useJWESession(event, {\n  key: secret,\n  sessionHeader: \"Authorization\", \u002F\u002F expects \"Bearer \u003Ctoken>\"\n});\n","header.ts",[185,1735,1736,1750,1755,1768],{"__ignoreMap":198},[202,1737,1738,1740,1742,1744,1746,1748],{"class":204,"line":205},[202,1739,469],{"class":208},[202,1741,313],{"class":312},[202,1743,316],{"class":208},[202,1745,319],{"class":208},[202,1747,322],{"class":274},[202,1749,325],{"class":212},[202,1751,1752],{"class":204,"line":226},[202,1753,1754],{"class":212},"  key: secret,\n",[202,1756,1757,1760,1763,1765],{"class":204,"line":268},[202,1758,1759],{"class":212},"  sessionHeader: ",[202,1761,1762],{"class":219},"\"Authorization\"",[202,1764,284],{"class":212},[202,1766,1767],{"class":229},"\u002F\u002F expects \"Bearer \u003Ctoken>\"\n",[202,1769,1770],{"class":204,"line":306},[202,1771,437],{"class":212},[173,1773,1774],{},"Custom header name:",[193,1776,1778],{"className":195,"code":1777,"language":197,"meta":198,"style":198},"sessionHeader: \"X-Session-Token\",\n",[185,1779,1780],{"__ignoreMap":198},[202,1781,1782,1785,1788,1791],{"class":204,"line":205},[202,1783,1784],{"class":274},"sessionHeader",[202,1786,1787],{"class":212},": ",[202,1789,1790],{"class":219},"\"X-Session-Token\"",[202,1792,354],{"class":212},[173,1794,1697,1795,1798],{},[185,1796,1797],{},"sessionHeader: false"," to disable header reads (cookies only).",[173,1800,1801,1802,1804,1805,1807,1808,1810],{},"When both ",[185,1803,1603],{}," and ",[185,1806,1784],{}," are enabled, the cookie takes precedence. Set ",[185,1809,1700],{}," to force header-only behavior.",[232,1812,1814],{"id":1813},"typing-session-data","Typing session data",[193,1816,1819],{"className":195,"code":1817,"filename":1818,"language":197,"meta":198,"style":198},"interface MyData {\n  userId: string;\n  role: \"admin\" | \"user\";\n  preferences?: { theme: \"dark\" | \"light\" };\n}\n\napp.get(\"\u002F\", async (event) => {\n  const session = await useJWESession\u003CMyData>(event, config);\n  session.data.userId; \u002F\u002F string\n  session.data.role; \u002F\u002F \"admin\" | \"user\"\n});\n","typed.ts",[185,1820,1821,1830,1841,1858,1883,1887,1891,1915,1935,1943,1951],{"__ignoreMap":198},[202,1822,1823,1825,1828],{"class":204,"line":205},[202,1824,587],{"class":208},[202,1826,1827],{"class":274}," MyData",[202,1829,303],{"class":212},[202,1831,1832,1835,1837,1839],{"class":204,"line":226},[202,1833,1834],{"class":293},"  userId",[202,1836,1152],{"class":208},[202,1838,625],{"class":312},[202,1840,223],{"class":212},[202,1842,1843,1846,1848,1851,1853,1856],{"class":204,"line":268},[202,1844,1845],{"class":293},"  role",[202,1847,1152],{"class":208},[202,1849,1850],{"class":219}," \"admin\"",[202,1852,707],{"class":208},[202,1854,1855],{"class":219}," \"user\"",[202,1857,223],{"class":212},[202,1859,1860,1863,1865,1867,1870,1872,1875,1877,1880],{"class":204,"line":306},[202,1861,1862],{"class":293},"  preferences",[202,1864,654],{"class":208},[202,1866,645],{"class":212},[202,1868,1869],{"class":293},"theme",[202,1871,1152],{"class":208},[202,1873,1874],{"class":219}," \"dark\"",[202,1876,707],{"class":208},[202,1878,1879],{"class":219}," \"light\"",[202,1881,1882],{"class":212}," };\n",[202,1884,1885],{"class":204,"line":328},[202,1886,854],{"class":212},[202,1888,1889],{"class":204,"line":345},[202,1890,265],{"emptyLinePlaceholder":264},[202,1892,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913],{"class":204,"line":357},[202,1894,271],{"class":212},[202,1896,275],{"class":274},[202,1898,278],{"class":212},[202,1900,281],{"class":219},[202,1902,284],{"class":212},[202,1904,287],{"class":208},[202,1906,290],{"class":212},[202,1908,294],{"class":293},[202,1910,297],{"class":212},[202,1912,300],{"class":208},[202,1914,303],{"class":212},[202,1916,1917,1919,1921,1923,1925,1927,1929,1932],{"class":204,"line":363},[202,1918,309],{"class":208},[202,1920,313],{"class":312},[202,1922,316],{"class":208},[202,1924,319],{"class":208},[202,1926,322],{"class":274},[202,1928,593],{"class":212},[202,1930,1931],{"class":274},"MyData",[202,1933,1934],{"class":212},">(event, config);\n",[202,1936,1937,1940],{"class":204,"line":368},[202,1938,1939],{"class":212},"  session.data.userId; ",[202,1941,1942],{"class":229},"\u002F\u002F string\n",[202,1944,1945,1948],{"class":204,"line":381},[202,1946,1947],{"class":212},"  session.data.role; ",[202,1949,1950],{"class":229},"\u002F\u002F \"admin\" | \"user\"\n",[202,1952,1953],{"class":204,"line":387},[202,1954,437],{"class":212},[173,1956,1957,1958,1960],{},"The generic threads through ",[185,1959,1432],{}," and all hook payloads, so type errors catch drift between your setter and getter.",[232,1962,1964],{"id":1963},"see-also","See also",[1582,1966,1967,1972,1977],{},[1585,1968,1969],{},[177,1970,1971],{"href":161},"Lifecycle hooks →",[1585,1973,1974],{},[177,1975,1976],{"href":165},"Lower-level functions →",[1585,1978,1979],{},[177,1980,1981],{"href":96},"Example: refresh token pattern →",[1983,1984,1985],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}",{"title":198,"searchDepth":226,"depth":226,"links":1987},[1988,1992,1998,2005,2008,2009,2010],{"id":234,"depth":226,"text":235,"children":1989},[1990,1991],{"id":239,"depth":268,"text":240},{"id":440,"depth":268,"text":441},{"id":569,"depth":226,"text":570,"children":1993},[1994,1996],{"id":573,"depth":268,"text":1995},"JWE — SessionConfigJWE",{"id":857,"depth":268,"text":1997},"JWS — SessionConfigJWS",{"id":1114,"depth":226,"text":1115,"children":1999},[2000,2001,2003],{"id":1407,"depth":268,"text":1408},{"id":1429,"depth":268,"text":2002},"update() forms",{"id":1530,"depth":268,"text":2004},"clear() — explicit termination",{"id":1576,"depth":226,"text":1577,"children":2006},[2007],{"id":1704,"depth":268,"text":1705},{"id":1725,"depth":226,"text":1726},{"id":1813,"depth":226,"text":1814},{"id":1963,"depth":226,"text":1964},"md",{},{},{"title":156,"description":198},"g2W9A87jDJK6-LAWcj38uB_CG1ANvveTLYtlT_Q7zpw",[2017,2018],{"title":149,"path":150,"stem":151,"description":198,"icon":154,"children":-1},{"title":160,"path":161,"stem":162,"description":198,"children":-1},1776888561866]