[{"data":1,"prerenderedAt":2357},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-reactivity":265,"-core-concepts-reactivity-surround":2352},[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":75,"body":267,"description":2343,"extension":2344,"links":2345,"meta":2346,"navigation":2347,"path":76,"seo":2348,"stem":77,"__hash__":2351},"docs/2.core-concepts/5.reactivity.md",{"type":268,"value":269,"toc":2329},"minimark",[270,277,280,285,292,326,329,427,442,448,469,487,574,576,580,597,689,699,768,770,774,777,988,998,1000,1004,1200,1205,1250,1252,1256,1619,1621,1625,1635,2006,2015,2017,2021,2024,2221,2223,2227,2236,2249,2285,2287,2291,2325],[271,272,273,276],"p",{},[274,275,203],"code",{}," exposes two broadcast streams and a synchronous state cache. Every auth event — sign-in, sign-out, token refresh, session restore — propagates through these streams automatically. Wire them to any state management solution or UI primitive.",[278,279],"hr",{},[281,282,284],"h2",{"id":283},"streams","Streams",[286,287,289],"h3",{"id":288},"authstatechanges",[274,290,291],{},"authStateChanges",[293,294,299],"pre",{"className":295,"code":296,"language":297,"meta":298,"style":298},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Stream\u003CAuthState> get authStateChanges\n","dart","",[274,300,301],{"__ignoreMap":298},[302,303,306,310,314,316,319,323],"span",{"class":304,"line":305},"line",1,[302,307,309],{"class":308},"sBMFI","Stream",[302,311,313],{"class":312},"sTEyZ","\u003C",[302,315,226],{"class":308},[302,317,318],{"class":312},"> ",[302,320,322],{"class":321},"sMK4o","get",[302,324,325],{"class":312}," authStateChanges\n",[271,327,328],{},"The primary stream. Emits every time the auth state transitions:",[330,331,332,345],"table",{},[333,334,335],"thead",{},[336,337,338,342],"tr",{},[339,340,341],"th",{},"Event",[339,343,344],{},"Emitted state",[346,347,348,362,374,386,398,408,417],"tbody",{},[336,349,350,357],{},[351,352,353,356],"td",{},[274,354,355],{},"initialize()"," restores a session",[351,358,359],{},[274,360,361],{},"AuthState.authenticated(user)",[336,363,364,369],{},[351,365,366,368],{},[274,367,355],{}," finds no session",[351,370,371],{},[274,372,373],{},"AuthState.unauthenticated()",[336,375,376,382],{},[351,377,378,381],{},[274,379,380],{},"signIn()"," succeeds",[351,383,384],{},[274,385,361],{},[336,387,388,394],{},[351,389,390,393],{},[274,391,392],{},"signOut()"," completes",[351,395,396],{},[274,397,373],{},[336,399,400,403],{},[351,401,402],{},"Token refresh succeeds",[351,404,405,407],{},[274,406,361],{}," (same user, new token)",[336,409,410,413],{},[351,411,412],{},"Token refresh fails (expired)",[351,414,415],{},[274,416,373],{},[336,418,419,422],{},[351,420,421],{},"Auth error",[351,423,424],{},[274,425,426],{},"AuthState.error(message)",[271,428,429,430,432,433,436,437,441],{},"Because ",[274,431,226],{}," uses ",[274,434,435],{},"Equatable",", identical consecutive states are ",[438,439,440],"strong",{},"deduplicated"," — no spurious widget rebuilds.",[286,443,445],{"id":444},"sessionstream",[274,446,447],{},"sessionStream",[293,449,451],{"className":295,"code":450,"language":297,"meta":298,"style":298},"Stream\u003CAuthSession?> get sessionStream\n",[274,452,453],{"__ignoreMap":298},[302,454,455,457,459,461,464,466],{"class":304,"line":305},[302,456,309],{"class":308},[302,458,313],{"class":312},[302,460,222],{"class":308},[302,462,463],{"class":312},"?> ",[302,465,322],{"class":321},[302,467,468],{"class":312}," sessionStream\n",[271,470,471,472,474,475,478,479,482,483,486],{},"The lower-level stream carrying the full ",[274,473,222],{}," — includes tokens, ",[274,476,477],{},"expiresAt",", ",[274,480,481],{},"providerId",", and ",[274,484,485],{},"linkedProviders",". Use this when you need token data reactively (e.g., to update an HTTP interceptor).",[293,488,490],{"className":295,"code":489,"language":297,"meta":298,"style":298},"Authyra.instance.sessionStream.listen((session) {\n  if (session != null) {\n    httpClient.token = session.accessToken;\n  }\n});\n",[274,491,492,516,535,560,566],{"__ignoreMap":298},[302,493,494,497,500,503,505,507,509,513],{"class":304,"line":305},[302,495,496],{"class":308},"Authyra",[302,498,499],{"class":321},".",[302,501,502],{"class":312},"instance",[302,504,499],{"class":321},[302,506,447],{"class":312},[302,508,499],{"class":321},[302,510,512],{"class":511},"s2Zo4","listen",[302,514,515],{"class":312},"((session) {\n",[302,517,519,523,526,529,532],{"class":304,"line":518},2,[302,520,522],{"class":521},"s7zQu","  if",[302,524,525],{"class":312}," (session ",[302,527,528],{"class":321},"!=",[302,530,531],{"class":321}," null",[302,533,534],{"class":312},") {\n",[302,536,538,541,543,546,549,552,554,557],{"class":304,"line":537},3,[302,539,540],{"class":312},"    httpClient",[302,542,499],{"class":321},[302,544,545],{"class":312},"token ",[302,547,548],{"class":321},"=",[302,550,551],{"class":312}," session",[302,553,499],{"class":321},[302,555,556],{"class":312},"accessToken",[302,558,559],{"class":321},";\n",[302,561,563],{"class":304,"line":562},4,[302,564,565],{"class":312},"  }\n",[302,567,569,572],{"class":304,"line":568},5,[302,570,571],{"class":312},"})",[302,573,559],{"class":321},[278,575],{},[281,577,579],{"id":578},"synchronous-state-cache","Synchronous state cache",[271,581,582,584,585,588,589,592,593,596],{},[274,583,203],{}," maintains an in-memory cache updated synchronously on every state change. Safe to call in ",[274,586,587],{},"build()"," without ",[274,590,591],{},"setState"," or ",[274,594,595],{},"await",":",[293,598,600],{"className":295,"code":599,"language":297,"meta":298,"style":298},"// All synchronous — no await, no FutureBuilder\nfinal AuthUser?  user   = Authyra.instance.currentUser;\nfinal bool       auth   = Authyra.instance.isAuthenticated;\nfinal AuthState  state  = Authyra.instance.currentState;\n",[274,601,602,608,639,664],{"__ignoreMap":298},[302,603,604],{"class":304,"line":305},[302,605,607],{"class":606},"sHwdD","// All synchronous — no await, no FutureBuilder\n",[302,609,610,614,617,620,623,625,628,630,632,634,637],{"class":304,"line":518},[302,611,613],{"class":612},"spNyl","final",[302,615,616],{"class":308}," AuthUser",[302,618,619],{"class":321},"?",[302,621,622],{"class":312},"  user   ",[302,624,548],{"class":321},[302,626,627],{"class":308}," Authyra",[302,629,499],{"class":321},[302,631,502],{"class":312},[302,633,499],{"class":321},[302,635,636],{"class":312},"currentUser",[302,638,559],{"class":321},[302,640,641,643,646,649,651,653,655,657,659,662],{"class":304,"line":537},[302,642,613],{"class":612},[302,644,645],{"class":308}," bool",[302,647,648],{"class":312},"       auth   ",[302,650,548],{"class":321},[302,652,627],{"class":308},[302,654,499],{"class":321},[302,656,502],{"class":312},[302,658,499],{"class":321},[302,660,661],{"class":312},"isAuthenticated",[302,663,559],{"class":321},[302,665,666,668,671,674,676,678,680,682,684,687],{"class":304,"line":562},[302,667,613],{"class":612},[302,669,670],{"class":308}," AuthState",[302,672,673],{"class":312},"  state  ",[302,675,548],{"class":321},[302,677,627],{"class":308},[302,679,499],{"class":321},[302,681,502],{"class":312},[302,683,499],{"class":321},[302,685,686],{"class":312},"currentState",[302,688,559],{"class":321},[271,690,691,692,694,695,698],{},"Use these for fast reads in ",[274,693,587],{}," or router ",[274,696,697],{},"redirect"," callbacks. For token access (which may trigger a silent refresh), use the async accessors:",[293,700,702],{"className":295,"code":701,"language":297,"meta":298,"style":298},"final String?      token   = await Authyra.instance.getAccessToken();\nfinal AuthSession? session = await Authyra.instance.getSession();\n",[274,703,704,737],{"__ignoreMap":298},[302,705,706,708,711,713,716,718,721,723,725,727,729,732,735],{"class":304,"line":305},[302,707,613],{"class":612},[302,709,710],{"class":308}," String",[302,712,619],{"class":321},[302,714,715],{"class":312},"      token   ",[302,717,548],{"class":321},[302,719,720],{"class":521}," await",[302,722,627],{"class":308},[302,724,499],{"class":321},[302,726,502],{"class":312},[302,728,499],{"class":321},[302,730,731],{"class":511},"getAccessToken",[302,733,734],{"class":312},"()",[302,736,559],{"class":321},[302,738,739,741,744,746,749,751,753,755,757,759,761,764,766],{"class":304,"line":518},[302,740,613],{"class":612},[302,742,743],{"class":308}," AuthSession",[302,745,619],{"class":321},[302,747,748],{"class":312}," session ",[302,750,548],{"class":321},[302,752,720],{"class":521},[302,754,627],{"class":308},[302,756,499],{"class":321},[302,758,502],{"class":312},[302,760,499],{"class":321},[302,762,763],{"class":511},"getSession",[302,765,734],{"class":312},[302,767,559],{"class":321},[278,769],{},[281,771,773],{"id":772},"streambuilder","StreamBuilder",[271,775,776],{},"The simplest Flutter integration — no packages required:",[293,778,780],{"className":295,"code":779,"language":297,"meta":298,"style":298},"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 => const LoginPage(),\n      AuthStateType.error           => ErrorPage(state.error!),\n    };\n  },\n)\n",[274,781,782,793,813,829,861,877,915,937,966,974,982],{"__ignoreMap":298},[302,783,784,786,788,790],{"class":304,"line":305},[302,785,773],{"class":308},[302,787,313],{"class":312},[302,789,226],{"class":308},[302,791,792],{"class":312},">(\n",[302,794,795,798,800,802,804,806,808,810],{"class":304,"line":518},[302,796,797],{"class":312},"  stream",[302,799,596],{"class":321},[302,801,627],{"class":308},[302,803,499],{"class":321},[302,805,502],{"class":312},[302,807,499],{"class":321},[302,809,291],{"class":312},[302,811,812],{"class":321},",\n",[302,814,815,818,820,823,826],{"class":304,"line":537},[302,816,817],{"class":312},"  builder",[302,819,596],{"class":321},[302,821,822],{"class":312}," (context",[302,824,825],{"class":321},",",[302,827,828],{"class":312}," snapshot) {\n",[302,830,831,834,837,839,842,844,847,850,852,854,857,859],{"class":304,"line":562},[302,832,833],{"class":612},"    final",[302,835,836],{"class":312}," state ",[302,838,548],{"class":321},[302,840,841],{"class":312}," snapshot",[302,843,499],{"class":321},[302,845,846],{"class":312},"data ",[302,848,849],{"class":321},"??",[302,851,670],{"class":308},[302,853,499],{"class":321},[302,855,856],{"class":511},"unauthenticated",[302,858,734],{"class":312},[302,860,559],{"class":321},[302,862,863,866,869,872,874],{"class":304,"line":568},[302,864,865],{"class":521},"    return",[302,867,868],{"class":521}," switch",[302,870,871],{"class":312}," (state",[302,873,499],{"class":321},[302,875,876],{"class":312},"type) {\n",[302,878,880,883,885,888,891,894,897,899,902,904,907,910,913],{"class":304,"line":879},6,[302,881,882],{"class":308},"      AuthStateType",[302,884,499],{"class":321},[302,886,887],{"class":312},"authenticated   ",[302,889,890],{"class":321},"=>",[302,892,893],{"class":308}," HomePage",[302,895,896],{"class":312},"(user",[302,898,596],{"class":321},[302,900,901],{"class":312}," state",[302,903,499],{"class":321},[302,905,906],{"class":312},"user",[302,908,909],{"class":321},"!",[302,911,912],{"class":312},")",[302,914,812],{"class":321},[302,916,918,920,922,925,927,930,933,935],{"class":304,"line":917},7,[302,919,882],{"class":308},[302,921,499],{"class":321},[302,923,924],{"class":312},"unauthenticated ",[302,926,890],{"class":321},[302,928,929],{"class":612}," const",[302,931,932],{"class":308}," LoginPage",[302,934,734],{"class":312},[302,936,812],{"class":321},[302,938,940,942,944,947,949,952,955,957,960,962,964],{"class":304,"line":939},8,[302,941,882],{"class":308},[302,943,499],{"class":321},[302,945,946],{"class":312},"error           ",[302,948,890],{"class":321},[302,950,951],{"class":308}," ErrorPage",[302,953,954],{"class":312},"(state",[302,956,499],{"class":321},[302,958,959],{"class":312},"error",[302,961,909],{"class":321},[302,963,912],{"class":312},[302,965,812],{"class":321},[302,967,969,972],{"class":304,"line":968},9,[302,970,971],{"class":312},"    }",[302,973,559],{"class":321},[302,975,977,980],{"class":304,"line":976},10,[302,978,979],{"class":312},"  }",[302,981,812],{"class":321},[302,983,985],{"class":304,"line":984},11,[302,986,987],{"class":312},")\n",[271,989,990,991,994,995,997],{},"The ",[274,992,993],{},"?? AuthState.unauthenticated()"," fallback handles the brief moment before ",[274,996,355],{}," emits the first value.",[278,999],{},[281,1001,1003],{"id":1002},"riverpod","Riverpod",[293,1005,1007],{"className":295,"code":1006,"language":297,"meta":298,"style":298},"// Define a StreamProvider\nfinal authStateProvider = StreamProvider\u003CAuthState>((ref) {\n  return Authyra.instance.authStateChanges;\n});\n\n// In a widget\nfinal state = ref.watch(authStateProvider).value ?? AuthState.unauthenticated();\n\nreturn switch (state.type) {\n  AuthStateType.authenticated   => HomePage(user: state.user!),\n  AuthStateType.unauthenticated => const LoginPage(),\n  AuthStateType.error           => ErrorPage(state.error!),\n};\n",[274,1008,1009,1014,1033,1050,1056,1062,1067,1103,1107,1120,1149,1167,1192],{"__ignoreMap":298},[302,1010,1011],{"class":304,"line":305},[302,1012,1013],{"class":606},"// Define a StreamProvider\n",[302,1015,1016,1018,1021,1023,1026,1028,1030],{"class":304,"line":518},[302,1017,613],{"class":612},[302,1019,1020],{"class":312}," authStateProvider ",[302,1022,548],{"class":321},[302,1024,1025],{"class":308}," StreamProvider",[302,1027,313],{"class":312},[302,1029,226],{"class":308},[302,1031,1032],{"class":312},">((ref) {\n",[302,1034,1035,1038,1040,1042,1044,1046,1048],{"class":304,"line":537},[302,1036,1037],{"class":521},"  return",[302,1039,627],{"class":308},[302,1041,499],{"class":321},[302,1043,502],{"class":312},[302,1045,499],{"class":321},[302,1047,291],{"class":312},[302,1049,559],{"class":321},[302,1051,1052,1054],{"class":304,"line":562},[302,1053,571],{"class":312},[302,1055,559],{"class":321},[302,1057,1058],{"class":304,"line":568},[302,1059,1061],{"emptyLinePlaceholder":1060},true,"\n",[302,1063,1064],{"class":304,"line":879},[302,1065,1066],{"class":606},"// In a widget\n",[302,1068,1069,1071,1073,1075,1078,1080,1083,1086,1088,1091,1093,1095,1097,1099,1101],{"class":304,"line":917},[302,1070,613],{"class":612},[302,1072,836],{"class":312},[302,1074,548],{"class":321},[302,1076,1077],{"class":312}," ref",[302,1079,499],{"class":321},[302,1081,1082],{"class":511},"watch",[302,1084,1085],{"class":312},"(authStateProvider)",[302,1087,499],{"class":321},[302,1089,1090],{"class":312},"value ",[302,1092,849],{"class":321},[302,1094,670],{"class":308},[302,1096,499],{"class":321},[302,1098,856],{"class":511},[302,1100,734],{"class":312},[302,1102,559],{"class":321},[302,1104,1105],{"class":304,"line":939},[302,1106,1061],{"emptyLinePlaceholder":1060},[302,1108,1109,1112,1114,1116,1118],{"class":304,"line":968},[302,1110,1111],{"class":521},"return",[302,1113,868],{"class":521},[302,1115,871],{"class":312},[302,1117,499],{"class":321},[302,1119,876],{"class":312},[302,1121,1122,1125,1127,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147],{"class":304,"line":976},[302,1123,1124],{"class":308},"  AuthStateType",[302,1126,499],{"class":321},[302,1128,887],{"class":312},[302,1130,890],{"class":321},[302,1132,893],{"class":308},[302,1134,896],{"class":312},[302,1136,596],{"class":321},[302,1138,901],{"class":312},[302,1140,499],{"class":321},[302,1142,906],{"class":312},[302,1144,909],{"class":321},[302,1146,912],{"class":312},[302,1148,812],{"class":321},[302,1150,1151,1153,1155,1157,1159,1161,1163,1165],{"class":304,"line":984},[302,1152,1124],{"class":308},[302,1154,499],{"class":321},[302,1156,924],{"class":312},[302,1158,890],{"class":321},[302,1160,929],{"class":612},[302,1162,932],{"class":308},[302,1164,734],{"class":312},[302,1166,812],{"class":321},[302,1168,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188,1190],{"class":304,"line":1169},12,[302,1171,1124],{"class":308},[302,1173,499],{"class":321},[302,1175,946],{"class":312},[302,1177,890],{"class":321},[302,1179,951],{"class":308},[302,1181,954],{"class":312},[302,1183,499],{"class":321},[302,1185,959],{"class":312},[302,1187,909],{"class":321},[302,1189,912],{"class":312},[302,1191,812],{"class":321},[302,1193,1195,1198],{"class":304,"line":1194},13,[302,1196,1197],{"class":312},"}",[302,1199,559],{"class":321},[271,1201,1202,1203,596],{},"For token-aware data fetching, combine with ",[274,1204,447],{},[293,1206,1208],{"className":295,"code":1207,"language":297,"meta":298,"style":298},"final sessionProvider = StreamProvider\u003CAuthSession?>((ref) {\n  return Authyra.instance.sessionStream;\n});\n",[274,1209,1210,1228,1244],{"__ignoreMap":298},[302,1211,1212,1214,1217,1219,1221,1223,1225],{"class":304,"line":305},[302,1213,613],{"class":612},[302,1215,1216],{"class":312}," sessionProvider ",[302,1218,548],{"class":321},[302,1220,1025],{"class":308},[302,1222,313],{"class":312},[302,1224,222],{"class":308},[302,1226,1227],{"class":312},"?>((ref) {\n",[302,1229,1230,1232,1234,1236,1238,1240,1242],{"class":304,"line":518},[302,1231,1037],{"class":521},[302,1233,627],{"class":308},[302,1235,499],{"class":321},[302,1237,502],{"class":312},[302,1239,499],{"class":321},[302,1241,447],{"class":312},[302,1243,559],{"class":321},[302,1245,1246,1248],{"class":304,"line":537},[302,1247,571],{"class":312},[302,1249,559],{"class":321},[278,1251],{},[281,1253,1255],{"id":1254},"bloc-cubit","Bloc / Cubit",[293,1257,1259],{"className":295,"code":1258,"language":297,"meta":298,"style":298},"class AuthCubit extends Cubit\u003CAuthState> {\n  late final StreamSubscription\u003CAuthState> _sub;\n\n  AuthCubit() : super(AuthState.unauthenticated()) {\n    _sub = Authyra.instance.authStateChanges.listen(emit);\n  }\n\n  Future\u003Cvoid> signIn(String email, String password) async {\n    try {\n      await Authyra.instance.signIn('email', params: {\n        'email': email, 'password': password,\n      });\n    } on AuthenticationFailedException {\n      emit(AuthState.error('Invalid credentials'));\n    }\n  }\n\n  Future\u003Cvoid> signOut() => Authyra.instance.signOut();\n\n  @override\n  Future\u003Cvoid> close() {\n    _sub.cancel();\n    return super.close();\n  }\n}\n",[274,1260,1261,1282,1302,1306,1328,1354,1358,1362,1399,1406,1436,1457,1464,1477,1501,1507,1512,1517,1549,1554,1560,1577,1592,1608,1613],{"__ignoreMap":298},[302,1262,1263,1266,1269,1272,1275,1277,1279],{"class":304,"line":305},[302,1264,1265],{"class":321},"class",[302,1267,1268],{"class":308}," AuthCubit",[302,1270,1271],{"class":321}," extends",[302,1273,1274],{"class":308}," Cubit",[302,1276,313],{"class":312},[302,1278,226],{"class":308},[302,1280,1281],{"class":312},"> {\n",[302,1283,1284,1287,1290,1293,1295,1297,1300],{"class":304,"line":518},[302,1285,1286],{"class":612},"  late",[302,1288,1289],{"class":612}," final",[302,1291,1292],{"class":308}," StreamSubscription",[302,1294,313],{"class":312},[302,1296,226],{"class":308},[302,1298,1299],{"class":312},"> _sub",[302,1301,559],{"class":321},[302,1303,1304],{"class":304,"line":537},[302,1305,1061],{"emptyLinePlaceholder":1060},[302,1307,1308,1311,1314,1316,1319,1321,1323,1325],{"class":304,"line":562},[302,1309,1310],{"class":308},"  AuthCubit",[302,1312,1313],{"class":312},"() ",[302,1315,596],{"class":321},[302,1317,1318],{"class":312}," super(",[302,1320,226],{"class":308},[302,1322,499],{"class":321},[302,1324,856],{"class":511},[302,1326,1327],{"class":312},"()) {\n",[302,1329,1330,1333,1335,1337,1339,1341,1343,1345,1347,1349,1352],{"class":304,"line":568},[302,1331,1332],{"class":312},"    _sub ",[302,1334,548],{"class":321},[302,1336,627],{"class":308},[302,1338,499],{"class":321},[302,1340,502],{"class":312},[302,1342,499],{"class":321},[302,1344,291],{"class":312},[302,1346,499],{"class":321},[302,1348,512],{"class":511},[302,1350,1351],{"class":312},"(emit)",[302,1353,559],{"class":321},[302,1355,1356],{"class":304,"line":879},[302,1357,565],{"class":312},[302,1359,1360],{"class":304,"line":917},[302,1361,1061],{"emptyLinePlaceholder":1060},[302,1363,1364,1367,1369,1372,1374,1377,1380,1383,1386,1388,1390,1393,1396],{"class":304,"line":939},[302,1365,1366],{"class":308},"  Future",[302,1368,313],{"class":312},[302,1370,1371],{"class":612},"void",[302,1373,318],{"class":312},[302,1375,1376],{"class":511},"signIn",[302,1378,1379],{"class":312},"(",[302,1381,1382],{"class":308},"String",[302,1384,1385],{"class":312}," email",[302,1387,825],{"class":321},[302,1389,710],{"class":308},[302,1391,1392],{"class":312}," password) ",[302,1394,1395],{"class":521},"async",[302,1397,1398],{"class":312}," {\n",[302,1400,1401,1404],{"class":304,"line":968},[302,1402,1403],{"class":521},"    try",[302,1405,1398],{"class":312},[302,1407,1408,1411,1413,1415,1417,1419,1421,1423,1427,1429,1432,1434],{"class":304,"line":976},[302,1409,1410],{"class":521},"      await",[302,1412,627],{"class":308},[302,1414,499],{"class":321},[302,1416,502],{"class":312},[302,1418,499],{"class":321},[302,1420,1376],{"class":511},[302,1422,1379],{"class":312},[302,1424,1426],{"class":1425},"sfazB","'email'",[302,1428,825],{"class":321},[302,1430,1431],{"class":312}," params",[302,1433,596],{"class":321},[302,1435,1398],{"class":312},[302,1437,1438,1441,1443,1445,1447,1450,1452,1455],{"class":304,"line":984},[302,1439,1440],{"class":1425},"        'email'",[302,1442,596],{"class":321},[302,1444,1385],{"class":312},[302,1446,825],{"class":321},[302,1448,1449],{"class":1425}," 'password'",[302,1451,596],{"class":321},[302,1453,1454],{"class":312}," password",[302,1456,812],{"class":321},[302,1458,1459,1462],{"class":304,"line":1169},[302,1460,1461],{"class":312},"      })",[302,1463,559],{"class":321},[302,1465,1466,1469,1472,1475],{"class":304,"line":1194},[302,1467,1468],{"class":312},"    } ",[302,1470,1471],{"class":521},"on",[302,1473,1474],{"class":308}," AuthenticationFailedException",[302,1476,1398],{"class":312},[302,1478,1480,1483,1485,1487,1489,1491,1493,1496,1499],{"class":304,"line":1479},14,[302,1481,1482],{"class":511},"      emit",[302,1484,1379],{"class":312},[302,1486,226],{"class":308},[302,1488,499],{"class":321},[302,1490,959],{"class":511},[302,1492,1379],{"class":312},[302,1494,1495],{"class":1425},"'Invalid credentials'",[302,1497,1498],{"class":312},"))",[302,1500,559],{"class":321},[302,1502,1504],{"class":304,"line":1503},15,[302,1505,1506],{"class":312},"    }\n",[302,1508,1510],{"class":304,"line":1509},16,[302,1511,565],{"class":312},[302,1513,1515],{"class":304,"line":1514},17,[302,1516,1061],{"emptyLinePlaceholder":1060},[302,1518,1520,1522,1524,1526,1528,1531,1533,1535,1537,1539,1541,1543,1545,1547],{"class":304,"line":1519},18,[302,1521,1366],{"class":308},[302,1523,313],{"class":312},[302,1525,1371],{"class":612},[302,1527,318],{"class":312},[302,1529,1530],{"class":511},"signOut",[302,1532,1313],{"class":312},[302,1534,890],{"class":321},[302,1536,627],{"class":308},[302,1538,499],{"class":321},[302,1540,502],{"class":312},[302,1542,499],{"class":321},[302,1544,1530],{"class":511},[302,1546,734],{"class":312},[302,1548,559],{"class":321},[302,1550,1552],{"class":304,"line":1551},19,[302,1553,1061],{"emptyLinePlaceholder":1060},[302,1555,1557],{"class":304,"line":1556},20,[302,1558,1559],{"class":612},"  @override\n",[302,1561,1563,1565,1567,1569,1571,1574],{"class":304,"line":1562},21,[302,1564,1366],{"class":308},[302,1566,313],{"class":312},[302,1568,1371],{"class":612},[302,1570,318],{"class":312},[302,1572,1573],{"class":511},"close",[302,1575,1576],{"class":312},"() {\n",[302,1578,1580,1583,1585,1588,1590],{"class":304,"line":1579},22,[302,1581,1582],{"class":312},"    _sub",[302,1584,499],{"class":321},[302,1586,1587],{"class":511},"cancel",[302,1589,734],{"class":312},[302,1591,559],{"class":321},[302,1593,1595,1597,1600,1602,1604,1606],{"class":304,"line":1594},23,[302,1596,865],{"class":521},[302,1598,1599],{"class":312}," super",[302,1601,499],{"class":321},[302,1603,1573],{"class":511},[302,1605,734],{"class":312},[302,1607,559],{"class":321},[302,1609,1611],{"class":304,"line":1610},24,[302,1612,565],{"class":312},[302,1614,1616],{"class":304,"line":1615},25,[302,1617,1618],{"class":312},"}\n",[278,1620],{},[281,1622,1624],{"id":1623},"gorouter","GoRouter",[271,1626,1627,1628,1630,1631,1634],{},"Wire ",[274,1629,291],{}," to ",[274,1632,1633],{},"refreshListenable"," for automatic route redirects:",[293,1636,1639],{"className":295,"code":1637,"filename":1638,"language":297,"meta":298,"style":298},"import 'package:authyra_flutter/authyra_flutter.dart';\nimport 'package:go_router/go_router.dart';\n\n// Minimal Listenable adapter for go_router\nclass _StreamListenable extends ChangeNotifier {\n  _StreamListenable(Stream\u003Cdynamic> stream) {\n    stream.listen((_) => notifyListeners());\n  }\n}\n\nfinal router = GoRouter(\n  refreshListenable: _StreamListenable(Authyra.instance.authStateChanges),\n  redirect: (context, state) {\n    final authenticated = Authyra.instance.isAuthenticated;  // synchronous\n    final goingToLogin  = state.uri.path.startsWith('/login');\n\n    if (!authenticated && !goingToLogin) return '/login';\n    if (authenticated  &&  goingToLogin) return '/';\n    return null;\n  },\n  routes: [\n    GoRoute(path: '/login', builder: (_, __) => const LoginPage()),\n    GoRoute(path: '/',      builder: (_, __) => const HomePage()),\n  ],\n);\n","lib/router.dart",[274,1640,1641,1652,1661,1665,1670,1684,1701,1723,1727,1731,1735,1750,1774,1788,1813,1848,1852,1881,1900,1907,1913,1923,1960,1993,2000],{"__ignoreMap":298},[302,1642,1643,1647,1650],{"class":304,"line":305},[302,1644,1646],{"class":1645},"sbssI","import",[302,1648,1649],{"class":1425}," 'package:authyra_flutter/authyra_flutter.dart'",[302,1651,559],{"class":321},[302,1653,1654,1656,1659],{"class":304,"line":518},[302,1655,1646],{"class":1645},[302,1657,1658],{"class":1425}," 'package:go_router/go_router.dart'",[302,1660,559],{"class":321},[302,1662,1663],{"class":304,"line":537},[302,1664,1061],{"emptyLinePlaceholder":1060},[302,1666,1667],{"class":304,"line":562},[302,1668,1669],{"class":606},"// Minimal Listenable adapter for go_router\n",[302,1671,1672,1674,1677,1679,1682],{"class":304,"line":568},[302,1673,1265],{"class":321},[302,1675,1676],{"class":308}," _StreamListenable",[302,1678,1271],{"class":321},[302,1680,1681],{"class":308}," ChangeNotifier",[302,1683,1398],{"class":312},[302,1685,1686,1689,1691,1693,1695,1698],{"class":304,"line":879},[302,1687,1688],{"class":308},"  _StreamListenable",[302,1690,1379],{"class":312},[302,1692,309],{"class":308},[302,1694,313],{"class":312},[302,1696,1697],{"class":308},"dynamic",[302,1699,1700],{"class":312},"> stream) {\n",[302,1702,1703,1706,1708,1710,1713,1715,1718,1721],{"class":304,"line":917},[302,1704,1705],{"class":312},"    stream",[302,1707,499],{"class":321},[302,1709,512],{"class":511},[302,1711,1712],{"class":312},"((_) ",[302,1714,890],{"class":321},[302,1716,1717],{"class":511}," notifyListeners",[302,1719,1720],{"class":312},"())",[302,1722,559],{"class":321},[302,1724,1725],{"class":304,"line":939},[302,1726,565],{"class":312},[302,1728,1729],{"class":304,"line":968},[302,1730,1618],{"class":312},[302,1732,1733],{"class":304,"line":976},[302,1734,1061],{"emptyLinePlaceholder":1060},[302,1736,1737,1739,1742,1744,1747],{"class":304,"line":984},[302,1738,613],{"class":612},[302,1740,1741],{"class":312}," router ",[302,1743,548],{"class":321},[302,1745,1746],{"class":308}," GoRouter",[302,1748,1749],{"class":312},"(\n",[302,1751,1752,1755,1757,1759,1761,1763,1765,1767,1769,1772],{"class":304,"line":1169},[302,1753,1754],{"class":312},"  refreshListenable",[302,1756,596],{"class":321},[302,1758,1676],{"class":308},[302,1760,1379],{"class":312},[302,1762,496],{"class":308},[302,1764,499],{"class":321},[302,1766,502],{"class":312},[302,1768,499],{"class":321},[302,1770,1771],{"class":312},"authStateChanges)",[302,1773,812],{"class":321},[302,1775,1776,1779,1781,1783,1785],{"class":304,"line":1194},[302,1777,1778],{"class":312},"  redirect",[302,1780,596],{"class":321},[302,1782,822],{"class":312},[302,1784,825],{"class":321},[302,1786,1787],{"class":312}," state) {\n",[302,1789,1790,1792,1795,1797,1799,1801,1803,1805,1807,1810],{"class":304,"line":1479},[302,1791,833],{"class":612},[302,1793,1794],{"class":312}," authenticated ",[302,1796,548],{"class":321},[302,1798,627],{"class":308},[302,1800,499],{"class":321},[302,1802,502],{"class":312},[302,1804,499],{"class":321},[302,1806,661],{"class":312},[302,1808,1809],{"class":321},";",[302,1811,1812],{"class":606},"  // synchronous\n",[302,1814,1815,1817,1820,1822,1824,1826,1829,1831,1834,1836,1839,1841,1844,1846],{"class":304,"line":1503},[302,1816,833],{"class":612},[302,1818,1819],{"class":312}," goingToLogin  ",[302,1821,548],{"class":321},[302,1823,901],{"class":312},[302,1825,499],{"class":321},[302,1827,1828],{"class":312},"uri",[302,1830,499],{"class":321},[302,1832,1833],{"class":312},"path",[302,1835,499],{"class":321},[302,1837,1838],{"class":511},"startsWith",[302,1840,1379],{"class":312},[302,1842,1843],{"class":1425},"'/login'",[302,1845,912],{"class":312},[302,1847,559],{"class":321},[302,1849,1850],{"class":304,"line":1509},[302,1851,1061],{"emptyLinePlaceholder":1060},[302,1853,1854,1857,1860,1862,1865,1868,1871,1874,1876,1879],{"class":304,"line":1514},[302,1855,1856],{"class":521},"    if",[302,1858,1859],{"class":312}," (",[302,1861,909],{"class":321},[302,1863,1864],{"class":312},"authenticated ",[302,1866,1867],{"class":321},"&&",[302,1869,1870],{"class":321}," !",[302,1872,1873],{"class":312},"goingToLogin) ",[302,1875,1111],{"class":521},[302,1877,1878],{"class":1425}," '/login'",[302,1880,559],{"class":321},[302,1882,1883,1885,1888,1890,1893,1895,1898],{"class":304,"line":1519},[302,1884,1856],{"class":521},[302,1886,1887],{"class":312}," (authenticated  ",[302,1889,1867],{"class":321},[302,1891,1892],{"class":312},"  goingToLogin) ",[302,1894,1111],{"class":521},[302,1896,1897],{"class":1425}," '/'",[302,1899,559],{"class":321},[302,1901,1902,1904],{"class":304,"line":1551},[302,1903,865],{"class":521},[302,1905,1906],{"class":321}," null;\n",[302,1908,1909,1911],{"class":304,"line":1556},[302,1910,979],{"class":312},[302,1912,812],{"class":321},[302,1914,1915,1918,1920],{"class":304,"line":1562},[302,1916,1917],{"class":312},"  routes",[302,1919,596],{"class":321},[302,1921,1922],{"class":312}," [\n",[302,1924,1925,1928,1931,1933,1935,1937,1940,1942,1945,1947,1950,1952,1954,1956,1958],{"class":304,"line":1579},[302,1926,1927],{"class":308},"    GoRoute",[302,1929,1930],{"class":312},"(path",[302,1932,596],{"class":321},[302,1934,1878],{"class":1425},[302,1936,825],{"class":321},[302,1938,1939],{"class":312}," builder",[302,1941,596],{"class":321},[302,1943,1944],{"class":312}," (_",[302,1946,825],{"class":321},[302,1948,1949],{"class":312}," __) ",[302,1951,890],{"class":321},[302,1953,929],{"class":612},[302,1955,932],{"class":308},[302,1957,1720],{"class":312},[302,1959,812],{"class":321},[302,1961,1962,1964,1966,1968,1970,1972,1975,1977,1979,1981,1983,1985,1987,1989,1991],{"class":304,"line":1594},[302,1963,1927],{"class":308},[302,1965,1930],{"class":312},[302,1967,596],{"class":321},[302,1969,1897],{"class":1425},[302,1971,825],{"class":321},[302,1973,1974],{"class":312},"      builder",[302,1976,596],{"class":321},[302,1978,1944],{"class":312},[302,1980,825],{"class":321},[302,1982,1949],{"class":312},[302,1984,890],{"class":321},[302,1986,929],{"class":612},[302,1988,893],{"class":308},[302,1990,1720],{"class":312},[302,1992,812],{"class":321},[302,1994,1995,1998],{"class":304,"line":1610},[302,1996,1997],{"class":312},"  ]",[302,1999,812],{"class":321},[302,2001,2002,2004],{"class":304,"line":1615},[302,2003,912],{"class":312},[302,2005,559],{"class":321},[271,2007,2008,2010,2011,588,2013,499],{},[274,2009,661],{}," is synchronous — safe to call inside ",[274,2012,697],{},[274,2014,595],{},[278,2016],{},[281,2018,2020],{"id":2019},"direct-stream-listener","Direct stream listener",[271,2022,2023],{},"Subscribe directly when you need side effects on state changes:",[293,2025,2027],{"className":295,"code":2026,"language":297,"meta":298,"style":298},"late final StreamSubscription\u003CAuthState> _sub;\n\n@override\nvoid initState() {\n  super.initState();\n  _sub = Authyra.instance.authStateChanges.listen((state) {\n    if (state.isAuthenticated) {\n      Analytics.identify(state.user!.id);\n    } else {\n      Analytics.reset();\n    }\n  });\n}\n\n@override\nvoid dispose() {\n  _sub.cancel();\n  super.dispose();\n}\n",[274,2028,2029,2046,2050,2055,2064,2078,2102,2113,2137,2146,2159,2163,2170,2174,2178,2182,2191,2204,2217],{"__ignoreMap":298},[302,2030,2031,2034,2036,2038,2040,2042,2044],{"class":304,"line":305},[302,2032,2033],{"class":612},"late",[302,2035,1289],{"class":612},[302,2037,1292],{"class":308},[302,2039,313],{"class":312},[302,2041,226],{"class":308},[302,2043,1299],{"class":312},[302,2045,559],{"class":321},[302,2047,2048],{"class":304,"line":518},[302,2049,1061],{"emptyLinePlaceholder":1060},[302,2051,2052],{"class":304,"line":537},[302,2053,2054],{"class":612},"@override\n",[302,2056,2057,2059,2062],{"class":304,"line":562},[302,2058,1371],{"class":612},[302,2060,2061],{"class":511}," initState",[302,2063,1576],{"class":312},[302,2065,2066,2069,2071,2074,2076],{"class":304,"line":568},[302,2067,2068],{"class":312},"  super",[302,2070,499],{"class":321},[302,2072,2073],{"class":511},"initState",[302,2075,734],{"class":312},[302,2077,559],{"class":321},[302,2079,2080,2083,2085,2087,2089,2091,2093,2095,2097,2099],{"class":304,"line":879},[302,2081,2082],{"class":312},"  _sub ",[302,2084,548],{"class":321},[302,2086,627],{"class":308},[302,2088,499],{"class":321},[302,2090,502],{"class":312},[302,2092,499],{"class":321},[302,2094,291],{"class":312},[302,2096,499],{"class":321},[302,2098,512],{"class":511},[302,2100,2101],{"class":312},"((state) {\n",[302,2103,2104,2106,2108,2110],{"class":304,"line":917},[302,2105,1856],{"class":521},[302,2107,871],{"class":312},[302,2109,499],{"class":321},[302,2111,2112],{"class":312},"isAuthenticated) {\n",[302,2114,2115,2118,2120,2123,2125,2127,2129,2132,2135],{"class":304,"line":939},[302,2116,2117],{"class":308},"      Analytics",[302,2119,499],{"class":321},[302,2121,2122],{"class":511},"identify",[302,2124,954],{"class":312},[302,2126,499],{"class":321},[302,2128,906],{"class":312},[302,2130,2131],{"class":321},"!.",[302,2133,2134],{"class":312},"id)",[302,2136,559],{"class":321},[302,2138,2139,2141,2144],{"class":304,"line":968},[302,2140,1468],{"class":312},[302,2142,2143],{"class":521},"else",[302,2145,1398],{"class":312},[302,2147,2148,2150,2152,2155,2157],{"class":304,"line":976},[302,2149,2117],{"class":308},[302,2151,499],{"class":321},[302,2153,2154],{"class":511},"reset",[302,2156,734],{"class":312},[302,2158,559],{"class":321},[302,2160,2161],{"class":304,"line":984},[302,2162,1506],{"class":312},[302,2164,2165,2168],{"class":304,"line":1169},[302,2166,2167],{"class":312},"  })",[302,2169,559],{"class":321},[302,2171,2172],{"class":304,"line":1194},[302,2173,1618],{"class":312},[302,2175,2176],{"class":304,"line":1479},[302,2177,1061],{"emptyLinePlaceholder":1060},[302,2179,2180],{"class":304,"line":1503},[302,2181,2054],{"class":612},[302,2183,2184,2186,2189],{"class":304,"line":1509},[302,2185,1371],{"class":612},[302,2187,2188],{"class":511}," dispose",[302,2190,1576],{"class":312},[302,2192,2193,2196,2198,2200,2202],{"class":304,"line":1514},[302,2194,2195],{"class":312},"  _sub",[302,2197,499],{"class":321},[302,2199,1587],{"class":511},[302,2201,734],{"class":312},[302,2203,559],{"class":321},[302,2205,2206,2208,2210,2213,2215],{"class":304,"line":1519},[302,2207,2068],{"class":312},[302,2209,499],{"class":321},[302,2211,2212],{"class":511},"dispose",[302,2214,734],{"class":312},[302,2216,559],{"class":321},[302,2218,2219],{"class":304,"line":1551},[302,2220,1618],{"class":312},[278,2222],{},[281,2224,2226],{"id":2225},"initial-state-before-initialization","Initial state before initialization",[271,2228,2229,2231,2232,2235],{},[274,2230,291],{}," is a broadcast stream — it does not replay past events. If you subscribe after ",[274,2233,2234],{},"Authyra.initialize()"," has completed, the stream won't replay the initial state.",[271,2237,2238,2239,2241,2242,2244,2245,2248],{},"Use ",[274,2240,686],{}," for an immediate synchronous read, or use ",[274,2243,773],{}," which handles the ",[274,2246,2247],{},"connectionState == waiting"," case via the fallback value:",[293,2250,2252],{"className":295,"code":2251,"language":297,"meta":298,"style":298},"// Safe pattern: fallback to unauthenticated until first emission\nfinal state = snapshot.data ?? AuthState.unauthenticated();\n",[274,2253,2254,2259],{"__ignoreMap":298},[302,2255,2256],{"class":304,"line":305},[302,2257,2258],{"class":606},"// Safe pattern: fallback to unauthenticated until first emission\n",[302,2260,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283],{"class":304,"line":518},[302,2262,613],{"class":612},[302,2264,836],{"class":312},[302,2266,548],{"class":321},[302,2268,841],{"class":312},[302,2270,499],{"class":321},[302,2272,846],{"class":312},[302,2274,849],{"class":321},[302,2276,670],{"class":308},[302,2278,499],{"class":321},[302,2280,856],{"class":511},[302,2282,734],{"class":312},[302,2284,559],{"class":321},[278,2286],{},[281,2288,2290],{"id":2289},"see-also","See also",[2292,2293,2294,2305,2315,2320],"ul",{},[2295,2296,2297,2301,2302,2304],"li",{},[2298,2299,2300],"a",{"href":66},"Sessions →"," — ",[274,2303,222],{}," fields and token access",[2295,2306,2307,2301,2310,2312,2313],{},[2298,2308,2309],{"href":56},"Architecture →",[274,2311,199],{}," vs ",[274,2314,203],{},[2295,2316,2317],{},[2298,2318,2319],{"href":148},"Route Protection guide →",[2295,2321,2322],{},[2298,2323,2324],{"href":171},"Flutter Setup →",[2326,2327,2328],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":298,"searchDepth":518,"depth":518,"links":2330},[2331,2335,2336,2337,2338,2339,2340,2341,2342],{"id":283,"depth":518,"text":284,"children":2332},[2333,2334],{"id":288,"depth":537,"text":291},{"id":444,"depth":537,"text":447},{"id":578,"depth":518,"text":579},{"id":772,"depth":518,"text":773},{"id":1002,"depth":518,"text":1003},{"id":1254,"depth":518,"text":1255},{"id":1623,"depth":518,"text":1624},{"id":2019,"depth":518,"text":2020},{"id":2225,"depth":518,"text":2226},{"id":2289,"depth":518,"text":2290},"authStateChanges stream, sessionStream, synchronous state cache, and integration with StreamBuilder, Riverpod, Bloc, and GoRouter.","md",null,{},{"icon":78},{"title":2349,"description":2350},"Reactivity | Authyra","How Authyra's reactive streams work — authStateChanges, synchronous state cache, StreamBuilder, Riverpod, Bloc, and GoRouter integration.","2jr7XfofqY9PPrmKwx-CjcXaxlmzly5ClCr5YMWCil8",[2353,2355],{"title":70,"path":71,"stem":72,"description":2354,"icon":73,"children":-1},"The AuthStorage interface — pluggable session persistence, security guidance, and implementing a custom backend.",{"title":80,"path":81,"stem":82,"description":2356,"icon":83,"children":-1},"AuthCallbacks middleware — intercepter et bloquer les actions d'authentification avant qu'elles s'exécutent.",1782700507255]