@fluixi/session 1.0.0-alpha.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Fluixi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # @fluixi/session
2
+
3
+ The **client-side** session lifecycle as a reusable primitive. Bring a small backend
4
+ **adapter**; `createSession` owns the rest: token/user signals, `isAuthenticated`,
5
+ loading/error state, SSR-safe persistence (via `@fluixi/core`'s universal `storage`),
6
+ the hydrate-on-load flow, and **automatic token refresh** before expiry.
7
+
8
+ > Looking for the full server-first auth engine (OAuth, MFA, organizations, RBAC,
9
+ > database adapters)? That's `@fluixi/auth`. This package is the lightweight,
10
+ > bring-your-own-backend session tier.
11
+
12
+ ```ts
13
+ import { createSession } from '@fluixi/session';
14
+
15
+ const session = createSession<Customer, { email: string; password: string }>({
16
+ // adapter — the backend-specific bits you provide:
17
+ login: (c) => authApi.login(c.email, c.password), // → token | { token, expiresAt }
18
+ fetchUser: () => customerApi.me(),
19
+ logout: () => authApi.logout(),
20
+ register: (d) => authApi.register(d), // optional
21
+ refresh: (t) => authApi.refresh(t), // optional → auto-refresh
22
+ getExpiry: (t) => decodeJwt(t).exp * 1000, // optional
23
+
24
+ // hooks (optional):
25
+ onLogin, onLogout, onError, onRefresh,
26
+ });
27
+
28
+ session.user(); // reactive
29
+ session.isAuthenticated();
30
+ session.isLoading();
31
+ session.error();
32
+ await session.login(creds); // adapter → store token → fetchUser → persist → onLogin
33
+ await session.hydrate(); // restore from stored token on load
34
+ await session.logout();
35
+ ```
36
+
37
+ Provide `refresh` + (`getExpiry` or an `expiresAt` from `login`) and the session
38
+ schedules a refresh `refreshSkewMs` (default 60s) before the token expires — client
39
+ only, never during SSR.
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";var v=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var Y=(e,t)=>{for(var o in t)v(e,o,{get:t[o],enumerable:!0})},J=(e,t,o,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of M(t))!N.call(e,l)&&l!==o&&v(e,l,{get:()=>t[l],enumerable:!(u=q(t,l))||u.enumerable});return e};var D=e=>J(v({},"__esModule",{value:!0}),e);var B={};Y(B,{createFetchGuard:()=>w,createSession:()=>j,installGlobalFetchGuard:()=>S});module.exports=D(B);var c=require("@fluixi/reactive/signal"),n=require("@fluixi/core"),X=e=>e instanceof Request?e.url:e instanceof URL?e.href:String(e);function w(e){let t=e.fetch??globalThis.fetch.bind(globalThis),o=e.status??401,u=!1,l=(async(i,p)=>{let d=await t(i,p);return d.status===o&&!u&&(!e.shouldHandle||e.shouldHandle(X(i),d))&&(u=!0,e.onUnauthorized()),d});return l.reset=()=>{u=!1},l}function S(e){if(!n.isClient)return()=>{};let t=globalThis.fetch.bind(globalThis),o=w({...e,fetch:t});return globalThis.fetch=o,S._reset=o.reset,()=>{globalThis.fetch=t}}var b=e=>typeof e=="string"?{token:e}:e;function j(e){let t=e.storageKeys?.token??"fx_session_token",o=e.storageKeys?.user??"fx_session_user",u=e.storageKeys?.expiry??"fx_session_exp",l=e.refreshSkewMs??6e4,i=e.access,p=()=>{try{return JSON.parse(n.storage.getItem(o)??"null")}catch{return null}},[d,T]=(0,c.createSignal)(p()),[f,R]=(0,c.createSignal)(n.storage.getItem(t)),[A,E]=(0,c.createSignal)(!1),[z,C]=(0,c.createSignal)(null),[I,P]=(0,c.createSignal)(!1),G=(0,c.createMemo)(()=>{let s=i?.getRole?.(d());return s==null?[]:Array.isArray(s)?s:[s]}),O=(0,c.createMemo)(()=>{if(!i)return;let s=G();if(typeof i.permissions=="function")return i.permissions(d(),s)??i.guest;let r=i.permissions,a=s.map(k=>r[k]).filter(k=>k!=null);return a.length===0?i.guest:a.length===1?a[0]:i.merge?i.merge(a):a[a.length-1]}),_=i?.match??((s,r)=>typeof r=="function"?r(s):!1),H=s=>{let r=O();return r!=null?_(r,s,d()):!1},K=(0,c.createMemo)(()=>A()?"authenticating":I()?"expired":z()?"error":f()?"authenticated":"idle"),g=null,F=()=>{g&&(clearTimeout(g),g=null)},Q=s=>{if(F(),!n.isClient||!e.refresh||!s)return;let r=s-Date.now()-l;g=setTimeout(()=>{L()},Math.max(0,r))},U=s=>{R(s.token),n.storage.setItem(t,s.token);let r=s.expiresAt??e.getExpiry?.(s.token)??void 0;r?n.storage.setItem(u,String(r)):n.storage.removeItem(u),Q(r)},m=s=>{T(()=>s),n.storage.setItem(o,JSON.stringify(s))},y=async(s,r)=>{E(!0),C(null);try{return await r()}catch(a){throw C(a),e.onError?.(a,s),a}finally{E(!1)}};async function L(){let s=f();!e.refresh||!s||await y("refresh",async()=>{let r=b(await e.refresh(s));U(r),e.onRefresh?.(r.token)})}let h;if(e.unauthorized){let s=e.unauthorized.onExpiry??(()=>{x.logout()}),r=()=>{P(!0),e.onExpired?.(),s()};h=w({status:e.unauthorized.status,shouldHandle:e.unauthorized.shouldHandle,onUnauthorized:r}),e.unauthorized.installGlobal&&S({status:e.unauthorized.status,shouldHandle:e.unauthorized.shouldHandle,onUnauthorized:r})}let x={user:d,token:f,isAuthenticated:()=>f()!==null,isLoading:A,error:z,status:K,expired:I,roles:G,permissions:O,can:H,guardedFetch:h,async login(s){await y("login",async()=>{U(b(await e.login(s)));let r=await e.fetchUser(f());m(r),P(!1),h?.reset(),e.onLogin?.(r)})},async register(s){await y("register",async()=>{let r=await e.register?.(s);if(r){U(b(r));let a=await e.fetchUser(f());m(a),P(!1),h?.reset(),e.onLogin?.(a)}})},async logout(){try{await e.logout?.()}catch{}F(),n.storage.removeItem(t),n.storage.removeItem(o),n.storage.removeItem(u),R(null),T(null),h?.reset(),e.onLogout?.()},async hydrate(){let s=n.storage.getItem(t);if(!s)return;f()||R(s);let r=n.storage.getItem(u);if(Q(r?Number(r):e.getExpiry?.(s)??void 0),!d())try{m(await y("hydrate",()=>e.fetchUser(s)))}catch{await x.logout()}},refresh:L,updateUser(s){m(s)}};return x}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * @fluixi/session — the client session lifecycle + access control as reusable primitives.
3
+ *
4
+ * You provide a small backend ADAPTER (login / fetchUser / logout / optional refresh);
5
+ * the framework owns token + user signals, a status state-machine, persistence (SSR-safe
6
+ * via @fluixi/core's universal `storage`), the hydrate-on-load flow, automatic refresh
7
+ * before expiry, role/permission derivation, and an unauthorized (session-expiry) guard.
8
+ * Apps stop rewriting the same ~150 lines of session glue. (The server-first auth engine —
9
+ * OAuth / MFA / orgs / cookies — is @fluixi/auth.)
10
+ *
11
+ * ── SECURITY BOUNDARY ─────────────────────────────────────────────────────────
12
+ * `roles()`, `permissions()` and `can()` are a CLIENT-SIDE UI affordance: they decide what
13
+ * to RENDER, never what is ALLOWED. A client can forge any role, so authorization MUST be
14
+ * enforced by the backend on every request. Read `can(...)` as "should I show this button",
15
+ * and let the server reject unauthorized calls regardless. The `unauthorized` guard below
16
+ * exists precisely because the server — not the client — is the authority.
17
+ */
18
+ import { type Accessor } from '@fluixi/reactive/signal';
19
+ /** A token plus, optionally, its expiry as an epoch-ms timestamp. */
20
+ export interface TokenResult {
21
+ token: string;
22
+ expiresAt?: number;
23
+ }
24
+ /** The backend-specific bits you must (or may) provide. */
25
+ export interface SessionAdapter<U, C, R = unknown> {
26
+ /** Authenticate credentials → a raw token string or a {token, expiresAt}. */
27
+ login: (creds: C) => Promise<string | TokenResult>;
28
+ /** Fetch the current user given the active token. */
29
+ fetchUser: (token: string) => Promise<U>;
30
+ /** Invalidate the session on the backend (optional). */
31
+ logout?: () => Promise<void> | void;
32
+ /** Register an account (optional). Return a token to auto-login, or void. */
33
+ register?: (data: R) => Promise<string | TokenResult | void>;
34
+ /** Exchange the current token for a fresh one (optional → enables auto-refresh). */
35
+ refresh?: (token: string) => Promise<string | TokenResult>;
36
+ /** Derive expiry (epoch ms) from a token, e.g. decode a JWT `exp` (optional). */
37
+ getExpiry?: (token: string) => number | null;
38
+ }
39
+ export type Role = string;
40
+ /**
41
+ * Declarative role → permission mapping. `P` is YOUR permission shape — a nested capability
42
+ * object, a flat `Set`, a Better-Auth-style `{ resource: action[] }` statement, whatever you
43
+ * check against. `Q` is the QUERY you pass to `can()` — by default a predicate `(p) => bool`,
44
+ * but supply a `match` to use a declarative query instead (a `'resource:action'` string, an
45
+ * object, a CASL ability, …). The framework derives the active role(s), hands you the matching
46
+ * permission set, and runs your matcher; it does not prescribe either shape.
47
+ */
48
+ export interface AccessControl<U, P, Q = (p: P) => boolean> {
49
+ /**
50
+ * Derive the user's role(s) from ANY user field — `u => u?.metadata?.access` returns
51
+ * whatever word lives there. Return one role, several, or null. Optional: omit it when
52
+ * `permissions` is a resolver that reads the user directly.
53
+ */
54
+ getRole?: (user: U | null) => Role | Role[] | null | undefined;
55
+ /**
56
+ * Either a static role → permission map, OR a resolver that derives the permission set
57
+ * straight from the user (when access isn't a fixed matrix — e.g. computed from user
58
+ * flags / fields). The resolver also receives the derived roles.
59
+ */
60
+ permissions: Record<Role, P> | ((user: U | null, roles: Role[]) => P | undefined);
61
+ /** Permissions for an unauthenticated / unknown-role user (default: undefined). */
62
+ guest?: P;
63
+ /** Combine permission sets when a user has multiple roles (default: last role wins). */
64
+ merge?: (sets: P[]) => P;
65
+ /**
66
+ * Interpret a `can(query)` call. Default: the query IS a predicate, run as
67
+ * `query(permissions)`. Override for declarative queries — `match: (perms, q: string) =>
68
+ * perms.has(q)` → `can('products:edit')`. The `user` is passed too, so a check can read a
69
+ * user field directly: `match: (_p, q, user) => user?.metadata?.access === q`.
70
+ */
71
+ match?: (permissions: P, query: Q, user: U | null) => boolean;
72
+ }
73
+ export interface FetchGuardOptions {
74
+ /** The fetch to wrap (default: the global fetch). */
75
+ fetch?: typeof fetch;
76
+ /** Status that signals an expired/invalid session (default 401). */
77
+ status?: number;
78
+ /** Narrow which responses count as expiry — e.g. your API origin, minus the login route. */
79
+ shouldHandle?: (url: string, response: Response) => boolean;
80
+ /** Fired at most once until `reset()` — so one expired session isn't reported N times. */
81
+ onUnauthorized: () => void;
82
+ }
83
+ export type GuardedFetch = typeof fetch & {
84
+ reset: () => void;
85
+ };
86
+ /**
87
+ * Wrap a fetch so a chosen status (401) trips `onUnauthorized` once. Returns a NEW fetch —
88
+ * pass it to your SDK / data layer. Nothing global is mutated: this is the standards-clean
89
+ * way to react to an expired session. (For SDKs that only ever call the global `fetch`,
90
+ * `installGlobalFetchGuard` is the explicit escape hatch.)
91
+ */
92
+ export declare function createFetchGuard(opts: FetchGuardOptions): GuardedFetch;
93
+ /**
94
+ * Replace the GLOBAL `fetch` with a guarded one. A deliberate global side effect — use it
95
+ * only when your SDK gives you no way to inject a custom fetch (e.g. Medusa's JS SDK).
96
+ * No-op on the server. Returns an uninstaller that restores the original fetch.
97
+ */
98
+ export declare function installGlobalFetchGuard(opts: FetchGuardOptions): () => void;
99
+ export type SessionOp = 'login' | 'register' | 'hydrate' | 'refresh';
100
+ /** The lifecycle state. Derived; read it instead of juggling isLoading + flags by hand. */
101
+ export type SessionStatus = 'idle' | 'authenticating' | 'authenticated' | 'expired' | 'error';
102
+ export interface UnauthorizedOptions {
103
+ /** Status that means "session expired" (default 401). */
104
+ status?: number;
105
+ /** Narrow which responses count — e.g. only your API, excluding the login endpoint. */
106
+ shouldHandle?: (url: string, response: Response) => boolean;
107
+ /**
108
+ * Patch the GLOBAL fetch. Needed when your data layer always uses the global `fetch`
109
+ * (Medusa's SDK). Default false — prefer wiring `session.guardedFetch` into your SDK.
110
+ */
111
+ installGlobal?: boolean;
112
+ /** What to do when the session expires (default: mark expired + logout). */
113
+ onExpiry?: () => void;
114
+ }
115
+ export interface SessionOptions<U, C, R = unknown, P = unknown, Q = (p: P) => boolean> extends SessionAdapter<U, C, R> {
116
+ /** localStorage keys (defaults: `fx_session_token` / `fx_session_user`). */
117
+ storageKeys?: {
118
+ token?: string;
119
+ user?: string;
120
+ expiry?: string;
121
+ };
122
+ /** Refresh this many ms BEFORE expiry (default 60_000). */
123
+ refreshSkewMs?: number;
124
+ /** Client-side RBAC — see the security note at the top of this file. */
125
+ access?: AccessControl<U, P, Q>;
126
+ /** React to server "session expired" (401) responses. */
127
+ unauthorized?: UnauthorizedOptions;
128
+ onLogin?: (user: U) => void;
129
+ onLogout?: () => void;
130
+ onRefresh?: (token: string) => void;
131
+ onExpired?: () => void;
132
+ onError?: (err: unknown, op: SessionOp) => void;
133
+ }
134
+ export interface Session<U, C, R = unknown, P = unknown, Q = (p: P) => boolean> {
135
+ user: Accessor<U | null>;
136
+ token: Accessor<string | null>;
137
+ isAuthenticated: Accessor<boolean>;
138
+ isLoading: Accessor<boolean>;
139
+ error: Accessor<unknown | null>;
140
+ /** Lifecycle state-machine value. */
141
+ status: Accessor<SessionStatus>;
142
+ /** True once the server rejected the token (401 via the unauthorized guard). */
143
+ expired: Accessor<boolean>;
144
+ /** The active user's role(s) (empty when unauthenticated / no `access`). */
145
+ roles: Accessor<Role[]>;
146
+ /** The active permission set (UI affordance only — see the security note). */
147
+ permissions: Accessor<P | undefined>;
148
+ /** Check the active permission set with your matcher (default: a predicate). `false` when there is none. */
149
+ can: (query: Q) => boolean;
150
+ login: (creds: C) => Promise<void>;
151
+ register: (data: R) => Promise<void>;
152
+ logout: () => Promise<void>;
153
+ /** Restore a session from the stored token (call once on client load). */
154
+ hydrate: () => Promise<void>;
155
+ /** Force a token refresh now (no-op without a `refresh` adapter). */
156
+ refresh: () => Promise<void>;
157
+ /** Update the cached user (e.g. after a profile edit). */
158
+ updateUser: (user: U) => void;
159
+ /** A 401-guarded fetch (present when `unauthorized` is configured) for SDKs that accept one. */
160
+ guardedFetch?: GuardedFetch;
161
+ }
162
+ export declare function createSession<U, C = {
163
+ email: string;
164
+ password: string;
165
+ }, R = unknown, P = unknown, Q = (p: P) => boolean>(options: SessionOptions<U, C, R, P, Q>): Session<U, C, R, P, Q>;
166
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAA4B,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGlF,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO;IAC/C,6EAA6E;IAC7E,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IACnD,qDAAqD;IACrD,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACzC,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC;IAC7D,oFAAoF;IACpF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IAC3D,iFAAiF;IACjF,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC9C;AAID,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO;IACxD;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/D;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;IAClF,mFAAmF;IACnF,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,wFAAwF;IACxF,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACzB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC;CAC/D;AAID,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAC5D,0FAA0F;IAC1F,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC;AAKhE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,YAAY,CAkBtE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAS3E;AAID,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAErE,2FAA2F;AAC3F,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,gBAAgB,GAChB,eAAe,GACf,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAC5D;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CACnF,SAAQ,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/B,4EAA4E;IAC5E,WAAW,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,yDAAyD;IACzD,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO;IAC5E,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/B,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7B,KAAK,EAAE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAChC,qCAAqC;IACrC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAChC,gFAAgF;IAChF,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,4EAA4E;IAC5E,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACxB,8EAA8E;IAC9E,WAAW,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACrC,4GAA4G;IAC5G,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;IAC3B,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,qEAAqE;IACrE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,0DAA0D;IAC1D,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,gGAAgG;IAChG,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAKD,wBAAgB,aAAa,CAC3B,CAAC,EACD,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EACvC,CAAC,GAAG,OAAO,EACX,CAAC,GAAG,OAAO,EACX,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,EACrB,OAAO,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAsNhE"}
package/dist/index.js ADDED
@@ -0,0 +1,275 @@
1
+ /**
2
+ * @fluixi/session — the client session lifecycle + access control as reusable primitives.
3
+ *
4
+ * You provide a small backend ADAPTER (login / fetchUser / logout / optional refresh);
5
+ * the framework owns token + user signals, a status state-machine, persistence (SSR-safe
6
+ * via @fluixi/core's universal `storage`), the hydrate-on-load flow, automatic refresh
7
+ * before expiry, role/permission derivation, and an unauthorized (session-expiry) guard.
8
+ * Apps stop rewriting the same ~150 lines of session glue. (The server-first auth engine —
9
+ * OAuth / MFA / orgs / cookies — is @fluixi/auth.)
10
+ *
11
+ * ── SECURITY BOUNDARY ─────────────────────────────────────────────────────────
12
+ * `roles()`, `permissions()` and `can()` are a CLIENT-SIDE UI affordance: they decide what
13
+ * to RENDER, never what is ALLOWED. A client can forge any role, so authorization MUST be
14
+ * enforced by the backend on every request. Read `can(...)` as "should I show this button",
15
+ * and let the server reject unauthorized calls regardless. The `unauthorized` guard below
16
+ * exists precisely because the server — not the client — is the authority.
17
+ */
18
+ import { createSignal, createMemo } from '@fluixi/reactive/signal';
19
+ import { storage, isClient } from '@fluixi/core';
20
+ const requestUrl = (input) => input instanceof Request ? input.url : input instanceof URL ? input.href : String(input);
21
+ /**
22
+ * Wrap a fetch so a chosen status (401) trips `onUnauthorized` once. Returns a NEW fetch —
23
+ * pass it to your SDK / data layer. Nothing global is mutated: this is the standards-clean
24
+ * way to react to an expired session. (For SDKs that only ever call the global `fetch`,
25
+ * `installGlobalFetchGuard` is the explicit escape hatch.)
26
+ */
27
+ export function createFetchGuard(opts) {
28
+ const base = opts.fetch ?? globalThis.fetch.bind(globalThis);
29
+ const status = opts.status ?? 401;
30
+ let tripped = false;
31
+ const guarded = (async (input, init) => {
32
+ const res = await base(input, init);
33
+ if (res.status === status && !tripped) {
34
+ if (!opts.shouldHandle || opts.shouldHandle(requestUrl(input), res)) {
35
+ tripped = true;
36
+ opts.onUnauthorized();
37
+ }
38
+ }
39
+ return res;
40
+ });
41
+ guarded.reset = () => {
42
+ tripped = false;
43
+ };
44
+ return guarded;
45
+ }
46
+ /**
47
+ * Replace the GLOBAL `fetch` with a guarded one. A deliberate global side effect — use it
48
+ * only when your SDK gives you no way to inject a custom fetch (e.g. Medusa's JS SDK).
49
+ * No-op on the server. Returns an uninstaller that restores the original fetch.
50
+ */
51
+ export function installGlobalFetchGuard(opts) {
52
+ if (!isClient)
53
+ return () => { };
54
+ const original = globalThis.fetch.bind(globalThis);
55
+ const guarded = createFetchGuard({ ...opts, fetch: original });
56
+ globalThis.fetch = guarded;
57
+ installGlobalFetchGuard._reset = guarded.reset;
58
+ return () => {
59
+ globalThis.fetch = original;
60
+ };
61
+ }
62
+ const normalize = (r) => typeof r === 'string' ? { token: r } : r;
63
+ export function createSession(options) {
64
+ const TOKEN_KEY = options.storageKeys?.token ?? 'fx_session_token';
65
+ const USER_KEY = options.storageKeys?.user ?? 'fx_session_user';
66
+ const EXP_KEY = options.storageKeys?.expiry ?? 'fx_session_exp';
67
+ const skew = options.refreshSkewMs ?? 60_000;
68
+ const access = options.access;
69
+ const readUser = () => {
70
+ try {
71
+ return JSON.parse(storage.getItem(USER_KEY) ?? 'null');
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ };
77
+ const [user, setUser] = createSignal(readUser());
78
+ const [token, setTokenSig] = createSignal(storage.getItem(TOKEN_KEY));
79
+ const [isLoading, setLoading] = createSignal(false);
80
+ const [error, setError] = createSignal(null);
81
+ const [expired, setExpired] = createSignal(false);
82
+ // ── Derived access control ──────────────────────────────────────────────────
83
+ const roles = createMemo(() => {
84
+ const r = access?.getRole?.(user());
85
+ if (r == null)
86
+ return [];
87
+ return Array.isArray(r) ? r : [r];
88
+ });
89
+ const permissions = createMemo(() => {
90
+ if (!access)
91
+ return undefined;
92
+ const rs = roles();
93
+ // Resolver form: derive the set straight from the user (no fixed matrix).
94
+ if (typeof access.permissions === 'function')
95
+ return access.permissions(user(), rs) ?? access.guest;
96
+ // Record form: look the role(s) up in the matrix, merging when there are several.
97
+ const map = access.permissions;
98
+ const sets = rs.map((r) => map[r]).filter((s) => s != null);
99
+ if (sets.length === 0)
100
+ return access.guest;
101
+ if (sets.length === 1)
102
+ return sets[0];
103
+ return access.merge ? access.merge(sets) : sets[sets.length - 1];
104
+ });
105
+ // Default matcher: the query IS a predicate. A custom `match` swaps in declarative queries.
106
+ const matcher = access?.match ??
107
+ ((p, q) => (typeof q === 'function' ? q(p) : false));
108
+ const can = (query) => {
109
+ const p = permissions();
110
+ return p != null ? matcher(p, query, user()) : false;
111
+ };
112
+ const status = createMemo(() => {
113
+ if (isLoading())
114
+ return 'authenticating';
115
+ if (expired())
116
+ return 'expired';
117
+ if (error())
118
+ return 'error';
119
+ return token() ? 'authenticated' : 'idle';
120
+ });
121
+ let refreshTimer = null;
122
+ const clearTimer = () => {
123
+ if (refreshTimer) {
124
+ clearTimeout(refreshTimer);
125
+ refreshTimer = null;
126
+ }
127
+ };
128
+ // Schedule an automatic refresh `skew` ms before the token expires. Client-only —
129
+ // never run timers during SSR. No-op without a `refresh` adapter or a known expiry.
130
+ const scheduleRefresh = (expiresAt) => {
131
+ clearTimer();
132
+ if (!isClient || !options.refresh || !expiresAt)
133
+ return;
134
+ const delay = expiresAt - Date.now() - skew;
135
+ refreshTimer = setTimeout(() => void doRefresh(), Math.max(0, delay));
136
+ };
137
+ const persistToken = (t) => {
138
+ setTokenSig(t.token);
139
+ storage.setItem(TOKEN_KEY, t.token);
140
+ const expiresAt = t.expiresAt ?? options.getExpiry?.(t.token) ?? undefined;
141
+ if (expiresAt)
142
+ storage.setItem(EXP_KEY, String(expiresAt));
143
+ else
144
+ storage.removeItem(EXP_KEY);
145
+ scheduleRefresh(expiresAt);
146
+ };
147
+ const persistUser = (u) => {
148
+ setUser(() => u);
149
+ storage.setItem(USER_KEY, JSON.stringify(u));
150
+ };
151
+ const run = async (op, fn) => {
152
+ setLoading(true);
153
+ setError(null);
154
+ try {
155
+ return await fn();
156
+ }
157
+ catch (err) {
158
+ setError(err);
159
+ options.onError?.(err, op);
160
+ throw err;
161
+ }
162
+ finally {
163
+ setLoading(false);
164
+ }
165
+ };
166
+ async function doRefresh() {
167
+ const current = token();
168
+ if (!options.refresh || !current)
169
+ return;
170
+ await run('refresh', async () => {
171
+ const next = normalize(await options.refresh(current));
172
+ persistToken(next);
173
+ options.onRefresh?.(next.token);
174
+ });
175
+ }
176
+ // ── Unauthorized guard wiring ────────────────────────────────────────────────
177
+ let guard;
178
+ if (options.unauthorized) {
179
+ const onExpiry = options.unauthorized.onExpiry ??
180
+ (() => {
181
+ void session.logout();
182
+ });
183
+ const handler = () => {
184
+ setExpired(true);
185
+ options.onExpired?.();
186
+ onExpiry();
187
+ };
188
+ guard = createFetchGuard({
189
+ status: options.unauthorized.status,
190
+ shouldHandle: options.unauthorized.shouldHandle,
191
+ onUnauthorized: handler,
192
+ });
193
+ if (options.unauthorized.installGlobal) {
194
+ installGlobalFetchGuard({
195
+ status: options.unauthorized.status,
196
+ shouldHandle: options.unauthorized.shouldHandle,
197
+ onUnauthorized: handler,
198
+ });
199
+ }
200
+ }
201
+ const session = {
202
+ user,
203
+ token,
204
+ isAuthenticated: () => token() !== null,
205
+ isLoading,
206
+ error,
207
+ status,
208
+ expired,
209
+ roles,
210
+ permissions,
211
+ can,
212
+ guardedFetch: guard,
213
+ async login(creds) {
214
+ await run('login', async () => {
215
+ persistToken(normalize(await options.login(creds)));
216
+ const u = await options.fetchUser(token());
217
+ persistUser(u);
218
+ setExpired(false);
219
+ guard?.reset();
220
+ options.onLogin?.(u);
221
+ });
222
+ },
223
+ async register(data) {
224
+ await run('register', async () => {
225
+ const res = await options.register?.(data);
226
+ if (res) {
227
+ persistToken(normalize(res));
228
+ const u = await options.fetchUser(token());
229
+ persistUser(u);
230
+ setExpired(false);
231
+ guard?.reset();
232
+ options.onLogin?.(u);
233
+ }
234
+ });
235
+ },
236
+ async logout() {
237
+ try {
238
+ await options.logout?.();
239
+ }
240
+ catch {
241
+ /* best-effort backend logout */
242
+ }
243
+ clearTimer();
244
+ storage.removeItem(TOKEN_KEY);
245
+ storage.removeItem(USER_KEY);
246
+ storage.removeItem(EXP_KEY);
247
+ setTokenSig(null);
248
+ setUser(null);
249
+ guard?.reset();
250
+ options.onLogout?.();
251
+ },
252
+ async hydrate() {
253
+ const stored = storage.getItem(TOKEN_KEY);
254
+ if (!stored)
255
+ return;
256
+ if (!token())
257
+ setTokenSig(stored);
258
+ const expStr = storage.getItem(EXP_KEY);
259
+ scheduleRefresh(expStr ? Number(expStr) : options.getExpiry?.(stored) ?? undefined);
260
+ if (user())
261
+ return;
262
+ try {
263
+ persistUser(await run('hydrate', () => options.fetchUser(stored)));
264
+ }
265
+ catch {
266
+ await session.logout(); // token invalid/expired → clear
267
+ }
268
+ },
269
+ refresh: doRefresh,
270
+ updateUser(u) {
271
+ persistUser(u);
272
+ },
273
+ };
274
+ return session;
275
+ }
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ import{createSignal as f,createMemo as v}from"@fluixi/reactive/signal";import{storage as o,isClient as Q}from"@fluixi/core";var M=e=>e instanceof Request?e.url:e instanceof URL?e.href:String(e);function L(e){let i=e.fetch??globalThis.fetch.bind(globalThis),u=e.status??401,l=!1,h=(async(t,p)=>{let a=await i(t,p);return a.status===u&&!l&&(!e.shouldHandle||e.shouldHandle(M(t),a))&&(l=!0,e.onUnauthorized()),a});return h.reset=()=>{l=!1},h}function _(e){if(!Q)return()=>{};let i=globalThis.fetch.bind(globalThis),u=L({...e,fetch:i});return globalThis.fetch=u,_._reset=u.reset,()=>{globalThis.fetch=i}}var b=e=>typeof e=="string"?{token:e}:e;function J(e){let i=e.storageKeys?.token??"fx_session_token",u=e.storageKeys?.user??"fx_session_user",l=e.storageKeys?.expiry??"fx_session_exp",h=e.refreshSkewMs??6e4,t=e.access,p=()=>{try{return JSON.parse(o.getItem(u)??"null")}catch{return null}},[a,w]=f(p()),[c,R]=f(o.getItem(i)),[S,T]=f(!1),[A,E]=f(null),[z,P]=f(!1),C=v(()=>{let s=t?.getRole?.(a());return s==null?[]:Array.isArray(s)?s:[s]}),I=v(()=>{if(!t)return;let s=C();if(typeof t.permissions=="function")return t.permissions(a(),s)??t.guest;let r=t.permissions,n=s.map(k=>r[k]).filter(k=>k!=null);return n.length===0?t.guest:n.length===1?n[0]:t.merge?t.merge(n):n[n.length-1]}),H=t?.match??((s,r)=>typeof r=="function"?r(s):!1),K=s=>{let r=I();return r!=null?H(r,s,a()):!1},q=v(()=>S()?"authenticating":z()?"expired":A()?"error":c()?"authenticated":"idle"),g=null,G=()=>{g&&(clearTimeout(g),g=null)},O=s=>{if(G(),!Q||!e.refresh||!s)return;let r=s-Date.now()-h;g=setTimeout(()=>{F()},Math.max(0,r))},U=s=>{R(s.token),o.setItem(i,s.token);let r=s.expiresAt??e.getExpiry?.(s.token)??void 0;r?o.setItem(l,String(r)):o.removeItem(l),O(r)},m=s=>{w(()=>s),o.setItem(u,JSON.stringify(s))},y=async(s,r)=>{T(!0),E(null);try{return await r()}catch(n){throw E(n),e.onError?.(n,s),n}finally{T(!1)}};async function F(){let s=c();!e.refresh||!s||await y("refresh",async()=>{let r=b(await e.refresh(s));U(r),e.onRefresh?.(r.token)})}let d;if(e.unauthorized){let s=e.unauthorized.onExpiry??(()=>{x.logout()}),r=()=>{P(!0),e.onExpired?.(),s()};d=L({status:e.unauthorized.status,shouldHandle:e.unauthorized.shouldHandle,onUnauthorized:r}),e.unauthorized.installGlobal&&_({status:e.unauthorized.status,shouldHandle:e.unauthorized.shouldHandle,onUnauthorized:r})}let x={user:a,token:c,isAuthenticated:()=>c()!==null,isLoading:S,error:A,status:q,expired:z,roles:C,permissions:I,can:K,guardedFetch:d,async login(s){await y("login",async()=>{U(b(await e.login(s)));let r=await e.fetchUser(c());m(r),P(!1),d?.reset(),e.onLogin?.(r)})},async register(s){await y("register",async()=>{let r=await e.register?.(s);if(r){U(b(r));let n=await e.fetchUser(c());m(n),P(!1),d?.reset(),e.onLogin?.(n)}})},async logout(){try{await e.logout?.()}catch{}G(),o.removeItem(i),o.removeItem(u),o.removeItem(l),R(null),w(null),d?.reset(),e.onLogout?.()},async hydrate(){let s=o.getItem(i);if(!s)return;c()||R(s);let r=o.getItem(l);if(O(r?Number(r):e.getExpiry?.(s)??void 0),!a())try{m(await y("hydrate",()=>e.fetchUser(s)))}catch{await x.logout()}},refresh:F,updateUser(s){m(s)}};return x}export{L as createFetchGuard,J as createSession,_ as installGlobalFetchGuard};
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.d.ts","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/modules/index.d.ts","../../reactive/dist/lib/observable/types.d.ts","../../reactive/dist/lib/observable/subscription.d.ts","../../reactive/dist/lib/observable/observable.d.ts","../../reactive/dist/lib/signal/graph/detect.d.ts","../../reactive/dist/lib/signal/graph/derived.d.ts","../../reactive/dist/lib/signal/graph/runtime.d.ts","../../reactive/dist/lib/signal/graph/compat.d.ts","../../reactive/dist/lib/signal/graph/children.d.ts","../../reactive/dist/lib/signal/graph/ssr-hooks.d.ts","../../reactive/dist/lib/signal/signal.d.ts","../../reactive/dist/lib/signal/list.d.ts","../../reactive/dist/lib/signal/graph/resource.d.ts","../../reactive/dist/lib/signal/graph/suspense.d.ts","../../reactive/dist/lib/signal/graph/error-boundary.d.ts","../../reactive/dist/lib/signal/graph/core.d.ts","../../reactive/dist/lib/signal/graph/index.d.ts","../../reactive/dist/lib/signal/graph/signal-next.d.ts","../../reactive/dist/lib/signal/index.d.ts","../../reactive/dist/lib/signal/utilities.d.ts","../../dom/dist/lib/dom/utils.d.ts","../../dom/dist/lib/dom/runtime.d.ts","../../reactive/dist/lib/observable/index.d.ts","../../reactive/dist/lib/subject.d.ts","../../utils/dist/lib/maths/types/basic.d.ts","../../utils/dist/lib/maths/types/advanced.d.ts","../../utils/dist/lib/maths/types/negative.d.ts","../../utils/dist/lib/maths/types/operations.d.ts","../../utils/dist/lib/maths/types/index.d.ts","../../utils/dist/lib/maths/constants.d.ts","../../utils/dist/lib/maths/guards.d.ts","../../utils/dist/lib/maths/fn/basic.d.ts","../../utils/dist/lib/maths/fn/advanced.d.ts","../../utils/dist/lib/maths/fn/vector.d.ts","../../utils/dist/lib/maths/fn/complex.d.ts","../../utils/dist/lib/maths/fn/trigo.d.ts","../../utils/dist/lib/maths/fn/index.d.ts","../../utils/dist/lib/maths/formatter.d.ts","../../utils/dist/lib/maths/random.d.ts","../../utils/dist/lib/maths/parser.d.ts","../../utils/dist/lib/maths/index.d.ts","../../utils/dist/lib/primitive/string/string.d.ts","../../utils/dist/lib/primitive/string/types.d.ts","../../utils/dist/lib/primitive/string/index.d.ts","../../utils/dist/lib/primitive/boolean/types.d.ts","../../utils/dist/lib/primitive/boolean/boolean.d.ts","../../utils/dist/lib/primitive/boolean/index.d.ts","../../utils/dist/lib/primitive/date/types.d.ts","../../utils/dist/lib/primitive/date/date.d.ts","../../utils/dist/lib/primitive/date/index.d.ts","../../utils/dist/lib/primitive/types.d.ts","../../utils/dist/lib/primitive/index.d.ts","../../utils/dist/lib/object/types.d.ts","../../utils/dist/lib/object/object.d.ts","../../utils/dist/lib/object/diff.d.ts","../../utils/dist/lib/object/selector.d.ts","../../utils/dist/lib/object/merge.d.ts","../../utils/dist/lib/object/clone.d.ts","../../utils/dist/lib/object/getter-setter.d.ts","../../utils/dist/lib/object/omit.d.ts","../../utils/dist/lib/object/transform.d.ts","../../utils/dist/lib/object/reconcile.d.ts","../../utils/dist/lib/object/sort.d.ts","../../utils/dist/lib/object/utils.d.ts","../../utils/dist/lib/object/index.d.ts","../../reactive/dist/lib/store/setter.types.d.ts","../../reactive/dist/lib/store/types.d.ts","../../reactive/dist/lib/store/store.d.ts","../../reactive/dist/lib/store/utils.d.ts","../../reactive/dist/lib/store/index.d.ts","../../reactive/dist/lib/index.d.ts","../../reactive/dist/index.d.ts","../../dom/dist/lib/dom/types.d.ts","../../dom/dist/lib/dom/integration.d.ts","../../dom/dist/lib/dom/server/host.d.ts","../../dom/dist/lib/dom/island.d.ts","../../dom/dist/lib/dom/hydration.d.ts","../../dom/dist/lib/dom/hydration-state.d.ts","../../dom/dist/lib/dom/index.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/css-tag.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/reactive-controller.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/reactive-element.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/directive.d.ts","../../../node_modules/.pnpm/@types+trusted-types@2.0.7/node_modules/@types/trusted-types/lib/index.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/lit-html.d.ts","../../../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/development/lit-element.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/is-server.d.ts","../../../node_modules/.pnpm/lit@3.3.3/node_modules/lit/development/index.d.ts","../../dom/dist/lib/shared/types.d.ts","../../dom/dist/lib/component/modifiers.d.ts","../../dom/dist/lib/component/index.d.ts","../../dom/dist/lib/flow/show.d.ts","../../dom/dist/lib/flow/for.d.ts","../../dom/dist/lib/flow/index-flow.d.ts","../../dom/dist/lib/flow/switch.d.ts","../../dom/dist/lib/flow/dynamic.d.ts","../../dom/dist/lib/flow/portal.d.ts","../../dom/dist/lib/flow/error-boundary.d.ts","../../dom/dist/lib/flow/class-map.d.ts","../../dom/dist/lib/flow/style-map.d.ts","../../dom/dist/lib/flow/index.d.ts","../../dom/dist/lib/dom/server/nodes.d.ts","../../dom/dist/lib/dom/server/serialize.d.ts","../../dom/dist/lib/dom/server/fx-data.d.ts","../../dom/dist/lib/dom/server/request-context.d.ts","../../dom/dist/lib/dom/server/render.d.ts","../../dom/dist/lib/dom/server/index.d.ts","../../dom/dist/lib/index.d.ts","../../dom/dist/index.d.ts","../../core/dist/src/lib/render/component.d.ts","../../core/dist/src/lib/render/suspense.d.ts","../../core/dist/src/lib/render/lazy.d.ts","../../core/dist/src/lib/render/index.d.ts","../../core/dist/src/lib/context/context.d.ts","../../core/dist/src/lib/context/index.d.ts","../../core/dist/src/lib/isomorphic.d.ts","../../core/dist/src/lib/env/index.d.ts","../../core/dist/src/lib/theme/index.d.ts","../../utils/dist/lib/array/array.d.ts","../../utils/dist/lib/array/utils.d.ts","../../utils/dist/lib/array/advanced.d.ts","../../utils/dist/lib/array/index.d.ts","../../utils/dist/lib/dom/events.d.ts","../../utils/dist/lib/dom/utils.d.ts","../../utils/dist/lib/dom/index.d.ts","../../utils/dist/lib/crypto/hash.d.ts","../../utils/dist/lib/crypto/index.d.ts","../../utils/dist/lib/functions/functions.d.ts","../../utils/dist/lib/functions/types.d.ts","../../utils/dist/lib/functions/index.d.ts","../../utils/dist/lib/helpers.d.ts","../../utils/dist/lib/index.d.ts","../../utils/dist/index.d.ts","../../router/dist/lib/types.d.ts","../../router/dist/lib/match.d.ts","../../router/dist/lib/history.d.ts","../../router/dist/lib/router.d.ts","../../router/dist/index.d.ts","../../core/dist/src/lib/router-next/data.d.ts","../../core/dist/src/lib/router-next/index.d.ts","../../core/dist/src/lib/control-flow.d.ts","../../../node_modules/.pnpm/lit@3.3.3/node_modules/lit/development/directive.d.ts","../../lit/dist/directives/classMap.d.ts","../../lit/dist/directives/styleMap.d.ts","../../lit/dist/directives/ifDefined.d.ts","../../lit/dist/directives/live.d.ts","../../lit/dist/directives/ref.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/directives/repeat.d.ts","../../../node_modules/.pnpm/lit@3.3.3/node_modules/lit/development/directives/repeat.d.ts","../../lit/dist/directives/repeat.d.ts","../../lit/dist/directives/unsafeHTML.d.ts","../../lit/dist/directives/unsafeSVG.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/async-directive.d.ts","../../../node_modules/.pnpm/lit@3.3.3/node_modules/lit/development/async-directive.d.ts","../../lit/dist/directives/async-append.d.ts","../../lit/dist/directives/suspense.d.ts","../../lit/dist/directives/litrx.d.ts","../../lit/dist/directives/reactiveAttr.d.ts","../../lit/dist/directives/utils.d.ts","../../lit/dist/directives/index.d.ts","../../lit/dist/templates/index.d.ts","../../lit/dist/control-flow/for.d.ts","../../lit/dist/control-flow/each.d.ts","../../lit/dist/control-flow/index-flow.d.ts","../../lit/dist/control-flow/show.d.ts","../../lit/dist/control-flow/switch.d.ts","../../lit/dist/control-flow/dynamic.d.ts","../../lit/dist/control-flow/portal.d.ts","../../lit/dist/control-flow/index.d.ts","../../lit/dist/index.d.ts","../../core/dist/src/lib/core.d.ts","../../core/dist/src/index.d.ts","../src/index.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/dom-events.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/globals.global.d.ts","../../../node_modules/.pnpm/@types+node@18.16.9/node_modules/@types/node/index.d.ts"],"fileIdsList":[[274],[134,135,274],[228,274],[231,274],[232,237,265,274],[233,244,245,252,262,273,274],[233,234,244,252,274],[235,274],[236,237,245,253,274],[237,262,270,274],[238,240,244,252,274],[239,274],[240,241,274],[244,274],[242,244,274],[244,245,246,262,273,274],[244,245,246,259,262,265,274],[274,278],[240,244,247,252,262,273,274],[244,245,247,248,252,262,270,273,274],[247,249,262,270,273,274],[228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280],[244,250,274],[251,273,274],[240,244,252,262,274],[253,274],[254,274],[231,255,274],[256,272,274,278],[257,274],[258,274],[244,259,260,274],[259,261,274,276],[232,244,262,263,264,265,274],[232,262,264,274],[262,263,274],[265,274],[266,274],[244,268,269,274],[268,269,274],[237,252,262,270,274],[271,274],[252,272,274],[232,247,258,273,274],[237,274],[262,274,275],[274,276],[274,277],[232,237,244,246,255,262,273,274,276,278],[262,274,279],[136,139,274],[137,139,274],[139,274],[137,138,274],[207,274],[137,274],[202,274],[136,139,140,141,274],[54,274],[225,274],[73,163,274],[168,274],[163,274],[73,74,124,163,167,169,170,171,172,187,194,195,224,274],[73,274],[164,165,166,274],[73,106,119,166,192,193,274],[162,274],[144,274],[75,76,127,128,129,130,131,132,274],[127,274],[129,156,157,158,159,160,274],[129,274],[159,274],[126,274],[73,146,147,148,149,150,151,152,153,154,274],[127,128,133,143,145,155,161,274],[142,274],[126,142,163,274],[196,274],[73,142,163,274],[216,217,218,219,220,221,222,274],[196,208,274],[142,196,274],[197,198,199,200,201,204,205,206,209,210,211,212,213,274],[73,142,196,274],[203,274],[208,274],[126,196,274],[214,215,223,274],[125,274],[73,77,78,124,274],[56,57,58,274],[57,274],[56,274],[62,274],[61,274],[65,274],[70,274],[59,60,61,62,63,64,65,66,67,68,69,71,274],[72,274],[58,59,60,63,64,274],[58,65,274],[121,122,123,274],[119,274],[58,73,120,121,274],[121,274],[77,274],[188,189,190,191,274],[188,274],[188,190,274],[55,73,226,274],[186,274],[107,274],[173,174,175,274],[180,274],[177,178,274],[182,183,274],[106,274],[176,179,181,184,185,274],[80,274],[79,274],[86,87,88,89,90,274],[83,274],[83,84,85,91,92,93,94,274],[79,80,82,274],[79,81,274],[107,108,109,110,111,112,113,114,115,116,117,118,274],[95,106,274],[106,107,274],[99,274],[99,100,274],[102,274],[102,103,274],[98,101,104,105,274],[96,97,274]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b8f34dd1757f68e03262b1ca3ddfa668a855b872f8bdd5224d6f993a7b37dc2c","impliedFormat":99},{"version":"e592cf1b998ce8043e72ca38e2f40c5631e65e937e3102223f7086140bf979a3","impliedFormat":99},{"version":"0ceea501c52cdf869e3562ea96fca2785a3394a9e1e446afb5e11092ad2dc7fc","impliedFormat":99},{"version":"ebe92631232ee90bd0cd2668b349a8ecf869a42f94aa5a80505aaf7833be6819","impliedFormat":99},{"version":"892323d83df6c419a9f961e7156e70184b4a27638de72f7b92931ab3c165298e","impliedFormat":99},{"version":"ed51ea7ddcddfe0523b5a8d3112c55f8494f3f419ad6b830a1aac7dfe499a8ab","impliedFormat":99},{"version":"f930ceeb25ec3a15c78ff12771c202a67164e232a5b588635c89603c6c961928","impliedFormat":99},{"version":"96e415a91946f00ac400e74dfeb26b575aade405169df35621a822e6b4d5abf0","impliedFormat":99},{"version":"e8be3e24c3b98c301590ee0fefc462accc9a0f1fa674f62a3b63be9786ef9a99","impliedFormat":99},{"version":"e08f70018aeffb92654e466522e4b194b712da2091b20bdb0922c8441f2a43b7","impliedFormat":99},{"version":"97b4ab5a8db570e67a3a764a456486d97b8808b658e0e0a3eb9e38b63270d086","impliedFormat":99},{"version":"1f33d92b487c119aee6f7cf04ac95c0dab317c228b388fead9d7d87540f8adf7","impliedFormat":99},{"version":"e972de4985925f07d08dfb7eb73a400506f75b3596cac60591fab948eade26b7","impliedFormat":99},{"version":"c03135439ad665f4a011a75586bf96098f6fe0b0716e78afc8cdf651bcc8f879","impliedFormat":99},{"version":"290111961dc134d534be036cd591c09a0e65ceed2fcf9aa9666ae2bcdac7034f","impliedFormat":99},{"version":"ac292cffbb31f9c76b09f7b0c630cfc2b9c7e5070dfc4472cfc60023ec447bd2","impliedFormat":99},{"version":"ac23329299d15c989ebe7e62bb1858a58de39aa3cd4fb1265e93ddc6d9631b07","impliedFormat":99},{"version":"16b49126ba492eb0b4abc93a518addf8ca7e850bed2fc56c111ffa768d23113e","impliedFormat":99},{"version":"1122b4ca26147813c76ac7a2f38911854cb2bd5cf0af003f578175f3db1c3aee","impliedFormat":99},{"version":"2dce570f3d8917cca7d605dc74f96d74ec8af5c590b68fccb4bfaf939a297bf6","impliedFormat":99},{"version":"8fe10058c65480f8667d1099d1ca25c75f07091ae303f287eda65bb622d7e1d5","impliedFormat":99},{"version":"13bb96268e358a7e2a50476df6db22b4258ec01edbd3f9de3ed2fafffed11e1d","impliedFormat":99},{"version":"e6597aaf78157a53337c8794d2f7eee5eecef77a6ec0c60480c74a936811fa36","impliedFormat":99},{"version":"7112073e38bc7d171cbc5530734f550065ecbc76eb302319c5e8a06105dae5bb","impliedFormat":99},{"version":"631287e5e4a8a6ff2348789b7d2d00944c0f09ff3fed60cc3642323a1ff0ed4a","impliedFormat":99},{"version":"4f24eafbd6e05dd55f4597c6d286171fbe5066785625c482ab5c5cbba2fc7487","impliedFormat":99},{"version":"e9ad8fb60df94fd4f929f944a12d496271d6523e69d5ad4de20fc080a0a30711","impliedFormat":99},{"version":"a928f91a183425984c472e4d2763f7649e8d63c92c74a2fa59482ad8905bc664","impliedFormat":99},{"version":"c323e45a420e39e384e86db3e4470969016e8f507e04a9ceff1f073d8e5efeff","impliedFormat":99},{"version":"120b522225d94dea3356d056952f0ca9c626a4643a7734fbff1b031f16a0cb65","impliedFormat":99},{"version":"52a743346fe3f9758188a0ba974989e2ec948d8bb145539b6b6d6058204f2612","impliedFormat":99},{"version":"b19bb5d1b4f1ed34aad8e57dc096f7f333dc2fccb0a86633b9c8405c4797b190","impliedFormat":99},{"version":"fde9c3aaca2fb4f489fe2c25d3d0a5d56c145272cf92c6fd1f39f41589d9d0b1","impliedFormat":99},{"version":"2289a9520455d5a74bff1f23ddf0bee2593baedb8b9cda9c3e8720ca66338f65","impliedFormat":99},{"version":"1ff7de3d6cb03553a07592092fcd7a0ed61a88c6be9f5344239ac247be712cfd","impliedFormat":99},{"version":"b071dcadeb17235e2a1116231ca370bac5c97ec090fc73b3736791cb0a2aa91d","impliedFormat":99},{"version":"b4ed0f4d07ca274437eb9d49400de8c81659760e59507f08b94442873eb49a25","impliedFormat":99},{"version":"88978beb444b1d65c0f48d1099717d2a935ce74d9e3e1411bcaa1fe497910ab6","impliedFormat":99},{"version":"712fdf289306e77c2c097843e29560d99ff83bd336da277498ea18ca8cd999f0","impliedFormat":99},{"version":"ceb05e55219637c8dcb77490777c52e537363adc0a060af39cc95d46310f2128","impliedFormat":99},{"version":"a1b05ca68a811afb49605cf1346a53efadc4ec6269caf9e19d97bee4543f1479","impliedFormat":99},{"version":"4e454ae8246e2b13c51c12adaccda8d0fe8e36e120d4e5bbc554021244240fdb","impliedFormat":99},{"version":"4edc87837b7285fe2141b92b492ecc6428a5fc152d7d013af9d0e7017e78befa","impliedFormat":99},{"version":"20e3c2b6bfdfbde9073c6309992943094ab954bd50954c2561daa4d377c78bbc","impliedFormat":99},{"version":"de969e2fcf0e6bfe70c844762f81e47e713dfdf3f1b8ed89378ff3865e78f16d","impliedFormat":99},{"version":"7349d52ef2d997de63d4298417883a9ae8d94ad2d6b0a1ad4a11971fbf01ec3d","impliedFormat":99},{"version":"1673bc6ee9b15e4bc9e4de777b1497bd1ec544d6939061ce7a25de9a0c09565d","impliedFormat":99},{"version":"73eae9a32499f88a8c73cedd49a43ecf441116bb55c7a150f346e333b35c687b","impliedFormat":99},{"version":"9b1c12fce85d708544c70e12e0d8ca6c4a9b27690a27448577b9f4053c49908d","impliedFormat":99},{"version":"68e1a72149e6384295c078bdb945bc3238afcaeb850be14f3ba0571661addf82","impliedFormat":99},{"version":"abc4efc89e29e107946fd0a40b96c4c862d4d340c4c26dd7647183568c3e33c3","impliedFormat":99},{"version":"e1cb7303d3d49535d39fac5d8ded4b5e5e430526eb8a44411cfec3694eae6223","impliedFormat":99},{"version":"1fb68873fd2a769163972685c0516cb3f88fcedd57409f285dfe7c71be13cbbd","impliedFormat":99},{"version":"6685db351c23e0cb6cec2426ea1680a41d29c1633d722c7d7621207c55f6491e","impliedFormat":99},{"version":"cc74864af16373ee02499f7e65758f13f903d37aa1e13e7ad5598facc70dc274","impliedFormat":99},{"version":"71830cf6fc186afa64f4d6d015eed23c78a3af68bd8dc770ffa4d5cee77744b3","impliedFormat":99},{"version":"72ff78881cb1d71790e047eba022ce05845b7dd05e94ba64267dc478ce1457f1","impliedFormat":99},{"version":"fdf1008f43e52d69c62571db0aaa782604dca7e7c2206825a9f46ada5154b610","impliedFormat":99},{"version":"9b3b063cf484aa4088728e28f73f98c7b8fa267debd6f289acec4d70f5977253","impliedFormat":99},{"version":"fe21672b2e8f8ad092ba5ca8ecc4c83f3952dd5144e459f1f001dfdac2f9e7a5","impliedFormat":99},{"version":"95b067197bb5c2f7ca7ee0ede9be77c4724aa09687b75d6e8cacf0904ff565f9","impliedFormat":99},{"version":"3ab7a86cdb01a3f6d3845a82add1feee0ec6b0620fde0224ada4ab929f459b61","impliedFormat":99},{"version":"0c40740c1cb8ae5f8a74182579c5a392f7e0ce20826d1a4907417e6929e20666","impliedFormat":99},{"version":"ea7a689828afde6f1565f81d9a675c48daa0b91c36020aaeef7193b8769cccf9","impliedFormat":99},{"version":"4c362ca187c7fc9d6a986d33da9966cac1738dc14f8da9f1315b0703214f7be5","impliedFormat":99},{"version":"45d0b9f6985725909f26094b518f6e5017ecc9fff784fb71792addb7c90c70bf","impliedFormat":99},{"version":"62512a36ef5e3ed8dca2f7ac0800e2d3bd461025c7b4ae5539cd871258dcd00c","impliedFormat":99},{"version":"f431bb373494e78c5e01546c80fc41921ca9b24386c388da802a2afbe9705392","impliedFormat":99},{"version":"07a2317b33ba403c06f14a9c8cf0ed93a83d85d22ffc64cab4452327a1e08e24","impliedFormat":99},{"version":"415f940ff9853f2e98ac9864385e88ac819ae9dda1a1ca69c8cdb170054b2820","impliedFormat":99},{"version":"f6e6e7e47824c8366b0cad7f6582ac611143a12bac48ecff2f6b88ff78187d68","impliedFormat":99},{"version":"9a6c3e2900643e20e37b47f712af6420048e737db80c1975707cfde23681b2c9","impliedFormat":99},{"version":"3f06e42c5281bc88f1de705b90b69da10d106a09296ae2bda90e62b5cc0e8cc8","impliedFormat":99},{"version":"73f3a592934d6163184e94890ac9c369ff8d4338e57cdad77a1b775830a06642","impliedFormat":99},{"version":"9dbe39e850dcc9124b71341467f46bb1a0f34e0e15066291bd8f98ec15c03280","impliedFormat":99},{"version":"746a5c6e2eb8982e2b0cd37bab36ff773d1e9f84abd8244a598f9af0d2ecfe9f","impliedFormat":99},{"version":"9f41d91eeb174fefed6f6317fe406b39be79e87f7c4de3388e6657ea797e8b8c","impliedFormat":99},{"version":"4c0bfb5426c29cbb62fef9241e667b70a7350086ac62b64c3dc94a7985af4c72","impliedFormat":99},{"version":"d211c8d3dbf70442d54e6b5ea5bbfb3e394001d8c802b842a7ced12c1c7d536c","impliedFormat":99},{"version":"74012d464fbc5354ca3a7d5e71bee43b17da01a853c8ff10971bbe3680c76f40","impliedFormat":99},{"version":"5e30131b6a5587fe666926ad1d9807e733c0a597ed12d682669fcaa331aea576","impliedFormat":99},{"version":"a0f82d2f9450bd147a8c137798d9501bd49b7c9e118f75b07b76709ff39b6b55","affectsGlobalScope":true,"impliedFormat":99},{"version":"00cb63103f9670f8094c238a4a7e252c8b4c06ba371fea5c44add7e41b7247e4","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"e09db3291e6b440f7debed2227d8357e80c95987a0d0d67ac17521d8f7b11bdb","impliedFormat":99},{"version":"9a318e3a8900672b85cd3c8c3a5acf51b88049557a3ae897ccdcf2b85a8f61f9","impliedFormat":99},{"version":"1bcd560deed90a43c51b08aa18f7f55229f2e30974ab5ed1b7bb5721be379013","impliedFormat":99},{"version":"dc08fe04e50bc24d1baded4f33e942222bbdd5d77d6341a93cfe6e4e4586a3be","impliedFormat":99},{"version":"35b2e19d086f311343f1ffae8a1bd1f0fd4f70de2f49d9605241c4f74b53ddc2","impliedFormat":99},{"version":"5a2fad844d16083a48af5d82bffb196e7bdd6f44e46e80f552e16b170c4a8f71","impliedFormat":99},{"version":"c6650df9082a55ae635b96b371b9957d8eafbc12ffdbc0e0b77f0b002fdd8e7f","impliedFormat":99},{"version":"326daff479c598c3230df94051092329abffd458689dc3cce3f21b767b499d99","impliedFormat":99},{"version":"9291566976678663eb96b938d284bf09d2139043d0d7d0976cffbdcbe44f0d0e","impliedFormat":99},{"version":"213b1ac213e38d56741eee5e31ca39ee579d7489084e7c30486fe3b3b9684028","impliedFormat":99},{"version":"0e416bf225e5eb5ec5b58e890d34d9c645feb834b95b73bd767d9a1526e58fbf","impliedFormat":99},{"version":"44b89266a40c97f4d533e43a64342d12b7f03c818b0ea0b5ed3314f27a5ea3c1","impliedFormat":99},{"version":"9c44147ff2f963a6a6430664b8073eba81fe22adfdceefe5d4b94c58a1744247","impliedFormat":99},{"version":"1e46f8f10c9d81c3c36accfe6076d8abd35e6218d28e3f7deadd08e2cf99857a","impliedFormat":99},{"version":"91ef71cd917ce22fd4a3f7fac1094bd492dcc85e7e4646af6a982268fbb5f89b","impliedFormat":99},{"version":"04353aa31b2939f6ff9a67ad4937896b2ff275852248d2549731e05fc9ea3fe0","impliedFormat":99},{"version":"f3209b787ae8fb62327ebc904a12ee79ae0638a3c423d66b4f5186ff08b891a0","impliedFormat":99},{"version":"8da735bbcdf3eef496c20933a969c898c45abf151d6ef9f1a3f719eb54495e59","impliedFormat":99},{"version":"cca8d9f11c7209da2e992525500746ff81ccb0e74597dc482338b56bbca43977","impliedFormat":99},{"version":"09eea8ae8576e45b470e9506ef332fc71e07dca2dd3c8b4da89fc9ef9d3cc0b0","impliedFormat":99},{"version":"e9e4b5e403d534250d1ae0cfc12a3b14b975a106886ddcafc4c1b44fe362000a","impliedFormat":99},{"version":"963c208c61e15b6a1226512b80a2a63aa80d9195956b0a087e6fe382eeb7b3ba","impliedFormat":99},{"version":"4b6a4593207c56d2da0a64f8f5ce34c54b7af90754c9e5964f696e72f0037530","impliedFormat":99},{"version":"30295332c8cc2b18f1691fb3f9785e48ea3b7d7b544c915b666b8963a414162d","impliedFormat":99},{"version":"73cbc0a2e4774f7128943e055cdce1195b4a66587d8f00e5b7ce64fd5423584a","impliedFormat":99},{"version":"d061f0776c8bedf6ec233e421154a196b83228dfc1260c107e7ebb4efbccd7cf","impliedFormat":99},{"version":"137a896ad9dd6c91df545f023a5e4f3cb1d18694724771e0137afbf82d207de5","impliedFormat":99},{"version":"af74cb86213e1c274ab4ff70f6a471764de959ccedc3e916018bd60f44f656b4","impliedFormat":99},{"version":"5a98a22cc9a5b50c804b350b8b870a40d5474bfde18731dee0ef50129b0fa91f","impliedFormat":99},{"version":"002effc00f23bd8cf9ba1d75309e8f213be4147c1bd2a5b4a4fd6763f7063692","impliedFormat":99},{"version":"cb4d2b44b2e9aa0bfbaa47fbf54c1558d0d77387a3e405644fc1d44f182520a5","impliedFormat":99},{"version":"78536d7cbddfbab8163267ce61d0005be870b0bd49a9435d58952a27504d90e7","impliedFormat":99},{"version":"d16aedbdca35dbc65b0b000a334b29a2b1dd40e6a5d9c135fac28cd05cac355d","impliedFormat":99},{"version":"a23795b931d9e0a3d84bf02dc06e6c2afa3c37ac5e077b96dffb3006cfbe52a7","impliedFormat":99},{"version":"f15921cf5d9640e2c54c35fc6a3c36e8a4c0061f78dce854724413127338c7e9","impliedFormat":99},{"version":"93b0f0fe75bafd0c0d384e2de7ef7358098653416740881a5aff042703bcb97a","impliedFormat":99},{"version":"1765fca10cad95f2ddb420591e089b4ed74639eb1085f52ab81283642fbcbaa3","impliedFormat":99},{"version":"e71869ee1e7ffb064578d3010aa8f364ba7d992dde650dc2561a718cd48d3a10","impliedFormat":99},{"version":"0f6f1ed13d6924402359ace5d0fb77bdfd3b80beaf87318df3cc9d44a50b925b","impliedFormat":99},{"version":"db0123abae93f8141f9fc417ff13feeb368ec0ba7296d5745efd35a5ce79f52b","impliedFormat":99},{"version":"f23a7c9fe54c8a623696aa9a8b13225b4b926fae0d98d592748d635c2603723f","impliedFormat":99},{"version":"ed28747437d5c4ab842ac70bba457a89ef867a7bf50864e3a1e333378b531ddc","impliedFormat":99},{"version":"064c05ad917a300e188b8374d95ae3360794fd9c0b91110c967f79c00c9413da","impliedFormat":99},{"version":"8af0262b31af8ba340a2c3f1ed31b1199b3271cadedf8ef41d9faeb1e259332e","impliedFormat":99},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"bfb5e43efed96b73d2a8018a84353efbbd8ddd0569bab3e172b7a21ca3e9c451","impliedFormat":99},{"version":"11a574d9d2ffd0d34deb5b3ba9f1e36d5797072cb8974365e2dc9fa8428a8856","impliedFormat":99},{"version":"9f4166bc2e232d9f8c9500751a9e9be0438f6d9a76c76cc990e110a3276f7dec","impliedFormat":99},{"version":"9a6c3e2900643e20e37b47f712af6420048e737db80c1975707cfde23681b2c9","impliedFormat":99},{"version":"4d19aa2a9bf11f03350f885799abb2a399e49308ff23582f0bfc7ca3de1ef964","impliedFormat":99},{"version":"3206bc8f6c9cf553a7bdd45999e405e7e95524558b6516359bd552ad49e02edb","impliedFormat":99},{"version":"d06367c35e944d602fec4a3bfe3cb00ca44fab949354392add4d6386c620d294","impliedFormat":99},{"version":"f0c0df41d93b49b7a7fc3c69f9f2b2f6cfb58e59d8e0869f6bf7bd6a3003b7dd","impliedFormat":99},{"version":"a4766338e78a77ceb79b55f54ad3b9d6d9f0aa3ecea6d6097bbbb671020594a1","impliedFormat":99},{"version":"5a54a9ae40b3a00ecfa95c3f70d349ee537cef18a681ac7e8138d5e7d1a6b155","impliedFormat":99},{"version":"18ffeb24e3dbb7cb3b407703454ff84120c8357917f7d494de45afce811b1ff0","impliedFormat":99},{"version":"0f06c3d71d0e686261997eba0eef8e8b4b0837d69c10ac841858ac793f2ad2ae","impliedFormat":99},{"version":"25d5a8f05e1c4225f718beca2610465a2f4d317d3f1344dceb342a29af57a1eb","impliedFormat":99},{"version":"2a172abe1478bd65206bff70aff82ca71fb7128bbf02717bb3dcfd9646bde351","impliedFormat":99},{"version":"ce82849d142b991369a34d14c0c7635df527dd2a16c6c02fa108be8169a87c0d","impliedFormat":99},{"version":"89c8d4b261417a769f262a097eb07b104389bc1c8487620aaf4fe0617dd5857e","impliedFormat":99},{"version":"a02dc067ef5b75deab2f5486ce388526390cba8eff1689eb69a997f668f71f17","impliedFormat":99},{"version":"e9c326f6d1638102b8fd1fbd64c7a5d1c3c5b28e3fce944e4836a2b9e275f887","impliedFormat":99},{"version":"a4bbe05f59182f4ce279bf92b2fcf9ce52fe1a9feba61867aa97e11eaa1912aa","impliedFormat":99},{"version":"1b9d0b8dbfe4d820b52271376daab06fde5205e840010c63c7b0f53458ece5bc","impliedFormat":99},{"version":"c955a20bfebe856f4c2f2696c496a53005de11bca7492ce6bd15581de3a20039","impliedFormat":99},{"version":"ff7644a69b155764f45cffceeebf7f817273bf4d77cd19aca433bb0a509cfb37","impliedFormat":99},{"version":"a0226f43a8bd8493122d61bf6fe01cd57a2d09037c775e6e269998d6a16e6dfb","impliedFormat":99},{"version":"c42f9b18f5f559b133cf9b409f678afb30df9c6498865aae9a1abad0f1e727a8","impliedFormat":99},{"version":"eabff483c855b848eefb979dbfb64c8858444c56a2f3ea0e59de026ef03fd089","impliedFormat":99},{"version":"85aa06bd38cf2d7fe53f2adf608136b80aa0004cc1186ec684ec9f17f58eab76","impliedFormat":99},{"version":"4058d0875b427fb53accb102c254afa8274821316d024960a336e3ac3ab0b39f","impliedFormat":99},{"version":"2fc203df885f75b6e2286b0cecafac52f6afabdb39656a61eed68ef6bb25db6c","impliedFormat":99},{"version":"02264596562a8bb62b6f044adcbe5ef60dc7954feca93a2faca23a93c51320e0","impliedFormat":99},{"version":"8e4772e8a1119a61458be078b24758952b2af898599b44bc50fb9fe7de22a464","impliedFormat":99},{"version":"f004c4c4005fadfff56786bc1e5d987a45d3b4f81f64ad7a416e8b865998e887","impliedFormat":99},{"version":"fc9bebf4be86621c39191eae6259a5510cdf4c820bb655f5568ba7aad21af18c","impliedFormat":99},{"version":"950da1bb01e156d02581a5acc24c3f639d3b3ef6ce8f2e752d314c2170e96a25","impliedFormat":99},{"version":"907358a13c2e757d2db30306df44eea79012b01b645d49cc869c3cbbd3c1c761","impliedFormat":99},{"version":"f95753a22340d6e32bdf3264888a95b63b0cc16c9fb198f696b2ea0f9ef7e209","impliedFormat":99},{"version":"b4c759ab69629cba0201435880cde35e62df058a676620a03f8dda998e8f14eb","impliedFormat":99},{"version":"1e055dac94e15a36e63ec72615e06653fa11acbfae0a0351d282b915a21c582e","impliedFormat":99},{"version":"b7bc2afdcb5d05c02f7421be9a705db407db295bcd7927df3548851f20ab3f29","impliedFormat":99},{"version":"8372927a8f37d0a8ba7bb694143f016225953f621b8c4709666a680892676c5d","impliedFormat":99},{"version":"7260a53873f59b8da4ad4ecab85a6649931e5f894c2bb8d066a162c9ba2e10f7","impliedFormat":99},{"version":"825964f3ced37213188a17f06a62118d9d4472967b505429267cd6d7950e1e6d","impliedFormat":99},{"version":"a6fdd29c5d849eb1e954575bc49e4ee299c6f6d7463c03ff2cdf3a56a36a3f58","impliedFormat":99},{"version":"b55d64662ed325e2b3de133ed6b304d0608580e73fe51f6d36b6777b2920e0e2","impliedFormat":99},{"version":"cf1c580b60b6bc9b624a680eb4249e63abe22bc75d70ec8f2793748c8486a227","signature":"38fad30452977de07407ca35d0a5326be42824c51cf502dde5f4e5a773bd1e6a","impliedFormat":99},{"version":"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","impliedFormat":1},{"version":"a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a","impliedFormat":1},{"version":"f749812878fecfa53cfc13b36e5d35086fb6377983a9df44175da83ccc23af1f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7d2e3fea24c712c99c03ad8f556abedbfe105f87f1be10b95dbd409d24bc05a3","impliedFormat":1},{"version":"211e3f15fbced4ab4be19f49ffa990b9ff20d749d33b65ff753be691e7616239","affectsGlobalScope":true,"impliedFormat":1},{"version":"3719525a8f6ab731e3dfd585d9f87df55ec7d50d461df84f74eb4d68bb165244","impliedFormat":1},{"version":"5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713","impliedFormat":1},{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","impliedFormat":1},{"version":"e596c9bb2f29a2699fdd4ae89139612652245192f67f45617c5a4b20832aaae9","impliedFormat":1},{"version":"bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","impliedFormat":1},{"version":"1cdcfc1f624d6c08aa12c73935f6e13f095919cd99edf95752951796eb225729","impliedFormat":1},{"version":"4eaff3d8e10676fd7913d8c108890e71c688e1e7d52f6d1d55c39514f493dc47","impliedFormat":1},{"version":"14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","impliedFormat":1},{"version":"5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea","impliedFormat":1},{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true,"impliedFormat":1},{"version":"00dee7cdca8b8420c47ea4a31a34b8e8294013ebc4f463fd941e867e7bf05029","affectsGlobalScope":true,"impliedFormat":1},{"version":"3256f3cccd578f9e7fe3a28096c505634bebcee8afb738ffa99368e536ca3a0b","impliedFormat":1},{"version":"1c84b46267610a34028edfd0d035509341751262bac1062857f3c8df7aff7153","impliedFormat":1},{"version":"7f138842074d0a40681775af008c8452093b68c383c94de31759e853c6d06b5c","impliedFormat":1},{"version":"a3d541d303ee505053f5dcbf9fafb65cac3d5631037501cd616195863a6c5740","impliedFormat":1},{"version":"8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","impliedFormat":1},{"version":"2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58","impliedFormat":1},{"version":"e630e5528e899219ae319e83bef54bf3bcb91b01d76861ecf881e8e614b167f0","affectsGlobalScope":true,"impliedFormat":1},{"version":"bcebb922784739bdb34c18ee51095d25a92b560c78ccd2eaacd6bd00f7443d83","impliedFormat":1},{"version":"7ee6ed878c4528215c82b664fe0cfe80e8b4da6c0d4cc80869367868774db8b1","impliedFormat":1},{"version":"b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30","impliedFormat":1},{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true,"impliedFormat":1},{"version":"0715e4cd28ad471b2a93f3e552ff51a3ae423417a01a10aa1d3bc7c6b95059d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","impliedFormat":1},{"version":"210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","impliedFormat":1},{"version":"36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","impliedFormat":1},{"version":"0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","impliedFormat":1},{"version":"25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","impliedFormat":1},{"version":"4f3fdeba4e28e21aa719c081b8dc8f91d47e12e773389b9d35679c08151c9d37","impliedFormat":1},{"version":"1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","impliedFormat":1},{"version":"69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","impliedFormat":1},{"version":"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","impliedFormat":1},{"version":"23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","impliedFormat":1},{"version":"f69ff39996a61a0dd10f4bce73272b52e8024a4d58b13ab32bf4712909d0a2b7","impliedFormat":1},{"version":"3c4ba1dd9b12ffa284b565063108f2f031d150ea15b8fafbdc17f5d2a07251f3","affectsGlobalScope":true,"impliedFormat":1},{"version":"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","impliedFormat":1},{"version":"1422cd9e705adcc09088fda85a900c2b70e3ad36ea85846f68bd1a884cdf4e2b","impliedFormat":1},{"version":"3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","impliedFormat":1},{"version":"5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2","impliedFormat":1},{"version":"a73ae8c0e62103bb9e21bb6538700881bf135b9a8b125b857ec68edfa0da4ed3","affectsGlobalScope":true,"impliedFormat":1},{"version":"e1c1b2fbe236bf7ee3e342eeae7e20efb8988a0ac7da1cbbfa2c1f66b76c3423","affectsGlobalScope":true,"impliedFormat":1},{"version":"868831cab82b65dfe1d68180e898af1f2101e89ba9b754d1db6fb8cc2fac1921","impliedFormat":1},{"version":"0fe8985a28f82c450a04a6edf1279d7181c0893f37da7d2a27f8efd4fd5edb03","impliedFormat":1},{"version":"e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa","impliedFormat":1},{"version":"52120bb7e4583612225bdf08e7c12559548170f11e660d33a33623bae9bbdbba","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e","impliedFormat":1},{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6dd3dba8e665ac43d279e0fdf5219edda0eed69b5e9a5061f46cd6a65c4f7a1","impliedFormat":1}],"root":[227],"options":{"composite":true,"declarationMap":true,"emitDeclarationOnly":false,"importHelpers":true,"module":199,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.lib.tsbuildinfo"},"referencedMap":[[134,1],[135,1],[136,2],[228,3],[229,3],[231,4],[232,5],[233,6],[234,7],[235,8],[236,9],[237,10],[238,11],[239,12],[240,13],[241,13],[243,14],[242,15],[244,14],[245,16],[246,17],[230,18],[280,1],[247,19],[248,20],[249,21],[281,22],[250,23],[251,24],[252,25],[253,26],[254,27],[255,28],[256,29],[257,30],[258,31],[259,32],[260,32],[261,33],[262,34],[264,35],[263,36],[265,37],[266,38],[267,1],[268,39],[269,40],[270,41],[271,42],[272,43],[273,44],[274,45],[275,46],[276,47],[277,48],[278,49],[279,50],[138,1],[140,51],[207,52],[137,53],[202,52],[141,1],[139,54],[208,55],[196,56],[203,57],[142,58],[55,59],[54,1],[52,1],[53,1],[9,1],[10,1],[12,1],[11,1],[2,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[3,1],[21,1],[22,1],[4,1],[23,1],[27,1],[24,1],[25,1],[26,1],[28,1],[29,1],[30,1],[5,1],[31,1],[32,1],[33,1],[34,1],[6,1],[38,1],[35,1],[36,1],[37,1],[39,1],[7,1],[40,1],[45,1],[46,1],[41,1],[42,1],[43,1],[44,1],[8,1],[50,1],[47,1],[48,1],[49,1],[1,1],[51,1],[226,60],[168,61],[169,62],[195,63],[225,64],[171,1],[170,65],[164,61],[167,66],[166,63],[165,1],[193,65],[194,67],[172,65],[163,68],[145,69],[144,1],[132,1],[131,1],[133,70],[128,71],[130,1],[76,1],[158,1],[129,1],[161,72],[156,73],[160,74],[159,1],[157,1],[127,75],[75,1],[153,65],[150,65],[152,65],[147,65],[148,65],[155,76],[151,1],[146,65],[154,65],[149,65],[162,77],[143,78],[221,79],[217,80],[216,81],[218,79],[223,82],[222,81],[219,61],[220,79],[209,83],[197,84],[199,84],[214,85],[211,86],[200,80],[212,80],[201,84],[204,87],[198,84],[210,88],[205,80],[206,80],[213,89],[224,90],[215,78],[126,91],[125,92],[77,93],[58,94],[57,95],[56,94],[63,96],[62,97],[70,1],[60,98],[59,98],[69,97],[71,99],[67,1],[61,1],[72,100],[64,1],[68,97],[73,101],[66,96],[65,102],[74,103],[124,104],[120,105],[122,106],[121,1],[123,107],[78,108],[192,109],[190,110],[189,110],[191,111],[188,1],[227,112],[187,113],[175,114],[173,1],[176,115],[174,105],[180,1],[181,116],[177,1],[179,117],[178,1],[182,1],[184,118],[183,1],[185,119],[186,120],[84,1],[87,121],[86,122],[89,121],[91,123],[90,122],[88,121],[92,1],[85,124],[95,125],[94,1],[93,1],[80,122],[79,1],[83,126],[81,1],[82,127],[112,1],[109,114],[113,114],[119,128],[111,114],[108,114],[114,114],[116,1],[110,114],[117,114],[115,114],[107,129],[118,130],[100,131],[101,132],[99,1],[103,133],[104,134],[102,1],[106,135],[98,136],[96,1],[97,1],[105,1]],"latestChangedDtsFile":"./index.d.ts","version":"5.8.3"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@fluixi/session",
3
+ "version": "1.0.0-alpha.53",
4
+ "private": false,
5
+ "publishConfig": {
6
+ "registry": "https://registry.npmjs.org/",
7
+ "access": "public"
8
+ },
9
+ "description": "Client-side session lifecycle for Fluixi — createSession: bring a backend adapter, get token/user signals, isAuthenticated, persistence, hydrate and automatic token refresh. (The full server-first auth engine lives in @fluixi/auth.)",
10
+ "type": "module",
11
+ "files": [
12
+ "dist",
13
+ "README.md"
14
+ ],
15
+ "main": "./dist/index.js",
16
+ "module": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ "./package.json": "./package.json",
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.mjs",
23
+ "require": "./dist/index.cjs",
24
+ "default": "./dist/index.js"
25
+ }
26
+ },
27
+ "dependencies": {
28
+ "tslib": "^2.3.0"
29
+ },
30
+ "devDependencies": {
31
+ "@bambiste/mix-builder": "*",
32
+ "cross-env": "^7.0.3",
33
+ "inquirer": "^14.0.2",
34
+ "@fluixi/core": "1.0.0-alpha.53",
35
+ "@fluixi/reactive": "1.0.0-alpha.53"
36
+ },
37
+ "peerDependencies": {
38
+ "@fluixi/core": "1.0.0-alpha.53",
39
+ "@fluixi/reactive": "1.0.0-alpha.53"
40
+ },
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "https://github.com/fluixi/core.git",
44
+ "directory": "packages/session"
45
+ },
46
+ "scripts": {
47
+ "build:typings": "tsc -p tsconfig.lib.json",
48
+ "build": "pnpm run build:typings && cross-env NODE_ENV=production mix-builder",
49
+ "dev": "tsc -w -p tsconfig.lib.json",
50
+ "test": "vitest run"
51
+ }
52
+ }