[{"data":1,"prerenderedAt":2482},["ShallowReactive",2],{"navigation_docs":3,"-api-reference-authyra-client":265,"-api-reference-authyra-client-surround":2477},[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":199,"body":267,"description":2469,"extension":2470,"links":2471,"meta":2472,"navigation":318,"path":200,"seo":2473,"stem":201,"__hash__":2476},"docs/6.api-reference/1.authyra-client.md",{"type":268,"value":269,"toc":2447},"minimark",[270,275,287,412,428,431,435,501,576,583,585,589,594,597,621,624,653,663,685,687,691,694,760,806,815,819,840,908,910,914,917,937,940,970,989,991,995,998,1019,1031,1037,1088,1090,1094,1103,1124,1166,1168,1172,1179,1199,1201,1205,1208,1227,1230,1268,1278,1280,1284,1287,1293,1315,1398,1400,1404,1412,1432,1434,1437,1443,1458,1552,1554,1558,1566,1580,1582,1585,1588,1674,1787,1789,1792,1798,2419,2421,2425,2443],[271,272,274],"h2",{"id":273},"overview","Overview",[276,277,278,281,282,286],"p",{},[279,280,199],"code",{}," is the ",[283,284,285],"strong",{},"stateless core"," of Authyra. It orchestrates authentication providers and storage without holding any global state — making it fully injectable and trivially testable.",[288,289,294],"pre",{"className":290,"code":291,"language":292,"meta":293,"style":293},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import 'package:authyra/authyra.dart';\n\nfinal client = AuthyraClient(\n  providers: [GoogleProvider(clientId: 'YOUR_CLIENT_ID')],\n  storage:   InMemoryStorage(),\n  config:    const AuthConfig(),\n);\n","dart","",[279,295,296,313,320,341,370,386,404],{"__ignoreMap":293},[297,298,301,305,309],"span",{"class":299,"line":300},"line",1,[297,302,304],{"class":303},"sbssI","import",[297,306,308],{"class":307},"sfazB"," 'package:authyra/authyra.dart'",[297,310,312],{"class":311},"sMK4o",";\n",[297,314,316],{"class":299,"line":315},2,[297,317,319],{"emptyLinePlaceholder":318},true,"\n",[297,321,323,327,331,334,338],{"class":299,"line":322},3,[297,324,326],{"class":325},"spNyl","final",[297,328,330],{"class":329},"sTEyZ"," client ",[297,332,333],{"class":311},"=",[297,335,337],{"class":336},"sBMFI"," AuthyraClient",[297,339,340],{"class":329},"(\n",[297,342,344,347,350,353,356,359,361,364,367],{"class":299,"line":343},4,[297,345,346],{"class":329},"  providers",[297,348,349],{"class":311},":",[297,351,352],{"class":329}," [",[297,354,355],{"class":336},"GoogleProvider",[297,357,358],{"class":329},"(clientId",[297,360,349],{"class":311},[297,362,363],{"class":307}," 'YOUR_CLIENT_ID'",[297,365,366],{"class":329},")]",[297,368,369],{"class":311},",\n",[297,371,373,376,378,381,384],{"class":299,"line":372},5,[297,374,375],{"class":329},"  storage",[297,377,349],{"class":311},[297,379,380],{"class":336},"   InMemoryStorage",[297,382,383],{"class":329},"()",[297,385,369],{"class":311},[297,387,389,392,394,397,400,402],{"class":299,"line":388},6,[297,390,391],{"class":329},"  config",[297,393,349],{"class":311},[297,395,396],{"class":325},"    const",[297,398,399],{"class":336}," AuthConfig",[297,401,383],{"class":329},[297,403,369],{"class":311},[297,405,407,410],{"class":299,"line":406},7,[297,408,409],{"class":329},")",[297,411,312],{"class":311},[276,413,414,415,417,418,420,421,424,425,427],{},"You rarely interact with ",[279,416,199],{}," directly in application code — ",[279,419,203],{}," (via ",[279,422,423],{},"Authyra.instance",") is the app-facing singleton. Use ",[279,426,199],{}," directly when writing tests or building backend services.",[429,430],"hr",{},[271,432,434],{"id":433},"constructor","Constructor",[288,436,438],{"className":290,"code":437,"language":292,"meta":293,"style":293},"AuthyraClient({\n  required List\u003CAuthProvider> providers,\n  required AuthStorage        storage,\n  AuthConfig                  config = const AuthConfig(),\n})\n",[279,439,440,447,465,477,496],{"__ignoreMap":293},[297,441,442,444],{"class":299,"line":300},[297,443,199],{"class":336},[297,445,446],{"class":329},"({\n",[297,448,449,452,455,458,460,463],{"class":299,"line":315},[297,450,451],{"class":325},"  required",[297,453,454],{"class":336}," List",[297,456,457],{"class":329},"\u003C",[297,459,212],{"class":336},[297,461,462],{"class":329},"> providers",[297,464,369],{"class":311},[297,466,467,469,472,475],{"class":299,"line":322},[297,468,451],{"class":325},[297,470,471],{"class":336}," AuthStorage",[297,473,474],{"class":329},"        storage",[297,476,369],{"class":311},[297,478,479,482,485,487,490,492,494],{"class":299,"line":343},[297,480,481],{"class":336},"  AuthConfig",[297,483,484],{"class":329},"                  config ",[297,486,333],{"class":311},[297,488,489],{"class":325}," const",[297,491,399],{"class":336},[297,493,383],{"class":329},[297,495,369],{"class":311},[297,497,498],{"class":299,"line":372},[297,499,500],{"class":329},"})\n",[502,503,504,520],"table",{},[505,506,507],"thead",{},[508,509,510,514,517],"tr",{},[511,512,513],"th",{},"Parameter",[511,515,516],{},"Type",[511,518,519],{},"Description",[521,522,523,543,561],"tbody",{},[508,524,525,531,536],{},[526,527,528],"td",{},[279,529,530],{},"providers",[526,532,533],{},[279,534,535],{},"List\u003CAuthProvider>",[526,537,538,539,542],{},"One or more auth strategies. Each must have a unique ",[279,540,541],{},"id",".",[508,544,545,550,554],{},[526,546,547],{},[279,548,549],{},"storage",[526,551,552],{},[279,553,217],{},[526,555,556,557,560],{},"Persistence backend. Use ",[279,558,559],{},"InMemoryAuthStorage"," for tests.",[508,562,563,568,573],{},[526,564,565],{},[279,566,567],{},"config",[526,569,570],{},[279,571,572],{},"AuthConfig",[526,574,575],{},"Optional tuning: token lifetime, refresh threshold, max accounts.",[276,577,578,579,582],{},"The constructor validates provider IDs synchronously and throws ",[279,580,581],{},"ArgumentError"," on duplicates.",[429,584],{},[271,586,588],{"id":587},"methods","Methods",[590,591,593],"h3",{"id":592},"initialize","initialize()",[276,595,596],{},"Prepares the client for use. Must be called once before any other method.",[288,598,600],{"className":290,"code":599,"language":292,"meta":293,"style":293},"Future\u003Cvoid> initialize()\n",[279,601,602],{"__ignoreMap":293},[297,603,604,607,609,612,615,618],{"class":299,"line":300},[297,605,606],{"class":336},"Future",[297,608,457],{"class":329},[297,610,611],{"class":325},"void",[297,613,614],{"class":329},"> ",[297,616,592],{"class":617},"s2Zo4",[297,619,620],{"class":329},"()\n",[276,622,623],{},"What it does:",[625,626,627,634,641,644],"ul",{},[628,629,630,631,542],"li",{},"Calls ",[279,632,633],{},"storage.initialize()",[628,635,636,637,640],{},"Loads and deserialises the ",[279,638,639],{},"SessionRegistry"," from storage.",[628,642,643],{},"Restores the active session if one exists.",[628,645,646,647,649,650,542],{},"Emits an initial ",[279,648,226],{}," on ",[279,651,652],{},"authStateStream",[276,654,655,658,659,662],{},[283,656,657],{},"Throws",": ",[279,660,661],{},"StorageException"," if the storage backend cannot be initialised.",[288,664,666],{"className":290,"code":665,"language":292,"meta":293,"style":293},"await client.initialize();\n",[279,667,668],{"__ignoreMap":293},[297,669,670,674,677,679,681,683],{"class":299,"line":300},[297,671,673],{"class":672},"s7zQu","await",[297,675,676],{"class":329}," client",[297,678,542],{"class":311},[297,680,592],{"class":617},[297,682,383],{"class":329},[297,684,312],{"class":311},[429,686],{},[590,688,690],{"id":689},"signin","signIn()",[276,692,693],{},"Authenticates a user via the named provider.",[288,695,697],{"className":290,"code":696,"language":292,"meta":293,"style":293},"Future\u003CAuthUser> signIn(\n  String providerId, {\n  Map\u003CString, dynamic>? params,\n})\n",[279,698,699,715,729,756],{"__ignoreMap":293},[297,700,701,703,705,708,710,713],{"class":299,"line":300},[297,702,606],{"class":336},[297,704,457],{"class":329},[297,706,707],{"class":336},"AuthUser",[297,709,614],{"class":329},[297,711,712],{"class":617},"signIn",[297,714,340],{"class":329},[297,716,717,720,723,726],{"class":299,"line":315},[297,718,719],{"class":336},"  String",[297,721,722],{"class":329}," providerId",[297,724,725],{"class":311},",",[297,727,728],{"class":329}," {\n",[297,730,731,734,736,739,742,745,748,751,754],{"class":299,"line":322},[297,732,733],{"class":336},"  Map",[297,735,457],{"class":329},[297,737,738],{"class":336},"String",[297,740,741],{"class":329},", ",[297,743,744],{"class":336},"dynamic",[297,746,747],{"class":329},">",[297,749,750],{"class":311},"?",[297,752,753],{"class":329}," params",[297,755,369],{"class":311},[297,757,758],{"class":299,"line":343},[297,759,500],{"class":329},[502,761,762,772],{},[505,763,764],{},[508,765,766,768,770],{},[511,767,513],{},[511,769,516],{},[511,771,519],{},[521,773,774,791],{},[508,775,776,781,785],{},[526,777,778],{},[279,779,780],{},"providerId",[526,782,783],{},[279,784,738],{},[526,786,787,788,790],{},"The ",[279,789,541],{}," of the registered provider to use.",[508,792,793,798,803],{},[526,794,795],{},[279,796,797],{},"params",[526,799,800],{},[279,801,802],{},"Map\u003CString, dynamic>?",[526,804,805],{},"Provider-specific input (credentials, OAuth code, etc.).",[276,807,808,811,812,814],{},[283,809,810],{},"Returns"," ",[279,813,707],{}," — the authenticated user's profile.",[276,816,817,349],{},[283,818,657],{},[625,820,821,830],{},[628,822,823,826,827,829],{},[279,824,825],{},"ProviderNotFoundException"," — no provider with that ",[279,828,541],{}," is registered.",[628,831,832,835,836,839],{},[279,833,834],{},"AuthenticationFailedException"," — the provider returned ",[279,837,838],{},"null"," (wrong credentials) or an infrastructure error occurred.",[288,841,843],{"className":290,"code":842,"language":292,"meta":293,"style":293},"final user = await client.signIn('email', params: {\n  'email':    'alice@example.com',\n  'password': 'secret',\n});\n",[279,844,845,877,889,901],{"__ignoreMap":293},[297,846,847,849,852,854,857,859,861,863,866,869,871,873,875],{"class":299,"line":300},[297,848,326],{"class":325},[297,850,851],{"class":329}," user ",[297,853,333],{"class":311},[297,855,856],{"class":672}," await",[297,858,676],{"class":329},[297,860,542],{"class":311},[297,862,712],{"class":617},[297,864,865],{"class":329},"(",[297,867,868],{"class":307},"'email'",[297,870,725],{"class":311},[297,872,753],{"class":329},[297,874,349],{"class":311},[297,876,728],{"class":329},[297,878,879,882,884,887],{"class":299,"line":315},[297,880,881],{"class":307},"  'email'",[297,883,349],{"class":311},[297,885,886],{"class":307},"    'alice@example.com'",[297,888,369],{"class":311},[297,890,891,894,896,899],{"class":299,"line":322},[297,892,893],{"class":307},"  'password'",[297,895,349],{"class":311},[297,897,898],{"class":307}," 'secret'",[297,900,369],{"class":311},[297,902,903,906],{"class":299,"line":343},[297,904,905],{"class":329},"})",[297,907,312],{"class":311},[429,909],{},[590,911,913],{"id":912},"signout","signOut()",[276,915,916],{},"Signs out the currently active account.",[288,918,920],{"className":290,"code":919,"language":292,"meta":293,"style":293},"Future\u003Cvoid> signOut()\n",[279,921,922],{"__ignoreMap":293},[297,923,924,926,928,930,932,935],{"class":299,"line":300},[297,925,606],{"class":336},[297,927,457],{"class":329},[297,929,611],{"class":325},[297,931,614],{"class":329},[297,933,934],{"class":617},"signOut",[297,936,620],{"class":329},[276,938,939],{},"Steps:",[941,942,943,946,956,962],"ol",{},[628,944,945],{},"Retrieves the active session.",[628,947,948,949,952,953,542],{},"If the provider has ",[279,950,951],{},"supportsSignOut: true",", calls ",[279,954,955],{},"provider.signOut(userId)",[628,957,958,959,542],{},"Removes the session from ",[279,960,961],{},"SessionManager",[628,963,964,965,649,968,542],{},"Emits ",[279,966,967],{},"AuthState.unauthenticated()",[279,969,652],{},[288,971,973],{"className":290,"code":972,"language":292,"meta":293,"style":293},"await client.signOut();\n",[279,974,975],{"__ignoreMap":293},[297,976,977,979,981,983,985,987],{"class":299,"line":300},[297,978,673],{"class":672},[297,980,676],{"class":329},[297,982,542],{"class":311},[297,984,934],{"class":617},[297,986,383],{"class":329},[297,988,312],{"class":311},[429,990],{},[590,992,994],{"id":993},"refreshsession","refreshSession()",[276,996,997],{},"Silently refreshes the active session's access token.",[288,999,1001],{"className":290,"code":1000,"language":292,"meta":293,"style":293},"Future\u003Cbool> refreshSession()\n",[279,1002,1003],{"__ignoreMap":293},[297,1004,1005,1007,1009,1012,1014,1017],{"class":299,"line":300},[297,1006,606],{"class":336},[297,1008,457],{"class":329},[297,1010,1011],{"class":336},"bool",[297,1013,614],{"class":329},[297,1015,1016],{"class":617},"refreshSession",[297,1018,620],{"class":329},[276,1020,1021,811,1023,1026,1027,1030],{},[283,1022,810],{},[279,1024,1025],{},"true"," if the token was refreshed successfully, ",[279,1028,1029],{},"false"," if the refresh token is invalid or the provider does not support refresh.",[276,1032,1033,1034,1036],{},"Called automatically by ",[279,1035,203],{}," — you rarely need to call this directly.",[288,1038,1040],{"className":290,"code":1039,"language":292,"meta":293,"style":293},"final refreshed = await client.refreshSession();\nif (!refreshed) {\n  // Token is invalid — the session has been cleared.\n}\n",[279,1041,1042,1063,1077,1083],{"__ignoreMap":293},[297,1043,1044,1046,1049,1051,1053,1055,1057,1059,1061],{"class":299,"line":300},[297,1045,326],{"class":325},[297,1047,1048],{"class":329}," refreshed ",[297,1050,333],{"class":311},[297,1052,856],{"class":672},[297,1054,676],{"class":329},[297,1056,542],{"class":311},[297,1058,1016],{"class":617},[297,1060,383],{"class":329},[297,1062,312],{"class":311},[297,1064,1065,1068,1071,1074],{"class":299,"line":315},[297,1066,1067],{"class":672},"if",[297,1069,1070],{"class":329}," (",[297,1072,1073],{"class":311},"!",[297,1075,1076],{"class":329},"refreshed) {\n",[297,1078,1079],{"class":299,"line":322},[297,1080,1082],{"class":1081},"sHwdD","  // Token is invalid — the session has been cleared.\n",[297,1084,1085],{"class":299,"line":343},[297,1086,1087],{"class":329},"}\n",[429,1089],{},[590,1091,1093],{"id":1092},"getsession","getSession()",[276,1095,1096,1097,1099,1100,1102],{},"Returns the active ",[279,1098,222],{},", or ",[279,1101,838],{}," if no user is signed in.",[288,1104,1106],{"className":290,"code":1105,"language":292,"meta":293,"style":293},"Future\u003CAuthSession?> getSession()\n",[279,1107,1108],{"__ignoreMap":293},[297,1109,1110,1112,1114,1116,1119,1122],{"class":299,"line":300},[297,1111,606],{"class":336},[297,1113,457],{"class":329},[297,1115,222],{"class":336},[297,1117,1118],{"class":329},"?> ",[297,1120,1121],{"class":617},"getSession",[297,1123,620],{"class":329},[288,1125,1127],{"className":290,"code":1126,"language":292,"meta":293,"style":293},"final session = await client.getSession();\nprint(session?.accessToken);\n",[279,1128,1129,1150],{"__ignoreMap":293},[297,1130,1131,1133,1136,1138,1140,1142,1144,1146,1148],{"class":299,"line":300},[297,1132,326],{"class":325},[297,1134,1135],{"class":329}," session ",[297,1137,333],{"class":311},[297,1139,856],{"class":672},[297,1141,676],{"class":329},[297,1143,542],{"class":311},[297,1145,1121],{"class":617},[297,1147,383],{"class":329},[297,1149,312],{"class":311},[297,1151,1152,1155,1158,1161,1164],{"class":299,"line":315},[297,1153,1154],{"class":617},"print",[297,1156,1157],{"class":329},"(session",[297,1159,1160],{"class":311},"?.",[297,1162,1163],{"class":329},"accessToken)",[297,1165,312],{"class":311},[429,1167],{},[590,1169,1171],{"id":1170},"getuser","getUser()",[276,1173,1096,1174,1099,1176,1178],{},[279,1175,707],{},[279,1177,838],{}," if not authenticated.",[288,1180,1182],{"className":290,"code":1181,"language":292,"meta":293,"style":293},"Future\u003CAuthUser?> getUser()\n",[279,1183,1184],{"__ignoreMap":293},[297,1185,1186,1188,1190,1192,1194,1197],{"class":299,"line":300},[297,1187,606],{"class":336},[297,1189,457],{"class":329},[297,1191,707],{"class":336},[297,1193,1118],{"class":329},[297,1195,1196],{"class":617},"getUser",[297,1198,620],{"class":329},[429,1200],{},[590,1202,1204],{"id":1203},"registerprovider","registerProvider()",[276,1206,1207],{},"Dynamically adds a provider after construction.",[288,1209,1211],{"className":290,"code":1210,"language":292,"meta":293,"style":293},"void registerProvider(AuthProvider provider)\n",[279,1212,1213],{"__ignoreMap":293},[297,1214,1215,1217,1220,1222,1224],{"class":299,"line":300},[297,1216,611],{"class":325},[297,1218,1219],{"class":617}," registerProvider",[297,1221,865],{"class":329},[297,1223,212],{"class":336},[297,1225,1226],{"class":329}," provider)\n",[276,1228,1229],{},"Useful for providers that require runtime configuration (e.g., a tenant-specific OAuth client ID):",[288,1231,1233],{"className":290,"code":1232,"language":292,"meta":293,"style":293},"client.registerProvider(\n  OAuth2Provider(config: tenantConfig),\n);\n",[279,1234,1235,1247,1262],{"__ignoreMap":293},[297,1236,1237,1240,1242,1245],{"class":299,"line":300},[297,1238,1239],{"class":329},"client",[297,1241,542],{"class":311},[297,1243,1244],{"class":617},"registerProvider",[297,1246,340],{"class":329},[297,1248,1249,1252,1255,1257,1260],{"class":299,"line":315},[297,1250,1251],{"class":336},"  OAuth2Provider",[297,1253,1254],{"class":329},"(config",[297,1256,349],{"class":311},[297,1258,1259],{"class":329}," tenantConfig)",[297,1261,369],{"class":311},[297,1263,1264,1266],{"class":299,"line":322},[297,1265,409],{"class":329},[297,1267,312],{"class":311},[276,1269,1270,811,1272,1274,1275,1277],{},[283,1271,657],{},[279,1273,581],{}," if a provider with the same ",[279,1276,541],{}," is already registered.",[429,1279],{},[271,1281,1283],{"id":1282},"properties","Properties",[590,1285,652],{"id":1286},"authstatestream",[276,1288,1289,1290,1292],{},"Broadcast stream of ",[279,1291,226],{}," changes. Deduplicated — identical consecutive states are not re-emitted.",[288,1294,1296],{"className":290,"code":1295,"language":292,"meta":293,"style":293},"Stream\u003CAuthState> get authStateStream\n",[279,1297,1298],{"__ignoreMap":293},[297,1299,1300,1303,1305,1307,1309,1312],{"class":299,"line":300},[297,1301,1302],{"class":336},"Stream",[297,1304,457],{"class":329},[297,1306,226],{"class":336},[297,1308,614],{"class":329},[297,1310,1311],{"class":311},"get",[297,1313,1314],{"class":329}," authStateStream\n",[288,1316,1318],{"className":290,"code":1317,"language":292,"meta":293,"style":293},"client.authStateStream.listen((state) {\n  if (state.isAuthenticated) {\n    print('Signed in as ${state.user!.email}');\n  }\n});\n",[279,1319,1320,1336,1349,1387,1392],{"__ignoreMap":293},[297,1321,1322,1324,1326,1328,1330,1333],{"class":299,"line":300},[297,1323,1239],{"class":329},[297,1325,542],{"class":311},[297,1327,652],{"class":329},[297,1329,542],{"class":311},[297,1331,1332],{"class":617},"listen",[297,1334,1335],{"class":329},"((state) {\n",[297,1337,1338,1341,1344,1346],{"class":299,"line":315},[297,1339,1340],{"class":672},"  if",[297,1342,1343],{"class":329}," (state",[297,1345,542],{"class":311},[297,1347,1348],{"class":329},"isAuthenticated) {\n",[297,1350,1351,1354,1356,1359,1362,1366,1368,1371,1374,1377,1380,1383,1385],{"class":299,"line":322},[297,1352,1353],{"class":617},"    print",[297,1355,865],{"class":329},[297,1357,1358],{"class":307},"'Signed in as ",[297,1360,1361],{"class":329},"${",[297,1363,1365],{"class":1364},"sHdIc","state",[297,1367,542],{"class":329},[297,1369,1370],{"class":1364},"user",[297,1372,1373],{"class":329},"!.",[297,1375,1376],{"class":1364},"email",[297,1378,1379],{"class":329},"}",[297,1381,1382],{"class":307},"'",[297,1384,409],{"class":329},[297,1386,312],{"class":311},[297,1388,1389],{"class":299,"line":343},[297,1390,1391],{"class":329},"  }\n",[297,1393,1394,1396],{"class":299,"line":372},[297,1395,905],{"class":329},[297,1397,312],{"class":311},[429,1399],{},[590,1401,1403],{"id":1402},"sessionstream","sessionStream",[276,1405,1406,1407,1099,1409,1411],{},"Broadcast stream of the raw ",[279,1408,222],{},[279,1410,838],{}," on sign-out.",[288,1413,1415],{"className":290,"code":1414,"language":292,"meta":293,"style":293},"Stream\u003CAuthSession?> get sessionStream\n",[279,1416,1417],{"__ignoreMap":293},[297,1418,1419,1421,1423,1425,1427,1429],{"class":299,"line":300},[297,1420,1302],{"class":336},[297,1422,457],{"class":329},[297,1424,222],{"class":336},[297,1426,1118],{"class":329},[297,1428,1311],{"class":311},[297,1430,1431],{"class":329}," sessionStream\n",[429,1433],{},[590,1435,1436],{"id":1436},"accounts",[276,1438,1439,1440,1442],{},"Lazy accessor for the ",[279,1441,207],{},". Manages the multi-account session registry.",[288,1444,1446],{"className":290,"code":1445,"language":292,"meta":293,"style":293},"AccountManager get accounts\n",[279,1447,1448],{"__ignoreMap":293},[297,1449,1450,1452,1455],{"class":299,"line":300},[297,1451,207],{"class":336},[297,1453,1454],{"class":311}," get",[297,1456,1457],{"class":329}," accounts\n",[288,1459,1461],{"className":290,"code":1460,"language":292,"meta":293,"style":293},"await client.accounts.getAll();        // List\u003CAuthUser>\nawait client.accounts.switchTo(id);    // activate a different session\nawait client.accounts.signOut(id);     // sign out one account\nawait client.accounts.signOutAll();    // clear all sessions\n",[279,1462,1463,1486,1509,1530],{"__ignoreMap":293},[297,1464,1465,1467,1469,1471,1473,1475,1478,1480,1483],{"class":299,"line":300},[297,1466,673],{"class":672},[297,1468,676],{"class":329},[297,1470,542],{"class":311},[297,1472,1436],{"class":329},[297,1474,542],{"class":311},[297,1476,1477],{"class":617},"getAll",[297,1479,383],{"class":329},[297,1481,1482],{"class":311},";",[297,1484,1485],{"class":1081},"        // List\u003CAuthUser>\n",[297,1487,1488,1490,1492,1494,1496,1498,1501,1504,1506],{"class":299,"line":315},[297,1489,673],{"class":672},[297,1491,676],{"class":329},[297,1493,542],{"class":311},[297,1495,1436],{"class":329},[297,1497,542],{"class":311},[297,1499,1500],{"class":617},"switchTo",[297,1502,1503],{"class":329},"(id)",[297,1505,1482],{"class":311},[297,1507,1508],{"class":1081},"    // activate a different session\n",[297,1510,1511,1513,1515,1517,1519,1521,1523,1525,1527],{"class":299,"line":322},[297,1512,673],{"class":672},[297,1514,676],{"class":329},[297,1516,542],{"class":311},[297,1518,1436],{"class":329},[297,1520,542],{"class":311},[297,1522,934],{"class":617},[297,1524,1503],{"class":329},[297,1526,1482],{"class":311},[297,1528,1529],{"class":1081},"     // sign out one account\n",[297,1531,1532,1534,1536,1538,1540,1542,1545,1547,1549],{"class":299,"line":343},[297,1533,673],{"class":672},[297,1535,676],{"class":329},[297,1537,542],{"class":311},[297,1539,1436],{"class":329},[297,1541,542],{"class":311},[297,1543,1544],{"class":617},"signOutAll",[297,1546,383],{"class":329},[297,1548,1482],{"class":311},[297,1550,1551],{"class":1081},"    // clear all sessions\n",[429,1553],{},[590,1555,1557],{"id":1556},"isinitialized","isInitialized",[276,1559,1560,1562,1563,1565],{},[279,1561,1025],{}," after ",[279,1564,593],{}," has completed successfully.",[288,1567,1569],{"className":290,"code":1568,"language":292,"meta":293,"style":293},"bool get isInitialized\n",[279,1570,1571],{"__ignoreMap":293},[297,1572,1573,1575,1577],{"class":299,"line":300},[297,1574,1011],{"class":336},[297,1576,1454],{"class":311},[297,1578,1579],{"class":329}," isInitialized\n",[429,1581],{},[271,1583,572],{"id":1584},"authconfig",[276,1586,1587],{},"Fine-tune the client's session behaviour:",[288,1589,1591],{"className":290,"code":1590,"language":292,"meta":293,"style":293},"const AuthConfig({\n  int tokenLifetime      = 3600,  // seconds before access token expires\n  int refreshBeforeExpiry = 300,  // seconds before expiry to trigger refresh\n  int maxAccounts        = 5,     // maximum concurrent signed-in accounts\n  bool autoRefresh       = true,  // refresh token automatically when expired\n})\n",[279,1592,1593,1602,1620,1637,1654,1670],{"__ignoreMap":293},[297,1594,1595,1598,1600],{"class":299,"line":300},[297,1596,1597],{"class":325},"const",[297,1599,399],{"class":336},[297,1601,446],{"class":329},[297,1603,1604,1607,1610,1612,1615,1617],{"class":299,"line":315},[297,1605,1606],{"class":336},"  int",[297,1608,1609],{"class":329}," tokenLifetime      ",[297,1611,333],{"class":311},[297,1613,1614],{"class":303}," 3600",[297,1616,725],{"class":311},[297,1618,1619],{"class":1081},"  // seconds before access token expires\n",[297,1621,1622,1624,1627,1629,1632,1634],{"class":299,"line":322},[297,1623,1606],{"class":336},[297,1625,1626],{"class":329}," refreshBeforeExpiry ",[297,1628,333],{"class":311},[297,1630,1631],{"class":303}," 300",[297,1633,725],{"class":311},[297,1635,1636],{"class":1081},"  // seconds before expiry to trigger refresh\n",[297,1638,1639,1641,1644,1646,1649,1651],{"class":299,"line":343},[297,1640,1606],{"class":336},[297,1642,1643],{"class":329}," maxAccounts        ",[297,1645,333],{"class":311},[297,1647,1648],{"class":303}," 5",[297,1650,725],{"class":311},[297,1652,1653],{"class":1081},"     // maximum concurrent signed-in accounts\n",[297,1655,1656,1659,1662,1664,1667],{"class":299,"line":372},[297,1657,1658],{"class":336},"  bool",[297,1660,1661],{"class":329}," autoRefresh       ",[297,1663,333],{"class":311},[297,1665,1666],{"class":311}," true,",[297,1668,1669],{"class":1081},"  // refresh token automatically when expired\n",[297,1671,1672],{"class":299,"line":388},[297,1673,500],{"class":329},[288,1675,1677],{"className":290,"code":1676,"language":292,"meta":293,"style":293},"final client = AuthyraClient(\n  providers: [...],\n  storage:   storage,\n  config: const AuthConfig(\n    tokenLifetime:       7200,  // 2 hours\n    refreshBeforeExpiry: 600,   // refresh 10 minutes early\n    maxAccounts:         3,\n  ),\n);\n",[279,1678,1679,1691,1707,1718,1730,1745,1760,1772,1780],{"__ignoreMap":293},[297,1680,1681,1683,1685,1687,1689],{"class":299,"line":300},[297,1682,326],{"class":325},[297,1684,330],{"class":329},[297,1686,333],{"class":311},[297,1688,337],{"class":336},[297,1690,340],{"class":329},[297,1692,1693,1695,1697,1699,1702,1705],{"class":299,"line":315},[297,1694,346],{"class":329},[297,1696,349],{"class":311},[297,1698,352],{"class":329},[297,1700,1701],{"class":311},"...",[297,1703,1704],{"class":329},"]",[297,1706,369],{"class":311},[297,1708,1709,1711,1713,1716],{"class":299,"line":322},[297,1710,375],{"class":329},[297,1712,349],{"class":311},[297,1714,1715],{"class":329},"   storage",[297,1717,369],{"class":311},[297,1719,1720,1722,1724,1726,1728],{"class":299,"line":343},[297,1721,391],{"class":329},[297,1723,349],{"class":311},[297,1725,489],{"class":325},[297,1727,399],{"class":336},[297,1729,340],{"class":329},[297,1731,1732,1735,1737,1740,1742],{"class":299,"line":372},[297,1733,1734],{"class":329},"    tokenLifetime",[297,1736,349],{"class":311},[297,1738,1739],{"class":303},"       7200",[297,1741,725],{"class":311},[297,1743,1744],{"class":1081},"  // 2 hours\n",[297,1746,1747,1750,1752,1755,1757],{"class":299,"line":388},[297,1748,1749],{"class":329},"    refreshBeforeExpiry",[297,1751,349],{"class":311},[297,1753,1754],{"class":303}," 600",[297,1756,725],{"class":311},[297,1758,1759],{"class":1081},"   // refresh 10 minutes early\n",[297,1761,1762,1765,1767,1770],{"class":299,"line":406},[297,1763,1764],{"class":329},"    maxAccounts",[297,1766,349],{"class":311},[297,1768,1769],{"class":303},"         3",[297,1771,369],{"class":311},[297,1773,1775,1778],{"class":299,"line":1774},8,[297,1776,1777],{"class":329},"  )",[297,1779,369],{"class":311},[297,1781,1783,1785],{"class":299,"line":1782},9,[297,1784,409],{"class":329},[297,1786,312],{"class":311},[429,1788],{},[271,1790,160],{"id":1791},"testing",[276,1793,1794,1795,1797],{},"Prefer ",[279,1796,199],{}," directly in unit tests — no singleton to reset between tests:",[288,1799,1801],{"className":290,"code":1800,"language":292,"meta":293,"style":293},"import 'package:test/test.dart';\nimport 'package:authyra/authyra.dart';\n\nvoid main() {\n  late AuthyraClient client;\n\n  setUp(() async {\n    client = AuthyraClient(\n      providers: [\n        CredentialsProvider(\n          id: 'email',\n          authorize: (creds) async {\n            if (creds?['password'] == 'correct') {\n              return AuthUser(id: '1', email: creds!['email'] as String);\n            }\n            return null;\n          },\n        ),\n      ],\n      storage: InMemoryAuthStorage(),\n    );\n    await client.initialize();\n  });\n\n  test('returns user on valid credentials', () async {\n    final user = await client.signIn('email', params: {\n      'email':    'alice@example.com',\n      'password': 'correct',\n    });\n    expect(user.email, 'alice@example.com');\n  });\n\n  test('throws on invalid credentials', () async {\n    expect(\n      () => client.signIn('email', params: {'email': 'a@b.com', 'password': 'wrong'}),\n      throwsA(isA\u003CAuthenticationFailedException>()),\n    );\n  });\n\n  test('isAuthenticated after sign in', () async {\n    await client.signIn('email', params: {'email': 'a@b.com', 'password': 'correct'});\n    final session = await client.getSession();\n    expect(session, isNotNull);\n  });\n}\n",[279,1802,1803,1812,1820,1824,1834,1845,1849,1862,1873,1883,1891,1904,1919,1948,1993,1999,2008,2016,2024,2032,2047,2055,2071,2079,2084,2104,2134,2146,2158,2166,2188,2195,2200,2218,2225,2274,2294,2301,2308,2313,2331,2372,2393,2407,2414],{"__ignoreMap":293},[297,1804,1805,1807,1810],{"class":299,"line":300},[297,1806,304],{"class":303},[297,1808,1809],{"class":307}," 'package:test/test.dart'",[297,1811,312],{"class":311},[297,1813,1814,1816,1818],{"class":299,"line":315},[297,1815,304],{"class":303},[297,1817,308],{"class":307},[297,1819,312],{"class":311},[297,1821,1822],{"class":299,"line":322},[297,1823,319],{"emptyLinePlaceholder":318},[297,1825,1826,1828,1831],{"class":299,"line":343},[297,1827,611],{"class":325},[297,1829,1830],{"class":617}," main",[297,1832,1833],{"class":329},"() {\n",[297,1835,1836,1839,1841,1843],{"class":299,"line":372},[297,1837,1838],{"class":325},"  late",[297,1840,337],{"class":336},[297,1842,676],{"class":329},[297,1844,312],{"class":311},[297,1846,1847],{"class":299,"line":388},[297,1848,319],{"emptyLinePlaceholder":318},[297,1850,1851,1854,1857,1860],{"class":299,"line":406},[297,1852,1853],{"class":617},"  setUp",[297,1855,1856],{"class":329},"(() ",[297,1858,1859],{"class":672},"async",[297,1861,728],{"class":329},[297,1863,1864,1867,1869,1871],{"class":299,"line":1774},[297,1865,1866],{"class":329},"    client ",[297,1868,333],{"class":311},[297,1870,337],{"class":336},[297,1872,340],{"class":329},[297,1874,1875,1878,1880],{"class":299,"line":1782},[297,1876,1877],{"class":329},"      providers",[297,1879,349],{"class":311},[297,1881,1882],{"class":329}," [\n",[297,1884,1886,1889],{"class":299,"line":1885},10,[297,1887,1888],{"class":336},"        CredentialsProvider",[297,1890,340],{"class":329},[297,1892,1894,1897,1899,1902],{"class":299,"line":1893},11,[297,1895,1896],{"class":329},"          id",[297,1898,349],{"class":311},[297,1900,1901],{"class":307}," 'email'",[297,1903,369],{"class":311},[297,1905,1907,1910,1912,1915,1917],{"class":299,"line":1906},12,[297,1908,1909],{"class":329},"          authorize",[297,1911,349],{"class":311},[297,1913,1914],{"class":329}," (creds) ",[297,1916,1859],{"class":672},[297,1918,728],{"class":329},[297,1920,1922,1925,1928,1930,1933,1936,1939,1942,1945],{"class":299,"line":1921},13,[297,1923,1924],{"class":672},"            if",[297,1926,1927],{"class":329}," (creds",[297,1929,750],{"class":311},[297,1931,1932],{"class":329},"[",[297,1934,1935],{"class":307},"'password'",[297,1937,1938],{"class":329},"] ",[297,1940,1941],{"class":311},"==",[297,1943,1944],{"class":307}," 'correct'",[297,1946,1947],{"class":329},") {\n",[297,1949,1951,1954,1957,1960,1962,1965,1967,1970,1972,1975,1977,1979,1981,1983,1986,1989,1991],{"class":299,"line":1950},14,[297,1952,1953],{"class":672},"              return",[297,1955,1956],{"class":336}," AuthUser",[297,1958,1959],{"class":329},"(id",[297,1961,349],{"class":311},[297,1963,1964],{"class":307}," '1'",[297,1966,725],{"class":311},[297,1968,1969],{"class":329}," email",[297,1971,349],{"class":311},[297,1973,1974],{"class":329}," creds",[297,1976,1073],{"class":311},[297,1978,1932],{"class":329},[297,1980,868],{"class":307},[297,1982,1938],{"class":329},[297,1984,1985],{"class":311},"as",[297,1987,1988],{"class":336}," String",[297,1990,409],{"class":329},[297,1992,312],{"class":311},[297,1994,1996],{"class":299,"line":1995},15,[297,1997,1998],{"class":329},"            }\n",[297,2000,2002,2005],{"class":299,"line":2001},16,[297,2003,2004],{"class":672},"            return",[297,2006,2007],{"class":311}," null;\n",[297,2009,2011,2014],{"class":299,"line":2010},17,[297,2012,2013],{"class":329},"          }",[297,2015,369],{"class":311},[297,2017,2019,2022],{"class":299,"line":2018},18,[297,2020,2021],{"class":329},"        )",[297,2023,369],{"class":311},[297,2025,2027,2030],{"class":299,"line":2026},19,[297,2028,2029],{"class":329},"      ]",[297,2031,369],{"class":311},[297,2033,2035,2038,2040,2043,2045],{"class":299,"line":2034},20,[297,2036,2037],{"class":329},"      storage",[297,2039,349],{"class":311},[297,2041,2042],{"class":336}," InMemoryAuthStorage",[297,2044,383],{"class":329},[297,2046,369],{"class":311},[297,2048,2050,2053],{"class":299,"line":2049},21,[297,2051,2052],{"class":329},"    )",[297,2054,312],{"class":311},[297,2056,2058,2061,2063,2065,2067,2069],{"class":299,"line":2057},22,[297,2059,2060],{"class":672},"    await",[297,2062,676],{"class":329},[297,2064,542],{"class":311},[297,2066,592],{"class":617},[297,2068,383],{"class":329},[297,2070,312],{"class":311},[297,2072,2074,2077],{"class":299,"line":2073},23,[297,2075,2076],{"class":329},"  })",[297,2078,312],{"class":311},[297,2080,2082],{"class":299,"line":2081},24,[297,2083,319],{"emptyLinePlaceholder":318},[297,2085,2087,2090,2092,2095,2097,2100,2102],{"class":299,"line":2086},25,[297,2088,2089],{"class":617},"  test",[297,2091,865],{"class":329},[297,2093,2094],{"class":307},"'returns user on valid credentials'",[297,2096,725],{"class":311},[297,2098,2099],{"class":329}," () ",[297,2101,1859],{"class":672},[297,2103,728],{"class":329},[297,2105,2107,2110,2112,2114,2116,2118,2120,2122,2124,2126,2128,2130,2132],{"class":299,"line":2106},26,[297,2108,2109],{"class":325},"    final",[297,2111,851],{"class":329},[297,2113,333],{"class":311},[297,2115,856],{"class":672},[297,2117,676],{"class":329},[297,2119,542],{"class":311},[297,2121,712],{"class":617},[297,2123,865],{"class":329},[297,2125,868],{"class":307},[297,2127,725],{"class":311},[297,2129,753],{"class":329},[297,2131,349],{"class":311},[297,2133,728],{"class":329},[297,2135,2137,2140,2142,2144],{"class":299,"line":2136},27,[297,2138,2139],{"class":307},"      'email'",[297,2141,349],{"class":311},[297,2143,886],{"class":307},[297,2145,369],{"class":311},[297,2147,2149,2152,2154,2156],{"class":299,"line":2148},28,[297,2150,2151],{"class":307},"      'password'",[297,2153,349],{"class":311},[297,2155,1944],{"class":307},[297,2157,369],{"class":311},[297,2159,2161,2164],{"class":299,"line":2160},29,[297,2162,2163],{"class":329},"    })",[297,2165,312],{"class":311},[297,2167,2169,2172,2175,2177,2179,2181,2184,2186],{"class":299,"line":2168},30,[297,2170,2171],{"class":617},"    expect",[297,2173,2174],{"class":329},"(user",[297,2176,542],{"class":311},[297,2178,1376],{"class":329},[297,2180,725],{"class":311},[297,2182,2183],{"class":307}," 'alice@example.com'",[297,2185,409],{"class":329},[297,2187,312],{"class":311},[297,2189,2191,2193],{"class":299,"line":2190},31,[297,2192,2076],{"class":329},[297,2194,312],{"class":311},[297,2196,2198],{"class":299,"line":2197},32,[297,2199,319],{"emptyLinePlaceholder":318},[297,2201,2203,2205,2207,2210,2212,2214,2216],{"class":299,"line":2202},33,[297,2204,2089],{"class":617},[297,2206,865],{"class":329},[297,2208,2209],{"class":307},"'throws on invalid credentials'",[297,2211,725],{"class":311},[297,2213,2099],{"class":329},[297,2215,1859],{"class":672},[297,2217,728],{"class":329},[297,2219,2221,2223],{"class":299,"line":2220},34,[297,2222,2171],{"class":617},[297,2224,340],{"class":329},[297,2226,2228,2231,2234,2236,2238,2240,2242,2244,2246,2248,2250,2253,2255,2257,2260,2262,2265,2267,2270,2272],{"class":299,"line":2227},35,[297,2229,2230],{"class":329},"      () ",[297,2232,2233],{"class":311},"=>",[297,2235,676],{"class":329},[297,2237,542],{"class":311},[297,2239,712],{"class":617},[297,2241,865],{"class":329},[297,2243,868],{"class":307},[297,2245,725],{"class":311},[297,2247,753],{"class":329},[297,2249,349],{"class":311},[297,2251,2252],{"class":329}," {",[297,2254,868],{"class":307},[297,2256,349],{"class":311},[297,2258,2259],{"class":307}," 'a@b.com'",[297,2261,725],{"class":311},[297,2263,2264],{"class":307}," 'password'",[297,2266,349],{"class":311},[297,2268,2269],{"class":307}," 'wrong'",[297,2271,905],{"class":329},[297,2273,369],{"class":311},[297,2275,2277,2280,2282,2285,2287,2289,2292],{"class":299,"line":2276},36,[297,2278,2279],{"class":617},"      throwsA",[297,2281,865],{"class":329},[297,2283,2284],{"class":617},"isA",[297,2286,457],{"class":329},[297,2288,834],{"class":336},[297,2290,2291],{"class":329},">())",[297,2293,369],{"class":311},[297,2295,2297,2299],{"class":299,"line":2296},37,[297,2298,2052],{"class":329},[297,2300,312],{"class":311},[297,2302,2304,2306],{"class":299,"line":2303},38,[297,2305,2076],{"class":329},[297,2307,312],{"class":311},[297,2309,2311],{"class":299,"line":2310},39,[297,2312,319],{"emptyLinePlaceholder":318},[297,2314,2316,2318,2320,2323,2325,2327,2329],{"class":299,"line":2315},40,[297,2317,2089],{"class":617},[297,2319,865],{"class":329},[297,2321,2322],{"class":307},"'isAuthenticated after sign in'",[297,2324,725],{"class":311},[297,2326,2099],{"class":329},[297,2328,1859],{"class":672},[297,2330,728],{"class":329},[297,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368,2370],{"class":299,"line":2333},41,[297,2335,2060],{"class":672},[297,2337,676],{"class":329},[297,2339,542],{"class":311},[297,2341,712],{"class":617},[297,2343,865],{"class":329},[297,2345,868],{"class":307},[297,2347,725],{"class":311},[297,2349,753],{"class":329},[297,2351,349],{"class":311},[297,2353,2252],{"class":329},[297,2355,868],{"class":307},[297,2357,349],{"class":311},[297,2359,2259],{"class":307},[297,2361,725],{"class":311},[297,2363,2264],{"class":307},[297,2365,349],{"class":311},[297,2367,1944],{"class":307},[297,2369,905],{"class":329},[297,2371,312],{"class":311},[297,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391],{"class":299,"line":2374},42,[297,2376,2109],{"class":325},[297,2378,1135],{"class":329},[297,2380,333],{"class":311},[297,2382,856],{"class":672},[297,2384,676],{"class":329},[297,2386,542],{"class":311},[297,2388,1121],{"class":617},[297,2390,383],{"class":329},[297,2392,312],{"class":311},[297,2394,2396,2398,2400,2402,2405],{"class":299,"line":2395},43,[297,2397,2171],{"class":617},[297,2399,1157],{"class":329},[297,2401,725],{"class":311},[297,2403,2404],{"class":329}," isNotNull)",[297,2406,312],{"class":311},[297,2408,2410,2412],{"class":299,"line":2409},44,[297,2411,2076],{"class":329},[297,2413,312],{"class":311},[297,2415,2417],{"class":299,"line":2416},45,[297,2418,1087],{"class":329},[429,2420],{},[271,2422,2424],{"id":2423},"see-also","See Also",[625,2426,2427,2433,2438],{},[628,2428,2429],{},[2430,2431,2432],"a",{"href":204},"AuthyraInstance API →",[628,2434,2435],{},[2430,2436,2437],{"href":56},"Architecture →",[628,2439,2440],{},[2430,2441,2442],{"href":22},"Quick Start →",[2444,2445,2446],"style",{},"html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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":293,"searchDepth":315,"depth":315,"links":2448},[2449,2450,2451,2460,2466,2467,2468],{"id":273,"depth":315,"text":274},{"id":433,"depth":315,"text":434},{"id":587,"depth":315,"text":588,"children":2452},[2453,2454,2455,2456,2457,2458,2459],{"id":592,"depth":322,"text":593},{"id":689,"depth":322,"text":690},{"id":912,"depth":322,"text":913},{"id":993,"depth":322,"text":994},{"id":1092,"depth":322,"text":1093},{"id":1170,"depth":322,"text":1171},{"id":1203,"depth":322,"text":1204},{"id":1282,"depth":315,"text":1283,"children":2461},[2462,2463,2464,2465],{"id":1286,"depth":322,"text":652},{"id":1402,"depth":322,"text":1403},{"id":1436,"depth":322,"text":1436},{"id":1556,"depth":322,"text":1557},{"id":1584,"depth":315,"text":572},{"id":1791,"depth":315,"text":160},{"id":2423,"depth":315,"text":2424},"Complete API reference for AuthyraClient — the stateless orchestration layer.","md",null,{},{"title":2474,"description":2475},"AuthyraClient API | Authyra","Full reference for AuthyraClient constructor, methods, and properties.","Olmop5038FZUL772e-wVacuUirGKpm7k-tN92kZkOpo",[2478,2480],{"title":189,"path":190,"stem":191,"description":2479,"icon":192,"children":-1},"AuthyraAppBinding — WidgetsBindingObserver pour mettre en pause le token refresh quand l'app passe en background.",{"title":203,"path":204,"stem":205,"description":2481,"children":-1},"Complete API reference for AuthyraInstance — the reactive singleton entry point.",1782700512604]