[{"data":1,"prerenderedAt":2614},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-quick-start":265,"-getting-started-quick-start-surround":2609},[4,35,49,89,117,164,193,235,253,257,261],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"/getting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","/getting-started/introduction","1.getting-started/2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","/getting-started/installation","1.getting-started/3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick Start","/getting-started/quick-start","1.getting-started/4.quick-start","i-lucide-rocket",{"title":26,"path":27,"stem":28,"icon":29},"Configuration","/getting-started/configuration","1.getting-started/5.configuration","i-lucide-sliders-horizontal",{"title":31,"path":32,"stem":33,"icon":34},"First Auth","/getting-started/first-auth","1.getting-started/6.first-auth","i-lucide-key-round",{"title":36,"path":37,"stem":38,"children":39,"page":6},"Migration","/migration","10.migration",[40,45],{"title":41,"path":42,"stem":43,"icon":44},"Migration depuis Firebase Auth","/migration/from-firebase","10.migration/1.from-firebase","i-lucide-arrow-right-left",{"title":46,"path":47,"stem":48,"icon":44},"Migration depuis Supabase Auth","/migration/from-supabase","10.migration/2.from-supabase",{"title":50,"path":51,"stem":52,"children":53,"page":6},"Core Concepts","/core-concepts","2.core-concepts",[54,59,64,69,74,79,84],{"title":55,"path":56,"stem":57,"icon":58},"Architecture","/core-concepts/architecture","2.core-concepts/1.architecture","i-lucide-layers",{"title":60,"path":61,"stem":62,"icon":63},"Providers","/core-concepts/providers","2.core-concepts/2.providers","i-lucide-plug",{"title":65,"path":66,"stem":67,"icon":68},"Sessions","/core-concepts/sessions","2.core-concepts/3.sessions","i-lucide-timer",{"title":70,"path":71,"stem":72,"icon":73},"Storage","/core-concepts/storage","2.core-concepts/4.storage","i-lucide-database",{"title":75,"path":76,"stem":77,"icon":78},"Reactivity","/core-concepts/reactivity","2.core-concepts/5.reactivity","i-lucide-activity",{"title":80,"path":81,"stem":82,"icon":83},"Callbacks","/core-concepts/callbacks","2.core-concepts/6.callbacks","i-lucide-shield-check",{"title":85,"path":86,"stem":87,"icon":88},"Events","/core-concepts/events","2.core-concepts/7.events","i-lucide-radio",{"title":60,"path":90,"stem":91,"children":92,"page":6},"/providers","3.providers",[93,97,101,105,109,113],{"title":94,"path":95,"stem":96},"Credentials Provider","/providers/credentials","3.providers/1.credentials",{"title":98,"path":99,"stem":100},"OAuth2 Provider","/providers/oauth2","3.providers/2.oauth2",{"title":102,"path":103,"stem":104},"Google Provider","/providers/google","3.providers/3.google",{"title":106,"path":107,"stem":108},"GitHub Provider","/providers/github","3.providers/4.github",{"title":110,"path":111,"stem":112},"Apple Provider","/providers/apple","3.providers/5.apple",{"title":114,"path":115,"stem":116},"Proxy OAuth Provider","/providers/proxy-oauth","3.providers/6.proxy-oauth",{"title":118,"path":119,"stem":120,"children":121,"page":6},"Guides","/guides","4.guides",[122,126,131,136,141,146,151,155,159],{"title":123,"path":124,"stem":125},"Email / Password Auth","/guides/email-auth","4.guides/1.email-auth",{"title":127,"path":128,"stem":129,"icon":130},"Custom OAuth2 Flow","/guides/oauth2-flow","4.guides/2.oauth2-flow","i-lucide-workflow",{"title":132,"path":133,"stem":134,"icon":135},"Deep Links & OAuth2 Callbacks","/guides/deep-links","4.guides/3.deep-links","i-lucide-link",{"title":137,"path":138,"stem":139,"icon":140},"Token Refresh","/guides/token-refresh","4.guides/4.token-refresh","i-lucide-refresh-cw",{"title":142,"path":143,"stem":144,"icon":145},"Multi-Account","/guides/multi-account","4.guides/5.multi-account","i-lucide-users",{"title":147,"path":148,"stem":149,"icon":150},"Route Protection","/guides/route-protection","4.guides/6.route-protection","i-lucide-lock",{"title":152,"path":153,"stem":154,"icon":63},"Custom Provider","/guides/custom-provider","4.guides/7.custom-provider",{"title":156,"path":157,"stem":158,"icon":73},"Custom Storage","/guides/custom-storage","4.guides/8.custom-storage",{"title":160,"path":161,"stem":162,"icon":163},"Testing","/guides/testing","4.guides/9.testing","i-lucide-flask-conical",{"title":165,"path":166,"stem":167,"children":168,"page":6},"Flutter","/flutter","5.flutter",[169,173,178,183,188],{"title":170,"path":171,"stem":172},"Flutter Setup","/flutter/setup","5.flutter/1.setup",{"title":174,"path":175,"stem":176,"icon":177},"Secure Storage","/flutter/secure-storage","5.flutter/2.secure-storage","i-lucide-vault",{"title":179,"path":180,"stem":181,"icon":182},"Widgets","/flutter/widgets","5.flutter/3.widgets","i-lucide-layout",{"title":184,"path":185,"stem":186,"icon":187},"Router Guard","/flutter/router-guard","5.flutter/4.router-guard","i-lucide-signpost",{"title":189,"path":190,"stem":191,"icon":192},"App Binding","/flutter/app-binding","5.flutter/5.app-binding","i-lucide-cpu",{"title":194,"path":195,"stem":196,"children":197,"page":6},"API Reference","/api-reference","6.api-reference",[198,202,206,211,216,221,225,230],{"title":199,"path":200,"stem":201},"AuthyraClient","/api-reference/authyra-client","6.api-reference/1.authyra-client",{"title":203,"path":204,"stem":205},"AuthyraInstance","/api-reference/authyra-instance","6.api-reference/2.authyra-instance",{"title":207,"path":208,"stem":209,"icon":210},"AccountManager","/api-reference/account-manager","6.api-reference/3.account-manager","i-lucide-users-round",{"title":212,"path":213,"stem":214,"icon":215},"AuthProvider","/api-reference/auth-provider","6.api-reference/4.auth-provider","i-lucide-plug-zap",{"title":217,"path":218,"stem":219,"icon":220},"AuthStorage","/api-reference/auth-storage","6.api-reference/5.auth-storage","i-lucide-hard-drive",{"title":222,"path":223,"stem":224,"icon":68},"AuthSession","/api-reference/auth-session","6.api-reference/6.auth-session",{"title":226,"path":227,"stem":228,"icon":229},"AuthState","/api-reference/auth-state","6.api-reference/7.auth-state","i-lucide-toggle-right",{"title":231,"path":232,"stem":233,"icon":234},"Exceptions","/api-reference/auth-exceptions","6.api-reference/8.auth-exceptions","i-lucide-triangle-alert",{"title":236,"path":237,"stem":238,"children":239,"page":6},"Examples","/examples","7.examples",[240,244,249],{"title":241,"path":242,"stem":243},"Flutter App Example","/examples/flutter-app","7.examples/1.flutter-app",{"title":245,"path":246,"stem":247,"icon":248},"Dart Backend","/examples/dart-backend","7.examples/2.dart-backend","i-lucide-server",{"title":250,"path":251,"stem":252,"icon":163},"Testing Setup","/examples/testing-setup","7.examples/3.testing-setup",{"title":254,"path":255,"stem":256},"Troubleshooting","/troubleshooting","8.troubleshooting",{"title":258,"path":259,"stem":260},"FAQ","/faq","9.faq",{"title":262,"path":263,"stem":264},"Changelog","/changelog","changelog",{"id":266,"title":21,"body":267,"description":2600,"extension":2601,"links":2602,"meta":2603,"navigation":2604,"path":22,"seo":2605,"stem":23,"__hash__":2608},"docs/1.getting-started/4.quick-start.md",{"type":268,"value":269,"toc":2582},"minimark",[270,274,298,301,305,310,347,366,370,845,864,868,984,988,1192,1199,1269,1273,1303,1305,1309,1313,1333,1346,1350,1678,1682,1768,1772,1930,1934,1953,1955,1959,2540,2542,2546,2578],[271,272,273],"p",{},"Pick your path:",[275,276,277,289],"ul",{},[278,279,280,288],"li",{},[281,282,283],"strong",{},[284,285,287],"a",{"href":286},"#flutter-app","Flutter app"," — email/password + optional OAuth2 (Google, GitHub…)",[278,290,291,297],{},[281,292,293],{},[284,294,296],{"href":295},"#dart-backend","Pure Dart / backend"," — Shelf, Dart Frog, CLI",[299,300],"hr",{},[302,303,287],"h2",{"id":304},"flutter-app",[306,307,309],"h3",{"id":308},"_1-install","1. Install",[311,312,318],"pre",{"className":313,"code":314,"filename":315,"language":316,"meta":317,"style":317},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dependencies:\n  authyra_flutter: ^0.1.0\n","pubspec.yaml","yaml","",[319,320,321,334],"code",{"__ignoreMap":317},[322,323,326,330],"span",{"class":324,"line":325},"line",1,[322,327,329],{"class":328},"swJcz","dependencies",[322,331,333],{"class":332},"sMK4o",":\n",[322,335,337,340,343],{"class":324,"line":336},2,[322,338,339],{"class":328},"  authyra_flutter",[322,341,342],{"class":332},":",[322,344,346],{"class":345},"sfazB"," ^0.1.0\n",[311,348,352],{"className":349,"code":350,"language":351,"meta":317,"style":317},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","flutter pub get\n","bash",[319,353,354],{"__ignoreMap":317},[322,355,356,360,363],{"class":324,"line":325},[322,357,359],{"class":358},"sBMFI","flutter",[322,361,362],{"class":345}," pub",[322,364,365],{"class":345}," get\n",[306,367,369],{"id":368},"_2-initialize-at-startup","2. Initialize at startup",[311,371,376],{"className":372,"code":373,"filename":374,"language":375,"meta":317,"style":317},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import 'package:authyra_flutter/authyra_flutter.dart';\n\nvoid main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n\n  await Authyra.initialize(\n    client: AuthyraClient(\n      providers: [\n        CredentialsProvider.withTokens(\n          id: 'email',\n          authorize: (creds) async {\n            final res = await myApi.post('/auth/login', body: creds);\n            if (res.statusCode != 200) return null;\n            return AuthSignInResult(\n              user: AuthUser(id: res.data['id'], email: res.data['email']),\n              accessToken:  res.data['accessToken'],\n              refreshToken: res.data['refreshToken'],\n              expiresAt:    DateTime.parse(res.data['expiresAt']),\n            );\n          },\n        ),\n        GoogleProvider(clientId: 'YOUR_GOOGLE_CLIENT_ID'),\n      ],\n      storage: SecureAuthStorage(), // Keychain on iOS, Keystore on Android\n    ),\n  );\n\n  runApp(const MyApp());\n}\n","lib/main.dart","dart",[319,377,378,390,396,418,435,440,457,470,481,494,508,523,565,594,605,656,678,699,729,737,745,753,772,780,799,807,815,820,839],{"__ignoreMap":317},[322,379,380,384,387],{"class":324,"line":325},[322,381,383],{"class":382},"sbssI","import",[322,385,386],{"class":345}," 'package:authyra_flutter/authyra_flutter.dart'",[322,388,389],{"class":332},";\n",[322,391,392],{"class":324,"line":336},[322,393,395],{"emptyLinePlaceholder":394},true,"\n",[322,397,399,403,407,411,415],{"class":324,"line":398},3,[322,400,402],{"class":401},"spNyl","void",[322,404,406],{"class":405},"s2Zo4"," main",[322,408,410],{"class":409},"sTEyZ","() ",[322,412,414],{"class":413},"s7zQu","async",[322,416,417],{"class":409}," {\n",[322,419,421,424,427,430,433],{"class":324,"line":420},4,[322,422,423],{"class":358},"  WidgetsFlutterBinding",[322,425,426],{"class":332},".",[322,428,429],{"class":405},"ensureInitialized",[322,431,432],{"class":409},"()",[322,434,389],{"class":332},[322,436,438],{"class":324,"line":437},5,[322,439,395],{"emptyLinePlaceholder":394},[322,441,443,446,449,451,454],{"class":324,"line":442},6,[322,444,445],{"class":413},"  await",[322,447,448],{"class":358}," Authyra",[322,450,426],{"class":332},[322,452,453],{"class":405},"initialize",[322,455,456],{"class":409},"(\n",[322,458,460,463,465,468],{"class":324,"line":459},7,[322,461,462],{"class":409},"    client",[322,464,342],{"class":332},[322,466,467],{"class":358}," AuthyraClient",[322,469,456],{"class":409},[322,471,473,476,478],{"class":324,"line":472},8,[322,474,475],{"class":409},"      providers",[322,477,342],{"class":332},[322,479,480],{"class":409}," [\n",[322,482,484,487,489,492],{"class":324,"line":483},9,[322,485,486],{"class":358},"        CredentialsProvider",[322,488,426],{"class":332},[322,490,491],{"class":405},"withTokens",[322,493,456],{"class":409},[322,495,497,500,502,505],{"class":324,"line":496},10,[322,498,499],{"class":409},"          id",[322,501,342],{"class":332},[322,503,504],{"class":345}," 'email'",[322,506,507],{"class":332},",\n",[322,509,511,514,516,519,521],{"class":324,"line":510},11,[322,512,513],{"class":409},"          authorize",[322,515,342],{"class":332},[322,517,518],{"class":409}," (creds) ",[322,520,414],{"class":413},[322,522,417],{"class":409},[322,524,526,529,532,535,538,541,543,546,549,552,555,558,560,563],{"class":324,"line":525},12,[322,527,528],{"class":401},"            final",[322,530,531],{"class":409}," res ",[322,533,534],{"class":332},"=",[322,536,537],{"class":413}," await",[322,539,540],{"class":409}," myApi",[322,542,426],{"class":332},[322,544,545],{"class":405},"post",[322,547,548],{"class":409},"(",[322,550,551],{"class":345},"'/auth/login'",[322,553,554],{"class":332},",",[322,556,557],{"class":409}," body",[322,559,342],{"class":332},[322,561,562],{"class":409}," creds)",[322,564,389],{"class":332},[322,566,568,571,574,576,579,582,585,588,591],{"class":324,"line":567},13,[322,569,570],{"class":413},"            if",[322,572,573],{"class":409}," (res",[322,575,426],{"class":332},[322,577,578],{"class":409},"statusCode ",[322,580,581],{"class":332},"!=",[322,583,584],{"class":382}," 200",[322,586,587],{"class":409},") ",[322,589,590],{"class":413},"return",[322,592,593],{"class":332}," null;\n",[322,595,597,600,603],{"class":324,"line":596},14,[322,598,599],{"class":413},"            return",[322,601,602],{"class":358}," AuthSignInResult",[322,604,456],{"class":409},[322,606,608,611,613,616,619,621,624,626,629,632,635,637,640,642,644,646,648,651,654],{"class":324,"line":607},15,[322,609,610],{"class":409},"              user",[322,612,342],{"class":332},[322,614,615],{"class":358}," AuthUser",[322,617,618],{"class":409},"(id",[322,620,342],{"class":332},[322,622,623],{"class":409}," res",[322,625,426],{"class":332},[322,627,628],{"class":409},"data[",[322,630,631],{"class":345},"'id'",[322,633,634],{"class":409},"]",[322,636,554],{"class":332},[322,638,639],{"class":409}," email",[322,641,342],{"class":332},[322,643,623],{"class":409},[322,645,426],{"class":332},[322,647,628],{"class":409},[322,649,650],{"class":345},"'email'",[322,652,653],{"class":409},"])",[322,655,507],{"class":332},[322,657,659,662,664,667,669,671,674,676],{"class":324,"line":658},16,[322,660,661],{"class":409},"              accessToken",[322,663,342],{"class":332},[322,665,666],{"class":409},"  res",[322,668,426],{"class":332},[322,670,628],{"class":409},[322,672,673],{"class":345},"'accessToken'",[322,675,634],{"class":409},[322,677,507],{"class":332},[322,679,681,684,686,688,690,692,695,697],{"class":324,"line":680},17,[322,682,683],{"class":409},"              refreshToken",[322,685,342],{"class":332},[322,687,623],{"class":409},[322,689,426],{"class":332},[322,691,628],{"class":409},[322,693,694],{"class":345},"'refreshToken'",[322,696,634],{"class":409},[322,698,507],{"class":332},[322,700,702,705,707,710,712,715,718,720,722,725,727],{"class":324,"line":701},18,[322,703,704],{"class":409},"              expiresAt",[322,706,342],{"class":332},[322,708,709],{"class":358},"    DateTime",[322,711,426],{"class":332},[322,713,714],{"class":405},"parse",[322,716,717],{"class":409},"(res",[322,719,426],{"class":332},[322,721,628],{"class":409},[322,723,724],{"class":345},"'expiresAt'",[322,726,653],{"class":409},[322,728,507],{"class":332},[322,730,732,735],{"class":324,"line":731},19,[322,733,734],{"class":409},"            )",[322,736,389],{"class":332},[322,738,740,743],{"class":324,"line":739},20,[322,741,742],{"class":409},"          }",[322,744,507],{"class":332},[322,746,748,751],{"class":324,"line":747},21,[322,749,750],{"class":409},"        )",[322,752,507],{"class":332},[322,754,756,759,762,764,767,770],{"class":324,"line":755},22,[322,757,758],{"class":358},"        GoogleProvider",[322,760,761],{"class":409},"(clientId",[322,763,342],{"class":332},[322,765,766],{"class":345}," 'YOUR_GOOGLE_CLIENT_ID'",[322,768,769],{"class":409},")",[322,771,507],{"class":332},[322,773,775,778],{"class":324,"line":774},23,[322,776,777],{"class":409},"      ]",[322,779,507],{"class":332},[322,781,783,786,788,791,793,795],{"class":324,"line":782},24,[322,784,785],{"class":409},"      storage",[322,787,342],{"class":332},[322,789,790],{"class":358}," SecureAuthStorage",[322,792,432],{"class":409},[322,794,554],{"class":332},[322,796,798],{"class":797},"sHwdD"," // Keychain on iOS, Keystore on Android\n",[322,800,802,805],{"class":324,"line":801},25,[322,803,804],{"class":409},"    )",[322,806,507],{"class":332},[322,808,810,813],{"class":324,"line":809},26,[322,811,812],{"class":409},"  )",[322,814,389],{"class":332},[322,816,818],{"class":324,"line":817},27,[322,819,395],{"emptyLinePlaceholder":394},[322,821,823,826,828,831,834,837],{"class":324,"line":822},28,[322,824,825],{"class":405},"  runApp",[322,827,548],{"class":409},[322,829,830],{"class":401},"const",[322,832,833],{"class":358}," MyApp",[322,835,836],{"class":409},"())",[322,838,389],{"class":332},[322,840,842],{"class":324,"line":841},29,[322,843,844],{"class":409},"}\n",[846,847,849,852,853,856,857,860,861,426],"callout",{"icon":848},"i-lucide-info",[319,850,851],{},"SecureAuthStorage"," is provided by ",[319,854,855],{},"authyra_flutter",". For OAuth2 providers, wire ",[319,858,859],{},"OAuth2CallbackHandler"," with your deep-link package — see ",[284,862,863],{"href":171},"Flutter Setup →",[306,865,867],{"id":866},"_3-sign-in","3. Sign in",[311,869,871],{"className":372,"code":870,"language":375,"meta":317,"style":317},"// Email / password\nfinal user = await Authyra.instance.signIn('email', params: {\n  'email':    'alice@example.com',\n  'password': 's3cr3t',\n});\n\n// Google — launches browser, waits for deep-link callback\nfinal user = await Authyra.instance.signIn('google');\n",[319,872,873,878,915,927,939,946,950,955],{"__ignoreMap":317},[322,874,875],{"class":324,"line":325},[322,876,877],{"class":797},"// Email / password\n",[322,879,880,883,886,888,890,892,894,897,899,902,904,906,908,911,913],{"class":324,"line":336},[322,881,882],{"class":401},"final",[322,884,885],{"class":409}," user ",[322,887,534],{"class":332},[322,889,537],{"class":413},[322,891,448],{"class":358},[322,893,426],{"class":332},[322,895,896],{"class":409},"instance",[322,898,426],{"class":332},[322,900,901],{"class":405},"signIn",[322,903,548],{"class":409},[322,905,650],{"class":345},[322,907,554],{"class":332},[322,909,910],{"class":409}," params",[322,912,342],{"class":332},[322,914,417],{"class":409},[322,916,917,920,922,925],{"class":324,"line":398},[322,918,919],{"class":345},"  'email'",[322,921,342],{"class":332},[322,923,924],{"class":345},"    'alice@example.com'",[322,926,507],{"class":332},[322,928,929,932,934,937],{"class":324,"line":420},[322,930,931],{"class":345},"  'password'",[322,933,342],{"class":332},[322,935,936],{"class":345}," 's3cr3t'",[322,938,507],{"class":332},[322,940,941,944],{"class":324,"line":437},[322,942,943],{"class":409},"})",[322,945,389],{"class":332},[322,947,948],{"class":324,"line":442},[322,949,395],{"emptyLinePlaceholder":394},[322,951,952],{"class":324,"line":459},[322,953,954],{"class":797},"// Google — launches browser, waits for deep-link callback\n",[322,956,957,959,961,963,965,967,969,971,973,975,977,980,982],{"class":324,"line":472},[322,958,882],{"class":401},[322,960,885],{"class":409},[322,962,534],{"class":332},[322,964,537],{"class":413},[322,966,448],{"class":358},[322,968,426],{"class":332},[322,970,896],{"class":409},[322,972,426],{"class":332},[322,974,901],{"class":405},[322,976,548],{"class":409},[322,978,979],{"class":345},"'google'",[322,981,769],{"class":409},[322,983,389],{"class":332},[306,985,987],{"id":986},"_4-react-to-auth-state","4. React to auth state",[311,989,991],{"className":372,"code":990,"language":375,"meta":317,"style":317},"StreamBuilder\u003CAuthState>(\n  stream: Authyra.instance.authStateChanges,\n  builder: (context, snapshot) {\n    final state = snapshot.data ?? AuthState.unauthenticated();\n    return switch (state.type) {\n      AuthStateType.authenticated   => HomePage(user: state.user!),\n      AuthStateType.unauthenticated => LoginPage(),\n      AuthStateType.error           => ErrorPage(state.error!),\n    };\n  },\n);\n",[319,992,993,1006,1026,1041,1074,1090,1126,1144,1172,1179,1186],{"__ignoreMap":317},[322,994,995,998,1001,1003],{"class":324,"line":325},[322,996,997],{"class":358},"StreamBuilder",[322,999,1000],{"class":409},"\u003C",[322,1002,226],{"class":358},[322,1004,1005],{"class":409},">(\n",[322,1007,1008,1011,1013,1015,1017,1019,1021,1024],{"class":324,"line":336},[322,1009,1010],{"class":409},"  stream",[322,1012,342],{"class":332},[322,1014,448],{"class":358},[322,1016,426],{"class":332},[322,1018,896],{"class":409},[322,1020,426],{"class":332},[322,1022,1023],{"class":409},"authStateChanges",[322,1025,507],{"class":332},[322,1027,1028,1031,1033,1036,1038],{"class":324,"line":398},[322,1029,1030],{"class":409},"  builder",[322,1032,342],{"class":332},[322,1034,1035],{"class":409}," (context",[322,1037,554],{"class":332},[322,1039,1040],{"class":409}," snapshot) {\n",[322,1042,1043,1046,1049,1051,1054,1056,1059,1062,1065,1067,1070,1072],{"class":324,"line":420},[322,1044,1045],{"class":401},"    final",[322,1047,1048],{"class":409}," state ",[322,1050,534],{"class":332},[322,1052,1053],{"class":409}," snapshot",[322,1055,426],{"class":332},[322,1057,1058],{"class":409},"data ",[322,1060,1061],{"class":332},"??",[322,1063,1064],{"class":358}," AuthState",[322,1066,426],{"class":332},[322,1068,1069],{"class":405},"unauthenticated",[322,1071,432],{"class":409},[322,1073,389],{"class":332},[322,1075,1076,1079,1082,1085,1087],{"class":324,"line":437},[322,1077,1078],{"class":413},"    return",[322,1080,1081],{"class":413}," switch",[322,1083,1084],{"class":409}," (state",[322,1086,426],{"class":332},[322,1088,1089],{"class":409},"type) {\n",[322,1091,1092,1095,1097,1100,1103,1106,1109,1111,1114,1116,1119,1122,1124],{"class":324,"line":442},[322,1093,1094],{"class":358},"      AuthStateType",[322,1096,426],{"class":332},[322,1098,1099],{"class":409},"authenticated   ",[322,1101,1102],{"class":332},"=>",[322,1104,1105],{"class":358}," HomePage",[322,1107,1108],{"class":409},"(user",[322,1110,342],{"class":332},[322,1112,1113],{"class":409}," state",[322,1115,426],{"class":332},[322,1117,1118],{"class":409},"user",[322,1120,1121],{"class":332},"!",[322,1123,769],{"class":409},[322,1125,507],{"class":332},[322,1127,1128,1130,1132,1135,1137,1140,1142],{"class":324,"line":459},[322,1129,1094],{"class":358},[322,1131,426],{"class":332},[322,1133,1134],{"class":409},"unauthenticated ",[322,1136,1102],{"class":332},[322,1138,1139],{"class":358}," LoginPage",[322,1141,432],{"class":409},[322,1143,507],{"class":332},[322,1145,1146,1148,1150,1153,1155,1158,1161,1163,1166,1168,1170],{"class":324,"line":472},[322,1147,1094],{"class":358},[322,1149,426],{"class":332},[322,1151,1152],{"class":409},"error           ",[322,1154,1102],{"class":332},[322,1156,1157],{"class":358}," ErrorPage",[322,1159,1160],{"class":409},"(state",[322,1162,426],{"class":332},[322,1164,1165],{"class":409},"error",[322,1167,1121],{"class":332},[322,1169,769],{"class":409},[322,1171,507],{"class":332},[322,1173,1174,1177],{"class":324,"line":483},[322,1175,1176],{"class":409},"    }",[322,1178,389],{"class":332},[322,1180,1181,1184],{"class":324,"line":496},[322,1182,1183],{"class":409},"  }",[322,1185,507],{"class":332},[322,1187,1188,1190],{"class":324,"line":510},[322,1189,769],{"class":409},[322,1191,389],{"class":332},[271,1193,1194,1195,1198],{},"Or read synchronously (safe in ",[319,1196,1197],{},"build()"," — no awaiting):",[311,1200,1202],{"className":372,"code":1201,"language":375,"meta":317,"style":317},"if (Authyra.instance.isAuthenticated) {\n  print('Hello, ${Authyra.instance.currentUser!.name}');\n}\n",[319,1203,1204,1224,1265],{"__ignoreMap":317},[322,1205,1206,1209,1212,1215,1217,1219,1221],{"class":324,"line":325},[322,1207,1208],{"class":413},"if",[322,1210,1211],{"class":409}," (",[322,1213,1214],{"class":358},"Authyra",[322,1216,426],{"class":332},[322,1218,896],{"class":409},[322,1220,426],{"class":332},[322,1222,1223],{"class":409},"isAuthenticated) {\n",[322,1225,1226,1229,1231,1234,1237,1239,1241,1244,1246,1249,1252,1255,1258,1261,1263],{"class":324,"line":336},[322,1227,1228],{"class":405},"  print",[322,1230,548],{"class":409},[322,1232,1233],{"class":345},"'Hello, ",[322,1235,1236],{"class":409},"${",[322,1238,1214],{"class":358},[322,1240,426],{"class":409},[322,1242,896],{"class":1243},"sHdIc",[322,1245,426],{"class":409},[322,1247,1248],{"class":1243},"currentUser",[322,1250,1251],{"class":409},"!.",[322,1253,1254],{"class":1243},"name",[322,1256,1257],{"class":409},"}",[322,1259,1260],{"class":345},"'",[322,1262,769],{"class":409},[322,1264,389],{"class":332},[322,1266,1267],{"class":324,"line":398},[322,1268,844],{"class":409},[306,1270,1272],{"id":1271},"_5-sign-out","5. Sign out",[311,1274,1276],{"className":372,"code":1275,"language":375,"meta":317,"style":317},"await Authyra.instance.signOut();\n// authStateChanges emits AuthState.unauthenticated()\n",[319,1277,1278,1298],{"__ignoreMap":317},[322,1279,1280,1283,1285,1287,1289,1291,1294,1296],{"class":324,"line":325},[322,1281,1282],{"class":413},"await",[322,1284,448],{"class":358},[322,1286,426],{"class":332},[322,1288,896],{"class":409},[322,1290,426],{"class":332},[322,1292,1293],{"class":405},"signOut",[322,1295,432],{"class":409},[322,1297,389],{"class":332},[322,1299,1300],{"class":324,"line":336},[322,1301,1302],{"class":797},"// authStateChanges emits AuthState.unauthenticated()\n",[299,1304],{},[302,1306,1308],{"id":1307},"dart-backend","Dart backend",[306,1310,1312],{"id":1311},"add-the-package","Add the package",[311,1314,1316],{"className":313,"code":1315,"filename":315,"language":316,"meta":317,"style":317},"dependencies:\n  authyra: ^0.1.0\n",[319,1317,1318,1324],{"__ignoreMap":317},[322,1319,1320,1322],{"class":324,"line":325},[322,1321,329],{"class":328},[322,1323,333],{"class":332},[322,1325,1326,1329,1331],{"class":324,"line":336},[322,1327,1328],{"class":328},"  authyra",[322,1330,342],{"class":332},[322,1332,346],{"class":345},[311,1334,1336],{"className":349,"code":1335,"language":351,"meta":317,"style":317},"dart pub get\n",[319,1337,1338],{"__ignoreMap":317},[322,1339,1340,1342,1344],{"class":324,"line":325},[322,1341,375],{"class":358},[322,1343,362],{"class":345},[322,1345,365],{"class":345},[306,1347,1349],{"id":1348},"_2-build-and-initialize-the-client","2. Build and initialize the client",[311,1351,1354],{"className":372,"code":1352,"filename":1353,"language":375,"meta":317,"style":317},"import 'package:authyra/authyra.dart';\n\nvoid main() async {\n  final client = AuthyraClient(\n    providers: [\n      CredentialsProvider.withTokens(\n        id: 'email',\n        authorize: (creds) async {\n          final res = await myApi.post('/auth/login', body: creds);\n          if (res.statusCode != 200) return null;\n          return AuthSignInResult(\n            user: AuthUser(id: res.data['id'], email: res.data['email']),\n            accessToken:  res.data['accessToken'],\n            refreshToken: res.data['refreshToken'],\n            expiresAt:    DateTime.parse(res.data['expiresAt']),\n          );\n        },\n      ),\n    ],\n    storage: MyRedisStorage(), // implement AuthStorage for your backend\n  );\n\n  await client.initialize();\n}\n","bin/server.dart",[319,1355,1356,1365,1369,1381,1395,1404,1415,1426,1439,1470,1491,1500,1541,1560,1579,1604,1611,1618,1625,1632,1649,1655,1659,1674],{"__ignoreMap":317},[322,1357,1358,1360,1363],{"class":324,"line":325},[322,1359,383],{"class":382},[322,1361,1362],{"class":345}," 'package:authyra/authyra.dart'",[322,1364,389],{"class":332},[322,1366,1367],{"class":324,"line":336},[322,1368,395],{"emptyLinePlaceholder":394},[322,1370,1371,1373,1375,1377,1379],{"class":324,"line":398},[322,1372,402],{"class":401},[322,1374,406],{"class":405},[322,1376,410],{"class":409},[322,1378,414],{"class":413},[322,1380,417],{"class":409},[322,1382,1383,1386,1389,1391,1393],{"class":324,"line":420},[322,1384,1385],{"class":401},"  final",[322,1387,1388],{"class":409}," client ",[322,1390,534],{"class":332},[322,1392,467],{"class":358},[322,1394,456],{"class":409},[322,1396,1397,1400,1402],{"class":324,"line":437},[322,1398,1399],{"class":409},"    providers",[322,1401,342],{"class":332},[322,1403,480],{"class":409},[322,1405,1406,1409,1411,1413],{"class":324,"line":442},[322,1407,1408],{"class":358},"      CredentialsProvider",[322,1410,426],{"class":332},[322,1412,491],{"class":405},[322,1414,456],{"class":409},[322,1416,1417,1420,1422,1424],{"class":324,"line":459},[322,1418,1419],{"class":409},"        id",[322,1421,342],{"class":332},[322,1423,504],{"class":345},[322,1425,507],{"class":332},[322,1427,1428,1431,1433,1435,1437],{"class":324,"line":472},[322,1429,1430],{"class":409},"        authorize",[322,1432,342],{"class":332},[322,1434,518],{"class":409},[322,1436,414],{"class":413},[322,1438,417],{"class":409},[322,1440,1441,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468],{"class":324,"line":483},[322,1442,1443],{"class":401},"          final",[322,1445,531],{"class":409},[322,1447,534],{"class":332},[322,1449,537],{"class":413},[322,1451,540],{"class":409},[322,1453,426],{"class":332},[322,1455,545],{"class":405},[322,1457,548],{"class":409},[322,1459,551],{"class":345},[322,1461,554],{"class":332},[322,1463,557],{"class":409},[322,1465,342],{"class":332},[322,1467,562],{"class":409},[322,1469,389],{"class":332},[322,1471,1472,1475,1477,1479,1481,1483,1485,1487,1489],{"class":324,"line":496},[322,1473,1474],{"class":413},"          if",[322,1476,573],{"class":409},[322,1478,426],{"class":332},[322,1480,578],{"class":409},[322,1482,581],{"class":332},[322,1484,584],{"class":382},[322,1486,587],{"class":409},[322,1488,590],{"class":413},[322,1490,593],{"class":332},[322,1492,1493,1496,1498],{"class":324,"line":510},[322,1494,1495],{"class":413},"          return",[322,1497,602],{"class":358},[322,1499,456],{"class":409},[322,1501,1502,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539],{"class":324,"line":525},[322,1503,1504],{"class":409},"            user",[322,1506,342],{"class":332},[322,1508,615],{"class":358},[322,1510,618],{"class":409},[322,1512,342],{"class":332},[322,1514,623],{"class":409},[322,1516,426],{"class":332},[322,1518,628],{"class":409},[322,1520,631],{"class":345},[322,1522,634],{"class":409},[322,1524,554],{"class":332},[322,1526,639],{"class":409},[322,1528,342],{"class":332},[322,1530,623],{"class":409},[322,1532,426],{"class":332},[322,1534,628],{"class":409},[322,1536,650],{"class":345},[322,1538,653],{"class":409},[322,1540,507],{"class":332},[322,1542,1543,1546,1548,1550,1552,1554,1556,1558],{"class":324,"line":567},[322,1544,1545],{"class":409},"            accessToken",[322,1547,342],{"class":332},[322,1549,666],{"class":409},[322,1551,426],{"class":332},[322,1553,628],{"class":409},[322,1555,673],{"class":345},[322,1557,634],{"class":409},[322,1559,507],{"class":332},[322,1561,1562,1565,1567,1569,1571,1573,1575,1577],{"class":324,"line":596},[322,1563,1564],{"class":409},"            refreshToken",[322,1566,342],{"class":332},[322,1568,623],{"class":409},[322,1570,426],{"class":332},[322,1572,628],{"class":409},[322,1574,694],{"class":345},[322,1576,634],{"class":409},[322,1578,507],{"class":332},[322,1580,1581,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602],{"class":324,"line":607},[322,1582,1583],{"class":409},"            expiresAt",[322,1585,342],{"class":332},[322,1587,709],{"class":358},[322,1589,426],{"class":332},[322,1591,714],{"class":405},[322,1593,717],{"class":409},[322,1595,426],{"class":332},[322,1597,628],{"class":409},[322,1599,724],{"class":345},[322,1601,653],{"class":409},[322,1603,507],{"class":332},[322,1605,1606,1609],{"class":324,"line":658},[322,1607,1608],{"class":409},"          )",[322,1610,389],{"class":332},[322,1612,1613,1616],{"class":324,"line":680},[322,1614,1615],{"class":409},"        }",[322,1617,507],{"class":332},[322,1619,1620,1623],{"class":324,"line":701},[322,1621,1622],{"class":409},"      )",[322,1624,507],{"class":332},[322,1626,1627,1630],{"class":324,"line":731},[322,1628,1629],{"class":409},"    ]",[322,1631,507],{"class":332},[322,1633,1634,1637,1639,1642,1644,1646],{"class":324,"line":739},[322,1635,1636],{"class":409},"    storage",[322,1638,342],{"class":332},[322,1640,1641],{"class":358}," MyRedisStorage",[322,1643,432],{"class":409},[322,1645,554],{"class":332},[322,1647,1648],{"class":797}," // implement AuthStorage for your backend\n",[322,1650,1651,1653],{"class":324,"line":747},[322,1652,812],{"class":409},[322,1654,389],{"class":332},[322,1656,1657],{"class":324,"line":755},[322,1658,395],{"emptyLinePlaceholder":394},[322,1660,1661,1663,1666,1668,1670,1672],{"class":324,"line":774},[322,1662,445],{"class":413},[322,1664,1665],{"class":409}," client",[322,1667,426],{"class":332},[322,1669,453],{"class":405},[322,1671,432],{"class":409},[322,1673,389],{"class":332},[322,1675,1676],{"class":324,"line":782},[322,1677,844],{"class":409},[306,1679,1681],{"id":1680},"_3-authenticate","3. Authenticate",[311,1683,1685],{"className":372,"code":1684,"language":375,"meta":317,"style":317},"final user = await client.signIn('email', params: {\n  'email':    'alice@example.com',\n  'password': 's3cr3t',\n});\nprint('Signed in: ${user.email}');\n",[319,1686,1687,1715,1725,1735,1741],{"__ignoreMap":317},[322,1688,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713],{"class":324,"line":325},[322,1690,882],{"class":401},[322,1692,885],{"class":409},[322,1694,534],{"class":332},[322,1696,537],{"class":413},[322,1698,1665],{"class":409},[322,1700,426],{"class":332},[322,1702,901],{"class":405},[322,1704,548],{"class":409},[322,1706,650],{"class":345},[322,1708,554],{"class":332},[322,1710,910],{"class":409},[322,1712,342],{"class":332},[322,1714,417],{"class":409},[322,1716,1717,1719,1721,1723],{"class":324,"line":336},[322,1718,919],{"class":345},[322,1720,342],{"class":332},[322,1722,924],{"class":345},[322,1724,507],{"class":332},[322,1726,1727,1729,1731,1733],{"class":324,"line":398},[322,1728,931],{"class":345},[322,1730,342],{"class":332},[322,1732,936],{"class":345},[322,1734,507],{"class":332},[322,1736,1737,1739],{"class":324,"line":420},[322,1738,943],{"class":409},[322,1740,389],{"class":332},[322,1742,1743,1746,1748,1751,1753,1755,1757,1760,1762,1764,1766],{"class":324,"line":437},[322,1744,1745],{"class":405},"print",[322,1747,548],{"class":409},[322,1749,1750],{"class":345},"'Signed in: ",[322,1752,1236],{"class":409},[322,1754,1118],{"class":1243},[322,1756,426],{"class":409},[322,1758,1759],{"class":1243},"email",[322,1761,1257],{"class":409},[322,1763,1260],{"class":345},[322,1765,769],{"class":409},[322,1767,389],{"class":332},[306,1769,1771],{"id":1770},"_4-react-to-state-changes","4. React to state changes",[311,1773,1775],{"className":372,"code":1774,"language":375,"meta":317,"style":317},"client.authStateStream.listen((AuthState state) {\n  switch (state.type) {\n    case AuthStateType.authenticated:\n      print('Signed in as ${state.user!.email}');\n    case AuthStateType.unauthenticated:\n      print('Signed out');\n    case AuthStateType.error:\n      print('Error: ${state.error}');\n  }\n});\n",[319,1776,1777,1800,1811,1826,1857,1869,1882,1894,1919,1924],{"__ignoreMap":317},[322,1778,1779,1782,1784,1787,1789,1792,1795,1797],{"class":324,"line":325},[322,1780,1781],{"class":409},"client",[322,1783,426],{"class":332},[322,1785,1786],{"class":409},"authStateStream",[322,1788,426],{"class":332},[322,1790,1791],{"class":405},"listen",[322,1793,1794],{"class":409},"((",[322,1796,226],{"class":358},[322,1798,1799],{"class":409}," state) {\n",[322,1801,1802,1805,1807,1809],{"class":324,"line":336},[322,1803,1804],{"class":413},"  switch",[322,1806,1084],{"class":409},[322,1808,426],{"class":332},[322,1810,1089],{"class":409},[322,1812,1813,1816,1819,1821,1824],{"class":324,"line":398},[322,1814,1815],{"class":413},"    case",[322,1817,1818],{"class":358}," AuthStateType",[322,1820,426],{"class":332},[322,1822,1823],{"class":409},"authenticated",[322,1825,333],{"class":332},[322,1827,1828,1831,1833,1836,1838,1841,1843,1845,1847,1849,1851,1853,1855],{"class":324,"line":420},[322,1829,1830],{"class":405},"      print",[322,1832,548],{"class":409},[322,1834,1835],{"class":345},"'Signed in as ",[322,1837,1236],{"class":409},[322,1839,1840],{"class":1243},"state",[322,1842,426],{"class":409},[322,1844,1118],{"class":1243},[322,1846,1251],{"class":409},[322,1848,1759],{"class":1243},[322,1850,1257],{"class":409},[322,1852,1260],{"class":345},[322,1854,769],{"class":409},[322,1856,389],{"class":332},[322,1858,1859,1861,1863,1865,1867],{"class":324,"line":437},[322,1860,1815],{"class":413},[322,1862,1818],{"class":358},[322,1864,426],{"class":332},[322,1866,1069],{"class":409},[322,1868,333],{"class":332},[322,1870,1871,1873,1875,1878,1880],{"class":324,"line":442},[322,1872,1830],{"class":405},[322,1874,548],{"class":409},[322,1876,1877],{"class":345},"'Signed out'",[322,1879,769],{"class":409},[322,1881,389],{"class":332},[322,1883,1884,1886,1888,1890,1892],{"class":324,"line":459},[322,1885,1815],{"class":413},[322,1887,1818],{"class":358},[322,1889,426],{"class":332},[322,1891,1165],{"class":409},[322,1893,333],{"class":332},[322,1895,1896,1898,1900,1903,1905,1907,1909,1911,1913,1915,1917],{"class":324,"line":472},[322,1897,1830],{"class":405},[322,1899,548],{"class":409},[322,1901,1902],{"class":345},"'Error: ",[322,1904,1236],{"class":409},[322,1906,1840],{"class":1243},[322,1908,426],{"class":409},[322,1910,1165],{"class":1243},[322,1912,1257],{"class":409},[322,1914,1260],{"class":345},[322,1916,769],{"class":409},[322,1918,389],{"class":332},[322,1920,1921],{"class":324,"line":483},[322,1922,1923],{"class":409},"  }\n",[322,1925,1926,1928],{"class":324,"line":496},[322,1927,943],{"class":409},[322,1929,389],{"class":332},[306,1931,1933],{"id":1932},"_5-sign-out-the-client","5. Sign out the client",[311,1935,1937],{"className":372,"code":1936,"language":375,"meta":317,"style":317},"await client.signOut();\n",[319,1938,1939],{"__ignoreMap":317},[322,1940,1941,1943,1945,1947,1949,1951],{"class":324,"line":325},[322,1942,1282],{"class":413},[322,1944,1665],{"class":409},[322,1946,426],{"class":332},[322,1948,1293],{"class":405},[322,1950,432],{"class":409},[322,1952,389],{"class":332},[299,1954],{},[302,1956,1958],{"id":1957},"full-example-pure-dart","Full example — pure Dart",[311,1960,1963],{"className":372,"code":1961,"filename":1962,"language":375,"meta":317,"style":317},"import 'package:authyra/authyra.dart';\n\nFuture\u003Cvoid> main() async {\n  final client = AuthyraClient(\n    providers: [\n      CredentialsProvider(\n        id: 'email',\n        authorize: (creds) async {\n          if (creds?['password'] == 'secret') {\n            return AuthUser(id: '1', email: creds!['email'] as String);\n          }\n          return null;\n        },\n      ),\n    ],\n    storage: InMemoryStorage(),\n  );\n\n  await Authyra.initialize(client: client);\n\n  Authyra.instance.authStateChanges.listen((state) {\n    print('[auth] ${state.type.name}');\n  });\n\n  try {\n    final user = await Authyra.instance.signIn('email', params: {\n      'email':    'alice@example.com',\n      'password': 'secret',\n    });\n    print('Signed in: ${user.email}');\n  } on AuthenticationFailedException catch (e) {\n    print('Wrong credentials: $e');\n  }\n\n  final session = await Authyra.instance.getSession();\n  print('Token: ${session?.accessToken}');\n\n  await Authyra.instance.signOut();\n  print('isAuthenticated: ${Authyra.instance.isAuthenticated}'); // false\n\n  await Authyra.instance.dispose();\n}\n","bin/main.dart",[319,1964,1965,1973,1977,1998,2010,2018,2024,2034,2046,2074,2114,2119,2125,2131,2137,2143,2156,2162,2166,2186,2190,2210,2241,2248,2252,2259,2291,2302,2313,2320,2345,2363,2385,2390,2395,2422,2451,2456,2475,2510,2515,2535],{"__ignoreMap":317},[322,1966,1967,1969,1971],{"class":324,"line":325},[322,1968,383],{"class":382},[322,1970,1362],{"class":345},[322,1972,389],{"class":332},[322,1974,1975],{"class":324,"line":336},[322,1976,395],{"emptyLinePlaceholder":394},[322,1978,1979,1982,1984,1986,1989,1992,1994,1996],{"class":324,"line":398},[322,1980,1981],{"class":358},"Future",[322,1983,1000],{"class":409},[322,1985,402],{"class":401},[322,1987,1988],{"class":409},"> ",[322,1990,1991],{"class":405},"main",[322,1993,410],{"class":409},[322,1995,414],{"class":413},[322,1997,417],{"class":409},[322,1999,2000,2002,2004,2006,2008],{"class":324,"line":420},[322,2001,1385],{"class":401},[322,2003,1388],{"class":409},[322,2005,534],{"class":332},[322,2007,467],{"class":358},[322,2009,456],{"class":409},[322,2011,2012,2014,2016],{"class":324,"line":437},[322,2013,1399],{"class":409},[322,2015,342],{"class":332},[322,2017,480],{"class":409},[322,2019,2020,2022],{"class":324,"line":442},[322,2021,1408],{"class":358},[322,2023,456],{"class":409},[322,2025,2026,2028,2030,2032],{"class":324,"line":459},[322,2027,1419],{"class":409},[322,2029,342],{"class":332},[322,2031,504],{"class":345},[322,2033,507],{"class":332},[322,2035,2036,2038,2040,2042,2044],{"class":324,"line":472},[322,2037,1430],{"class":409},[322,2039,342],{"class":332},[322,2041,518],{"class":409},[322,2043,414],{"class":413},[322,2045,417],{"class":409},[322,2047,2048,2050,2053,2056,2059,2062,2065,2068,2071],{"class":324,"line":483},[322,2049,1474],{"class":413},[322,2051,2052],{"class":409}," (creds",[322,2054,2055],{"class":332},"?",[322,2057,2058],{"class":409},"[",[322,2060,2061],{"class":345},"'password'",[322,2063,2064],{"class":409},"] ",[322,2066,2067],{"class":332},"==",[322,2069,2070],{"class":345}," 'secret'",[322,2072,2073],{"class":409},") {\n",[322,2075,2076,2078,2080,2082,2084,2087,2089,2091,2093,2096,2098,2100,2102,2104,2107,2110,2112],{"class":324,"line":496},[322,2077,599],{"class":413},[322,2079,615],{"class":358},[322,2081,618],{"class":409},[322,2083,342],{"class":332},[322,2085,2086],{"class":345}," '1'",[322,2088,554],{"class":332},[322,2090,639],{"class":409},[322,2092,342],{"class":332},[322,2094,2095],{"class":409}," creds",[322,2097,1121],{"class":332},[322,2099,2058],{"class":409},[322,2101,650],{"class":345},[322,2103,2064],{"class":409},[322,2105,2106],{"class":332},"as",[322,2108,2109],{"class":358}," String",[322,2111,769],{"class":409},[322,2113,389],{"class":332},[322,2115,2116],{"class":324,"line":510},[322,2117,2118],{"class":409},"          }\n",[322,2120,2121,2123],{"class":324,"line":525},[322,2122,1495],{"class":413},[322,2124,593],{"class":332},[322,2126,2127,2129],{"class":324,"line":567},[322,2128,1615],{"class":409},[322,2130,507],{"class":332},[322,2132,2133,2135],{"class":324,"line":596},[322,2134,1622],{"class":409},[322,2136,507],{"class":332},[322,2138,2139,2141],{"class":324,"line":607},[322,2140,1629],{"class":409},[322,2142,507],{"class":332},[322,2144,2145,2147,2149,2152,2154],{"class":324,"line":658},[322,2146,1636],{"class":409},[322,2148,342],{"class":332},[322,2150,2151],{"class":358}," InMemoryStorage",[322,2153,432],{"class":409},[322,2155,507],{"class":332},[322,2157,2158,2160],{"class":324,"line":680},[322,2159,812],{"class":409},[322,2161,389],{"class":332},[322,2163,2164],{"class":324,"line":701},[322,2165,395],{"emptyLinePlaceholder":394},[322,2167,2168,2170,2172,2174,2176,2179,2181,2184],{"class":324,"line":731},[322,2169,445],{"class":413},[322,2171,448],{"class":358},[322,2173,426],{"class":332},[322,2175,453],{"class":405},[322,2177,2178],{"class":409},"(client",[322,2180,342],{"class":332},[322,2182,2183],{"class":409}," client)",[322,2185,389],{"class":332},[322,2187,2188],{"class":324,"line":739},[322,2189,395],{"emptyLinePlaceholder":394},[322,2191,2192,2195,2197,2199,2201,2203,2205,2207],{"class":324,"line":747},[322,2193,2194],{"class":358},"  Authyra",[322,2196,426],{"class":332},[322,2198,896],{"class":409},[322,2200,426],{"class":332},[322,2202,1023],{"class":409},[322,2204,426],{"class":332},[322,2206,1791],{"class":405},[322,2208,2209],{"class":409},"((state) {\n",[322,2211,2212,2215,2217,2220,2222,2224,2226,2229,2231,2233,2235,2237,2239],{"class":324,"line":755},[322,2213,2214],{"class":405},"    print",[322,2216,548],{"class":409},[322,2218,2219],{"class":345},"'[auth] ",[322,2221,1236],{"class":409},[322,2223,1840],{"class":1243},[322,2225,426],{"class":409},[322,2227,2228],{"class":1243},"type",[322,2230,426],{"class":409},[322,2232,1254],{"class":1243},[322,2234,1257],{"class":409},[322,2236,1260],{"class":345},[322,2238,769],{"class":409},[322,2240,389],{"class":332},[322,2242,2243,2246],{"class":324,"line":774},[322,2244,2245],{"class":409},"  })",[322,2247,389],{"class":332},[322,2249,2250],{"class":324,"line":782},[322,2251,395],{"emptyLinePlaceholder":394},[322,2253,2254,2257],{"class":324,"line":801},[322,2255,2256],{"class":413},"  try",[322,2258,417],{"class":409},[322,2260,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289],{"class":324,"line":809},[322,2262,1045],{"class":401},[322,2264,885],{"class":409},[322,2266,534],{"class":332},[322,2268,537],{"class":413},[322,2270,448],{"class":358},[322,2272,426],{"class":332},[322,2274,896],{"class":409},[322,2276,426],{"class":332},[322,2278,901],{"class":405},[322,2280,548],{"class":409},[322,2282,650],{"class":345},[322,2284,554],{"class":332},[322,2286,910],{"class":409},[322,2288,342],{"class":332},[322,2290,417],{"class":409},[322,2292,2293,2296,2298,2300],{"class":324,"line":817},[322,2294,2295],{"class":345},"      'email'",[322,2297,342],{"class":332},[322,2299,924],{"class":345},[322,2301,507],{"class":332},[322,2303,2304,2307,2309,2311],{"class":324,"line":822},[322,2305,2306],{"class":345},"      'password'",[322,2308,342],{"class":332},[322,2310,2070],{"class":345},[322,2312,507],{"class":332},[322,2314,2315,2318],{"class":324,"line":841},[322,2316,2317],{"class":409},"    })",[322,2319,389],{"class":332},[322,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343],{"class":324,"line":2322},30,[322,2324,2214],{"class":405},[322,2326,548],{"class":409},[322,2328,1750],{"class":345},[322,2330,1236],{"class":409},[322,2332,1118],{"class":1243},[322,2334,426],{"class":409},[322,2336,1759],{"class":1243},[322,2338,1257],{"class":409},[322,2340,1260],{"class":345},[322,2342,769],{"class":409},[322,2344,389],{"class":332},[322,2346,2348,2351,2354,2357,2360],{"class":324,"line":2347},31,[322,2349,2350],{"class":409},"  } ",[322,2352,2353],{"class":413},"on",[322,2355,2356],{"class":358}," AuthenticationFailedException",[322,2358,2359],{"class":413}," catch",[322,2361,2362],{"class":409}," (e) {\n",[322,2364,2366,2368,2370,2373,2376,2379,2381,2383],{"class":324,"line":2365},32,[322,2367,2214],{"class":405},[322,2369,548],{"class":409},[322,2371,2372],{"class":345},"'Wrong credentials: ",[322,2374,2375],{"class":409},"$",[322,2377,2378],{"class":1243},"e",[322,2380,1260],{"class":345},[322,2382,769],{"class":409},[322,2384,389],{"class":332},[322,2386,2388],{"class":324,"line":2387},33,[322,2389,1923],{"class":409},[322,2391,2393],{"class":324,"line":2392},34,[322,2394,395],{"emptyLinePlaceholder":394},[322,2396,2398,2400,2403,2405,2407,2409,2411,2413,2415,2418,2420],{"class":324,"line":2397},35,[322,2399,1385],{"class":401},[322,2401,2402],{"class":409}," session ",[322,2404,534],{"class":332},[322,2406,537],{"class":413},[322,2408,448],{"class":358},[322,2410,426],{"class":332},[322,2412,896],{"class":409},[322,2414,426],{"class":332},[322,2416,2417],{"class":405},"getSession",[322,2419,432],{"class":409},[322,2421,389],{"class":332},[322,2423,2425,2427,2429,2432,2434,2437,2440,2443,2445,2447,2449],{"class":324,"line":2424},36,[322,2426,1228],{"class":405},[322,2428,548],{"class":409},[322,2430,2431],{"class":345},"'Token: ",[322,2433,1236],{"class":409},[322,2435,2436],{"class":1243},"session",[322,2438,2439],{"class":409},"?.",[322,2441,2442],{"class":1243},"accessToken",[322,2444,1257],{"class":409},[322,2446,1260],{"class":345},[322,2448,769],{"class":409},[322,2450,389],{"class":332},[322,2452,2454],{"class":324,"line":2453},37,[322,2455,395],{"emptyLinePlaceholder":394},[322,2457,2459,2461,2463,2465,2467,2469,2471,2473],{"class":324,"line":2458},38,[322,2460,445],{"class":413},[322,2462,448],{"class":358},[322,2464,426],{"class":332},[322,2466,896],{"class":409},[322,2468,426],{"class":332},[322,2470,1293],{"class":405},[322,2472,432],{"class":409},[322,2474,389],{"class":332},[322,2476,2478,2480,2482,2485,2487,2489,2491,2493,2495,2498,2500,2502,2504,2507],{"class":324,"line":2477},39,[322,2479,1228],{"class":405},[322,2481,548],{"class":409},[322,2483,2484],{"class":345},"'isAuthenticated: ",[322,2486,1236],{"class":409},[322,2488,1214],{"class":358},[322,2490,426],{"class":409},[322,2492,896],{"class":1243},[322,2494,426],{"class":409},[322,2496,2497],{"class":1243},"isAuthenticated",[322,2499,1257],{"class":409},[322,2501,1260],{"class":345},[322,2503,769],{"class":409},[322,2505,2506],{"class":332},";",[322,2508,2509],{"class":797}," // false\n",[322,2511,2513],{"class":324,"line":2512},40,[322,2514,395],{"emptyLinePlaceholder":394},[322,2516,2518,2520,2522,2524,2526,2528,2531,2533],{"class":324,"line":2517},41,[322,2519,445],{"class":413},[322,2521,448],{"class":358},[322,2523,426],{"class":332},[322,2525,896],{"class":409},[322,2527,426],{"class":332},[322,2529,2530],{"class":405},"dispose",[322,2532,432],{"class":409},[322,2534,389],{"class":332},[322,2536,2538],{"class":324,"line":2537},42,[322,2539,844],{"class":409},[299,2541],{},[302,2543,2545],{"id":2544},"whats-next","What's next?",[2547,2548,2549,2563,2570],"card-group",{},[2550,2551,2552,2553,2555,2556,2558,2559,2562],"card",{"icon":58,"title":55,"to":56},"How ",[319,2554,199],{},", ",[319,2557,203],{},", and ",[319,2560,2561],{},"SessionManager"," fit together.",[2550,2564,2566,2567,2569],{"icon":2565,"title":170,"to":171},"i-lucide-smartphone","Wire OAuth2 callbacks, configure ",[319,2568,851],{},", integrate GoRouter.",[2550,2571,2573,2574,2577],{"icon":2572,"title":94,"to":95},"i-lucide-book-open","Email / password in depth — basic and ",[319,2575,2576],{},".withTokens"," variants.",[2579,2580,2581],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":317,"searchDepth":336,"depth":336,"links":2583},[2584,2591,2598,2599],{"id":304,"depth":336,"text":287,"children":2585},[2586,2587,2588,2589,2590],{"id":308,"depth":398,"text":309},{"id":368,"depth":398,"text":369},{"id":866,"depth":398,"text":867},{"id":986,"depth":398,"text":987},{"id":1271,"depth":398,"text":1272},{"id":1307,"depth":336,"text":1308,"children":2592},[2593,2594,2595,2596,2597],{"id":1311,"depth":398,"text":1312},{"id":1348,"depth":398,"text":1349},{"id":1680,"depth":398,"text":1681},{"id":1770,"depth":398,"text":1771},{"id":1932,"depth":398,"text":1933},{"id":1957,"depth":336,"text":1958},{"id":2544,"depth":336,"text":2545},"Add authentication to your Dart or Flutter project in under 5 minutes.","md",null,{},{"icon":24},{"title":2606,"description":2607},"Quick Start | Authyra","Step-by-step guide to add authentication to your Dart or Flutter project with Authyra.","jKrrNN9jZ2SjUbGC2KUr5FAbTclskXCOVWKLjHWgn0c",[2610,2612],{"title":16,"path":17,"stem":18,"description":2611,"icon":19,"children":-1},"Add Authyra to your Dart or Flutter project.",{"title":26,"path":27,"stem":28,"description":2613,"icon":29,"children":-1},"AuthConfig options — token lifetime, auto-refresh, and refresh threshold.",1782700506039]