@biglogic/rgs 3.5.2 → 3.5.3
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/FUNDING.yml +12 -0
- package/README.md +360 -323
- package/core/hooks.d.ts +10 -0
- package/core/sync.d.ts +75 -0
- package/core/types.d.ts +7 -0
- package/index.d.ts +3 -0
- package/index.js +2 -1
- package/index.js.map +7 -0
- package/package.json +7 -3
- package/rgs-extension.vsix +0 -0
- package/advanced.js +0 -1
- /package/{LICENSE → LICENSE.md} +0 -0
package/core/hooks.d.ts
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import type { IStore, StoreConfig, PersistOptions, StateUpdater } from "./types";
|
|
2
|
+
import { SyncEngine, SyncConfig, SyncState } from "./sync";
|
|
2
3
|
export declare const initState: <S extends Record<string, unknown>>(config?: StoreConfig<S>) => IStore<S>;
|
|
3
4
|
export declare const destroyState: () => void;
|
|
4
5
|
export declare const useIsStoreReady: (store?: IStore<Record<string, unknown>>) => boolean;
|
|
5
6
|
export declare const getStore: () => IStore<Record<string, unknown>> | null;
|
|
6
7
|
export declare function useStore<T, S extends Record<string, unknown> = Record<string, unknown>>(selector: (state: S) => T, store?: IStore<S>): T;
|
|
7
8
|
export declare function useStore<T = unknown, S extends Record<string, unknown> = Record<string, unknown>>(key: string, store?: IStore<S>): readonly [T | undefined, (val: T | StateUpdater<T>, options?: PersistOptions) => boolean];
|
|
9
|
+
export declare const initSync: (store: IStore<Record<string, unknown>>, config: SyncConfig) => SyncEngine<Record<string, unknown>>;
|
|
10
|
+
export declare const destroySync: (namespace: string) => void;
|
|
11
|
+
export declare function useSyncedState<T = unknown>(key: string, store?: IStore<Record<string, unknown>>): readonly [
|
|
12
|
+
T | undefined,
|
|
13
|
+
(val: T | StateUpdater<T>, options?: PersistOptions) => boolean,
|
|
14
|
+
SyncState
|
|
15
|
+
];
|
|
16
|
+
export declare const useSyncStatus: () => SyncState;
|
|
17
|
+
export declare const triggerSync: (namespace?: string) => Promise<void>;
|
package/core/sync.d.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { IStore } from "./types";
|
|
2
|
+
export type SyncStrategy = 'last-write-wins' | 'merge' | 'crdt' | 'server-wins' | 'client-wins';
|
|
3
|
+
export interface SyncConfig {
|
|
4
|
+
endpoint: string;
|
|
5
|
+
authToken?: string;
|
|
6
|
+
strategy?: SyncStrategy;
|
|
7
|
+
autoSyncInterval?: number;
|
|
8
|
+
syncOnReconnect?: boolean;
|
|
9
|
+
debounceTime?: number;
|
|
10
|
+
fetch?: typeof fetch;
|
|
11
|
+
onSync?: (result: SyncResult) => void;
|
|
12
|
+
onConflict?: (conflict: ConflictInfo) => ConflictResolution;
|
|
13
|
+
maxRetries?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface SyncResult {
|
|
16
|
+
success: boolean;
|
|
17
|
+
syncedKeys: string[];
|
|
18
|
+
conflicts: ConflictInfo[];
|
|
19
|
+
errors: string[];
|
|
20
|
+
timestamp: number;
|
|
21
|
+
duration: number;
|
|
22
|
+
}
|
|
23
|
+
export interface ConflictInfo {
|
|
24
|
+
key: string;
|
|
25
|
+
localValue: unknown;
|
|
26
|
+
remoteValue: unknown;
|
|
27
|
+
localVersion: number;
|
|
28
|
+
remoteVersion: number;
|
|
29
|
+
timestamp: number;
|
|
30
|
+
}
|
|
31
|
+
export type ConflictResolution = {
|
|
32
|
+
action: 'accept-local';
|
|
33
|
+
} | {
|
|
34
|
+
action: 'accept-remote';
|
|
35
|
+
} | {
|
|
36
|
+
action: 'merge';
|
|
37
|
+
value: unknown;
|
|
38
|
+
} | {
|
|
39
|
+
action: 'discard';
|
|
40
|
+
};
|
|
41
|
+
export interface SyncState {
|
|
42
|
+
isOnline: boolean;
|
|
43
|
+
isSyncing: boolean;
|
|
44
|
+
lastSyncTimestamp: number | null;
|
|
45
|
+
pendingChanges: number;
|
|
46
|
+
conflicts: number;
|
|
47
|
+
}
|
|
48
|
+
export declare class SyncEngine<S extends Record<string, unknown> = Record<string, unknown>> {
|
|
49
|
+
private store;
|
|
50
|
+
private config;
|
|
51
|
+
private pendingQueue;
|
|
52
|
+
private remoteVersions;
|
|
53
|
+
private syncTimer;
|
|
54
|
+
private onlineStatusListeners;
|
|
55
|
+
private syncStateListeners;
|
|
56
|
+
private _isOnline;
|
|
57
|
+
private _isSyncing;
|
|
58
|
+
constructor(store: IStore<S>, config: SyncConfig);
|
|
59
|
+
private _setupOnlineListener;
|
|
60
|
+
private _setupStoreListener;
|
|
61
|
+
private _startAutoSync;
|
|
62
|
+
private _notifyOnlineChange;
|
|
63
|
+
private _notifyStateChange;
|
|
64
|
+
queueChange(key: string, value: unknown): void;
|
|
65
|
+
sync(): Promise<SyncResult>;
|
|
66
|
+
private _fetchRemoteVersions;
|
|
67
|
+
private _pushChange;
|
|
68
|
+
private _resolveConflict;
|
|
69
|
+
getState(): SyncState;
|
|
70
|
+
onOnlineChange(callback: (online: boolean) => void): () => void;
|
|
71
|
+
onStateChange(callback: (state: SyncState) => void): () => void;
|
|
72
|
+
flush(): Promise<SyncResult>;
|
|
73
|
+
destroy(): void;
|
|
74
|
+
}
|
|
75
|
+
export declare const createSyncEngine: <S extends Record<string, unknown>>(store: IStore<S>, config: SyncConfig) => SyncEngine<S>;
|
package/core/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { EncryptionKey, AuditEntry, Permission, AccessRule } from './security';
|
|
2
|
+
import type { SyncConfig } from './sync';
|
|
2
3
|
export interface PersistOptions {
|
|
3
4
|
persist?: boolean;
|
|
4
5
|
secure?: boolean;
|
|
@@ -111,6 +112,11 @@ export interface GStatePlugins {
|
|
|
111
112
|
}>;
|
|
112
113
|
getStats: () => import('../plugins/official/cloud-sync.plugin').SyncStats;
|
|
113
114
|
};
|
|
115
|
+
sync: {
|
|
116
|
+
flush: () => Promise<import('../core/sync').SyncResult>;
|
|
117
|
+
getState: () => import('../core/sync').SyncState;
|
|
118
|
+
onStateChange: (callback: (state: import('../core/sync').SyncState) => void) => () => void;
|
|
119
|
+
};
|
|
114
120
|
logger: Record<string, never>;
|
|
115
121
|
[key: string]: unknown;
|
|
116
122
|
}
|
|
@@ -140,6 +146,7 @@ export interface StoreConfig<S extends Record<string, unknown> = Record<string,
|
|
|
140
146
|
permissions: Permission[];
|
|
141
147
|
}>;
|
|
142
148
|
immer?: boolean;
|
|
149
|
+
sync?: SyncConfig;
|
|
143
150
|
}
|
|
144
151
|
export interface CustomStorage {
|
|
145
152
|
getItem(key: string): string | null;
|
package/index.d.ts
CHANGED
|
@@ -6,6 +6,9 @@ export declare const gstate: <S extends Record<string, unknown>>(initialState: S
|
|
|
6
6
|
export { baseCreateStore as createStore };
|
|
7
7
|
export { useStore, useIsStoreReady, initState, getStore, destroyState, useStore as useGState, useStore as useSimpleState } from "./core/hooks";
|
|
8
8
|
export { createAsyncStore } from "./core/async";
|
|
9
|
+
export { SyncEngine, createSyncEngine } from "./core/sync";
|
|
10
|
+
export type { SyncConfig, SyncState, SyncResult, SyncStrategy, ConflictInfo, ConflictResolution } from "./core/sync";
|
|
11
|
+
export { initSync, destroySync, useSyncedState, useSyncStatus, triggerSync } from "./core/hooks";
|
|
9
12
|
export * from "./plugins/index";
|
|
10
13
|
export { generateEncryptionKey, exportKey, importKey, isCryptoAvailable, setAuditLogger, logAudit, validateKey, sanitizeValue } from "./core/security";
|
|
11
14
|
export declare const addAccessRule: (pattern: string | ((key: string, userId?: string) => boolean), perms: Security.Permission[]) => void | undefined;
|
package/index.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
var yt=Symbol.for("immer-nothing"),it=Symbol.for("immer-draftable"),R=Symbol.for("immer-state");function T(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var M=Object,q=M.getPrototypeOf,Se="constructor",Pe="prototype",$e="configurable",he="enumerable",ge="writable",ne="value",j=e=>!!e&&!!e[R];function U(e){return e?St(e)||ke(e)||!!e[it]||!!e[Se]?.[it]||ve(e)||xe(e):!1}var Wt=M[Pe][Se].toString(),at=new WeakMap;function St(e){if(!e||!Je(e))return!1;let t=q(e);if(t===null||t===M[Pe])return!0;let n=M.hasOwnProperty.call(t,Se)&&t[Se];if(n===Object)return!0;if(!G(n))return!1;let r=at.get(n);return r===void 0&&(r=Function.toString.call(n),at.set(n,r)),r===Wt}function Ee(e,t,n=!0){se(e)===0?(n?Reflect.ownKeys(e):M.keys(e)).forEach(o=>{t(o,e[o],e)}):e.forEach((r,o)=>t(o,r,e))}function se(e){let t=e[R];return t?t.type_:ke(e)?1:ve(e)?2:xe(e)?3:0}var ct=(e,t,n=se(e))=>n===2?e.has(t):M[Pe].hasOwnProperty.call(e,t),Fe=(e,t,n=se(e))=>n===2?e.get(t):e[t],me=(e,t,n,r=se(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function Ht(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}var ke=Array.isArray,ve=e=>e instanceof Map,xe=e=>e instanceof Set,Je=e=>typeof e=="object",G=e=>typeof e=="function",Ne=e=>typeof e=="boolean";function Jt(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var N=e=>e.copy_||e.base_;var Ge=e=>e.modified_?e.copy_:e.base_;function je(e,t){if(ve(e))return new Map(e);if(xe(e))return new Set(e);if(ke(e))return Array[Pe].slice.call(e);let n=St(e);if(t===!0||t==="class_only"&&!n){let r=M.getOwnPropertyDescriptors(e);delete r[R];let o=Reflect.ownKeys(r);for(let s=0;s<o.length;s++){let a=o[s],u=r[a];u[ge]===!1&&(u[ge]=!0,u[$e]=!0),(u.get||u.set)&&(r[a]={[$e]:!0,[ge]:!0,[he]:u[he],[ne]:e[a]})}return M.create(q(e),r)}else{let r=q(e);if(r!==null&&n)return{...e};let o=M.create(r);return M.assign(o,e)}}function $(e,t=!1){return Ce(e)||j(e)||!U(e)||(se(e)>1&&M.defineProperties(e,{set:pe,add:pe,clear:pe,delete:pe}),M.freeze(e),t&&Ee(e,(n,r)=>{$(r,!0)},!1)),e}function Gt(){T(2)}var pe={[ne]:Gt};function Ce(e){return e===null||!Je(e)?!0:M.isFrozen(e)}var _e="MapSet",Le="Patches",ut="ArrayMethods",ht={};function H(e){let t=ht[e];return t||T(0,e),t}var lt=e=>!!ht[e];var re,mt=()=>re,qt=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:lt(_e)?H(_e):void 0,arrayMethodsPlugin_:lt(ut)?H(ut):void 0});function ft(e,t){t&&(e.patchPlugin_=H(Le),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Be(e){Ke(e),e.drafts_.forEach(Qt),e.drafts_=null}function Ke(e){e===re&&(re=e.parent_)}var dt=e=>re=qt(re,e);function Qt(e){let t=e[R];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function pt(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[R].modified_&&(Be(t),T(4)),U(e)&&(e=gt(t,e));let{patchPlugin_:o}=t;o&&o.generateReplacementPatches_(n[R].base_,e,t)}else e=gt(t,n);return Xt(t,e,!0),Be(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==yt?e:void 0}function gt(e,t){if(Ce(t))return t;let n=t[R];if(!n)return we(t,e.handledSet_,e);if(!Re(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:r}=n;if(r)for(;r.length>0;)r.pop()(e);bt(n,e)}return n.copy_}function Xt(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&$(t,n)}function _t(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var Re=(e,t)=>e.scope_===t,Yt=[];function wt(e,t,n,r){let o=N(e),s=e.type_;if(r!==void 0&&Fe(o,r,s)===t){me(o,r,n,s);return}if(!e.draftLocations_){let u=e.draftLocations_=new Map;Ee(o,(p,d)=>{if(j(d)){let h=u.get(d)||[];h.push(p),u.set(d,h)}})}let a=e.draftLocations_.get(t)??Yt;for(let u of a)me(o,u,n,s)}function Zt(e,t,n){e.callbacks_.push(function(o){let s=t;if(!s||!Re(s,o))return;o.mapSetPlugin_?.fixSetContents(s);let a=Ge(s);wt(e,s.draft_??s,a,n),bt(s,o)})}function bt(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:r}=t;if(r){let o=r.getPath(e);o&&r.generatePatches_(e,o,t)}_t(e)}}function en(e,t,n){let{scope_:r}=e;if(j(n)){let o=n[R];Re(o,r)&&o.callbacks_.push(function(){ye(e);let a=Ge(o);wt(e,n,a,t)})}else U(n)&&e.callbacks_.push(function(){let s=N(e);e.type_===3?s.has(n)&&we(n,r.handledSet_,r):Fe(s,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&we(Fe(e.copy_,t,e.type_),r.handledSet_,r)})}function we(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||j(e)||t.has(e)||!U(e)||Ce(e)||(t.add(e),Ee(e,(r,o)=>{if(j(o)){let s=o[R];if(Re(s,n)){let a=Ge(s);me(e,r,a,e.type_),_t(s)}}else U(o)&&we(o,t,n)})),e}function tn(e,t){let n=ke(e),r={type_:n?1:0,scope_:t?t.scope_:mt(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},o=r,s=be;n&&(o=[r],s=oe);let{revoke:a,proxy:u}=Proxy.revocable(o,s);return r.draft_=u,r.revoke_=a,[u,r]}var be={get(e,t){if(t===R)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t=="string";if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let o=N(e);if(!ct(o,t,e.type_))return nn(e,o,t);let s=o[t];if(e.finalized_||!U(s)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Jt(t))return s;if(s===Ue(e.base_,t)){ye(e);let a=e.type_===1?+t:t,u=He(e.scope_,s,e,a);return e.copy_[a]=u}return s},has(e,t){return t in N(e)},ownKeys(e){return Reflect.ownKeys(N(e))},set(e,t,n){let r=Pt(N(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let o=Ue(N(e),t),s=o?.[R];if(s&&s.base_===n)return e.copy_[t]=n,e.assigned_.set(t,!1),!0;if(Ht(n,o)&&(n!==void 0||ct(e.base_,t,e.type_)))return!0;ye(e),We(e)}return e.copy_[t]===n&&(n!==void 0||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=n,e.assigned_.set(t,!0),en(e,t,n)),!0},deleteProperty(e,t){return ye(e),Ue(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),We(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=N(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[ge]:!0,[$e]:e.type_!==1||t!=="length",[he]:r[he],[ne]:n[t]}},defineProperty(){T(11)},getPrototypeOf(e){return q(e.base_)},setPrototypeOf(){T(12)}},oe={};for(let e in be){let t=be[e];oe[e]=function(){let n=arguments;return n[0]=n[0][0],t.apply(this,n)}}oe.deleteProperty=function(e,t){return oe.set.call(this,e,t,void 0)};oe.set=function(e,t,n){return be.set.call(this,e[0],t,n,e[0])};function Ue(e,t){let n=e[R];return(n?N(n):e)[t]}function nn(e,t,n){let r=Pt(t,n);return r?ne in r?r[ne]:r.get?.call(e.draft_):void 0}function Pt(e,t){if(!(t in e))return;let n=q(e);for(;n;){let r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=q(n)}}function We(e){e.modified_||(e.modified_=!0,e.parent_&&We(e.parent_))}function ye(e){e.copy_||(e.assigned_=new Map,e.copy_=je(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var rn=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(t,n,r)=>{if(G(t)&&!G(n)){let s=n;n=t;let a=this;return function(p=s,...d){return a.produce(p,h=>n.call(this,h,...d))}}G(n)||T(6),r!==void 0&&!G(r)&&T(7);let o;if(U(t)){let s=dt(this),a=He(s,t,void 0),u=!0;try{o=n(a),u=!1}finally{u?Be(s):Ke(s)}return ft(s,r),pt(o,s)}else if(!t||!Je(t)){if(o=n(t),o===void 0&&(o=t),o===yt&&(o=void 0),this.autoFreeze_&&$(o,!0),r){let s=[],a=[];H(Le).generateReplacementPatches_(t,o,{patches_:s,inversePatches_:a}),r(s,a)}return o}else T(1,t)},this.produceWithPatches=(t,n)=>{if(G(t))return(a,...u)=>this.produceWithPatches(a,p=>t(p,...u));let r,o;return[this.produce(t,n,(a,u)=>{r=a,o=u}),r,o]},Ne(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Ne(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Ne(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){U(e)||T(8),j(e)&&(e=on(e));let t=dt(this),n=He(t,e,void 0);return n[R].isManual_=!0,Ke(t),n}finishDraft(e,t){let n=e&&e[R];(!n||!n.isManual_)&&T(9);let{scope_:r}=n;return ft(r,t),pt(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let o=t[n];if(o.path.length===0&&o.op==="replace"){e=o.value;break}}n>-1&&(t=t.slice(n+1));let r=H(Le).applyPatches_;return j(e)?r(e,t):this.produce(e,o=>r(o,t))}};function He(e,t,n,r){let[o,s]=ve(t)?H(_e).proxyMap_(t,n):xe(t)?H(_e).proxySet_(t,n):tn(t,n);return(n?.scope_??mt()).drafts_.push(o),s.callbacks_=n?.callbacks_??[],s.key_=r,n&&r!==void 0?Zt(n,s,r):s.callbacks_.push(function(p){p.mapSetPlugin_?.fixSetContents(s);let{patchPlugin_:d}=p;s.modified_&&d&&d.generatePatches_(s,[],p)}),o}function on(e){return j(e)||T(10,e),Et(e)}function Et(e){if(!U(e)||Ce(e))return e;let t=e[R],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=je(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=je(e,!0);return Ee(n,(o,s)=>{me(n,o,Et(s))},r),t&&(t.finalized_=!1),n}var sn=new rn,kt=sn.produce;var vt=typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof crypto.subtle.generateKey=="function",an=async()=>{if(!vt)throw new Error("Web Crypto API not available");let e=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),t=crypto.getRandomValues(new Uint8Array(12));return{key:e,iv:t}},cn=async e=>{let t=await crypto.subtle.exportKey("raw",e.key);return{key:btoa(String.fromCharCode(...new Uint8Array(t))),iv:btoa(String.fromCharCode(...e.iv))}},un=async(e,t)=>{let n=Uint8Array.from(atob(e),s=>s.charCodeAt(0)),r=Uint8Array.from(atob(t),s=>s.charCodeAt(0));return{key:await crypto.subtle.importKey("raw",n,{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),iv:r}},xt=async(e,t)=>{let n=new TextEncoder,r=n.encode(JSON.stringify(e)),o=await crypto.subtle.encrypt({name:"AES-GCM",iv:t.iv},t.key,r),s=new Uint8Array(t.iv.length+o.byteLength);return s.set(t.iv),s.set(new Uint8Array(o),t.iv.length),btoa(String.fromCharCode(...s))},Ct=async(e,t)=>{let n=Uint8Array.from(atob(e),a=>a.charCodeAt(0)),r=n.slice(0,12),o=n.slice(12),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},t.key,o);return JSON.parse(new TextDecoder().decode(s))},Ie=null,ln=e=>{Ie=e},Rt=()=>Ie!==null,ae=e=>{Ie&&Ie(e)},qe=(e,t,n)=>{e.set(t instanceof RegExp?t.source:t,n)},Ae=(e,t,n,r)=>{if(e.size===0)return!0;for(let[o,s]of e){let a;if(typeof o=="function")a=o(t,r);else try{a=new RegExp(o).test(t)}catch{continue}if(a)return s.includes(n)||s.includes("admin")}return!1},ie=e=>{if(typeof e=="string"){let t=e.replace(/&#[xX]?[0-9a-fA-F]+;?/g,r=>{let o=r.match(/&#x([0-9a-fA-F]+);?/i);if(o&&o[1])return String.fromCharCode(parseInt(o[1],16));let s=r.match(/&#([0-9]+);?/);return s&&s[1]?String.fromCharCode(parseInt(s[1],10)):""});try{t=decodeURIComponent(t)}catch{}return t.replace(/\b(javascript|vbscript|data:text\/html|about:blank|chrome:)/gi,"[SEC-REMOVED]").replace(/<script\b[^>]*>[\s\S]*?<\s*\/\s*script\b[^>]*>/gi,"[SEC-REMOVED]").replace(/on\w+\s*=/gi,"[SEC-REMOVED]=").replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi,"[SEC-REMOVED]").replace(/<object\b[^<]*(?:(?!<\/object>)<[^<]*)*<\/object>/gi,"[SEC-REMOVED]").replace(/<embed\b[^<]*(?:(?!<\/embed>)<[^<]*)*<\/embed>/gi,"[SEC-REMOVED]").replace(/<svg\b[^<]*(?:(?!<\/svg>)<[^<]*)*<\/svg>/gi,"[SEC-REMOVED]").replace(/<form\b[^<]*(?:(?!<\/form>)<[^<]*)*<\/form>/gi,"[SEC-REMOVED]").replace(/<base\b[^<]*(?:(?!<\/base>)<[^<]*)*<\/base>/gi,"[SEC-REMOVED]").replace(/<link\b[^<]*(?:(?!<\/link>)<[^<]*)*<\/link>/gi,"[SEC-REMOVED]").replace(/<meta\b[^<]*(?:(?!<\/meta>)<[^<]*)*<\/meta>/gi,"[SEC-REMOVED]").replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,"[SEC-REMOVED]")}if(e&&typeof e=="object"&&!Array.isArray(e)){if(Object.getPrototypeOf(e)===Object.prototype){let t={};for(let[n,r]of Object.entries(e))t[n]=ie(r);return t}return e}return Array.isArray(e)?e.map(t=>ie(t)):e},Qe=e=>/^[a-zA-Z0-9_.-]+$/.test(e)&&e.length<=256,Xe=(e,t,n,r)=>{let o={id:crypto.randomUUID(),purpose:n,granted:r,timestamp:Date.now()},s=e.get(t)||[];return s.push(o),e.set(t,s),ae({timestamp:Date.now(),action:"set",key:`consent:${n}`,userId:t,success:!0}),o},It=(e,t,n)=>{let r=e.get(t);if(!r)return!1;for(let o=r.length-1;o>=0;o--){let s=r[o];if(s&&s.purpose===n)return s.granted}return!1},At=(e,t,n)=>Xe(e,t,n,!1),Mt=(e,t)=>e.get(t)||[],Dt=(e,t)=>({userId:t,exportedAt:Date.now(),consents:e.get(t)||[]}),Ot=(e,t)=>{let n=e.get(t)?.length||0;return e.delete(t),{success:!0,deletedConsents:n}};var Q=e=>{if(e===null||typeof e!="object")return e;if(typeof structuredClone=="function")try{return structuredClone(e)}catch{}let t=new WeakMap,n=r=>{if(r===null||typeof r!="object"||typeof r=="function")return r;if(t.has(r))return t.get(r);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r.source,r.flags);if(r instanceof Map){let a=new Map;return t.set(r,a),r.forEach((u,p)=>a.set(n(p),n(u))),a}if(r instanceof Set){let a=new Set;return t.set(r,a),r.forEach(u=>a.add(n(u))),a}let o=Array.isArray(r)?[]:Object.create(Object.getPrototypeOf(r));t.set(r,o);let s=[...Object.keys(r),...Object.getOwnPropertySymbols(r)];for(let a of s)o[a]=n(r[a]);return o};return n(e)},ce=(e,t)=>{if(e===t)return!0;if(e===null||t===null||typeof e!="object"||typeof t!="object")return e===t;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let o=0;o<e.length;o++)if(!ce(e[o],t[o]))return!1;return!0}let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let o=0;o<n.length;o++){let s=n[o];if(!(s in t)||!ce(e[s],t[s]))return!1}return!0};var zt=e=>`${e}_`,Vt=async e=>{if(!e.storage)return;let{store:t,config:n,diskQueue:r,storage:o,encryptionKey:s,audit:a,onError:u,silent:p,currentVersion:d}=e,h=zt(n.namespace||"gstate");try{let _={};t.forEach((y,b)=>{_[b]=y});let l,S=n?.encoded;S?l=btoa(JSON.stringify(_)):l=JSON.stringify(_),o.setItem(h.replace("_",""),JSON.stringify({v:1,t:Date.now(),e:null,d:l,_sys_v:d,_b64:S?!0:void 0})),a("set","FULL_STATE",!0)}catch(_){let l=_ instanceof Error?_:new Error(String(_));u?u(l,{operation:"persist",key:"FULL_STATE"}):p||console.error("[gState] Persist failed: ",l)}let m=Array.from(r.entries());r.clear();for(let[_,l]of m)try{let S=l.value,y=l.options.encoded||l.options.secure;if(l.options.encrypted){if(!s)throw new Error(`Encryption key missing for "${_}"`);S=await xt(l.value,s)}else y?S=btoa(JSON.stringify(l.value)):typeof l.value=="object"&&l.value!==null&&(S=JSON.stringify(l.value));o.setItem(`${h}${_}`,JSON.stringify({v:e.versions.get(_)||1,t:Date.now(),e:l.options.ttl?Date.now()+l.options.ttl:null,d:S,_sys_v:d,_enc:l.options.encrypted?!0:void 0,_b64:y?!0:void 0})),a("set",_,!0)}catch(S){let y=S instanceof Error?S:new Error(String(S));u?u(y,{operation:"persist",key:_}):p||console.error("[gState] Persist failed: ",y)}},Nt=async(e,t,n)=>{let{storage:r,config:o,encryptionKey:s,audit:a,onError:u,silent:p,currentVersion:d,store:h,sizes:m,versions:_}=e,l=zt(o.namespace||"gstate"),S=o.immer??!0;if(r)try{let y={},b=0;for(let I=0;I<(r.length||0);I++){let k=r.key(I);if(!k||!k.startsWith(l))continue;let x=r.getItem(k);if(x)try{let E=JSON.parse(x),A=k.substring(l.length);if(b=Math.max(b,E._sys_v!==void 0?E._sys_v:E.v||0),E.e&&Date.now()>E.e){r.removeItem(k),I--;continue}let D=E.d;if(E._enc&&s)D=await Ct(D,s);else if(typeof D=="string"){if(E._b64)try{D=JSON.parse(atob(D))}catch{}else if(D.startsWith("{")||D.startsWith("["))try{D=JSON.parse(D)}catch{}}y[A]=D,a("hydrate",A,!0)}catch(E){a("hydrate",k,!1,String(E));let A=E instanceof Error?E:new Error(String(E));u?u(A,{operation:"hydration",key:k}):p||console.error(`[gState] Hydration failed for "${k}": `,E)}}let B=b<d&&o.migrate?o.migrate(y,b):y;Object.entries(B).forEach(([I,k])=>{let x=S&&k!==null&&typeof k=="object"?$(Q(k),!0):k,E=t(x),A=m.get(I)||0;e.totalSize=e.totalSize-A+E,m.set(I,E),h.set(I,x),_.set(I,1)}),n()}catch(y){let b=y instanceof Error?y:new Error(String(y));u?u(b,{operation:"hydration"}):p||console.error("[gState] Hydration failed: ",b)}};var Ut=(e,t,n)=>{if(e.plugins.size!==0)for(let r of e.plugins.values()){let o=r.hooks?.[t];if(o)try{o(n)}catch(s){let a=s instanceof Error?s:new Error(String(s));e.onError?e.onError(a,{operation:`plugin:${r.name}:${t}`,key:n.key}):e.silent||console.error(`[gState] Plugin "${r.name}" error:`,s)}}},$t=(e,t,n)=>{try{e.plugins.set(t.name,t),t.hooks?.onInstall?.({store:n})}catch(r){let o=r instanceof Error?r:new Error(String(r));e.onError?e.onError(o,{operation:"plugin:install",key:t.name}):e.silent||console.error(`[gState] Failed to install plugin "${t.name}": `,r)}};var pn={local:()=>typeof window<"u"?window.localStorage:null,session:()=>typeof window<"u"?window.sessionStorage:null,memory:()=>{let e=new Map;return{getItem:t=>e.get(t)||null,setItem:(t,n)=>e.set(t,n),removeItem:t=>e.delete(t),key:t=>Array.from(e.keys())[t]||null,get length(){return e.size}}}},X=e=>{let t=new Map,n=new Map,r=new Map,o=new Set,s=new Map,a=new Set,u=new Map,p=new Map,d=new Map,h=new Map,m=new Map,_=new Map,l=new Map,S=new Map,y=e?.namespace||"gstate",b=e?.silent??!1,B=e?.debounceTime??150,I=e?.version??0,k=e?.storage||pn.local(),x=e?.onError,E=e?.maxObjectSize??0,A=e?.maxTotalSize??0,D=e?.encryptionKey??null,le=e?.validateInput??!0,jt=e?.auditEnabled??!0,Y=e?.userId,fe=e?.immer??!0,Lt=e?.persistByDefault??e?.persistence??e?.persist??!1;e?.accessRules&&e.accessRules.forEach(i=>qe(l,i.pattern,i.permissions));let De=!1,Oe=!1,Te=!1,V=0,J=null,F=null,ze,Bt=new Promise(i=>{ze=i}),Kt=()=>`${y}_`,Ze=()=>({store:t,versions:n,sizes:r,totalSize:V,storage:k,config:e||{},diskQueue:m,encryptionKey:D,audit:W,onError:x,silent:b,debounceTime:B,currentVersion:I}),et=()=>({plugins:h,onError:x,silent:b}),Ve=i=>{if(i==null)return 0;let c=typeof i;if(c==="boolean")return 4;if(c==="number")return 8;if(c==="string")return i.length*2;if(c!=="object")return 0;let f=0,w=[i],P=new WeakSet;for(;w.length>0;){let g=w.pop();if(typeof g=="boolean")f+=4;else if(typeof g=="number")f+=8;else if(typeof g=="string")f+=g.length*2;else if(typeof g=="object"&&g!==null){let v=g;if(P.has(v))continue;if(P.add(v),Array.isArray(v))for(let O=0;O<v.length;O++)w.push(v[O]);else for(let O of Object.keys(v))f+=O.length*2,w.push(v[O])}}return f},K=(i,c)=>{Ut(et(),i,c)},W=(i,c,f,w)=>{jt&&Rt()&&ae&&ae({timestamp:Date.now(),action:i,key:c,userId:Y,success:f,error:w})},tt=i=>{let c=p.get(i);if(!c)return;let f=new Set,w=g=>(f.add(g),p.has(g)?p.get(g).lastValue:C.get(g)),P=c.selector(w);c.deps.forEach(g=>{if(!f.has(g)){let v=d.get(g);v&&(v.delete(i),v.size===0&&d.delete(g))}}),f.forEach(g=>{c.deps.has(g)||(d.has(g)||d.set(g,new Set),d.get(g).add(i))}),c.deps=f,ce(c.lastValue,P)||(c.lastValue=fe&&P!==null&&typeof P=="object"?$(Q(P),!0):P,n.set(i,(n.get(i)||0)+1),Z(i))},Z=i=>{if(i){if(d.has(i)){let w=d.get(i);for(let P of w)tt(P)}let c=u.get(i);if(c){let w=C.get(i);for(let P of c)try{P(w)}catch(g){let v=g instanceof Error?g:new Error(String(g));x?x(v,{operation:"watcher",key:i}):b||console.error(`[gState] Watcher error for "${i}":`,g)}}let f=s.get(i);if(f)for(let w of f)try{w()}catch(P){let g=P instanceof Error?P:new Error(String(P));x?x(g,{operation:"keyListener",key:i}):b||console.error(`[gState] Listener error for "${i}":`,P)}}if(De){Oe=!0;return}for(let c of o)try{c()}catch(f){let w=f instanceof Error?f:new Error(String(f));x?x(w,{operation:"listener"}):b||console.error("[gState] Global listener error: ",f)}},nt=async()=>{Vt(Ze())},de={},C={_setSilently:(i,c)=>{let f=r.get(i)||0,w=fe&&c!==null&&typeof c=="object"?$(Q(c),!0):c,g=(E>0||A>0)&&!1?Ve(w):0;V=V-f+g,r.set(i,g),t.set(i,w),n.set(i,(n.get(i)||0)+1),F=null},_registerMethod:(i,c,f)=>{let w=P=>P==="__proto__"||P==="constructor"||P==="prototype";if(w(i)||w(c)){console.warn("[gState] Refusing to register method with unsafe key:",i,c);return}de[i]||(de[i]={}),de[i][c]=f},set:(i,c,f={})=>{let w=t.get(i),P=fe&&typeof c=="function"?kt(w,c):c;if(le&&!Qe(i))return b||console.warn(`[gState] Invalid key: ${i}`),!1;if(!Ae(l,i,"write",Y))return W("set",i,!1,"RBAC Denied"),b||console.error(`[gState] RBAC Denied for "${i}"`),!1;let g=le?ie(P):P,v=r.get(i)||0;K("onBeforeSet",{key:i,value:g,store:C,version:n.get(i)||0});let O=fe&&g!==null&&typeof g=="object"?$(Q(g),!0):g;if(!ce(w,O)){let ee=(E>0||A>0)&&!1?Ve(O):0;if(E>0&&ee>E){let te=new Error(`Object size (${ee} bytes) exceeds maxObjectSize (${E} bytes)`);x?x(te,{operation:"set",key:i}):b||console.warn(`[gState] ${te.message} for "${i}"`)}if(A>0){let te=V-v+ee;if(te>A){let st=new Error(`Total store size (${te} bytes) exceeds limit (${A} bytes)`);x?x(st,{operation:"set"}):b||console.warn(`[gState] ${st.message}`)}}V=V-v+ee,r.set(i,ee),t.set(i,O),n.set(i,(n.get(i)||0)+1),F=null;let ot=f.persist??Lt;return ot&&(m.set(i,{value:O,options:{...f,persist:ot,encoded:f.encoded||e?.encoded}}),J&&clearTimeout(J),J=setTimeout(nt,B)),K("onSet",{key:i,value:O,store:C,version:n.get(i)}),W("set",i,!0),Z(i),!0}return!1},get:i=>{if(!Ae(l,i,"read",Y))return W("get",i,!1,"RBAC Denied"),null;let c=t.get(i);return K("onGet",{store:C,key:i,value:c}),W("get",i,!0),c},compute:(i,c)=>{try{return p.has(i)||(p.set(i,{selector:c,lastValue:null,deps:new Set}),tt(i)),p.get(i).lastValue}catch(f){let w=f instanceof Error?f:new Error(String(f));return x?x(w,{operation:"compute",key:i}):b||console.error(`[gState] Compute error for "${i}": `,f),null}},watch:(i,c)=>{u.has(i)||u.set(i,new Set);let f=u.get(i);return f.add(c),()=>{f.delete(c),f.size===0&&u.delete(i)}},remove:i=>{if(!Ae(l,i,"delete",Y))return W("delete",i,!1,"RBAC Denied"),!1;let c=t.get(i),f=t.delete(i);return f&&(V-=r.get(i)||0,r.delete(i),K("onRemove",{store:C,key:i,value:c}),F=null),n.set(i,(n.get(i)||0)+1),k&&k.removeItem(`${Kt()}${i}`),W("delete",i,!0),Z(i),f},delete:i=>C.remove(i),deleteAll:()=>{if(Array.from(t.keys()).forEach(i=>C.remove(i)),k){let i=y+"_";for(let c=0;c<(k.length||0);c++){let f=k.key(c);f?.startsWith(i)&&(k.removeItem(f),c--)}}return V=0,r.clear(),F=null,!0},list:()=>Object.fromEntries(t.entries()),use:i=>{a.add(i)},transaction:i=>{De=!0,K("onTransaction",{store:C,key:"START"});try{i()}finally{De=!1,K("onTransaction",{store:C,key:"END"}),Oe&&(Oe=!1,Z())}},destroy:()=>{J&&(clearTimeout(J),J=null),m.clear(),typeof window<"u"&&window.removeEventListener("beforeunload",rt),K("onDestroy",{store:C}),o.clear(),s.clear(),u.clear(),p.clear(),d.clear(),h.clear(),t.clear(),r.clear(),V=0,l.clear(),S.clear(),n.clear(),_.clear(),a.clear()},_addPlugin:i=>{$t(et(),i,C)},_removePlugin:i=>{h.delete(i)},_subscribe:(i,c)=>{if(c){s.has(c)||s.set(c,new Set);let f=s.get(c);return f.add(i),()=>{f.delete(i),f.size===0&&s.delete(c)}}return o.add(i),()=>o.delete(i)},_getVersion:i=>n.get(i)??0,addAccessRule:(i,c)=>qe(l,i,c),hasPermission:(i,c,f)=>{if(l.size===0)return!0;for(let[w,P]of l){let g;if(typeof w=="function")g=w(i,f);else try{let v=_.get(w);v||(v=new RegExp(w),_.set(w,v)),g=v.test(i)}catch{continue}if(g)return P.includes(c)||P.includes("admin")}return!1},recordConsent:(i,c,f)=>Xe(S,i,c,f),hasConsent:(i,c)=>It(S,i,c),getConsents:i=>Mt(S,i),revokeConsent:(i,c)=>At(S,i,c),exportUserData:i=>Dt(S,i),deleteUserData:i=>Ot(S,i),getSnapshot:()=>(F||(F=Object.fromEntries(t.entries())),F),get plugins(){return de},get isReady(){return Te},get namespace(){return y},get userId(){return Y},whenReady:()=>Bt};["addAccessRule","recordConsent","hasConsent","getConsents","revokeConsent","exportUserData","deleteUserData"].forEach(i=>{let c=C[i];c&&C._registerMethod("security",i,c)});let rt=()=>{m.size>0&&nt()};return typeof window<"u"&&window.addEventListener("beforeunload",rt),k?Nt(Ze(),i=>(E>0||A>0)&&!1?Ve(i):0,()=>{Te=!0,F=null,ze(),Z()}).then(()=>{}):(Te=!0,ze()),C};import{useSyncExternalStore as Ft,useDebugValue as gn,useMemo as Ye,useCallback as Me}from"react";var L=null,yn=e=>{L&&!e?.namespace&&(e?.silent||console.warn("[gState] Store already exists. Pass a unique namespace to create additional stores."));let t=X(e);return L=t,t},Sn=()=>{L&&(L.destroy(),L=null)},hn=e=>{let t=e||L,n=Ye(()=>r=>t?t._subscribe(r):()=>{},[t]);return Ft(n,()=>t?t.isReady:!1,()=>!0)},z=()=>L;function ue(e,t){let n=Ye(()=>t||L,[t]),r=Ye(()=>{let l=()=>{},S=()=>!1,y=()=>null;return{set:S,get:y,remove:S,delete:S,deleteAll:S,list:()=>({}),compute:y,watch:()=>()=>{},use:l,transaction:l,destroy:l,_subscribe:()=>()=>{},_setSilently:l,_registerMethod:l,_addPlugin:l,_removePlugin:l,_getVersion:()=>0,get isReady(){return!1},whenReady:()=>Promise.resolve(),get plugins(){return{}},getSnapshot:()=>({}),get namespace(){return"ghost"},get userId(){}}},[]),o=n||r,s=typeof e=="function",a=s?null:e,u=s?e:null,p=Me(l=>s?o._subscribe(l):o._subscribe(l,a),[o,s,a]),d=Me(()=>s?u(o.getSnapshot()):o.get(a)??void 0,[o,s,a,u]),h=Me(()=>{if(s)try{return u({})}catch{return}else return},[u,s]),m=Ft(p,d,h),_=Me((l,S)=>s?!1:o.set(a,l,S),[o,s,a]);return gn(m,l=>s?`Selector: ${JSON.stringify(l)}`:`${a}: ${JSON.stringify(l)}`),s?m:[m,_]}var mn=(e,t)=>{let n=t?.key||"async_data",r=t?.store||X({namespace:`async_${n}`,silent:!0});return r.get(n)==null&&r.set(n,{data:null,loading:!1,error:null,updatedAt:null}),Object.assign(r,{execute:async()=>{let s=r.get(n);r.set(n,{...s||{data:null,loading:!1,error:null,updatedAt:null},loading:!0,error:null}),"whenReady"in r&&!r.isReady&&await r.whenReady();try{let a=await e(),u=r.get(n);r.set(n,{...u||{data:null,loading:!1,error:null,updatedAt:null},data:a,loading:!1,updatedAt:Date.now()},{persist:t?.persist})}catch(a){let u=r.get(n);r.set(n,{...u||{data:null,loading:!1,error:null,updatedAt:null},error:a instanceof Error?a:new Error(String(a)),loading:!1})}}})};var _n=()=>({name:"gstate-immer",hooks:{onInstall:({store:e})=>{e._registerMethod("immer","setWithProduce",((t,n)=>e.set(t,n)))}}});var wn=e=>{let t=[],n=-1,r=!1,o=e?.limit||50;return{name:"gstate-undo-redo",hooks:{onInstall:({store:s})=>{t.push(s.list()),n=0,s._registerMethod("undoRedo","undo",()=>{if(n>0){r=!0,n--;let a=t[n];return a?(Object.entries(a).forEach(([u,p])=>{s._setSilently(u,p)}),r=!1,!0):!1}return!1}),s._registerMethod("undoRedo","redo",()=>{if(n<t.length-1){r=!0,n++;let a=t[n];return a?(Object.entries(a).forEach(([u,p])=>{s._setSilently(u,p)}),r=!1,!0):!1}return!1}),s._registerMethod("undoRedo","canUndo",()=>n>0),s._registerMethod("undoRedo","canRedo",()=>n<t.length-1)},onSet:({store:s})=>{r||(n<t.length-1&&(t=t.slice(0,n+1)),t.push(s.list()),t.length>o?t.shift():n++)}}}};var bn=e=>({name:"gstate-schema",hooks:{onSet:({key:t,value:n})=>{if(!t)return;let r=e[t];if(r){let o=r(n);if(o!==!0)throw new Error(`[Schema Error] Validation failed for key "${t}": ${o===!1?"Invalid type":o}`)}}}});var Pn=e=>{let r=globalThis.__REDUX_DEVTOOLS_EXTENSION__;if(!r?.connect)return{name:"gstate-devtools-noop",hooks:{}};let o=null;return{name:"gstate-devtools",hooks:{onInstall:({store:s})=>{o=r.connect({name:e?.name||"Magnetar Store"}),o.init(s.list())},onSet:({key:s,store:a})=>{!s||!o||o.send(`SET_${s.toUpperCase()}`,a.list())},onRemove:({key:s,store:a})=>{!s||!o||o.send(`REMOVE_${s.toUpperCase()}`,a.list())}}}};var En=()=>{let e=new Map;return{name:"gstate-snapshot",hooks:{onInstall:({store:t})=>{t._registerMethod("snapshot","takeSnapshot",(n=>{e.set(n,t.list())})),t._registerMethod("snapshot","restoreSnapshot",(n=>{let r=e.get(n);return r?(t.transaction(()=>{Object.entries(r).forEach(([o,s])=>{t.set(o,s)})}),!0):!1})),t._registerMethod("snapshot","listSnapshots",(()=>Array.from(e.keys()))),t._registerMethod("snapshot","deleteSnapshot",(n=>e.delete(n))),t._registerMethod("snapshot","clearSnapshots",(()=>e.clear()))}}}};var kn=e=>({name:"gstate-guard",hooks:{onBeforeSet:({key:t,value:n,store:r})=>{if(!t)return;let o=e[t];if(o){let s=o(n)}}}});var vn=e=>({name:"gstate-analytics",hooks:{onSet:({key:t,value:n})=>{t&&(!e.keys||e.keys.includes(t))&&e.provider({key:t,value:n,action:"SET"})},onRemove:({key:t})=>{t&&(!e.keys||e.keys.includes(t))&&e.provider({key:t,value:null,action:"REMOVE"})}}});var xn=e=>{let t=new BroadcastChannel(e?.channelName||"gstate_sync"),n=!1;return{name:"gstate-sync",hooks:{onInstall:({store:r})=>{t.onmessage=o=>{let{key:s,value:a,action:u}=o.data;s&&(n=!0,u==="REMOVE"?r.remove(s):r.set(s,a),n=!1)}},onSet:({key:r,value:o})=>{!r||n||t.postMessage({key:r,value:o,action:"SET"})},onRemove:({key:r})=>{!r||n||t.postMessage({key:r,action:"REMOVE"})},onDestroy:()=>{t.close()}}}};var Cn=()=>({name:"gstate-debug-noop",hooks:{}});var Rn=(e={})=>{let t=e.dbName||"rgs-db",n=e.storeName||"states",r=e.version||1,o=null,s=()=>new Promise((d,h)=>{if(o)return d(o);let m=indexedDB.open(t,r);m.onerror=()=>h(m.error),m.onsuccess=()=>{o=m.result,d(o)},m.onupgradeneeded=_=>{let l=_.target.result;l.objectStoreNames.contains(n)||l.createObjectStore(n)}}),a=async(d,h)=>{let m=await s();return new Promise((_,l)=>{let b=m.transaction(n,"readwrite").objectStore(n).put(h,d);b.onsuccess=()=>_(),b.onerror=()=>l(b.error)})},u=async d=>{let h=await s();return new Promise((m,_)=>{let y=h.transaction(n,"readonly").objectStore(n).get(d);y.onsuccess=()=>m(y.result),y.onerror=()=>_(y.error)})},p=async d=>{let h=await s();return new Promise((m,_)=>{let y=h.transaction(n,"readwrite").objectStore(n).delete(d);y.onsuccess=()=>m(),y.onerror=()=>_(y.error)})};return{name:"indexedDB",hooks:{onInstall:({store:d})=>{d._registerMethod("indexedDB","clear",async()=>{(await s()).transaction(n,"readwrite").objectStore(n).clear()})},onInit:async({store:d})=>{let l=(await s()).transaction(n,"readonly").objectStore(n).getAllKeys();l.onsuccess=async()=>{let S=l.result,y=d.namespace+"_";for(let b of S)if(b.startsWith(y)){let B=await u(b);if(B){let I=b.substring(y.length);d._setSilently(I,B.d)}}}},onSet:async({key:d,value:h,store:m})=>{if(!d)return;let _=m.namespace+"_",l={d:h,t:Date.now(),v:m._getVersion?.(d)||1};await a(`${_}${d}`,l)},onRemove:async({key:d,store:h})=>{if(!d)return;let m=h.namespace+"_";await p(`${m}${d}`)}}}};var In=e=>{let{adapter:t,autoSyncInterval:n}=e,r=new Map,o={lastSyncTimestamp:null,totalKeysSynced:0,totalBytesSynced:0,syncCount:0,lastDuration:0,errors:0},s=null;return{name:"cloudSync",hooks:{onInstall:({store:a})=>{a._registerMethod("cloudSync","sync",async()=>{let u=performance.now(),p={},d=0;try{let h=a.list(),m=Object.keys(h);for(let l of m){let S=a._getVersion?.(l)||0,y=r.get(l)||0;if(S>y){let b=h[l];p[l]=b,d+=JSON.stringify(b).length,r.set(l,S)}}if(Object.keys(p).length===0)return{status:"no-change",stats:o};if(await t.save(p))return o.lastSyncTimestamp=Date.now(),o.totalKeysSynced+=Object.keys(p).length,o.totalBytesSynced+=d,o.syncCount++,o.lastDuration=performance.now()-u,e.onSync&&e.onSync(o),{status:"success",stats:o};throw new Error(`Adapter ${t.name} failed to save.`)}catch(h){return o.errors++,console.error(`[gState] Cloud Sync Failed (${t.name}):`,h),{status:"error",error:String(h),stats:o}}}),a._registerMethod("cloudSync","getStats",()=>o),n&&n>0&&(s=setInterval(()=>{let p=a.plugins.cloudSync;p&&p.sync()},n))},onDestroy:()=>{s&&clearInterval(s)}}}},An=(e,t)=>({name:"MongoDB-Atlas",save:async n=>(await fetch(`${e}/action/updateOne`,{method:"POST",headers:{"Content-Type":"application/json","api-key":t},body:JSON.stringify({dataSource:"Cluster0",database:"rgs_cloud",collection:"user_states",filter:{id:"global_state"},update:{$set:{data:n,updatedAt:Date.now()}},upsert:!0})})).ok}),Mn=(e,t)=>({name:"Firebase-Firestore",save:async n=>{try{return((...s)=>{})("[Mock] Firestore Syncing:",n),!0}catch{return!1}}}),Dn=(e,t)=>({name:"SQL-REST-API",save:async n=>(await fetch(e,{method:"PATCH",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(n)})).ok});var ir=e=>({name:"gstate-logger",hooks:{onSet:({key:t,value:n,version:r})=>{let o=new Date().toLocaleTimeString(),s=`[gState] SET: ${t} (v${r}) @ ${o}`;e?.collapsed?console.groupCollapsed(s):console.group(s),console.info("%c Value:","color: #4CAF50; font-weight: bold;",n),console.groupEnd()},onRemove:({key:t})=>{console.warn(`[gState] REMOVED: ${t}`)},onTransaction:({key:t})=>{t==="START"?console.group("\u2500\u2500 TRANSACTION START \u2500\u2500"):console.groupEnd()}}});var br=(e,t)=>{let r=X(typeof t=="string"?{namespace:t}:t);e&&Object.entries(e).forEach(([s,a])=>{r.get(s)===null&&r._setSilently(s,a)});let o=s=>ue(s,r);return typeof window<"u"&&(window.gState=r,window.rgs=r),Object.assign(o,r)};var Pr=(e,t)=>z()?.addAccessRule(e,t),Er=(e,t,n)=>z()?.hasPermission(e,t,n)??!0,kr=(e,t,n)=>{let r=z();if(!r)throw new Error("[gState] recordConsent failed: No store found. call initState() first.");return r.recordConsent(e,t,n)},vr=(e,t)=>z()?.hasConsent(e,t)??!1,xr=e=>z()?.getConsents(e)??[],Cr=(e,t)=>z()?.revokeConsent(e,t),Rr=e=>{let t=z();if(!t)throw new Error("[gState] exportUserData failed: No store found.");return t.exportUserData(e)},Ir=e=>{let t=z();if(!t)throw new Error("[gState] deleteUserData failed: No store found.");return t.deleteUserData(e)},Ar=()=>{},Mr=()=>{};export{Pr as addAccessRule,vn as analyticsPlugin,Ar as clearAccessRules,Mr as clearAllConsents,In as cloudSyncPlugin,mn as createAsyncStore,Mn as createFirestoreAdapter,An as createMongoAdapter,Dn as createSqlRestAdapter,X as createStore,Cn as debugPlugin,Ir as deleteUserData,Sn as destroyState,Pn as devToolsPlugin,cn as exportKey,Rr as exportUserData,an as generateEncryptionKey,xr as getConsents,z as getStore,br as gstate,kn as guardPlugin,vr as hasConsent,Er as hasPermission,_n as immerPlugin,un as importKey,Rn as indexedDBPlugin,yn as initState,vt as isCryptoAvailable,ae as logAudit,ir as loggerPlugin,kr as recordConsent,Cr as revokeConsent,ie as sanitizeValue,bn as schemaPlugin,ln as setAuditLogger,En as snapshotPlugin,xn as syncPlugin,wn as undoRedoPlugin,ue as useGState,hn as useIsStoreReady,ue as useSimpleState,ue as useStore,Qe as validateKey};
|
|
1
|
+
import{produce as ht,freeze as Ne}from"immer";var D=typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof crypto.subtle.generateKey=="function",V=async()=>{if(!D)throw new Error("Web Crypto API not available");let t=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),e=crypto.getRandomValues(new Uint8Array(12));return{key:t,iv:e}},j=async t=>{let e=await crypto.subtle.exportKey("raw",t.key);return{key:btoa(String.fromCharCode(...new Uint8Array(e))),iv:btoa(String.fromCharCode(...t.iv))}},$=async(t,e)=>{let n=Uint8Array.from(atob(t),i=>i.charCodeAt(0)),r=Uint8Array.from(atob(e),i=>i.charCodeAt(0));return{key:await crypto.subtle.importKey("raw",n,{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),iv:r}},Qe=async(t,e)=>{let n=new TextEncoder,r=n.encode(JSON.stringify(t)),s=await crypto.subtle.encrypt({name:"AES-GCM",iv:e.iv},e.key,r),i=new Uint8Array(e.iv.length+s.byteLength);return i.set(e.iv),i.set(new Uint8Array(s),e.iv.length),btoa(String.fromCharCode(...i))},He=async(t,e)=>{let n=Uint8Array.from(atob(t),a=>a.charCodeAt(0)),r=n.slice(0,12),s=n.slice(12),i=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},e.key,s);return JSON.parse(new TextDecoder().decode(i))},Ie=null,z=t=>{Ie=t},Ge=()=>Ie!==null,P=t=>{Ie&&Ie(t)},$e=(t,e,n)=>{t.set(e instanceof RegExp?e.source:e,n)},Ae=(t,e,n,r)=>{if(t.size===0)return!0;for(let[s,i]of t){let a;if(typeof s=="function")a=s(e,r);else try{a=new RegExp(s).test(e)}catch{continue}if(a)return i.includes(n)||i.includes("admin")}return!1},R=t=>{if(typeof t=="string"){let e=t.replace(/&#[xX]?[0-9a-fA-F]+;?/g,r=>{let s=r.match(/&#x([0-9a-fA-F]+);?/i);if(s&&s[1])return String.fromCharCode(parseInt(s[1],16));let i=r.match(/&#([0-9]+);?/);return i&&i[1]?String.fromCharCode(parseInt(i[1],10)):""});try{e=decodeURIComponent(e)}catch{}return e.replace(/\b(javascript|vbscript|data:text\/html|about:blank|chrome:)/gi,"[SEC-REMOVED]").replace(/<script\b[^>]*>[\s\S]*?<\s*\/\s*script\b[^>]*>/gi,"[SEC-REMOVED]").replace(/on\w+\s*=/gi,"[SEC-REMOVED]=").replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi,"[SEC-REMOVED]").replace(/<object\b[^<]*(?:(?!<\/object>)<[^<]*)*<\/object>/gi,"[SEC-REMOVED]").replace(/<embed\b[^<]*(?:(?!<\/embed>)<[^<]*)*<\/embed>/gi,"[SEC-REMOVED]").replace(/<svg\b[^<]*(?:(?!<\/svg>)<[^<]*)*<\/svg>/gi,"[SEC-REMOVED]").replace(/<form\b[^<]*(?:(?!<\/form>)<[^<]*)*<\/form>/gi,"[SEC-REMOVED]").replace(/<base\b[^<]*(?:(?!<\/base>)<[^<]*)*<\/base>/gi,"[SEC-REMOVED]").replace(/<link\b[^<]*(?:(?!<\/link>)<[^<]*)*<\/link>/gi,"[SEC-REMOVED]").replace(/<meta\b[^<]*(?:(?!<\/meta>)<[^<]*)*<\/meta>/gi,"[SEC-REMOVED]").replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,"[SEC-REMOVED]")}if(t&&typeof t=="object"&&!Array.isArray(t)){if(Object.getPrototypeOf(t)===Object.prototype){let e={};for(let[n,r]of Object.entries(t))e[n]=R(r);return e}return t}return Array.isArray(t)?t.map(e=>R(e)):t},A=t=>/^[a-zA-Z0-9_.-]+$/.test(t)&&t.length<=256,ze=(t,e,n,r)=>{let s={id:crypto.randomUUID(),purpose:n,granted:r,timestamp:Date.now()},i=t.get(e)||[];return i.push(s),t.set(e,i),P({timestamp:Date.now(),action:"set",key:`consent:${n}`,userId:e,success:!0}),s},Xe=(t,e,n)=>{let r=t.get(e);if(!r)return!1;for(let s=r.length-1;s>=0;s--){let i=r[s];if(i&&i.purpose===n)return i.granted}return!1},Ze=(t,e,n)=>ze(t,e,n,!1),Ye=(t,e)=>t.get(e)||[],et=(t,e)=>({userId:e,exportedAt:Date.now(),consents:t.get(e)||[]}),tt=(t,e)=>{let n=t.get(e)?.length||0;return t.delete(e),{success:!0,deletedConsents:n}};var ye=t=>{if(t===null||typeof t!="object")return t;if(typeof structuredClone=="function")try{return structuredClone(t)}catch{}let e=new WeakMap,n=r=>{if(r===null||typeof r!="object"||typeof r=="function")return r;if(e.has(r))return e.get(r);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r.source,r.flags);if(r instanceof Map){let a=new Map;return e.set(r,a),r.forEach((l,f)=>a.set(n(f),n(l))),a}if(r instanceof Set){let a=new Set;return e.set(r,a),r.forEach(l=>a.add(n(l))),a}let s=Array.isArray(r)?[]:Object.create(Object.getPrototypeOf(r));e.set(r,s);let i=[...Object.keys(r),...Object.getOwnPropertySymbols(r)];for(let a of i)s[a]=n(r[a]);return s};return n(t)},xe=(t,e)=>{if(t===e)return!0;if(t===null||e===null||typeof t!="object"||typeof e!="object")return t===e;if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let s=0;s<t.length;s++)if(!xe(t[s],e[s]))return!1;return!0}let n=Object.keys(t),r=Object.keys(e);if(n.length!==r.length)return!1;for(let s=0;s<n.length;s++){let i=n[s];if(!(i in e)||!xe(t[i],e[i]))return!1}return!0};import{freeze as yt}from"immer";var rt=t=>`${t}_`,st=async t=>{if(!t.storage)return;let{store:e,config:n,diskQueue:r,storage:s,encryptionKey:i,audit:a,onError:l,silent:f,currentVersion:p}=t,b=rt(n.namespace||"gstate");try{let w={};e.forEach((h,k)=>{w[k]=h});let u,S=n?.encoded;S?u=btoa(JSON.stringify(w)):u=JSON.stringify(w),s.setItem(b.replace("_",""),JSON.stringify({v:1,t:Date.now(),e:null,d:u,_sys_v:p,_b64:S?!0:void 0})),a("set","FULL_STATE",!0)}catch(w){let u=w instanceof Error?w:new Error(String(w));l?l(u,{operation:"persist",key:"FULL_STATE"}):f||console.error("[gState] Persist failed: ",u)}let m=Array.from(r.entries());r.clear();for(let[w,u]of m)try{let S=u.value,h=u.options.encoded||u.options.secure;if(u.options.encrypted){if(!i)throw new Error(`Encryption key missing for "${w}"`);S=await Qe(u.value,i)}else h?S=btoa(JSON.stringify(u.value)):typeof u.value=="object"&&u.value!==null&&(S=JSON.stringify(u.value));s.setItem(`${b}${w}`,JSON.stringify({v:t.versions.get(w)||1,t:Date.now(),e:u.options.ttl?Date.now()+u.options.ttl:null,d:S,_sys_v:p,_enc:u.options.encrypted?!0:void 0,_b64:h?!0:void 0})),a("set",w,!0)}catch(S){let h=S instanceof Error?S:new Error(String(S));l?l(h,{operation:"persist",key:w}):f||console.error("[gState] Persist failed: ",h)}},ot=async(t,e,n)=>{let{storage:r,config:s,encryptionKey:i,audit:a,onError:l,silent:f,currentVersion:p,store:b,sizes:m,versions:w}=t,u=rt(s.namespace||"gstate"),S=s.immer??!0;if(r)try{let h={},k=0;for(let ae=0;ae<(r.length||0);ae++){let I=r.key(ae);if(!I||!I.startsWith(u))continue;let M=r.getItem(I);if(M)try{let _=JSON.parse(M),ce=I.substring(u.length);if(k=Math.max(k,_._sys_v!==void 0?_._sys_v:_.v||0),_.e&&Date.now()>_.e){r.removeItem(I),ae--;continue}let ue=_.d;if(_._enc&&i)ue=await He(ue,i);else if(typeof ue=="string"){if(_._b64)try{ue=JSON.parse(atob(ue))}catch{}else if(ue.startsWith("{")||ue.startsWith("["))try{ue=JSON.parse(ue)}catch{}}h[ce]=ue,a("hydrate",ce,!0)}catch(_){a("hydrate",I,!1,String(_));let ce=_ instanceof Error?_:new Error(String(_));l?l(ce,{operation:"hydration",key:I}):f||console.error(`[gState] Hydration failed for "${I}": `,_)}}let Se=k<p&&s.migrate?s.migrate(h,k):h;Object.entries(Se).forEach(([ae,I])=>{let M=S&&I!==null&&typeof I=="object"?yt(ye(I),!0):I,_=e(M),ce=m.get(ae)||0;t.totalSize=t.totalSize-ce+_,m.set(ae,_),b.set(ae,M),w.set(ae,1)}),n()}catch(h){let k=h instanceof Error?h:new Error(String(h));l?l(k,{operation:"hydration"}):f||console.error("[gState] Hydration failed: ",k)}};var it=(t,e,n)=>{if(t.plugins.size!==0)for(let r of t.plugins.values()){let s=r.hooks?.[e];if(s)try{s(n)}catch(i){let a=i instanceof Error?i:new Error(String(i));t.onError?t.onError(a,{operation:`plugin:${r.name}:${e}`,key:n.key}):t.silent||console.error(`[gState] Plugin "${r.name}" error:`,i)}}},at=(t,e,n)=>{try{t.plugins.set(e.name,e),e.hooks?.onInstall?.({store:n})}catch(r){let s=r instanceof Error?r:new Error(String(r));t.onError?t.onError(s,{operation:"plugin:install",key:e.name}):t.silent||console.error(`[gState] Failed to install plugin "${e.name}": `,r)}};var E=class{store;config;pendingQueue=new Map;remoteVersions=new Map;syncTimer=null;onlineStatusListeners=new Set;syncStateListeners=new Set;_isOnline=!0;_isSyncing=!1;constructor(e,n){this.store=e,this.config={endpoint:n.endpoint,authToken:n.authToken||"",strategy:n.strategy||"last-write-wins",autoSyncInterval:n.autoSyncInterval??3e4,syncOnReconnect:n.syncOnReconnect??!0,debounceTime:n.debounceTime??1e3,fetch:n.fetch||fetch,onSync:n.onSync||(()=>{}),onConflict:n.onConflict||(()=>({action:"accept-local"})),maxRetries:n.maxRetries??3},this._isOnline=typeof navigator<"u"?navigator.onLine:!0,this._setupOnlineListener(),this._setupStoreListener(),this.config.autoSyncInterval>0&&this._startAutoSync()}_setupOnlineListener(){typeof window>"u"||(window.addEventListener("online",()=>{this._isOnline=!0,this._notifyOnlineChange(!0),this.config.syncOnReconnect&&this.sync()}),window.addEventListener("offline",()=>{this._isOnline=!1,this._notifyOnlineChange(!1)}))}_setupStoreListener(){this.store._subscribe(()=>{})}_startAutoSync(){setInterval(()=>{this._isOnline&&!this._isSyncing&&this.pendingQueue.size>0&&this.sync()},this.config.autoSyncInterval)}_notifyOnlineChange(e){this.onlineStatusListeners.forEach(n=>n(e)),this._notifyStateChange()}_notifyStateChange(){let e=this.getState();this.syncStateListeners.forEach(n=>n(e))}queueChange(e,n){let r=this.store._getVersion(e)||1;this.pendingQueue.set(e,{key:e,value:ye(n),timestamp:Date.now(),version:r}),this._notifyStateChange(),this.syncTimer&&clearTimeout(this.syncTimer),this.syncTimer=setTimeout(()=>{this._isOnline&&this.sync()},this.config.debounceTime)}async sync(){if(this._isSyncing)return{success:!1,syncedKeys:[],conflicts:[],errors:["Sync already in progress"],timestamp:Date.now(),duration:0};this._isSyncing=!0,this._notifyStateChange();let e=Date.now(),n=[],r=[],s=[];try{let i=Array.from(this.pendingQueue.values());if(i.length===0)return this._isSyncing=!1,this._notifyStateChange(),{success:!0,syncedKeys:[],conflicts:[],errors:[],timestamp:Date.now(),duration:Date.now()-e};await this._fetchRemoteVersions(i.map(l=>l.key));for(let l of i)try{let f=this.remoteVersions.get(l.key);if(!f)await this._pushChange(l),n.push(l.key),this.pendingQueue.delete(l.key);else if(f.version>=l.version){let p={key:l.key,localValue:l.value,remoteValue:f.value,localVersion:l.version,remoteVersion:f.version,timestamp:l.timestamp};r.push(p);let b=this.config.onConflict(p);await this._resolveConflict(l,f,b),n.push(l.key),this.pendingQueue.delete(l.key)}else await this._pushChange(l),n.push(l.key),this.pendingQueue.delete(l.key)}catch(f){s.push(`Failed to sync "${l.key}": ${f}`)}let a={success:s.length===0,syncedKeys:n,conflicts:r,errors:s,timestamp:Date.now(),duration:Date.now()-e};return this.config.onSync(a),a}catch(i){let a=`Sync failed: ${i}`;return s.push(a),{success:!1,syncedKeys:n,conflicts:r,errors:s,timestamp:Date.now(),duration:Date.now()-e}}finally{this._isSyncing=!1,this._notifyStateChange()}}async _fetchRemoteVersions(e){try{let n=await this.config.fetch(`${this.config.endpoint}/versions`,{method:"POST",headers:{"Content-Type":"application/json",...this.config.authToken&&{Authorization:`Bearer ${this.config.authToken}`}},body:JSON.stringify({keys:e})});if(n.ok){let r=await n.json();if(r.versions)for(let[s,i]of Object.entries(r.versions))this.remoteVersions.set(s,i)}}catch(n){console.warn("[SyncEngine] Failed to fetch remote versions:",n)}}async _pushChange(e){let n=0;for(;n<this.config.maxRetries;)try{let r=await this.config.fetch(`${this.config.endpoint}/sync`,{method:"POST",headers:{"Content-Type":"application/json",...this.config.authToken&&{Authorization:`Bearer ${this.config.authToken}`}},body:JSON.stringify({key:e.key,value:e.value,version:e.version,timestamp:e.timestamp})});if(r.ok){let s=await r.json();s.version&&this.remoteVersions.set(e.key,{version:s.version,timestamp:s.timestamp||Date.now(),value:e.value});return}n++}catch(r){if(n++,n>=this.config.maxRetries)throw r}}async _resolveConflict(e,n,r){switch(r.action){case"accept-local":await this._pushChange({...e,version:n.version+1,timestamp:Date.now()});break;case"accept-remote":this.store.set(e.key,n.value);break;case"merge":this.store.set(e.key,r.value),await this._pushChange({key:e.key,value:r.value,version:Math.max(e.version,n.version)+1,timestamp:Date.now()});break;case"discard":break}}getState(){return{isOnline:this._isOnline,isSyncing:this._isSyncing,lastSyncTimestamp:null,pendingChanges:this.pendingQueue.size,conflicts:0}}onOnlineChange(e){return this.onlineStatusListeners.add(e),()=>this.onlineStatusListeners.delete(e)}onStateChange(e){return this.syncStateListeners.add(e),()=>this.syncStateListeners.delete(e)}async flush(){return this.sync()}destroy(){this.syncTimer&&clearTimeout(this.syncTimer),this.pendingQueue.clear(),this.onlineStatusListeners.clear(),this.syncStateListeners.clear()}},N=(t,e)=>new E(t,e);var wt={local:()=>typeof window<"u"?window.localStorage:null,session:()=>typeof window<"u"?window.sessionStorage:null,memory:()=>{let t=new Map;return{getItem:e=>t.get(e)||null,setItem:(e,n)=>t.set(e,n),removeItem:e=>t.delete(e),key:e=>Array.from(t.keys())[e]||null,get length(){return t.size}}}},T=t=>{let e=new Map,n=new Map,r=new Map,s=new Set,i=new Map,a=new Set,l=new Map,f=new Map,p=new Map,b=new Map,m=new Map,w=new Map,u=new Map,S=new Map,h=t?.namespace||"gstate",k=t?.silent??!1,Se=t?.debounceTime??150,ae=t?.version??0,I=t?.storage||wt.local(),M=t?.onError,_=t?.maxObjectSize??0,ce=t?.maxTotalSize??0,ue=t?.encryptionKey??null,_e=t?.validateInput??!0,dt=t?.auditEnabled??!0,be=t?.userId,Re=t?.immer??!0,gt=t?.persistByDefault??t?.persistence??t?.persist??!1;t?.accessRules&&t.accessRules.forEach(o=>$e(u,o.pattern,o.permissions));let Oe=!1,De=!1,Me=!1,ge=0,we=null,fe=null,Ve,pt=new Promise(o=>{Ve=o}),ft=()=>`${h}_`,Ue=()=>({store:e,versions:n,sizes:r,totalSize:ge,storage:I,config:t||{},diskQueue:m,encryptionKey:ue,audit:he,onError:M,silent:k,debounceTime:Se,currentVersion:ae}),Ke=()=>({plugins:b,onError:M,silent:k}),je=o=>{if(o==null)return 0;let c=typeof o;if(c==="boolean")return 4;if(c==="number")return 8;if(c==="string")return o.length*2;if(c!=="object")return 0;let g=0,v=[o],x=new WeakSet;for(;v.length>0;){let y=v.pop();if(typeof y=="boolean")g+=4;else if(typeof y=="number")g+=8;else if(typeof y=="string")g+=y.length*2;else if(typeof y=="object"&&y!==null){let O=y;if(x.has(O))continue;if(x.add(O),Array.isArray(O))for(let le=0;le<O.length;le++)v.push(O[le]);else for(let le of Object.keys(O))g+=le.length*2,v.push(O[le])}}return g},me=(o,c)=>{it(Ke(),o,c)},he=(o,c,g,v)=>{dt&&Ge()&&P&&P({timestamp:Date.now(),action:o,key:c,userId:be,success:g,error:v})},Be=o=>{let c=f.get(o);if(!c)return;let g=new Set,v=y=>(g.add(y),f.has(y)?f.get(y).lastValue:Z.get(y)),x=c.selector(v);c.deps.forEach(y=>{if(!g.has(y)){let O=p.get(y);O&&(O.delete(o),O.size===0&&p.delete(y))}}),g.forEach(y=>{c.deps.has(y)||(p.has(y)||p.set(y,new Set),p.get(y).add(o))}),c.deps=g,xe(c.lastValue,x)||(c.lastValue=Re&&x!==null&&typeof x=="object"?Ne(ye(x),!0):x,n.set(o,(n.get(o)||0)+1),ve(o))},ve=o=>{if(o){if(p.has(o)){let v=p.get(o);for(let x of v)Be(x)}let c=l.get(o);if(c){let v=Z.get(o);for(let x of c)try{x(v)}catch(y){let O=y instanceof Error?y:new Error(String(y));M?M(O,{operation:"watcher",key:o}):k||console.error(`[gState] Watcher error for "${o}":`,y)}}let g=i.get(o);if(g)for(let v of g)try{v()}catch(x){let y=x instanceof Error?x:new Error(String(x));M?M(y,{operation:"keyListener",key:o}):k||console.error(`[gState] Listener error for "${o}":`,x)}}if(Oe){De=!0;return}for(let c of s)try{c()}catch(g){let v=g instanceof Error?g:new Error(String(g));M?M(v,{operation:"listener"}):k||console.error("[gState] Global listener error: ",g)}},Fe=async()=>{st(Ue())},Pe={},Z={_setSilently:(o,c)=>{let g=r.get(o)||0,v=Re&&c!==null&&typeof c=="object"?Ne(ye(c),!0):c,y=(_>0||ce>0)&&!1?je(v):0;ge=ge-g+y,r.set(o,y),e.set(o,v),n.set(o,(n.get(o)||0)+1),fe=null},_registerMethod:(o,c,g)=>{let v=x=>x==="__proto__"||x==="constructor"||x==="prototype";if(v(o)||v(c)){console.warn("[gState] Refusing to register method with unsafe key:",o,c);return}Pe[o]||(Pe[o]={}),Pe[o][c]=g},set:(o,c,g={})=>{let v=e.get(o),x=Re&&typeof c=="function"?ht(v,c):c;if(_e&&!A(o))return k||console.warn(`[gState] Invalid key: ${o}`),!1;if(!Ae(u,o,"write",be))return he("set",o,!1,"RBAC Denied"),k||console.error(`[gState] RBAC Denied for "${o}"`),!1;let y=_e?R(x):x,O=r.get(o)||0;me("onBeforeSet",{key:o,value:y,store:Z,version:n.get(o)||0});let le=Re&&y!==null&&typeof y=="object"?Ne(ye(y),!0):y;if(!xe(v,le)){let ke=(_>0||ce>0)&&!1?je(le):0;if(_>0&&ke>_){let Ce=new Error(`Object size (${ke} bytes) exceeds maxObjectSize (${_} bytes)`);M?M(Ce,{operation:"set",key:o}):k||console.warn(`[gState] ${Ce.message} for "${o}"`)}if(ce>0){let Ce=ge-O+ke;if(Ce>ce){let qe=new Error(`Total store size (${Ce} bytes) exceeds limit (${ce} bytes)`);M?M(qe,{operation:"set"}):k||console.warn(`[gState] ${qe.message}`)}}ge=ge-O+ke,r.set(o,ke),e.set(o,le),n.set(o,(n.get(o)||0)+1),fe=null;let We=g.persist??gt;return We&&(m.set(o,{value:le,options:{...g,persist:We,encoded:g.encoded||t?.encoded}}),we&&clearTimeout(we),we=setTimeout(Fe,Se)),me("onSet",{key:o,value:le,store:Z,version:n.get(o)}),he("set",o,!0),ve(o),!0}return!1},get:o=>{if(!Ae(u,o,"read",be))return he("get",o,!1,"RBAC Denied"),null;let c=e.get(o);return me("onGet",{store:Z,key:o,value:c}),he("get",o,!0),c},compute:(o,c)=>{try{return f.has(o)||(f.set(o,{selector:c,lastValue:null,deps:new Set}),Be(o)),f.get(o).lastValue}catch(g){let v=g instanceof Error?g:new Error(String(g));return M?M(v,{operation:"compute",key:o}):k||console.error(`[gState] Compute error for "${o}": `,g),null}},watch:(o,c)=>{l.has(o)||l.set(o,new Set);let g=l.get(o);return g.add(c),()=>{g.delete(c),g.size===0&&l.delete(o)}},remove:o=>{if(!Ae(u,o,"delete",be))return he("delete",o,!1,"RBAC Denied"),!1;let c=e.get(o),g=e.delete(o);return g&&(ge-=r.get(o)||0,r.delete(o),me("onRemove",{store:Z,key:o,value:c}),fe=null),n.set(o,(n.get(o)||0)+1),I&&I.removeItem(`${ft()}${o}`),he("delete",o,!0),ve(o),g},delete:o=>Z.remove(o),deleteAll:()=>{if(Array.from(e.keys()).forEach(o=>Z.remove(o)),I){let o=h+"_";for(let c=0;c<(I.length||0);c++){let g=I.key(c);g?.startsWith(o)&&(I.removeItem(g),c--)}}return ge=0,r.clear(),fe=null,!0},list:()=>Object.fromEntries(e.entries()),use:o=>{a.add(o)},transaction:o=>{Oe=!0,me("onTransaction",{store:Z,key:"START"});try{o()}finally{Oe=!1,me("onTransaction",{store:Z,key:"END"}),De&&(De=!1,ve())}},destroy:()=>{we&&(clearTimeout(we),we=null),m.clear(),typeof window<"u"&&window.removeEventListener("beforeunload",Je),me("onDestroy",{store:Z}),s.clear(),i.clear(),l.clear(),f.clear(),p.clear(),b.clear(),e.clear(),r.clear(),ge=0,u.clear(),S.clear(),n.clear(),w.clear(),a.clear()},_addPlugin:o=>{at(Ke(),o,Z)},_removePlugin:o=>{b.delete(o)},_subscribe:(o,c)=>{if(c){i.has(c)||i.set(c,new Set);let g=i.get(c);return g.add(o),()=>{g.delete(o),g.size===0&&i.delete(c)}}return s.add(o),()=>s.delete(o)},_getVersion:o=>n.get(o)??0,addAccessRule:(o,c)=>$e(u,o,c),hasPermission:(o,c,g)=>{if(u.size===0)return!0;for(let[v,x]of u){let y;if(typeof v=="function")y=v(o,g);else try{let O=w.get(v);O||(O=new RegExp(v),w.set(v,O)),y=O.test(o)}catch{continue}if(y)return x.includes(c)||x.includes("admin")}return!1},recordConsent:(o,c,g)=>ze(S,o,c,g),hasConsent:(o,c)=>Xe(S,o,c),getConsents:o=>Ye(S,o),revokeConsent:(o,c)=>Ze(S,o,c),exportUserData:o=>et(S,o),deleteUserData:o=>tt(S,o),getSnapshot:()=>(fe||(fe=Object.fromEntries(e.entries())),fe),get plugins(){return Pe},get isReady(){return Me},get namespace(){return h},get userId(){return be},whenReady:()=>pt};["addAccessRule","recordConsent","hasConsent","getConsents","revokeConsent","exportUserData","deleteUserData"].forEach(o=>{let c=Z[o];c&&Z._registerMethod("security",o,c)});let Je=()=>{m.size>0&&Fe()};typeof window<"u"&&window.addEventListener("beforeunload",Je),I?ot(Ue(),o=>(_>0||ce>0)&&!1?je(o):0,()=>{Me=!0,fe=null,Ve(),ve()}).then(()=>{}):(Me=!0,Ve());let Te=null;return t?.sync&&(Te=new E(Z,t.sync),Z._registerMethod("sync","flush",()=>Te?.flush()),Z._registerMethod("sync","getState",()=>Te?.getState()),Z._registerMethod("sync","onStateChange",o=>Te?.onStateChange(o))),Z};import{useSyncExternalStore as ct,useDebugValue as bt,useMemo as Le,useCallback as Ee,useEffect as ut,useState as lt}from"react";var de=null,L=t=>{de&&!t?.namespace&&(t?.silent||console.warn("[gState] Store already exists. Pass a unique namespace to create additional stores."));let e=T(t);return de=e,e},U=()=>{de&&(de.destroy(),de=null)},K=t=>{let e=t||de,n=Le(()=>r=>e?e._subscribe(r):()=>{},[e]);return ct(n,()=>e?e.isReady:!1,()=>!0)},C=()=>de;function d(t,e){let n=Le(()=>e||de,[e]),r=Le(()=>{let u=()=>{},S=()=>!1,h=()=>null;return{set:S,get:h,remove:S,delete:S,deleteAll:S,list:()=>({}),compute:h,watch:()=>()=>{},use:u,transaction:u,destroy:u,_subscribe:()=>()=>{},_setSilently:u,_registerMethod:u,_addPlugin:u,_removePlugin:u,_getVersion:()=>0,get isReady(){return!1},whenReady:()=>Promise.resolve(),get plugins(){return{}},getSnapshot:()=>({}),get namespace(){return"ghost"},get userId(){}}},[]),s=n||r,i=typeof t=="function",a=i?null:t,l=i?t:null,f=Ee(u=>i?s._subscribe(u):s._subscribe(u,a),[s,i,a]),p=Ee(()=>i?l(s.getSnapshot()):s.get(a)??void 0,[s,i,a,l]),b=Ee(()=>{if(i)try{return l({})}catch{return}else return},[l,i]),m=ct(f,p,b),w=Ee((u,S)=>i?!1:s.set(a,u,S),[s,i,a]);return bt(m,u=>i?`Selector: ${JSON.stringify(u)}`:`${a}: ${JSON.stringify(u)}`),i?m:[m,w]}var pe=new Map,B=(t,e)=>{let n=t.namespace;if(pe.has(n))return console.warn(`[gState] Sync engine already exists for namespace "${n}". Call destroySync first.`),pe.get(n);let r=new E(t,e);return pe.set(n,r),r},F=t=>{let e=pe.get(t);e&&(e.destroy(),pe.delete(t))};function J(t,e){let n=e||de,r=n?.namespace||"default",s=pe.get(r),i=d(t,n),a=i[0],l=i[1],[f,p]=lt(()=>s?.getState()||{isOnline:!0,isSyncing:!1,lastSyncTimestamp:null,pendingChanges:0,conflicts:0});ut(()=>s?s.onStateChange(p):void 0,[s]);let b=Ee((m,w)=>{let u=l(m,w);if(u&&s){let S=n?.get(t);s.queueChange(t,S)}return u},[l,s,t,n]);return[a,b,f]}var W=()=>{let[t,e]=lt({isOnline:!0,isSyncing:!1,lastSyncTimestamp:null,pendingChanges:0,conflicts:0});return ut(()=>{let n=()=>{let s=!0,i=!1,a=0,l=0;pe.forEach(f=>{let p=f.getState();s=s&&p.isOnline,i=i||p.isSyncing,a+=p.pendingChanges,l+=p.conflicts}),e({isOnline:s,isSyncing:i,lastSyncTimestamp:null,pendingChanges:a,conflicts:l})};n();let r=Array.from(pe.values()).map(s=>s.onStateChange(n));return()=>r.forEach(s=>s())},[]),t},q=async t=>{let e=t||de?.namespace;if(!e)return;let n=pe.get(e);n&&await n.flush()};var Q=(t,e)=>{let n=e?.key||"async_data",r=e?.store||T({namespace:`async_${n}`,silent:!0});return r.get(n)==null&&r.set(n,{data:null,loading:!1,error:null,updatedAt:null}),Object.assign(r,{execute:async()=>{let i=r.get(n);r.set(n,{...i||{data:null,loading:!1,error:null,updatedAt:null},loading:!0,error:null}),"whenReady"in r&&!r.isReady&&await r.whenReady();try{let a=await t(),l=r.get(n);r.set(n,{...l||{data:null,loading:!1,error:null,updatedAt:null},data:a,loading:!1,updatedAt:Date.now()},{persist:e?.persist})}catch(a){let l=r.get(n);r.set(n,{...l||{data:null,loading:!1,error:null,updatedAt:null},error:a instanceof Error?a:new Error(String(a)),loading:!1})}}})};var vt=()=>({name:"gstate-immer",hooks:{onInstall:({store:t})=>{t._registerMethod("immer","setWithProduce",((e,n)=>t.set(e,n)))}}});var kt=t=>{let e=[],n=-1,r=!1,s=t?.limit||50;return{name:"gstate-undo-redo",hooks:{onInstall:({store:i})=>{e.push(i.list()),n=0,i._registerMethod("undoRedo","undo",()=>{if(n>0){r=!0,n--;let a=e[n];return a?(Object.entries(a).forEach(([l,f])=>{i._setSilently(l,f)}),r=!1,!0):!1}return!1}),i._registerMethod("undoRedo","redo",()=>{if(n<e.length-1){r=!0,n++;let a=e[n];return a?(Object.entries(a).forEach(([l,f])=>{i._setSilently(l,f)}),r=!1,!0):!1}return!1}),i._registerMethod("undoRedo","canUndo",()=>n>0),i._registerMethod("undoRedo","canRedo",()=>n<e.length-1)},onSet:({store:i})=>{r||(n<e.length-1&&(e=e.slice(0,n+1)),e.push(i.list()),e.length>s?e.shift():n++)}}}};var Ct=t=>({name:"gstate-schema",hooks:{onSet:({key:e,value:n})=>{if(!e)return;let r=t[e];if(r){let s=r(n);if(s!==!0)throw new Error(`[Schema Error] Validation failed for key "${e}": ${s===!1?"Invalid type":s}`)}}}});var xt=t=>{let r=globalThis.__REDUX_DEVTOOLS_EXTENSION__;if(!r?.connect)return{name:"gstate-devtools-noop",hooks:{}};let s=null;return{name:"gstate-devtools",hooks:{onInstall:({store:i})=>{s=r.connect({name:t?.name||"Magnetar Store"}),s.init(i.list())},onSet:({key:i,store:a})=>{!i||!s||s.send(`SET_${i.toUpperCase()}`,a.list())},onRemove:({key:i,store:a})=>{!i||!s||s.send(`REMOVE_${i.toUpperCase()}`,a.list())}}}};var Et=()=>{let t=new Map;return{name:"gstate-snapshot",hooks:{onInstall:({store:e})=>{e._registerMethod("snapshot","takeSnapshot",(n=>{t.set(n,e.list())})),e._registerMethod("snapshot","restoreSnapshot",(n=>{let r=t.get(n);return r?(e.transaction(()=>{Object.entries(r).forEach(([s,i])=>{e.set(s,i)})}),!0):!1})),e._registerMethod("snapshot","listSnapshots",(()=>Array.from(t.keys()))),e._registerMethod("snapshot","deleteSnapshot",(n=>t.delete(n))),e._registerMethod("snapshot","clearSnapshots",(()=>t.clear()))}}}};var _t=t=>({name:"gstate-guard",hooks:{onBeforeSet:({key:e,value:n,store:r})=>{if(!e)return;let s=t[e];if(s){let i=s(n)}}}});var Rt=t=>({name:"gstate-analytics",hooks:{onSet:({key:e,value:n})=>{e&&(!t.keys||t.keys.includes(e))&&t.provider({key:e,value:n,action:"SET"})},onRemove:({key:e})=>{e&&(!t.keys||t.keys.includes(e))&&t.provider({key:e,value:null,action:"REMOVE"})}}});var Pt=t=>{let e=new BroadcastChannel(t?.channelName||"gstate_sync"),n=!1;return{name:"gstate-sync",hooks:{onInstall:({store:r})=>{e.onmessage=s=>{let{key:i,value:a,action:l}=s.data;i&&(n=!0,l==="REMOVE"?r.remove(i):r.set(i,a),n=!1)}},onSet:({key:r,value:s})=>{!r||n||e.postMessage({key:r,value:s,action:"SET"})},onRemove:({key:r})=>{!r||n||e.postMessage({key:r,action:"REMOVE"})},onDestroy:()=>{e.close()}}}};var Tt=()=>({name:"gstate-debug-noop",hooks:{}});var It=(t={})=>{let e=t.dbName||"rgs-db",n=t.storeName||"states",r=t.version||1,s=null,i=()=>new Promise((p,b)=>{if(s)return p(s);let m=indexedDB.open(e,r);m.onerror=()=>b(m.error),m.onsuccess=()=>{s=m.result,p(s)},m.onupgradeneeded=w=>{let u=w.target.result;u.objectStoreNames.contains(n)||u.createObjectStore(n)}}),a=async(p,b)=>{let m=await i();return new Promise((w,u)=>{let k=m.transaction(n,"readwrite").objectStore(n).put(b,p);k.onsuccess=()=>w(),k.onerror=()=>u(k.error)})},l=async p=>{let b=await i();return new Promise((m,w)=>{let h=b.transaction(n,"readonly").objectStore(n).get(p);h.onsuccess=()=>m(h.result),h.onerror=()=>w(h.error)})},f=async p=>{let b=await i();return new Promise((m,w)=>{let h=b.transaction(n,"readwrite").objectStore(n).delete(p);h.onsuccess=()=>m(),h.onerror=()=>w(h.error)})};return{name:"indexedDB",hooks:{onInstall:({store:p})=>{p._registerMethod("indexedDB","clear",async()=>{(await i()).transaction(n,"readwrite").objectStore(n).clear()})},onInit:async({store:p})=>{let u=(await i()).transaction(n,"readonly").objectStore(n).getAllKeys();u.onsuccess=async()=>{let S=u.result,h=p.namespace+"_";for(let k of S)if(k.startsWith(h)){let Se=await l(k);if(Se){let ae=k.substring(h.length);p._setSilently(ae,Se.d)}}}},onSet:async({key:p,value:b,store:m})=>{if(!p)return;let w=m.namespace+"_",u={d:b,t:Date.now(),v:m._getVersion?.(p)||1};await a(`${w}${p}`,u)},onRemove:async({key:p,store:b})=>{if(!p)return;let m=b.namespace+"_";await f(`${m}${p}`)}}}};var At=t=>{let{adapter:e,autoSyncInterval:n}=t,r=new Map,s={lastSyncTimestamp:null,totalKeysSynced:0,totalBytesSynced:0,syncCount:0,lastDuration:0,errors:0},i=null;return{name:"cloudSync",hooks:{onInstall:({store:a})=>{a._registerMethod("cloudSync","sync",async()=>{let l=performance.now(),f={},p=0;try{let b=a.list(),m=Object.keys(b);for(let u of m){let S=a._getVersion?.(u)||0,h=r.get(u)||0;if(S>h){let k=b[u];f[u]=k,p+=JSON.stringify(k).length,r.set(u,S)}}if(Object.keys(f).length===0)return{status:"no-change",stats:s};if(await e.save(f))return s.lastSyncTimestamp=Date.now(),s.totalKeysSynced+=Object.keys(f).length,s.totalBytesSynced+=p,s.syncCount++,s.lastDuration=performance.now()-l,t.onSync&&t.onSync(s),{status:"success",stats:s};throw new Error(`Adapter ${e.name} failed to save.`)}catch(b){return s.errors++,console.error(`[gState] Cloud Sync Failed (${e.name}):`,b),{status:"error",error:String(b),stats:s}}}),a._registerMethod("cloudSync","getStats",()=>s),n&&n>0&&(i=setInterval(()=>{let f=a.plugins.cloudSync;f&&f.sync()},n))},onDestroy:()=>{i&&clearInterval(i)}}}},Ot=(t,e)=>({name:"MongoDB-Atlas",save:async n=>(await fetch(`${t}/action/updateOne`,{method:"POST",headers:{"Content-Type":"application/json","api-key":e},body:JSON.stringify({dataSource:"Cluster0",database:"rgs_cloud",collection:"user_states",filter:{id:"global_state"},update:{$set:{data:n,updatedAt:Date.now()}},upsert:!0})})).ok}),Dt=(t,e)=>({name:"Firebase-Firestore",save:async n=>{try{return((...i)=>{})("[Mock] Firestore Syncing:",n),!0}catch{return!1}}}),Mt=(t,e)=>({name:"SQL-REST-API",save:async n=>(await fetch(t,{method:"PATCH",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(n)})).ok});var On=t=>({name:"gstate-logger",hooks:{onSet:({key:e,value:n,version:r})=>{let s=new Date().toLocaleTimeString(),i=`[gState] SET: ${e} (v${r}) @ ${s}`;t?.collapsed?console.groupCollapsed(i):console.group(i),console.info("%c Value:","color: #4CAF50; font-weight: bold;",n),console.groupEnd()},onRemove:({key:e})=>{console.warn(`[gState] REMOVED: ${e}`)},onTransaction:({key:e})=>{e==="START"?console.group("\u2500\u2500 TRANSACTION START \u2500\u2500"):console.groupEnd()}}});var H=(t,e)=>{let r=T(typeof e=="string"?{namespace:e}:e);t&&Object.entries(t).forEach(([i,a])=>{r.get(i)===null&&r._setSilently(i,a)});let s=i=>d(i,r);return typeof window<"u"&&(window.gState=r,window.rgs=r),Object.assign(s,r)};var Y=(t,e)=>C()?.addAccessRule(t,e),ee=(t,e,n)=>C()?.hasPermission(t,e,n)??!0,te=(t,e,n)=>{let r=C();if(!r)throw new Error("[gState] recordConsent failed: No store found. call initState() first.");return r.recordConsent(t,e,n)},ne=(t,e)=>C()?.hasConsent(t,e)??!1,re=t=>C()?.getConsents(t)??[],se=(t,e)=>C()?.revokeConsent(t,e),oe=t=>{let e=C();if(!e)throw new Error("[gState] exportUserData failed: No store found.");return e.exportUserData(t)},ie=t=>{let e=C();if(!e)throw new Error("[gState] deleteUserData failed: No store found.");return e.deleteUserData(t)},G=()=>{},X=()=>{};export{E as SyncEngine,Y as addAccessRule,Rt as analyticsPlugin,G as clearAccessRules,X as clearAllConsents,At as cloudSyncPlugin,Q as createAsyncStore,Dt as createFirestoreAdapter,Ot as createMongoAdapter,Mt as createSqlRestAdapter,T as createStore,N as createSyncEngine,Tt as debugPlugin,ie as deleteUserData,U as destroyState,F as destroySync,xt as devToolsPlugin,j as exportKey,oe as exportUserData,V as generateEncryptionKey,re as getConsents,C as getStore,H as gstate,_t as guardPlugin,ne as hasConsent,ee as hasPermission,vt as immerPlugin,$ as importKey,It as indexedDBPlugin,L as initState,B as initSync,D as isCryptoAvailable,P as logAudit,On as loggerPlugin,te as recordConsent,se as revokeConsent,R as sanitizeValue,Ct as schemaPlugin,z as setAuditLogger,Et as snapshotPlugin,Pt as syncPlugin,q as triggerSync,kt as undoRedoPlugin,d as useGState,K as useIsStoreReady,d as useSimpleState,d as useStore,W as useSyncStatus,J as useSyncedState,A as validateKey};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|