@parcae/sdk 0.5.1 → 0.5.2
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/dist/{client-0OLcV8PA.d.ts → auth-gate-SgxFTCIE.d.ts} +29 -1
- package/dist/{chunk-AD4KUAPS.js → chunk-YKK5SBY4.js} +9 -291
- package/dist/chunk-YKK5SBY4.js.map +1 -0
- package/dist/index.d.ts +3 -30
- package/dist/index.js +1 -1
- package/dist/react/index.d.ts +5 -33
- package/dist/react/index.js +41 -104
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-AD4KUAPS.js.map +0 -1
|
@@ -35,4 +35,32 @@ interface ParcaeClient {
|
|
|
35
35
|
}
|
|
36
36
|
declare function createClient(config: ClientConfig): ParcaeClient;
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
/**
|
|
39
|
+
* AuthGate — reactive auth state via Valtio proxy.
|
|
40
|
+
*
|
|
41
|
+
* The transport writes to this directly. React reads via useSnapshot().
|
|
42
|
+
* No useState, no useEffect, no manual syncing.
|
|
43
|
+
*/
|
|
44
|
+
type AuthStatus = "pending" | "authenticated" | "unauthenticated";
|
|
45
|
+
interface AuthState {
|
|
46
|
+
status: AuthStatus;
|
|
47
|
+
userId: string | null;
|
|
48
|
+
version: number;
|
|
49
|
+
}
|
|
50
|
+
declare class AuthGate {
|
|
51
|
+
/** Reactive state — subscribe with valtio useSnapshot() */
|
|
52
|
+
state: AuthState;
|
|
53
|
+
/** Awaitable — resolves when auth is confirmed (either way) */
|
|
54
|
+
ready: Promise<void>;
|
|
55
|
+
private _resolve;
|
|
56
|
+
constructor();
|
|
57
|
+
/** Auth confirmed — user is authenticated */
|
|
58
|
+
resolve(userId: string): void;
|
|
59
|
+
/** Auth confirmed — no user */
|
|
60
|
+
resolveUnauthenticated(): void;
|
|
61
|
+
/** Reset to pending (disconnect, token change) */
|
|
62
|
+
reset(): void;
|
|
63
|
+
private _makePending;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export { AuthGate as A, type ClientConfig as C, type ParcaeClient as P, type AuthState as a, type AuthStatus as b, createClient as c };
|
|
@@ -19,259 +19,20 @@ var log = {
|
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
// ../../node_modules/.pnpm/proxy-compare@3.0.1/node_modules/proxy-compare/dist/index.js
|
|
22
|
-
var TRACK_MEMO_SYMBOL = /* @__PURE__ */ Symbol();
|
|
23
22
|
var GET_ORIGINAL_SYMBOL = /* @__PURE__ */ Symbol();
|
|
24
|
-
var AFFECTED_PROPERTY = "a";
|
|
25
|
-
var IS_TARGET_COPIED_PROPERTY = "f";
|
|
26
|
-
var PROXY_PROPERTY = "p";
|
|
27
|
-
var PROXY_CACHE_PROPERTY = "c";
|
|
28
|
-
var TARGET_CACHE_PROPERTY = "t";
|
|
29
|
-
var HAS_KEY_PROPERTY = "h";
|
|
30
|
-
var ALL_OWN_KEYS_PROPERTY = "w";
|
|
31
|
-
var HAS_OWN_KEY_PROPERTY = "o";
|
|
32
|
-
var KEYS_PROPERTY = "k";
|
|
33
|
-
var newProxy = (target, handler) => new Proxy(target, handler);
|
|
34
23
|
var getProto = Object.getPrototypeOf;
|
|
35
24
|
var objectsToTrack = /* @__PURE__ */ new WeakMap();
|
|
36
25
|
var isObjectToTrack = (obj) => obj && (objectsToTrack.has(obj) ? objectsToTrack.get(obj) : getProto(obj) === Object.prototype || getProto(obj) === Array.prototype);
|
|
37
|
-
var isObject = (x) => typeof x === "object" && x !== null;
|
|
38
|
-
var needsToCopyTargetObject = (obj) => Object.values(Object.getOwnPropertyDescriptors(obj)).some((descriptor) => !descriptor.configurable && !descriptor.writable);
|
|
39
|
-
var copyTargetObject = (obj) => {
|
|
40
|
-
if (Array.isArray(obj)) {
|
|
41
|
-
return Array.from(obj);
|
|
42
|
-
}
|
|
43
|
-
const descriptors = Object.getOwnPropertyDescriptors(obj);
|
|
44
|
-
Object.values(descriptors).forEach((desc) => {
|
|
45
|
-
desc.configurable = true;
|
|
46
|
-
});
|
|
47
|
-
return Object.create(getProto(obj), descriptors);
|
|
48
|
-
};
|
|
49
|
-
var createProxyHandler = (origObj, isTargetCopied) => {
|
|
50
|
-
const state = {
|
|
51
|
-
[IS_TARGET_COPIED_PROPERTY]: isTargetCopied
|
|
52
|
-
};
|
|
53
|
-
let trackObject = false;
|
|
54
|
-
const recordUsage = (type, key) => {
|
|
55
|
-
if (!trackObject) {
|
|
56
|
-
let used = state[AFFECTED_PROPERTY].get(origObj);
|
|
57
|
-
if (!used) {
|
|
58
|
-
used = {};
|
|
59
|
-
state[AFFECTED_PROPERTY].set(origObj, used);
|
|
60
|
-
}
|
|
61
|
-
if (type === ALL_OWN_KEYS_PROPERTY) {
|
|
62
|
-
used[ALL_OWN_KEYS_PROPERTY] = true;
|
|
63
|
-
} else {
|
|
64
|
-
let set = used[type];
|
|
65
|
-
if (!set) {
|
|
66
|
-
set = /* @__PURE__ */ new Set();
|
|
67
|
-
used[type] = set;
|
|
68
|
-
}
|
|
69
|
-
set.add(key);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
const recordObjectAsUsed = () => {
|
|
74
|
-
trackObject = true;
|
|
75
|
-
state[AFFECTED_PROPERTY].delete(origObj);
|
|
76
|
-
};
|
|
77
|
-
const handler = {
|
|
78
|
-
get(target, key) {
|
|
79
|
-
if (key === GET_ORIGINAL_SYMBOL) {
|
|
80
|
-
return origObj;
|
|
81
|
-
}
|
|
82
|
-
recordUsage(KEYS_PROPERTY, key);
|
|
83
|
-
return createProxy(Reflect.get(target, key), state[AFFECTED_PROPERTY], state[PROXY_CACHE_PROPERTY], state[TARGET_CACHE_PROPERTY]);
|
|
84
|
-
},
|
|
85
|
-
has(target, key) {
|
|
86
|
-
if (key === TRACK_MEMO_SYMBOL) {
|
|
87
|
-
recordObjectAsUsed();
|
|
88
|
-
return true;
|
|
89
|
-
}
|
|
90
|
-
recordUsage(HAS_KEY_PROPERTY, key);
|
|
91
|
-
return Reflect.has(target, key);
|
|
92
|
-
},
|
|
93
|
-
getOwnPropertyDescriptor(target, key) {
|
|
94
|
-
recordUsage(HAS_OWN_KEY_PROPERTY, key);
|
|
95
|
-
return Reflect.getOwnPropertyDescriptor(target, key);
|
|
96
|
-
},
|
|
97
|
-
ownKeys(target) {
|
|
98
|
-
recordUsage(ALL_OWN_KEYS_PROPERTY);
|
|
99
|
-
return Reflect.ownKeys(target);
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
if (isTargetCopied) {
|
|
103
|
-
handler.set = handler.deleteProperty = () => false;
|
|
104
|
-
}
|
|
105
|
-
return [handler, state];
|
|
106
|
-
};
|
|
107
|
-
var getOriginalObject = (obj) => (
|
|
108
|
-
// unwrap proxy
|
|
109
|
-
obj[GET_ORIGINAL_SYMBOL] || // otherwise
|
|
110
|
-
obj
|
|
111
|
-
);
|
|
112
|
-
var createProxy = (obj, affected, proxyCache2, targetCache) => {
|
|
113
|
-
if (!isObjectToTrack(obj))
|
|
114
|
-
return obj;
|
|
115
|
-
let targetAndCopied = targetCache && targetCache.get(obj);
|
|
116
|
-
if (!targetAndCopied) {
|
|
117
|
-
const target2 = getOriginalObject(obj);
|
|
118
|
-
if (needsToCopyTargetObject(target2)) {
|
|
119
|
-
targetAndCopied = [target2, copyTargetObject(target2)];
|
|
120
|
-
} else {
|
|
121
|
-
targetAndCopied = [target2];
|
|
122
|
-
}
|
|
123
|
-
targetCache === null || targetCache === void 0 ? void 0 : targetCache.set(obj, targetAndCopied);
|
|
124
|
-
}
|
|
125
|
-
const [target, copiedTarget] = targetAndCopied;
|
|
126
|
-
let handlerAndState = proxyCache2 && proxyCache2.get(target);
|
|
127
|
-
if (!handlerAndState || handlerAndState[1][IS_TARGET_COPIED_PROPERTY] !== !!copiedTarget) {
|
|
128
|
-
handlerAndState = createProxyHandler(target, !!copiedTarget);
|
|
129
|
-
handlerAndState[1][PROXY_PROPERTY] = newProxy(copiedTarget || target, handlerAndState[0]);
|
|
130
|
-
if (proxyCache2) {
|
|
131
|
-
proxyCache2.set(target, handlerAndState);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
handlerAndState[1][AFFECTED_PROPERTY] = affected;
|
|
135
|
-
handlerAndState[1][PROXY_CACHE_PROPERTY] = proxyCache2;
|
|
136
|
-
handlerAndState[1][TARGET_CACHE_PROPERTY] = targetCache;
|
|
137
|
-
return handlerAndState[1][PROXY_PROPERTY];
|
|
138
|
-
};
|
|
139
|
-
var isAllOwnKeysChanged = (prevObj, nextObj) => {
|
|
140
|
-
const prevKeys = Reflect.ownKeys(prevObj);
|
|
141
|
-
const nextKeys = Reflect.ownKeys(nextObj);
|
|
142
|
-
return prevKeys.length !== nextKeys.length || prevKeys.some((k, i) => k !== nextKeys[i]);
|
|
143
|
-
};
|
|
144
|
-
var isChanged = (prevObj, nextObj, affected, cache, isEqual = Object.is) => {
|
|
145
|
-
if (isEqual(prevObj, nextObj)) {
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
if (!isObject(prevObj) || !isObject(nextObj))
|
|
149
|
-
return true;
|
|
150
|
-
const used = affected.get(getOriginalObject(prevObj));
|
|
151
|
-
if (!used)
|
|
152
|
-
return true;
|
|
153
|
-
if (cache) {
|
|
154
|
-
const hit = cache.get(prevObj);
|
|
155
|
-
if (hit === nextObj) {
|
|
156
|
-
return false;
|
|
157
|
-
}
|
|
158
|
-
cache.set(prevObj, nextObj);
|
|
159
|
-
}
|
|
160
|
-
let changed = null;
|
|
161
|
-
for (const key of used[HAS_KEY_PROPERTY] || []) {
|
|
162
|
-
changed = Reflect.has(prevObj, key) !== Reflect.has(nextObj, key);
|
|
163
|
-
if (changed)
|
|
164
|
-
return changed;
|
|
165
|
-
}
|
|
166
|
-
if (used[ALL_OWN_KEYS_PROPERTY] === true) {
|
|
167
|
-
changed = isAllOwnKeysChanged(prevObj, nextObj);
|
|
168
|
-
if (changed)
|
|
169
|
-
return changed;
|
|
170
|
-
} else {
|
|
171
|
-
for (const key of used[HAS_OWN_KEY_PROPERTY] || []) {
|
|
172
|
-
const hasPrev = !!Reflect.getOwnPropertyDescriptor(prevObj, key);
|
|
173
|
-
const hasNext = !!Reflect.getOwnPropertyDescriptor(nextObj, key);
|
|
174
|
-
changed = hasPrev !== hasNext;
|
|
175
|
-
if (changed)
|
|
176
|
-
return changed;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
for (const key of used[KEYS_PROPERTY] || []) {
|
|
180
|
-
changed = isChanged(prevObj[key], nextObj[key], affected, cache, isEqual);
|
|
181
|
-
if (changed)
|
|
182
|
-
return changed;
|
|
183
|
-
}
|
|
184
|
-
if (changed === null)
|
|
185
|
-
throw new Error("invalid used");
|
|
186
|
-
return changed;
|
|
187
|
-
};
|
|
188
26
|
var getUntracked = (obj) => {
|
|
189
27
|
if (isObjectToTrack(obj)) {
|
|
190
28
|
return obj[GET_ORIGINAL_SYMBOL] || null;
|
|
191
29
|
}
|
|
192
30
|
return null;
|
|
193
31
|
};
|
|
194
|
-
var markToTrack = (obj, mark = true) => {
|
|
195
|
-
objectsToTrack.set(obj, mark);
|
|
196
|
-
};
|
|
197
|
-
var affectedToPathList = (obj, affected, onlyWithValues) => {
|
|
198
|
-
const list = [];
|
|
199
|
-
const seen = /* @__PURE__ */ new WeakSet();
|
|
200
|
-
const walk = (x, path) => {
|
|
201
|
-
var _a, _b, _c;
|
|
202
|
-
if (seen.has(x)) {
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
if (isObject(x)) {
|
|
206
|
-
seen.add(x);
|
|
207
|
-
}
|
|
208
|
-
const used = isObject(x) && affected.get(getOriginalObject(x));
|
|
209
|
-
if (used) {
|
|
210
|
-
(_a = used[HAS_KEY_PROPERTY]) === null || _a === void 0 ? void 0 : _a.forEach((key) => {
|
|
211
|
-
const segment = `:has(${String(key)})`;
|
|
212
|
-
list.push(path ? [...path, segment] : [segment]);
|
|
213
|
-
});
|
|
214
|
-
if (used[ALL_OWN_KEYS_PROPERTY] === true) {
|
|
215
|
-
const segment = ":ownKeys";
|
|
216
|
-
list.push(path ? [...path, segment] : [segment]);
|
|
217
|
-
} else {
|
|
218
|
-
(_b = used[HAS_OWN_KEY_PROPERTY]) === null || _b === void 0 ? void 0 : _b.forEach((key) => {
|
|
219
|
-
const segment = `:hasOwn(${String(key)})`;
|
|
220
|
-
list.push(path ? [...path, segment] : [segment]);
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
(_c = used[KEYS_PROPERTY]) === null || _c === void 0 ? void 0 : _c.forEach((key) => {
|
|
224
|
-
if (!onlyWithValues || "value" in (Object.getOwnPropertyDescriptor(x, key) || {})) {
|
|
225
|
-
walk(x[key], path ? [...path, key] : [key]);
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
} else if (path) {
|
|
229
|
-
list.push(path);
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
walk(obj);
|
|
233
|
-
return list;
|
|
234
|
-
};
|
|
235
32
|
|
|
236
33
|
// ../../node_modules/.pnpm/valtio@2.3.1_@types+react@19.2.14_react@19.2.4/node_modules/valtio/esm/vanilla.mjs
|
|
237
|
-
var
|
|
238
|
-
var canProxyDefault = (x) =>
|
|
239
|
-
var createSnapshotDefault = (target, version) => {
|
|
240
|
-
const cache = snapCache.get(target);
|
|
241
|
-
if ((cache == null ? void 0 : cache[0]) === version) {
|
|
242
|
-
return cache[1];
|
|
243
|
-
}
|
|
244
|
-
const snap = Array.isArray(target) ? [] : Object.create(Object.getPrototypeOf(target));
|
|
245
|
-
markToTrack(snap, true);
|
|
246
|
-
snapCache.set(target, [version, snap]);
|
|
247
|
-
Reflect.ownKeys(target).forEach((key) => {
|
|
248
|
-
if (Object.getOwnPropertyDescriptor(snap, key)) {
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
const value = Reflect.get(target, key);
|
|
252
|
-
const { enumerable } = Reflect.getOwnPropertyDescriptor(
|
|
253
|
-
target,
|
|
254
|
-
key
|
|
255
|
-
);
|
|
256
|
-
const desc = {
|
|
257
|
-
value,
|
|
258
|
-
enumerable,
|
|
259
|
-
// This is intentional to avoid copying with proxy-compare.
|
|
260
|
-
// It's still non-writable, so it avoids assigning a value.
|
|
261
|
-
configurable: true
|
|
262
|
-
};
|
|
263
|
-
if (refSet.has(value)) {
|
|
264
|
-
markToTrack(value, false);
|
|
265
|
-
} else if (proxyStateMap.has(value)) {
|
|
266
|
-
const [target2, ensureVersion] = proxyStateMap.get(
|
|
267
|
-
value
|
|
268
|
-
);
|
|
269
|
-
desc.value = createSnapshotDefault(target2, ensureVersion());
|
|
270
|
-
}
|
|
271
|
-
Object.defineProperty(snap, key, desc);
|
|
272
|
-
});
|
|
273
|
-
return Object.preventExtensions(snap);
|
|
274
|
-
};
|
|
34
|
+
var isObject = (x) => typeof x === "object" && x !== null;
|
|
35
|
+
var canProxyDefault = (x) => isObject(x) && !refSet.has(x) && (Array.isArray(x) || !(Symbol.iterator in x)) && !(x instanceof WeakMap) && !(x instanceof WeakSet) && !(x instanceof Error) && !(x instanceof Number) && !(x instanceof Date) && !(x instanceof String) && !(x instanceof RegExp) && !(x instanceof ArrayBuffer) && !(x instanceof Promise);
|
|
275
36
|
var createHandlerDefault = (isInitializing, addPropListener, removePropListener, notifyUpdate) => ({
|
|
276
37
|
deleteProperty(target, prop) {
|
|
277
38
|
Reflect.get(target, prop);
|
|
@@ -289,7 +50,7 @@ var createHandlerDefault = (isInitializing, addPropListener, removePropListener,
|
|
|
289
50
|
return true;
|
|
290
51
|
}
|
|
291
52
|
removePropListener(prop);
|
|
292
|
-
if (
|
|
53
|
+
if (isObject(value)) {
|
|
293
54
|
value = getUntracked(value) || value;
|
|
294
55
|
}
|
|
295
56
|
const nextValue = !proxyStateMap.has(value) && canProxy(value) ? proxy(value) : value;
|
|
@@ -301,16 +62,14 @@ var createHandlerDefault = (isInitializing, addPropListener, removePropListener,
|
|
|
301
62
|
});
|
|
302
63
|
var proxyStateMap = /* @__PURE__ */ new WeakMap();
|
|
303
64
|
var refSet = /* @__PURE__ */ new WeakSet();
|
|
304
|
-
var snapCache = /* @__PURE__ */ new WeakMap();
|
|
305
65
|
var versionHolder = [1];
|
|
306
66
|
var proxyCache = /* @__PURE__ */ new WeakMap();
|
|
307
67
|
var objectIs = Object.is;
|
|
308
|
-
var
|
|
68
|
+
var newProxy = (target, handler) => new Proxy(target, handler);
|
|
309
69
|
var canProxy = canProxyDefault;
|
|
310
|
-
var createSnapshot = createSnapshotDefault;
|
|
311
70
|
var createHandler = createHandlerDefault;
|
|
312
71
|
function proxy(baseObject = {}) {
|
|
313
|
-
if (!
|
|
72
|
+
if (!isObject(baseObject)) {
|
|
314
73
|
throw new Error("object required");
|
|
315
74
|
}
|
|
316
75
|
const found = proxyCache.get(baseObject);
|
|
@@ -400,7 +159,7 @@ function proxy(baseObject = {}) {
|
|
|
400
159
|
removePropListener,
|
|
401
160
|
notifyUpdate
|
|
402
161
|
);
|
|
403
|
-
const proxyObject =
|
|
162
|
+
const proxyObject = newProxy(baseObject, handler);
|
|
404
163
|
proxyCache.set(baseObject, proxyObject);
|
|
405
164
|
const proxyState = [baseObject, ensureVersion, addListener];
|
|
406
165
|
proxyStateMap.set(proxyObject, proxyState);
|
|
@@ -416,47 +175,6 @@ function proxy(baseObject = {}) {
|
|
|
416
175
|
initializing = false;
|
|
417
176
|
return proxyObject;
|
|
418
177
|
}
|
|
419
|
-
function subscribe(proxyObject, callback, notifyInSync) {
|
|
420
|
-
const proxyState = proxyStateMap.get(proxyObject);
|
|
421
|
-
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && !proxyState) {
|
|
422
|
-
console.warn("Please use proxy object");
|
|
423
|
-
}
|
|
424
|
-
let promise;
|
|
425
|
-
const ops = [];
|
|
426
|
-
const addListener = proxyState[2];
|
|
427
|
-
let isListenerActive = false;
|
|
428
|
-
const listener = (op) => {
|
|
429
|
-
if (op) {
|
|
430
|
-
ops.push(op);
|
|
431
|
-
}
|
|
432
|
-
if (notifyInSync) {
|
|
433
|
-
callback(ops.splice(0));
|
|
434
|
-
return;
|
|
435
|
-
}
|
|
436
|
-
if (!promise) {
|
|
437
|
-
promise = Promise.resolve().then(() => {
|
|
438
|
-
promise = void 0;
|
|
439
|
-
if (isListenerActive) {
|
|
440
|
-
callback(ops.splice(0));
|
|
441
|
-
}
|
|
442
|
-
});
|
|
443
|
-
}
|
|
444
|
-
};
|
|
445
|
-
const removeListener = addListener(listener);
|
|
446
|
-
isListenerActive = true;
|
|
447
|
-
return () => {
|
|
448
|
-
isListenerActive = false;
|
|
449
|
-
removeListener();
|
|
450
|
-
};
|
|
451
|
-
}
|
|
452
|
-
function snapshot(proxyObject) {
|
|
453
|
-
const proxyState = proxyStateMap.get(proxyObject);
|
|
454
|
-
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && !proxyState) {
|
|
455
|
-
console.warn("Please use proxy object");
|
|
456
|
-
}
|
|
457
|
-
const [target, ensureVersion] = proxyState;
|
|
458
|
-
return createSnapshot(target, ensureVersion());
|
|
459
|
-
}
|
|
460
178
|
|
|
461
179
|
// src/auth-gate.ts
|
|
462
180
|
var AuthGate = class {
|
|
@@ -887,6 +605,6 @@ function createClient(config) {
|
|
|
887
605
|
return client;
|
|
888
606
|
}
|
|
889
607
|
|
|
890
|
-
export { AuthGate, SSETransport, SocketTransport,
|
|
891
|
-
//# sourceMappingURL=chunk-
|
|
892
|
-
//# sourceMappingURL=chunk-
|
|
608
|
+
export { AuthGate, SSETransport, SocketTransport, createClient, log };
|
|
609
|
+
//# sourceMappingURL=chunk-YKK5SBY4.js.map
|
|
610
|
+
//# sourceMappingURL=chunk-YKK5SBY4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/log.ts","../../../node_modules/.pnpm/proxy-compare@3.0.1/node_modules/proxy-compare/dist/index.js","../../../node_modules/.pnpm/valtio@2.3.1_@types+react@19.2.14_react@19.2.4/node_modules/valtio/esm/vanilla.mjs","../src/auth-gate.ts","../src/transports/socket.ts","../src/transports/sse.ts","../src/client.ts"],"names":["EventEmitter","body"],"mappings":"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","file":"chunk-YKK5SBY4.js","sourcesContent":["/**\n * SDK logger — same format as backend.\n * Only logs in development. Silent in production.\n */\n\nconst isDev =\n typeof process !== \"undefined\" ? process.env.NODE_ENV !== \"production\" : true;\n\nfunction time(): string {\n const d = new Date();\n return `${String(d.getHours()).padStart(2, \"0\")}:${String(d.getMinutes()).padStart(2, \"0\")}:${String(d.getSeconds()).padStart(2, \"0\")}`;\n}\n\nexport const log = {\n info: (...args: any[]) =>\n isDev && console.log(`%c${time()} SDK`, \"color: #6b7\", ...args),\n warn: (...args: any[]) =>\n isDev && console.warn(`%c${time()} SDK`, \"color: #fb3\", ...args),\n error: (...args: any[]) =>\n console.error(`%c${time()} SDK`, \"color: #f44\", ...args),\n debug: (...args: any[]) =>\n isDev && console.debug(`%c${time()} SDK`, \"color: #888\", ...args),\n};\n","/* eslint @typescript-eslint/no-explicit-any: off */\n// symbols\nconst TRACK_MEMO_SYMBOL = Symbol();\nconst GET_ORIGINAL_SYMBOL = Symbol();\n// properties\nconst AFFECTED_PROPERTY = 'a';\nconst IS_TARGET_COPIED_PROPERTY = 'f';\nconst PROXY_PROPERTY = 'p';\nconst PROXY_CACHE_PROPERTY = 'c';\nconst TARGET_CACHE_PROPERTY = 't';\nconst HAS_KEY_PROPERTY = 'h';\nconst ALL_OWN_KEYS_PROPERTY = 'w';\nconst HAS_OWN_KEY_PROPERTY = 'o';\nconst KEYS_PROPERTY = 'k';\n// function to create a new bare proxy\nlet newProxy = (target, handler) => new Proxy(target, handler);\n// get object prototype\nconst getProto = Object.getPrototypeOf;\nconst objectsToTrack = new WeakMap();\n// check if obj is a plain object or an array\nconst isObjectToTrack = (obj) => obj &&\n (objectsToTrack.has(obj)\n ? objectsToTrack.get(obj)\n : getProto(obj) === Object.prototype || getProto(obj) === Array.prototype);\n// check if it is object\nconst isObject = (x) => typeof x === 'object' && x !== null;\n// Properties that are both non-configurable and non-writable will break\n// the proxy get trap when we try to return a recursive/child compare proxy\n// from them. We can avoid this by making a copy of the target object with\n// all descriptors marked as configurable, see `copyTargetObject`.\n// See: https://github.com/dai-shi/proxy-compare/pull/8\nconst needsToCopyTargetObject = (obj) => Object.values(Object.getOwnPropertyDescriptors(obj)).some((descriptor) => !descriptor.configurable && !descriptor.writable);\n// Make a copy with all descriptors marked as configurable.\nconst copyTargetObject = (obj) => {\n if (Array.isArray(obj)) {\n // Arrays need a special way to copy\n return Array.from(obj);\n }\n // For non-array objects, we create a new object keeping the prototype\n // with changing all configurable options (otherwise, proxies will complain)\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n Object.values(descriptors).forEach((desc) => {\n desc.configurable = true;\n });\n return Object.create(getProto(obj), descriptors);\n};\nconst createProxyHandler = (origObj, isTargetCopied) => {\n const state = {\n [IS_TARGET_COPIED_PROPERTY]: isTargetCopied,\n };\n let trackObject = false; // for trackMemo\n const recordUsage = (type, key) => {\n if (!trackObject) {\n let used = state[AFFECTED_PROPERTY].get(origObj);\n if (!used) {\n used = {};\n state[AFFECTED_PROPERTY].set(origObj, used);\n }\n if (type === ALL_OWN_KEYS_PROPERTY) {\n used[ALL_OWN_KEYS_PROPERTY] = true;\n }\n else {\n let set = used[type];\n if (!set) {\n set = new Set();\n used[type] = set;\n }\n set.add(key);\n }\n }\n };\n const recordObjectAsUsed = () => {\n trackObject = true;\n state[AFFECTED_PROPERTY].delete(origObj);\n };\n const handler = {\n get(target, key) {\n if (key === GET_ORIGINAL_SYMBOL) {\n return origObj;\n }\n recordUsage(KEYS_PROPERTY, key);\n return createProxy(Reflect.get(target, key), state[AFFECTED_PROPERTY], state[PROXY_CACHE_PROPERTY], state[TARGET_CACHE_PROPERTY]);\n },\n has(target, key) {\n if (key === TRACK_MEMO_SYMBOL) {\n recordObjectAsUsed();\n return true;\n }\n recordUsage(HAS_KEY_PROPERTY, key);\n return Reflect.has(target, key);\n },\n getOwnPropertyDescriptor(target, key) {\n recordUsage(HAS_OWN_KEY_PROPERTY, key);\n return Reflect.getOwnPropertyDescriptor(target, key);\n },\n ownKeys(target) {\n recordUsage(ALL_OWN_KEYS_PROPERTY);\n return Reflect.ownKeys(target);\n },\n };\n if (isTargetCopied) {\n handler.set = handler.deleteProperty = () => false;\n }\n return [handler, state];\n};\nconst getOriginalObject = (obj) => \n// unwrap proxy\nobj[GET_ORIGINAL_SYMBOL] ||\n // otherwise\n obj;\n/**\n * Create a proxy.\n *\n * This function will create a proxy at top level and proxy nested objects as you access them,\n * in order to keep track of which properties were accessed via get/has proxy handlers:\n *\n * NOTE: Printing of WeakMap is hard to inspect and not very readable\n * for this purpose you can use the `affectedToPathList` helper.\n *\n * @param {object} obj - Object that will be wrapped on the proxy.\n * @param {WeakMap<object, unknown>} affected -\n * WeakMap that will hold the tracking of which properties in the proxied object were accessed.\n * @param {WeakMap<object, unknown>} [proxyCache] -\n * WeakMap that will help keep referential identity for proxies.\n * @returns {Proxy<object>} - Object wrapped in a proxy.\n *\n * @example\n * import { createProxy } from 'proxy-compare';\n *\n * const original = { a: \"1\", c: \"2\", d: { e: \"3\" } };\n * const affected = new WeakMap();\n * const proxy = createProxy(original, affected);\n *\n * proxy.a // Will mark as used and track its value.\n * // This will update the affected WeakMap with original as key\n * // and a Set with \"a\"\n *\n * proxy.d // Will mark \"d\" as accessed to track and proxy itself ({ e: \"3\" }).\n * // This will update the affected WeakMap with original as key\n * // and a Set with \"d\"\n */\nexport const createProxy = (obj, affected, proxyCache, targetCache) => {\n if (!isObjectToTrack(obj))\n return obj;\n let targetAndCopied = targetCache && targetCache.get(obj);\n if (!targetAndCopied) {\n const target = getOriginalObject(obj);\n if (needsToCopyTargetObject(target)) {\n targetAndCopied = [target, copyTargetObject(target)];\n }\n else {\n targetAndCopied = [target];\n }\n targetCache === null || targetCache === void 0 ? void 0 : targetCache.set(obj, targetAndCopied);\n }\n const [target, copiedTarget] = targetAndCopied;\n let handlerAndState = proxyCache && proxyCache.get(target);\n if (!handlerAndState ||\n handlerAndState[1][IS_TARGET_COPIED_PROPERTY] !== !!copiedTarget) {\n handlerAndState = createProxyHandler(target, !!copiedTarget);\n handlerAndState[1][PROXY_PROPERTY] = newProxy(copiedTarget || target, handlerAndState[0]);\n if (proxyCache) {\n proxyCache.set(target, handlerAndState);\n }\n }\n handlerAndState[1][AFFECTED_PROPERTY] = affected;\n handlerAndState[1][PROXY_CACHE_PROPERTY] = proxyCache;\n handlerAndState[1][TARGET_CACHE_PROPERTY] = targetCache;\n return handlerAndState[1][PROXY_PROPERTY];\n};\nconst isAllOwnKeysChanged = (prevObj, nextObj) => {\n const prevKeys = Reflect.ownKeys(prevObj);\n const nextKeys = Reflect.ownKeys(nextObj);\n return (prevKeys.length !== nextKeys.length ||\n prevKeys.some((k, i) => k !== nextKeys[i]));\n};\n/**\n * Compare changes on objects.\n *\n * This will compare the affected properties on tracked objects inside the proxy\n * to check if there were any changes made to it,\n * by default if no property was accessed on the proxy it will attempt to do a\n * reference equality check for the objects provided (Object.is(a, b)). If you access a property\n * on the proxy, then isChanged will only compare the affected properties.\n *\n * @param {object} prevObj - The previous object to compare.\n * @param {object} nextObj - Object to compare with the previous one.\n * @param {WeakMap<object, unknown>} affected -\n * WeakMap that holds the tracking of which properties in the proxied object were accessed.\n * @param {WeakMap<object, unknown>} [cache] -\n * WeakMap that holds a cache of the comparisons for better performance with repetitive comparisons,\n * and to avoid infinite loop with circular structures.\n * @returns {boolean} - Boolean indicating if the affected property on the object has changed.\n *\n * @example\n * import { createProxy, isChanged } from 'proxy-compare';\n *\n * const obj = { a: \"1\", c: \"2\", d: { e: \"3\" } };\n * const affected = new WeakMap();\n *\n * const proxy = createProxy(obj, affected);\n *\n * proxy.a\n *\n * isChanged(obj, { a: \"1\" }, affected) // false\n *\n * proxy.a = \"2\"\n *\n * isChanged(obj, { a: \"1\" }, affected) // true\n */\nexport const isChanged = (prevObj, nextObj, affected, cache, // for object with cycles\nisEqual = Object.is) => {\n if (isEqual(prevObj, nextObj)) {\n return false;\n }\n if (!isObject(prevObj) || !isObject(nextObj))\n return true;\n const used = affected.get(getOriginalObject(prevObj));\n if (!used)\n return true;\n if (cache) {\n const hit = cache.get(prevObj);\n if (hit === nextObj) {\n return false;\n }\n // for object with cycles\n cache.set(prevObj, nextObj);\n }\n let changed = null;\n for (const key of used[HAS_KEY_PROPERTY] || []) {\n changed = Reflect.has(prevObj, key) !== Reflect.has(nextObj, key);\n if (changed)\n return changed;\n }\n if (used[ALL_OWN_KEYS_PROPERTY] === true) {\n changed = isAllOwnKeysChanged(prevObj, nextObj);\n if (changed)\n return changed;\n }\n else {\n for (const key of used[HAS_OWN_KEY_PROPERTY] || []) {\n const hasPrev = !!Reflect.getOwnPropertyDescriptor(prevObj, key);\n const hasNext = !!Reflect.getOwnPropertyDescriptor(nextObj, key);\n changed = hasPrev !== hasNext;\n if (changed)\n return changed;\n }\n }\n for (const key of used[KEYS_PROPERTY] || []) {\n changed = isChanged(prevObj[key], nextObj[key], affected, cache, isEqual);\n if (changed)\n return changed;\n }\n if (changed === null)\n throw new Error('invalid used');\n return changed;\n};\n// explicitly track object with memo\nexport const trackMemo = (obj) => {\n if (isObjectToTrack(obj)) {\n return TRACK_MEMO_SYMBOL in obj;\n }\n return false;\n};\n/**\n * Unwrap proxy to get the original object.\n *\n * Used to retrieve the original object used to create the proxy instance with `createProxy`.\n *\n * @param {Proxy<object>} obj - The proxy wrapper of the originial object.\n * @returns {object | null} - Return either the unwrapped object if exists.\n *\n * @example\n * import { createProxy, getUntracked } from 'proxy-compare';\n *\n * const original = { a: \"1\", c: \"2\", d: { e: \"3\" } };\n * const affected = new WeakMap();\n *\n * const proxy = createProxy(original, affected);\n * const originalFromProxy = getUntracked(proxy)\n *\n * Object.is(original, originalFromProxy) // true\n * isChanged(original, originalFromProxy, affected) // false\n */\nexport const getUntracked = (obj) => {\n if (isObjectToTrack(obj)) {\n return obj[GET_ORIGINAL_SYMBOL] || null;\n }\n return null;\n};\n/**\n * Mark object to be tracked.\n *\n * This function marks an object that will be passed into `createProxy`\n * as marked to track or not. By default only Array and Object are marked to track,\n * so this is useful for example to mark a class instance to track or to mark a object\n * to be untracked when creating your proxy.\n *\n * @param obj - Object to mark as tracked or not.\n * @param mark - Boolean indicating whether you want to track this object or not.\n * @returns - No return.\n *\n * @example\n * import { createProxy, markToTrack, isChanged } from 'proxy-compare';\n *\n * const nested = { e: \"3\" }\n *\n * markToTrack(nested, false)\n *\n * const original = { a: \"1\", c: \"2\", d: nested };\n * const affected = new WeakMap();\n *\n * const proxy = createProxy(original, affected);\n *\n * proxy.d.e\n *\n * isChanged(original, { d: { e: \"3\" } }, affected) // true\n */\nexport const markToTrack = (obj, mark = true) => {\n objectsToTrack.set(obj, mark);\n};\n/**\n * Convert `affected` to path list\n *\n * `affected` is a weak map which is not printable.\n * This function is can convert it to printable path list.\n * It's for debugging purpose.\n *\n * @param obj - An object that is used with `createProxy`.\n * @param affected - A weak map that is used with `createProxy`.\n * @param onlyWithValues - An optional boolean to exclude object getters.\n * @returns - An array of paths.\n */\nexport const affectedToPathList = (obj, affected, onlyWithValues) => {\n const list = [];\n const seen = new WeakSet();\n const walk = (x, path) => {\n var _a, _b, _c;\n if (seen.has(x)) {\n // for object with cycles\n return;\n }\n if (isObject(x)) {\n seen.add(x);\n }\n const used = isObject(x) && affected.get(getOriginalObject(x));\n if (used) {\n (_a = used[HAS_KEY_PROPERTY]) === null || _a === void 0 ? void 0 : _a.forEach((key) => {\n const segment = `:has(${String(key)})`;\n list.push(path ? [...path, segment] : [segment]);\n });\n if (used[ALL_OWN_KEYS_PROPERTY] === true) {\n const segment = ':ownKeys';\n list.push(path ? [...path, segment] : [segment]);\n }\n else {\n (_b = used[HAS_OWN_KEY_PROPERTY]) === null || _b === void 0 ? void 0 : _b.forEach((key) => {\n const segment = `:hasOwn(${String(key)})`;\n list.push(path ? [...path, segment] : [segment]);\n });\n }\n (_c = used[KEYS_PROPERTY]) === null || _c === void 0 ? void 0 : _c.forEach((key) => {\n if (!onlyWithValues ||\n 'value' in (Object.getOwnPropertyDescriptor(x, key) || {})) {\n walk(x[key], path ? [...path, key] : [key]);\n }\n });\n }\n else if (path) {\n list.push(path);\n }\n };\n walk(obj);\n return list;\n};\n/**\n * replace newProxy function.\n *\n * This can be used if you want to use proxy-polyfill.\n * Note that proxy-polyfill can't polyfill everything.\n * Use it at your own risk.\n */\nexport const replaceNewProxy = (fn) => {\n newProxy = fn;\n};\n","import { getUntracked, markToTrack } from 'proxy-compare';\n\nconst isObject = (x) => typeof x === \"object\" && x !== null;\nconst canProxyDefault = (x) => isObject(x) && !refSet.has(x) && (Array.isArray(x) || !(Symbol.iterator in x)) && !(x instanceof WeakMap) && !(x instanceof WeakSet) && !(x instanceof Error) && !(x instanceof Number) && !(x instanceof Date) && !(x instanceof String) && !(x instanceof RegExp) && !(x instanceof ArrayBuffer) && !(x instanceof Promise);\nconst createSnapshotDefault = (target, version) => {\n const cache = snapCache.get(target);\n if ((cache == null ? void 0 : cache[0]) === version) {\n return cache[1];\n }\n const snap = Array.isArray(target) ? [] : Object.create(Object.getPrototypeOf(target));\n markToTrack(snap, true);\n snapCache.set(target, [version, snap]);\n Reflect.ownKeys(target).forEach((key) => {\n if (Object.getOwnPropertyDescriptor(snap, key)) {\n return;\n }\n const value = Reflect.get(target, key);\n const { enumerable } = Reflect.getOwnPropertyDescriptor(\n target,\n key\n );\n const desc = {\n value,\n enumerable,\n // This is intentional to avoid copying with proxy-compare.\n // It's still non-writable, so it avoids assigning a value.\n configurable: true\n };\n if (refSet.has(value)) {\n markToTrack(value, false);\n } else if (proxyStateMap.has(value)) {\n const [target2, ensureVersion] = proxyStateMap.get(\n value\n );\n desc.value = createSnapshotDefault(target2, ensureVersion());\n }\n Object.defineProperty(snap, key, desc);\n });\n return Object.preventExtensions(snap);\n};\nconst createHandlerDefault = (isInitializing, addPropListener, removePropListener, notifyUpdate) => ({\n deleteProperty(target, prop) {\n const prevValue = Reflect.get(target, prop);\n removePropListener(prop);\n const deleted = Reflect.deleteProperty(target, prop);\n if (deleted) {\n notifyUpdate(createOp == null ? void 0 : createOp(\"delete\", prop, prevValue));\n }\n return deleted;\n },\n set(target, prop, value, receiver) {\n const hasPrevValue = !isInitializing() && Reflect.has(target, prop);\n const prevValue = Reflect.get(target, prop, receiver);\n if (hasPrevValue && (objectIs(prevValue, value) || proxyCache.has(value) && objectIs(prevValue, proxyCache.get(value)))) {\n return true;\n }\n removePropListener(prop);\n if (isObject(value)) {\n value = getUntracked(value) || value;\n }\n const nextValue = !proxyStateMap.has(value) && canProxy(value) ? proxy(value) : value;\n addPropListener(prop, nextValue);\n Reflect.set(target, prop, nextValue, receiver);\n notifyUpdate(createOp == null ? void 0 : createOp(\"set\", prop, value, prevValue));\n return true;\n }\n});\nconst createOpDefault = (type, prop, ...args) => [type, [prop], ...args];\nconst proxyStateMap = /* @__PURE__ */ new WeakMap();\nconst refSet = /* @__PURE__ */ new WeakSet();\nconst snapCache = /* @__PURE__ */ new WeakMap();\nconst versionHolder = [1];\nconst proxyCache = /* @__PURE__ */ new WeakMap();\nlet objectIs = Object.is;\nlet newProxy = (target, handler) => new Proxy(target, handler);\nlet canProxy = canProxyDefault;\nlet createSnapshot = createSnapshotDefault;\nlet createHandler = createHandlerDefault;\nlet createOp;\nfunction proxy(baseObject = {}) {\n if (!isObject(baseObject)) {\n throw new Error(\"object required\");\n }\n const found = proxyCache.get(baseObject);\n if (found) {\n return found;\n }\n let version = versionHolder[0];\n const listeners = /* @__PURE__ */ new Set();\n const notifyUpdate = (op, nextVersion = ++versionHolder[0]) => {\n if (version !== nextVersion) {\n checkVersion = version = nextVersion;\n listeners.forEach((listener) => listener(op, nextVersion));\n }\n };\n let checkVersion = version;\n const ensureVersion = (nextCheckVersion = versionHolder[0]) => {\n if (checkVersion !== nextCheckVersion) {\n checkVersion = nextCheckVersion;\n propProxyStates.forEach(([propProxyState]) => {\n const propVersion = propProxyState[1](nextCheckVersion);\n if (propVersion > version) {\n version = propVersion;\n }\n });\n }\n return version;\n };\n const createPropListener = (prop) => (op, nextVersion) => {\n let newOp;\n if (op) {\n newOp = [...op];\n newOp[1] = [prop, ...newOp[1]];\n }\n notifyUpdate(newOp, nextVersion);\n };\n const propProxyStates = /* @__PURE__ */ new Map();\n const addPropListener = (prop, propValue) => {\n const propProxyState = !refSet.has(propValue) && proxyStateMap.get(propValue);\n if (propProxyState) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && propProxyStates.has(prop)) {\n throw new Error(\"prop listener already exists\");\n }\n if (listeners.size) {\n const remove = propProxyState[2](createPropListener(prop));\n propProxyStates.set(prop, [propProxyState, remove]);\n } else {\n propProxyStates.set(prop, [propProxyState]);\n }\n }\n };\n const removePropListener = (prop) => {\n var _a;\n const entry = propProxyStates.get(prop);\n if (entry) {\n propProxyStates.delete(prop);\n (_a = entry[1]) == null ? void 0 : _a.call(entry);\n }\n };\n const addListener = (listener) => {\n listeners.add(listener);\n if (listeners.size === 1) {\n propProxyStates.forEach(([propProxyState, prevRemove], prop) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && prevRemove) {\n throw new Error(\"remove already exists\");\n }\n const remove = propProxyState[2](createPropListener(prop));\n propProxyStates.set(prop, [propProxyState, remove]);\n });\n }\n const removeListener = () => {\n listeners.delete(listener);\n if (listeners.size === 0) {\n propProxyStates.forEach(([propProxyState, remove], prop) => {\n if (remove) {\n remove();\n propProxyStates.set(prop, [propProxyState]);\n }\n });\n }\n };\n return removeListener;\n };\n let initializing = true;\n const handler = createHandler(\n () => initializing,\n addPropListener,\n removePropListener,\n notifyUpdate\n );\n const proxyObject = newProxy(baseObject, handler);\n proxyCache.set(baseObject, proxyObject);\n const proxyState = [baseObject, ensureVersion, addListener];\n proxyStateMap.set(proxyObject, proxyState);\n Reflect.ownKeys(baseObject).forEach((key) => {\n const desc = Object.getOwnPropertyDescriptor(\n baseObject,\n key\n );\n if (\"value\" in desc && desc.writable) {\n proxyObject[key] = baseObject[key];\n }\n });\n initializing = false;\n return proxyObject;\n}\nfunction getVersion(proxyObject) {\n const proxyState = proxyStateMap.get(proxyObject);\n return proxyState == null ? void 0 : proxyState[1]();\n}\nfunction subscribe(proxyObject, callback, notifyInSync) {\n const proxyState = proxyStateMap.get(proxyObject);\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && !proxyState) {\n console.warn(\"Please use proxy object\");\n }\n let promise;\n const ops = [];\n const addListener = proxyState[2];\n let isListenerActive = false;\n const listener = (op) => {\n if (op) {\n ops.push(op);\n }\n if (notifyInSync) {\n callback(ops.splice(0));\n return;\n }\n if (!promise) {\n promise = Promise.resolve().then(() => {\n promise = void 0;\n if (isListenerActive) {\n callback(ops.splice(0));\n }\n });\n }\n };\n const removeListener = addListener(listener);\n isListenerActive = true;\n return () => {\n isListenerActive = false;\n removeListener();\n };\n}\nfunction snapshot(proxyObject) {\n const proxyState = proxyStateMap.get(proxyObject);\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && !proxyState) {\n console.warn(\"Please use proxy object\");\n }\n const [target, ensureVersion] = proxyState;\n return createSnapshot(target, ensureVersion());\n}\nfunction ref(obj) {\n refSet.add(obj);\n return obj;\n}\nfunction unstable_getInternalStates() {\n return {\n proxyStateMap,\n refSet,\n snapCache,\n versionHolder,\n proxyCache\n };\n}\nfunction unstable_replaceInternalFunction(name, fn) {\n switch (name) {\n case \"objectIs\":\n objectIs = fn(objectIs);\n break;\n case \"newProxy\":\n newProxy = fn(newProxy);\n break;\n case \"canProxy\":\n canProxy = fn(canProxy);\n break;\n case \"createSnapshot\":\n createSnapshot = fn(createSnapshot);\n break;\n case \"createHandler\":\n createHandler = fn(createHandler);\n break;\n default:\n throw new Error(\"unknown function\");\n }\n}\nfunction unstable_enableOp(enabled = true) {\n if (enabled === true) {\n createOp = createOpDefault;\n } else if (enabled === false) {\n createOp = void 0;\n } else {\n createOp = enabled;\n }\n}\n\nexport { getVersion, proxy, ref, snapshot, subscribe, unstable_enableOp, unstable_getInternalStates, unstable_replaceInternalFunction };\n","/**\n * AuthGate — reactive auth state via Valtio proxy.\n *\n * The transport writes to this directly. React reads via useSnapshot().\n * No useState, no useEffect, no manual syncing.\n */\n\nimport { log } from \"./log\";\nimport { proxy } from \"valtio\";\n\nexport type AuthStatus = \"pending\" | \"authenticated\" | \"unauthenticated\";\n\nexport interface AuthState {\n status: AuthStatus;\n userId: string | null;\n version: number;\n}\n\nexport class AuthGate {\n /** Reactive state — subscribe with valtio useSnapshot() */\n public state = proxy<AuthState>({\n status: \"pending\",\n userId: null,\n version: 0,\n });\n\n /** Awaitable — resolves when auth is confirmed (either way) */\n public ready: Promise<void>;\n\n private _resolve: (() => void) | null = null;\n\n constructor() {\n this.ready = this._makePending();\n }\n\n /** Auth confirmed — user is authenticated */\n resolve(userId: string): void {\n this.state.status = \"authenticated\";\n log.debug(\"auth: authenticated, userId:\", userId);\n this.state.userId = userId;\n this.state.version++;\n this._resolve?.();\n this._resolve = null;\n }\n\n /** Auth confirmed — no user */\n resolveUnauthenticated(): void {\n this.state.status = \"unauthenticated\";\n log.debug(\"auth: unauthenticated\");\n this.state.userId = null;\n this.state.version++;\n this._resolve?.();\n this._resolve = null;\n }\n\n /** Reset to pending (disconnect, token change) */\n reset(): void {\n if (this.state.status !== \"pending\") {\n this.state.status = \"pending\";\n log.debug(\"auth: reset to pending\");\n this.state.userId = null;\n this.ready = this._makePending();\n }\n }\n\n private _makePending(): Promise<void> {\n return new Promise<void>((r) => {\n this._resolve = r;\n });\n }\n}\n","/**\n * SocketTransport — Socket.IO with Valtio-reactive AuthGate.\n *\n * Auth state lives in a Valtio proxy. React reads via useSnapshot().\n * Transport writes directly — no React involvement.\n */\n\nimport SocketIO from \"socket.io-client\";\nimport pako from \"pako\";\nimport { decompress } from \"compress-json\";\nimport { EventEmitter } from \"eventemitter3\";\nimport ShortId from \"short-unique-id\";\nimport type { Transport } from \"@parcae/model\";\nimport { AuthGate } from \"../auth-gate\";\nimport { log } from \"../log\";\n\nconst uid = new ShortId({ length: 10 });\nconst SOCKETS = new Map<string, any>();\n\nexport interface SocketTransportConfig {\n url: string;\n version?: string;\n path?: string;\n token?: string | null;\n}\n\nexport class SocketTransport extends EventEmitter implements Transport {\n public auth = new AuthGate();\n public isConnected = false;\n\n private socket: any;\n private url: string;\n private version: string;\n private token: string | null | undefined;\n private inflight = new Map<string, Promise<any>>();\n\n constructor(config: SocketTransportConfig) {\n super();\n this.url = config.url;\n this.version = config.version ?? \"v1\";\n this.token = config.token;\n\n const socketPath = config.path ?? \"/ws\";\n const socketKey = `${this.url}:${socketPath}`;\n\n if (SOCKETS.has(socketKey)) {\n this.socket = SOCKETS.get(socketKey);\n } else {\n this.socket = SocketIO(this.url, {\n path: socketPath,\n transports: [\"websocket\"],\n withCredentials: true,\n });\n SOCKETS.set(socketKey, this.socket);\n }\n\n this.socket.on(\"connect\", () => {\n this.isConnected = true;\n log.debug(\"socket connected\");\n this._doAuth();\n this.emit(\"connected\");\n });\n\n this.socket.on(\"disconnect\", () => {\n this.isConnected = false;\n log.debug(\"socket disconnected\");\n this.auth.reset();\n this.emit(\"disconnected\");\n });\n\n this.socket.on(\"error\", (err: Error) => this.emit(\"error\", err));\n\n if (this.socket.connected) {\n this.isConnected = true;\n log.debug(\"socket connected\");\n this._doAuth();\n }\n\n if (this.token === null) {\n this.auth.resolveUnauthenticated();\n }\n }\n\n private _doAuth(): void {\n if (this.token === undefined) return;\n if (this.token === null) {\n this.auth.resolveUnauthenticated();\n return;\n }\n\n const t0 = performance.now();\n log.debug(\"authenticating...\");\n this.socket.emit(\"authenticate\", this.token, (response: any) => {\n const ms = (performance.now() - t0).toFixed(0);\n const userId = response?.userId ?? null;\n if (userId) {\n this.auth.resolve(userId);\n log.debug(`authenticated as ${userId} (${ms}ms)`);\n } else {\n this.auth.resolveUnauthenticated();\n log.debug(`auth rejected (${ms}ms)`);\n }\n });\n }\n\n async authenticate(token: string | null): Promise<{ userId: string | null }> {\n this.token = token;\n this.auth.reset();\n\n if (token === null) {\n this.auth.resolveUnauthenticated();\n return { userId: null };\n }\n\n if (!this.socket.connected) {\n return new Promise((resolve) => {\n const handler = () => {\n this.socket.off(\"connect\", handler);\n this.socket.emit(\"authenticate\", token, (response: any) => {\n const userId = response?.userId ?? null;\n if (userId) this.auth.resolve(userId);\n else this.auth.resolveUnauthenticated();\n resolve({ userId });\n });\n };\n this.socket.once(\"connect\", handler);\n });\n }\n\n return new Promise((resolve) => {\n this.socket.emit(\"authenticate\", token, (response: any) => {\n const userId = response?.userId ?? null;\n if (userId) this.auth.resolve(userId);\n else this.auth.resolveUnauthenticated();\n resolve({ userId });\n });\n });\n }\n\n // ── Request/Response ──────────────────────────────────────────────\n\n private async fetch(\n method: string,\n path: string,\n data: any = {},\n ): Promise<any> {\n await this.auth.ready;\n\n if (!this.socket.connected) {\n await new Promise<void>((resolve, reject) => {\n if (this.socket.connected) return resolve();\n const timeout = setTimeout(() => {\n cleanup();\n reject(new Error(\"Connection timeout\"));\n }, 30000);\n const onConnect = () => {\n cleanup();\n resolve();\n };\n const onError = (err: Error) => {\n cleanup();\n reject(err);\n };\n const cleanup = () => {\n clearTimeout(timeout);\n this.socket.off(\"connect\", onConnect);\n this.socket.off(\"connect_error\", onError);\n };\n this.socket.once(\"connect\", onConnect);\n this.socket.once(\"connect_error\", onError);\n });\n }\n\n const upper = method.toUpperCase();\n if (upper === \"GET\") {\n const dedupeKey = `${path}:${JSON.stringify(data)}`;\n const existing = this.inflight.get(dedupeKey);\n if (existing) return existing;\n const req = this._call(method, path, data);\n this.inflight.set(dedupeKey, req);\n req.finally(() => this.inflight.delete(dedupeKey));\n return req;\n }\n\n return this._call(method, path, data);\n }\n\n private _call(method: string, path: string, data: any): Promise<any> {\n const id = uid.rnd();\n const t0 = performance.now();\n const fullPath = `/${this.version}${path}`;\n log.debug(`→ ${method.toUpperCase()} ${fullPath}`);\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.socket.off(id);\n log.debug(`✗ ${method.toUpperCase()} ${fullPath} timeout (30s)`);\n reject(new Error(`RPC timeout: ${method} ${path}`));\n }, 30000);\n\n this.socket.once(id, (msg: any) => {\n clearTimeout(timeout);\n const ms = (performance.now() - t0).toFixed(0);\n try {\n const uncompressed = pako.ungzip(msg, { to: \"string\" });\n const parsed = decompress(JSON.parse(uncompressed));\n if (parsed.success) {\n log.debug(`← ${method.toUpperCase()} ${fullPath} (${ms}ms)`);\n resolve(parsed.result);\n } else {\n log.debug(\n `✗ ${method.toUpperCase()} ${fullPath} (${ms}ms) ${parsed.error || parsed.message}`,\n );\n reject(\n new Error(\n parsed.message || parsed.error || `${method} ${path} failed`,\n ),\n );\n }\n } catch (err) {\n log.debug(\n `✗ ${method.toUpperCase()} ${fullPath} (${ms}ms) parse error`,\n );\n reject(err);\n }\n });\n\n this.socket.emit(\n \"call\",\n id,\n method.toUpperCase(),\n `/${this.version}${path}`,\n data,\n );\n });\n }\n\n async get(path: string, data?: any): Promise<any> {\n return this.fetch(\"GET\", path, data);\n }\n async post(path: string, data?: any): Promise<any> {\n return this.fetch(\"POST\", path, data);\n }\n async put(path: string, data?: any): Promise<any> {\n return this.fetch(\"PUT\", path, data);\n }\n async patch(path: string, data?: any): Promise<any> {\n return this.fetch(\"PATCH\", path, data);\n }\n async delete(path: string, data?: any): Promise<any> {\n return this.fetch(\"DELETE\", path, data);\n }\n\n subscribe(event: string, handler: (...args: any[]) => void): () => void {\n this.socket.on(event, handler);\n return () => this.socket.off(event, handler);\n }\n\n unsubscribe(event: string, handler?: (...args: any[]) => void): void {\n this.socket.off(event, handler);\n }\n\n async send(event: string, ...args: any[]): Promise<void> {\n await this.auth.ready;\n this.socket.emit(event, ...args);\n }\n\n disconnect(): void {\n this.socket.disconnect();\n this.isConnected = false;\n log.debug(\"socket disconnected\");\n }\n async reconnect(): Promise<void> {\n this.socket.connect();\n }\n}\n\nexport default SocketTransport;\n\n/** @internal — clear socket cache (for testing) */\nexport function _resetSockets(): void {\n SOCKETS.clear();\n}\n","/**\n * SSETransport — HTTP + Server-Sent Events implementation of the Transport interface.\n *\n * Request/response via standard fetch(). Subscriptions via EventSource.\n * Simpler than Socket.IO — no websocket infra needed. Good for read-heavy\n * apps, serverless backends, or environments where WebSocket isn't available.\n *\n * Trade-offs vs SocketTransport:\n * - Simpler infra (no sticky sessions, works behind any CDN/proxy)\n * - Server → client streaming only (no client → server streaming)\n * - Request/response is standard HTTP (cacheable, observable, debuggable)\n * - No compression (relies on HTTP gzip)\n * - No request deduplication (relies on HTTP/2 multiplexing)\n */\n\nimport { EventEmitter } from \"eventemitter3\";\nimport type { Transport } from \"@parcae/model\";\n\nexport interface SSETransportConfig {\n /** Base URL of the Parcae backend. */\n url: string;\n /** API key or async function returning a key. */\n key?: string | null | (() => Promise<string | null>);\n /** API version prefix. Default: \"v1\" */\n version?: string;\n}\n\nexport class SSETransport extends EventEmitter implements Transport {\n private url: string;\n private version: string;\n private apiKey: string | null | (() => Promise<string | null>);\n private key: string | null = null;\n private eventSources = new Map<string, EventSource>();\n\n public isConnected = true; // HTTP is \"always connected\"\n public isLoading = true;\n public loading: Promise<void>;\n\n constructor(config: SSETransportConfig) {\n super();\n this.url = config.url.replace(/\\/$/, \"\");\n this.version = config.version ?? \"v1\";\n this.apiKey = config.key ?? null;\n this.loading = this.resolveKey();\n }\n\n private async resolveKey(): Promise<void> {\n try {\n this.key =\n typeof this.apiKey === \"function\" ? await this.apiKey() : this.apiKey;\n this.isLoading = false;\n this.emit(\"connected\");\n } catch (err) {\n this.isLoading = false;\n this.emit(\"error\", err);\n }\n }\n\n private headers(): Record<string, string> {\n const h: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (this.key) h[\"Authorization\"] = `Bearer ${this.key}`;\n return h;\n }\n\n private fullUrl(path: string): string {\n return `${this.url}/${this.version}${path}`;\n }\n\n // ── Request/Response ──────────────────────────────────────────────────\n\n private async request(\n method: string,\n path: string,\n data?: any,\n ): Promise<any> {\n await this.loading;\n\n const isGet = method.toUpperCase() === \"GET\";\n let url = this.fullUrl(path);\n\n if (isGet && data) {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(data)) {\n params.set(k, typeof v === \"object\" ? JSON.stringify(v) : String(v));\n }\n url += `?${params.toString()}`;\n }\n\n const res = await fetch(url, {\n method: method.toUpperCase(),\n headers: this.headers(),\n body: isGet ? undefined : JSON.stringify(data),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: res.statusText }));\n throw new Error(body.error || body.message || `HTTP ${res.status}`);\n }\n\n const body = await res.json();\n if (body.success === false) throw new Error(body.error || \"Request failed\");\n return body.result ?? body;\n }\n\n async get(path: string, data?: any): Promise<any> {\n return this.request(\"GET\", path, data);\n }\n async post(path: string, data?: any): Promise<any> {\n return this.request(\"POST\", path, data);\n }\n async put(path: string, data?: any): Promise<any> {\n return this.request(\"PUT\", path, data);\n }\n async patch(path: string, data?: any): Promise<any> {\n return this.request(\"PATCH\", path, data);\n }\n async delete(path: string, data?: any): Promise<any> {\n return this.request(\"DELETE\", path, data);\n }\n\n // ── Subscriptions (via Server-Sent Events) ────────────────────────────\n\n subscribe(event: string, handler: (...args: any[]) => void): () => void {\n const url = `${this.url}/${this.version}/__events/${encodeURIComponent(event)}`;\n const source = new EventSource(url, { withCredentials: true });\n\n source.onmessage = (e) => {\n try {\n const data = JSON.parse(e.data);\n handler(data);\n } catch {\n handler(e.data);\n }\n };\n\n source.onerror = () => {\n // EventSource auto-reconnects\n };\n\n this.eventSources.set(event, source);\n\n return () => {\n source.close();\n this.eventSources.delete(event);\n };\n }\n\n unsubscribe(event: string): void {\n const source = this.eventSources.get(event);\n if (source) {\n source.close();\n this.eventSources.delete(event);\n }\n }\n\n // ── Control messages ──────────────────────────────────────────────────\n\n async send(event: string, ...args: any[]): Promise<void> {\n await this.request(\"POST\", \"/__control\", { event, args });\n }\n\n // ── Lifecycle ─────────────────────────────────────────────────────────\n\n disconnect(): void {\n for (const [, source] of this.eventSources) source.close();\n this.eventSources.clear();\n this.isConnected = false;\n this.emit(\"disconnected\");\n }\n\n async reconnect(): Promise<void> {\n this.loading = this.resolveKey();\n await this.loading;\n }\n}\n\nexport default SSETransport;\n","/**\n * @parcae/sdk — createClient()\n *\n * Auth is handled in the transport, not React.\n * Pass token at creation time, or call authenticate() later.\n */\n\nimport { Model, FrontendAdapter } from \"@parcae/model\";\nimport type { Transport } from \"@parcae/model\";\nimport { SocketTransport } from \"./transports/socket\";\nimport { SSETransport } from \"./transports/sse\";\n\nexport interface ClientConfig {\n url: string;\n version?: string;\n transport?: \"socket\" | \"sse\" | Transport;\n /** Initial auth token. null = no auth. undefined = call authenticate() later. */\n token?: string | null;\n}\n\nexport interface ParcaeClient {\n transport: Transport;\n get(path: string, data?: any): Promise<any>;\n post(path: string, data?: any): Promise<any>;\n put(path: string, data?: any): Promise<any>;\n patch(path: string, data?: any): Promise<any>;\n delete(path: string, data?: any): Promise<any>;\n subscribe(event: string, handler: (...args: any[]) => void): () => void;\n unsubscribe(event: string, handler?: (...args: any[]) => void): void;\n send(event: string, ...args: any[]): void;\n readonly isConnected: boolean;\n authenticate(token: string | null): Promise<{ userId: string | null }>;\n on(event: string, handler: (...args: any[]) => void): void;\n off(event: string, handler?: (...args: any[]) => void): void;\n disconnect(): void;\n reconnect(): Promise<void>;\n}\n\nexport function createClient(config: ClientConfig): ParcaeClient {\n // Idempotent — return existing client if already created for this url\n const cacheKey = `${config.url}:${config.version ?? \"v1\"}`;\n const existing = (globalThis as any).__parcae_clients?.get(cacheKey);\n if (existing) return existing;\n\n const version = config.version ?? \"v1\";\n\n let transport: any;\n\n if (config.transport && typeof config.transport === \"object\") {\n transport = config.transport;\n } else if (config.transport === \"sse\") {\n transport = new SSETransport({ url: config.url, version });\n } else {\n transport = new SocketTransport({\n url: config.url,\n version,\n token: config.token,\n });\n }\n\n Model.use(new FrontendAdapter(transport));\n\n const client: ParcaeClient = {\n transport,\n get: (p, d) => transport.get(p, d),\n post: (p, d) => transport.post(p, d),\n put: (p, d) => transport.put(p, d),\n patch: (p, d) => transport.patch(p, d),\n delete: (p, d) => transport.delete(p, d),\n subscribe: (e, h) => transport.subscribe?.(e, h) ?? (() => {}),\n unsubscribe: (e, h) => transport.unsubscribe?.(e, h),\n send: (e, ...a) => transport.send?.(e, ...a),\n get isConnected() {\n return transport.isConnected ?? false;\n },\n authenticate: (t) =>\n transport.authenticate?.(t) ?? Promise.resolve({ userId: null }),\n on: (e, h) => transport.on?.(e, h),\n off: (e, h) => transport.off?.(e, h),\n disconnect: () => transport.disconnect?.(),\n reconnect: () => transport.reconnect?.() ?? Promise.resolve(),\n };\n\n // Cache the client globally\n if (!(globalThis as any).__parcae_clients) {\n (globalThis as any).__parcae_clients = new Map();\n }\n (globalThis as any).__parcae_clients.set(cacheKey, client);\n\n return client;\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,36 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { A as AuthGate } from './auth-gate-SgxFTCIE.js';
|
|
2
|
+
export { a as AuthState, b as AuthStatus, C as ClientConfig, P as ParcaeClient, c as createClient } from './auth-gate-SgxFTCIE.js';
|
|
2
3
|
import { EventEmitter } from 'eventemitter3';
|
|
3
4
|
import { Transport } from '@parcae/model';
|
|
4
5
|
export { FrontendAdapter, Model, Transport } from '@parcae/model';
|
|
5
6
|
|
|
6
|
-
/**
|
|
7
|
-
* AuthGate — reactive auth state via Valtio proxy.
|
|
8
|
-
*
|
|
9
|
-
* The transport writes to this directly. React reads via useSnapshot().
|
|
10
|
-
* No useState, no useEffect, no manual syncing.
|
|
11
|
-
*/
|
|
12
|
-
type AuthStatus = "pending" | "authenticated" | "unauthenticated";
|
|
13
|
-
interface AuthState {
|
|
14
|
-
status: AuthStatus;
|
|
15
|
-
userId: string | null;
|
|
16
|
-
version: number;
|
|
17
|
-
}
|
|
18
|
-
declare class AuthGate {
|
|
19
|
-
/** Reactive state — subscribe with valtio useSnapshot() */
|
|
20
|
-
state: AuthState;
|
|
21
|
-
/** Awaitable — resolves when auth is confirmed (either way) */
|
|
22
|
-
ready: Promise<void>;
|
|
23
|
-
private _resolve;
|
|
24
|
-
constructor();
|
|
25
|
-
/** Auth confirmed — user is authenticated */
|
|
26
|
-
resolve(userId: string): void;
|
|
27
|
-
/** Auth confirmed — no user */
|
|
28
|
-
resolveUnauthenticated(): void;
|
|
29
|
-
/** Reset to pending (disconnect, token change) */
|
|
30
|
-
reset(): void;
|
|
31
|
-
private _makePending;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
7
|
/**
|
|
35
8
|
* SocketTransport — Socket.IO with Valtio-reactive AuthGate.
|
|
36
9
|
*
|
|
@@ -120,4 +93,4 @@ declare class SSETransport extends EventEmitter implements Transport {
|
|
|
120
93
|
reconnect(): Promise<void>;
|
|
121
94
|
}
|
|
122
95
|
|
|
123
|
-
export { AuthGate,
|
|
96
|
+
export { AuthGate, SSETransport, type SSETransportConfig, SocketTransport, type SocketTransportConfig };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { AuthGate, SSETransport, SocketTransport, createClient } from './chunk-
|
|
1
|
+
export { AuthGate, SSETransport, SocketTransport, createClient } from './chunk-YKK5SBY4.js';
|
|
2
2
|
export { FrontendAdapter, Model } from '@parcae/model';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import React__default from 'react';
|
|
3
|
-
import { P as ParcaeClient, C as ClientConfig } from '../
|
|
3
|
+
import { P as ParcaeClient, C as ClientConfig, b as AuthStatus } from '../auth-gate-SgxFTCIE.js';
|
|
4
4
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
5
5
|
import '@parcae/model';
|
|
6
6
|
|
|
@@ -49,12 +49,12 @@ declare function useApi(): {
|
|
|
49
49
|
declare function useSDK(): ParcaeClient;
|
|
50
50
|
declare function useConnectionStatus(): {
|
|
51
51
|
isConnected: boolean;
|
|
52
|
-
authStatus:
|
|
52
|
+
authStatus: AuthStatus;
|
|
53
53
|
};
|
|
54
54
|
declare function useAuthState(): {
|
|
55
|
-
status:
|
|
56
|
-
userId:
|
|
57
|
-
version:
|
|
55
|
+
status: AuthStatus;
|
|
56
|
+
userId: string | null;
|
|
57
|
+
version: number;
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
declare function useSetting<T = string>(key: string, defaultValue: T): [T, (value: T) => Promise<void>, {
|
|
@@ -63,38 +63,10 @@ declare function useSetting<T = string>(key: string, defaultValue: T): [T, (valu
|
|
|
63
63
|
|
|
64
64
|
interface GateProps {
|
|
65
65
|
children: React__default.ReactNode;
|
|
66
|
-
/** Optional fallback to render when the gate condition is not met. */
|
|
67
66
|
fallback?: React__default.ReactNode;
|
|
68
67
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Renders children only when the user is authenticated.
|
|
71
|
-
*
|
|
72
|
-
* ```tsx
|
|
73
|
-
* <Authenticated fallback={<LoginPage />}>
|
|
74
|
-
* <Dashboard />
|
|
75
|
-
* </Authenticated>
|
|
76
|
-
* ```
|
|
77
|
-
*/
|
|
78
68
|
declare function Authenticated({ children, fallback }: GateProps): react_jsx_runtime.JSX.Element;
|
|
79
|
-
/**
|
|
80
|
-
* Renders children only when the user is NOT authenticated.
|
|
81
|
-
*
|
|
82
|
-
* ```tsx
|
|
83
|
-
* <Unauthenticated>
|
|
84
|
-
* <LoginForm />
|
|
85
|
-
* </Unauthenticated>
|
|
86
|
-
* ```
|
|
87
|
-
*/
|
|
88
69
|
declare function Unauthenticated({ children, fallback }: GateProps): react_jsx_runtime.JSX.Element;
|
|
89
|
-
/**
|
|
90
|
-
* Renders children only while auth is still loading.
|
|
91
|
-
*
|
|
92
|
-
* ```tsx
|
|
93
|
-
* <AuthLoading>
|
|
94
|
-
* <Spinner />
|
|
95
|
-
* </AuthLoading>
|
|
96
|
-
* ```
|
|
97
|
-
*/
|
|
98
70
|
declare function AuthLoading({ children, fallback }: GateProps): react_jsx_runtime.JSX.Element;
|
|
99
71
|
|
|
100
72
|
export { AuthLoading, Authenticated, ParcaeContext, ParcaeProvider, type ParcaeProviderProps, Unauthenticated, useApi, useAuthState, useConnectionStatus, useParcae, useQuery, useSDK, useSetting };
|
package/dist/react/index.js
CHANGED
|
@@ -1,60 +1,7 @@
|
|
|
1
|
-
import { createClient,
|
|
2
|
-
import { createContext, useContext, useMemo, useRef, useEffect, useSyncExternalStore, useState, useCallback
|
|
1
|
+
import { createClient, log } from '../chunk-YKK5SBY4.js';
|
|
2
|
+
import { createContext, useContext, useMemo, useRef, useEffect, useSyncExternalStore, useState, useCallback } from 'react';
|
|
3
3
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
4
4
|
|
|
5
|
-
var useAffectedDebugValue = (state, affected) => {
|
|
6
|
-
const pathList = useRef(void 0);
|
|
7
|
-
useEffect(() => {
|
|
8
|
-
pathList.current = affectedToPathList(state, affected, true);
|
|
9
|
-
});
|
|
10
|
-
useDebugValue(pathList.current);
|
|
11
|
-
};
|
|
12
|
-
var condUseAffectedDebugValue = useAffectedDebugValue;
|
|
13
|
-
var targetCache = /* @__PURE__ */ new WeakMap();
|
|
14
|
-
function useSnapshot(proxyObject, options) {
|
|
15
|
-
const notifyInSync = void 0 ;
|
|
16
|
-
const affected = useMemo(
|
|
17
|
-
() => proxyObject && /* @__PURE__ */ new WeakMap(),
|
|
18
|
-
[proxyObject]
|
|
19
|
-
);
|
|
20
|
-
const lastSnapshot = useRef(void 0);
|
|
21
|
-
let inRender = true;
|
|
22
|
-
const currSnapshot = useSyncExternalStore(
|
|
23
|
-
useCallback(
|
|
24
|
-
(callback) => {
|
|
25
|
-
const unsub = subscribe(proxyObject, callback, notifyInSync);
|
|
26
|
-
callback();
|
|
27
|
-
return unsub;
|
|
28
|
-
},
|
|
29
|
-
[proxyObject, notifyInSync]
|
|
30
|
-
),
|
|
31
|
-
() => {
|
|
32
|
-
const nextSnapshot = snapshot(proxyObject);
|
|
33
|
-
try {
|
|
34
|
-
if (!inRender && lastSnapshot.current && !isChanged(
|
|
35
|
-
lastSnapshot.current,
|
|
36
|
-
nextSnapshot,
|
|
37
|
-
affected,
|
|
38
|
-
/* @__PURE__ */ new WeakMap()
|
|
39
|
-
)) {
|
|
40
|
-
return lastSnapshot.current;
|
|
41
|
-
}
|
|
42
|
-
} catch (e) {
|
|
43
|
-
}
|
|
44
|
-
return nextSnapshot;
|
|
45
|
-
},
|
|
46
|
-
() => snapshot(proxyObject)
|
|
47
|
-
);
|
|
48
|
-
inRender = false;
|
|
49
|
-
useLayoutEffect(() => {
|
|
50
|
-
lastSnapshot.current = currSnapshot;
|
|
51
|
-
});
|
|
52
|
-
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production") {
|
|
53
|
-
condUseAffectedDebugValue(currSnapshot, affected);
|
|
54
|
-
}
|
|
55
|
-
const proxyCache = useMemo(() => /* @__PURE__ */ new WeakMap(), []);
|
|
56
|
-
return createProxy(currSnapshot, affected, proxyCache, targetCache);
|
|
57
|
-
}
|
|
58
5
|
var ParcaeContext = createContext(null);
|
|
59
6
|
function useParcae() {
|
|
60
7
|
const client = useContext(ParcaeContext);
|
|
@@ -102,6 +49,30 @@ var ParcaeProvider = ({
|
|
|
102
49
|
}, [client]);
|
|
103
50
|
return /* @__PURE__ */ jsx(ParcaeContext.Provider, { value: client, children });
|
|
104
51
|
};
|
|
52
|
+
function useAuthStatus() {
|
|
53
|
+
const client = useParcae();
|
|
54
|
+
const transport = client.transport;
|
|
55
|
+
const gate = transport?.auth;
|
|
56
|
+
const [, forceRender] = useState(0);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (!gate) return;
|
|
59
|
+
let mounted = true;
|
|
60
|
+
const check = () => {
|
|
61
|
+
if (mounted) forceRender((n) => n + 1);
|
|
62
|
+
};
|
|
63
|
+
gate.ready.then(check);
|
|
64
|
+
return () => {
|
|
65
|
+
mounted = false;
|
|
66
|
+
};
|
|
67
|
+
}, [gate, gate?.state?.version]);
|
|
68
|
+
return {
|
|
69
|
+
status: gate?.state?.status ?? "pending",
|
|
70
|
+
userId: gate?.state?.userId ?? null,
|
|
71
|
+
version: gate?.state?.version ?? 0
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// src/react/useQuery.ts
|
|
105
76
|
var cache = /* @__PURE__ */ new Map();
|
|
106
77
|
var GC_DELAY = 6e4;
|
|
107
78
|
var EMPTY = [];
|
|
@@ -125,7 +96,7 @@ function notify(e) {
|
|
|
125
96
|
for (const fn of e.listeners) fn();
|
|
126
97
|
}
|
|
127
98
|
function doFetch(key, entry, chain) {
|
|
128
|
-
log.debug("useQuery: fetching", chain.__modelType
|
|
99
|
+
log.debug("useQuery: fetching", chain.__modelType);
|
|
129
100
|
entry.loading = true;
|
|
130
101
|
entry.error = null;
|
|
131
102
|
notify(entry);
|
|
@@ -141,22 +112,15 @@ function doFetch(key, entry, chain) {
|
|
|
141
112
|
notify(entry);
|
|
142
113
|
});
|
|
143
114
|
}
|
|
144
|
-
function getAuthGate(client) {
|
|
145
|
-
const transport = client.transport;
|
|
146
|
-
return transport?.auth?.state ?? null;
|
|
147
|
-
}
|
|
148
115
|
function useQuery(chain, options = {}) {
|
|
149
|
-
|
|
116
|
+
useParcae();
|
|
150
117
|
const waitForAuth = options.waitForAuth ?? true;
|
|
151
|
-
const
|
|
152
|
-
const authSnap = authGate ? useSnapshot(authGate) : null;
|
|
153
|
-
const authStatus = authSnap?.status ?? "pending";
|
|
154
|
-
const authVersion = authSnap?.version ?? 0;
|
|
118
|
+
const { status: authStatus, version: authVersion } = useAuthStatus();
|
|
155
119
|
const authReady = !waitForAuth || authStatus !== "pending";
|
|
156
120
|
const key = chain && authReady ? `${chain.__modelType}:${authVersion}:${JSON.stringify(chain.__steps ?? [])}` : null;
|
|
157
121
|
const keyRef = useRef(key);
|
|
158
122
|
keyRef.current = key;
|
|
159
|
-
const
|
|
123
|
+
const subscribe = (onChange) => {
|
|
160
124
|
const k = keyRef.current;
|
|
161
125
|
if (!k) return () => {
|
|
162
126
|
};
|
|
@@ -184,7 +148,7 @@ function useQuery(chain, options = {}) {
|
|
|
184
148
|
return cache.get(k)?.items ?? EMPTY;
|
|
185
149
|
};
|
|
186
150
|
const items = useSyncExternalStore(
|
|
187
|
-
|
|
151
|
+
subscribe,
|
|
188
152
|
getSnapshot,
|
|
189
153
|
getSnapshot
|
|
190
154
|
);
|
|
@@ -233,31 +197,15 @@ function useSDK() {
|
|
|
233
197
|
}
|
|
234
198
|
function useConnectionStatus() {
|
|
235
199
|
const client = useParcae();
|
|
236
|
-
const
|
|
237
|
-
|
|
238
|
-
const snap = authState ? useSnapshot(authState) : null;
|
|
239
|
-
return {
|
|
240
|
-
isConnected: client.isConnected,
|
|
241
|
-
authStatus: snap?.status ?? "pending"
|
|
242
|
-
};
|
|
200
|
+
const { status } = useAuthStatus();
|
|
201
|
+
return { isConnected: client.isConnected, authStatus: status };
|
|
243
202
|
}
|
|
244
203
|
function useAuthState() {
|
|
245
|
-
|
|
246
|
-
const transport = client.transport;
|
|
247
|
-
const authState = transport?.auth?.state;
|
|
248
|
-
const snap = authState ? useSnapshot(authState) : null;
|
|
249
|
-
return {
|
|
250
|
-
status: snap?.status ?? "pending",
|
|
251
|
-
userId: snap?.userId ?? null,
|
|
252
|
-
version: snap?.version ?? 0
|
|
253
|
-
};
|
|
204
|
+
return useAuthStatus();
|
|
254
205
|
}
|
|
255
206
|
function useSetting(key, defaultValue) {
|
|
256
207
|
const client = useParcae();
|
|
257
|
-
const
|
|
258
|
-
const authState = transport?.auth?.state;
|
|
259
|
-
const snap = authState ? useSnapshot(authState) : null;
|
|
260
|
-
const authStatus = snap?.status ?? "pending";
|
|
208
|
+
const { status: authStatus } = useAuthStatus();
|
|
261
209
|
const [value, setValue] = useState(defaultValue);
|
|
262
210
|
const [isLoading, setIsLoading] = useState(true);
|
|
263
211
|
useEffect(() => {
|
|
@@ -288,28 +236,17 @@ function useSetting(key, defaultValue) {
|
|
|
288
236
|
);
|
|
289
237
|
return [value, update, { isLoading }];
|
|
290
238
|
}
|
|
291
|
-
function useAuthStatus() {
|
|
292
|
-
const client = useParcae();
|
|
293
|
-
const transport = client.transport;
|
|
294
|
-
const authState = transport?.auth?.state;
|
|
295
|
-
if (!authState) return "pending";
|
|
296
|
-
const snap = useSnapshot(authState);
|
|
297
|
-
return snap.status ?? "pending";
|
|
298
|
-
}
|
|
299
239
|
function Authenticated({ children, fallback = null }) {
|
|
300
|
-
const status = useAuthStatus();
|
|
301
|
-
|
|
302
|
-
return /* @__PURE__ */ jsx(Fragment, { children: fallback });
|
|
240
|
+
const { status } = useAuthStatus();
|
|
241
|
+
return status === "authenticated" ? /* @__PURE__ */ jsx(Fragment, { children }) : /* @__PURE__ */ jsx(Fragment, { children: fallback });
|
|
303
242
|
}
|
|
304
243
|
function Unauthenticated({ children, fallback = null }) {
|
|
305
|
-
const status = useAuthStatus();
|
|
306
|
-
|
|
307
|
-
return /* @__PURE__ */ jsx(Fragment, { children: fallback });
|
|
244
|
+
const { status } = useAuthStatus();
|
|
245
|
+
return status === "unauthenticated" ? /* @__PURE__ */ jsx(Fragment, { children }) : /* @__PURE__ */ jsx(Fragment, { children: fallback });
|
|
308
246
|
}
|
|
309
247
|
function AuthLoading({ children, fallback = null }) {
|
|
310
|
-
const status = useAuthStatus();
|
|
311
|
-
|
|
312
|
-
return /* @__PURE__ */ jsx(Fragment, { children: fallback });
|
|
248
|
+
const { status } = useAuthStatus();
|
|
249
|
+
return status === "pending" ? /* @__PURE__ */ jsx(Fragment, { children }) : /* @__PURE__ */ jsx(Fragment, { children: fallback });
|
|
313
250
|
}
|
|
314
251
|
|
|
315
252
|
export { AuthLoading, Authenticated, ParcaeContext, ParcaeProvider, Unauthenticated, useApi, useAuthState, useConnectionStatus, useParcae, useQuery, useSDK, useSetting };
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/.pnpm/valtio@2.3.1_@types+react@19.2.14_react@19.2.4/node_modules/valtio/esm/react.mjs","../../src/react/context.ts","../../src/react/Provider.tsx","../../src/react/useQuery.ts","../../src/react/useApi.ts","../../src/react/useSetting.ts","../../src/react/gates.tsx"],"names":["useMemo","useRef","useEffect","subscribe","useSyncExternalStore","entry","useCallback","jsx"],"mappings":"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","file":"index.js","sourcesContent":["import { useMemo, useRef, useSyncExternalStore, useCallback, useLayoutEffect, useEffect, useDebugValue } from 'react';\nimport { isChanged, createProxy, affectedToPathList } from 'proxy-compare';\nimport { subscribe, snapshot } from 'valtio/vanilla';\n\nconst useAffectedDebugValue = (state, affected) => {\n const pathList = useRef(void 0);\n useEffect(() => {\n pathList.current = affectedToPathList(state, affected, true);\n });\n useDebugValue(pathList.current);\n};\nconst condUseAffectedDebugValue = useAffectedDebugValue;\nconst targetCache = /* @__PURE__ */ new WeakMap();\nfunction useSnapshot(proxyObject, options) {\n const notifyInSync = options == null ? void 0 : options.sync;\n const affected = useMemo(\n () => proxyObject && /* @__PURE__ */ new WeakMap(),\n [proxyObject]\n );\n const lastSnapshot = useRef(void 0);\n let inRender = true;\n const currSnapshot = useSyncExternalStore(\n useCallback(\n (callback) => {\n const unsub = subscribe(proxyObject, callback, notifyInSync);\n callback();\n return unsub;\n },\n [proxyObject, notifyInSync]\n ),\n () => {\n const nextSnapshot = snapshot(proxyObject);\n try {\n if (!inRender && lastSnapshot.current && !isChanged(\n lastSnapshot.current,\n nextSnapshot,\n affected,\n /* @__PURE__ */ new WeakMap()\n )) {\n return lastSnapshot.current;\n }\n } catch (e) {\n }\n return nextSnapshot;\n },\n () => snapshot(proxyObject)\n );\n inRender = false;\n useLayoutEffect(() => {\n lastSnapshot.current = currSnapshot;\n });\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n condUseAffectedDebugValue(currSnapshot, affected);\n }\n const proxyCache = useMemo(() => /* @__PURE__ */ new WeakMap(), []);\n return createProxy(currSnapshot, affected, proxyCache, targetCache);\n}\n\nexport { useSnapshot };\n","import { createContext, useContext } from \"react\";\nimport type { ParcaeClient } from \"../client\";\n\nexport const ParcaeContext = createContext<ParcaeClient | null>(null);\n\nexport function useParcae(): ParcaeClient {\n const client = useContext(ParcaeContext);\n if (!client)\n throw new Error(\"useParcae must be used within a <ParcaeProvider>\");\n return client;\n}\n","\"use client\";\n\nimport React, { useEffect, useMemo, useRef } from \"react\";\nimport { createClient } from \"../client\";\nimport type { ParcaeClient, ClientConfig } from \"../client\";\nimport { ParcaeContext } from \"./context\";\n\nexport interface ParcaeProviderProps {\n client?: ParcaeClient;\n url?: string;\n /** undefined = auth loading, null = no session, string = token */\n apiKey?: string | null | undefined;\n userId?: string | null;\n version?: string;\n transport?: ClientConfig[\"transport\"];\n children: React.ReactNode;\n onReady?: (client: ParcaeClient) => void;\n onError?: (error: Error) => void;\n}\n\nexport const ParcaeProvider: React.FC<ParcaeProviderProps> = ({\n client: externalClient,\n url,\n apiKey,\n userId,\n version = \"v1\",\n transport = \"socket\",\n children,\n onReady,\n onError,\n}) => {\n const client = useMemo(() => {\n if (externalClient) return externalClient;\n if (!url)\n throw new Error(\n \"ParcaeProvider requires either a `client` or `url` prop\",\n );\n return createClient({ url, version, transport, token: apiKey });\n }, [externalClient, url, version, transport]);\n\n const onReadyRef = useRef(onReady);\n onReadyRef.current = onReady;\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n\n // When apiKey changes, re-authenticate\n useEffect(() => {\n if (apiKey === undefined) return;\n client\n .authenticate(apiKey)\n .then(() => {\n onReadyRef.current?.(client);\n })\n .catch((err: Error) => {\n onErrorRef.current?.(err);\n });\n }, [apiKey, userId, client]);\n\n useEffect(() => {\n const onErr = (err: Error) => onErrorRef.current?.(err);\n client.on(\"error\", onErr);\n return () => {\n client.off(\"error\", onErr);\n };\n }, [client]);\n\n return (\n <ParcaeContext.Provider value={client}>{children}</ParcaeContext.Provider>\n );\n};\n\nexport default ParcaeProvider;\n","\"use client\";\n\n/**\n * useQuery — reactive data fetching. Auth state from Valtio snapshot.\n */\n\nimport { useEffect, useRef, useSyncExternalStore } from \"react\";\nimport { useSnapshot } from \"valtio\";\nimport { log } from \"../log\";\nimport { useParcae } from \"./context\";\nimport type { ParcaeClient } from \"../client\";\nimport type { AuthState } from \"../auth-gate\";\n\ninterface QueryChain<T> {\n find(): Promise<T[]>;\n __steps?: any[];\n __modelType?: string;\n __modelClass?: any;\n __adapter?: any;\n}\n\ninterface UseQueryOptions {\n waitForAuth?: boolean;\n}\n\ninterface UseQueryResult<T> {\n items: T[];\n loading: boolean;\n error: Error | null;\n refetch: () => void;\n}\n\n// ── External Cache ───────────────────────────────────────────────────────────\n\ninterface CacheEntry {\n items: any[];\n loading: boolean;\n error: Error | null;\n refs: number;\n listeners: Set<() => void>;\n dispose: (() => void) | null;\n gcTimer: ReturnType<typeof setTimeout> | null;\n}\n\nconst cache = new Map<string, CacheEntry>();\nconst GC_DELAY = 60_000;\nconst EMPTY: any[] = [];\n\nfunction getOrCreate(key: string): CacheEntry {\n let e = cache.get(key);\n if (!e) {\n e = {\n items: EMPTY,\n loading: true,\n error: null,\n refs: 0,\n listeners: new Set(),\n dispose: null,\n gcTimer: null,\n };\n cache.set(key, e);\n }\n return e;\n}\n\nfunction notify(e: CacheEntry): void {\n for (const fn of e.listeners) fn();\n}\n\nfunction doFetch(key: string, entry: CacheEntry, chain: QueryChain<any>): void {\n log.debug(\"useQuery: fetching\", chain.__modelType, \"key:\", key.slice(0, 40));\n entry.loading = true;\n entry.error = null;\n notify(entry);\n\n chain\n .find()\n .then((result: any[]) => {\n log.debug(\"useQuery: got\", result.length, \"items for\", chain.__modelType);\n entry.items = result;\n entry.loading = false;\n notify(entry);\n })\n .catch((err: Error) => {\n log.error(\"useQuery: error\", err.message);\n entry.error = err;\n entry.loading = false;\n notify(entry);\n });\n}\n\n// ── useQuery ─────────────────────────────────────────────────────────────────\n\nfunction getAuthGate(client: ParcaeClient): AuthState | null {\n const transport = client.transport as any;\n return transport?.auth?.state ?? null;\n}\n\nexport function useQuery<T>(\n chain: QueryChain<T> | null | undefined,\n options: UseQueryOptions = {},\n): UseQueryResult<T> {\n const client = useParcae();\n const waitForAuth = options.waitForAuth ?? true;\n\n // Read auth state reactively via Valtio snapshot\n const authGate = getAuthGate(client);\n const authSnap = authGate ? useSnapshot(authGate as any) : null;\n const authStatus = (authSnap as any)?.status ?? \"pending\";\n const authVersion = (authSnap as any)?.version ?? 0;\n const authReady = !waitForAuth || authStatus !== \"pending\";\n\n const key =\n chain && authReady\n ? `${chain.__modelType}:${authVersion}:${JSON.stringify(chain.__steps ?? [])}`\n : null;\n\n const keyRef = useRef(key);\n keyRef.current = key;\n\n const subscribe = (onChange: () => void) => {\n const k = keyRef.current;\n if (!k) return () => {};\n const e = getOrCreate(k);\n e.refs++;\n e.listeners.add(onChange);\n if (e.gcTimer) {\n clearTimeout(e.gcTimer);\n e.gcTimer = null;\n }\n return () => {\n e.listeners.delete(onChange);\n e.refs--;\n if (e.refs <= 0) {\n e.gcTimer = setTimeout(() => {\n e.dispose?.();\n cache.delete(k);\n }, GC_DELAY);\n }\n };\n };\n\n const getSnapshot = (): any[] => {\n const k = keyRef.current;\n if (!k) return EMPTY;\n return cache.get(k)?.items ?? EMPTY;\n };\n\n const items = useSyncExternalStore(\n subscribe,\n getSnapshot,\n getSnapshot,\n ) as T[];\n\n useEffect(() => {\n if (!key || !chain) return;\n const entry = getOrCreate(key);\n if (entry.items === EMPTY) {\n doFetch(key, entry, chain);\n }\n }, [key]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const refetch = () => {\n if (!key || !chain) return;\n doFetch(key, getOrCreate(key), chain);\n };\n\n if (!key)\n return {\n items: EMPTY as T[],\n loading: !authReady,\n error: null,\n refetch: () => {},\n };\n const entry = cache.get(key);\n return {\n items,\n loading: entry?.loading ?? true,\n error: entry?.error ?? null,\n refetch,\n };\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { useSnapshot } from \"valtio\";\nimport { useParcae } from \"./context\";\n\nexport function useApi() {\n const client = useParcae();\n return useMemo(\n () => ({\n get: client.get.bind(client),\n post: client.post.bind(client),\n put: client.put.bind(client),\n patch: client.patch.bind(client),\n delete: client.delete.bind(client),\n }),\n [client],\n );\n}\n\nexport function useSDK() {\n return useParcae();\n}\n\nexport function useConnectionStatus() {\n const client = useParcae();\n const transport = client.transport as any;\n const authState = transport?.auth?.state;\n const snap = authState ? useSnapshot(authState) : null;\n return {\n isConnected: client.isConnected,\n authStatus: (snap as any)?.status ?? \"pending\",\n };\n}\n\nexport function useAuthState() {\n const client = useParcae();\n const transport = client.transport as any;\n const authState = transport?.auth?.state;\n const snap = authState ? useSnapshot(authState) : null;\n return {\n status: (snap as any)?.status ?? \"pending\",\n userId: (snap as any)?.userId ?? null,\n version: (snap as any)?.version ?? 0,\n };\n}\n","\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\nimport { useSnapshot } from \"valtio\";\nimport { useParcae } from \"./context\";\n\nexport function useSetting<T = string>(\n key: string,\n defaultValue: T,\n): [T, (value: T) => Promise<void>, { isLoading: boolean }] {\n const client = useParcae();\n const transport = client.transport as any;\n const authState = transport?.auth?.state;\n const snap = authState ? useSnapshot(authState) : null;\n const authStatus = (snap as any)?.status ?? \"pending\";\n\n const [value, setValue] = useState<T>(defaultValue);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (authStatus === \"pending\") return;\n if (authStatus === \"unauthenticated\") {\n setIsLoading(false);\n return;\n }\n\n let cancelled = false;\n client\n .get(`/settings/${encodeURIComponent(key)}`)\n .then((result: any) => {\n if (!cancelled && result?.value !== undefined) setValue(result.value);\n })\n .catch(() => {})\n .finally(() => {\n if (!cancelled) setIsLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [key, client, authStatus]);\n\n const update = useCallback(\n async (newValue: T) => {\n setValue(newValue);\n await client.put(`/settings/${encodeURIComponent(key)}`, {\n value: newValue,\n });\n },\n [key, client],\n );\n\n return [value, update, { isLoading }];\n}\n","\"use client\";\n\n/**\n * Auth gates — Clerk-style conditional rendering based on auth state.\n *\n * <Authenticated> — renders children only when authenticated\n * <Unauthenticated> — renders children only when not authenticated\n * <AuthLoading> — renders children only while auth is resolving\n */\n\nimport React from \"react\";\nimport { useSnapshot } from \"valtio\";\nimport { useParcae } from \"./context\";\nimport type { AuthStatus } from \"../auth-gate\";\n\nfunction useAuthStatus(): AuthStatus {\n const client = useParcae();\n const transport = client.transport as any;\n const authState = transport?.auth?.state;\n if (!authState) return \"pending\";\n const snap = useSnapshot(authState);\n return (snap as any).status ?? \"pending\";\n}\n\ninterface GateProps {\n children: React.ReactNode;\n /** Optional fallback to render when the gate condition is not met. */\n fallback?: React.ReactNode;\n}\n\n/**\n * Renders children only when the user is authenticated.\n *\n * ```tsx\n * <Authenticated fallback={<LoginPage />}>\n * <Dashboard />\n * </Authenticated>\n * ```\n */\nexport function Authenticated({ children, fallback = null }: GateProps) {\n const status = useAuthStatus();\n if (status === \"authenticated\") return <>{children}</>;\n return <>{fallback}</>;\n}\n\n/**\n * Renders children only when the user is NOT authenticated.\n *\n * ```tsx\n * <Unauthenticated>\n * <LoginForm />\n * </Unauthenticated>\n * ```\n */\nexport function Unauthenticated({ children, fallback = null }: GateProps) {\n const status = useAuthStatus();\n if (status === \"unauthenticated\") return <>{children}</>;\n return <>{fallback}</>;\n}\n\n/**\n * Renders children only while auth is still loading.\n *\n * ```tsx\n * <AuthLoading>\n * <Spinner />\n * </AuthLoading>\n * ```\n */\nexport function AuthLoading({ children, fallback = null }: GateProps) {\n const status = useAuthStatus();\n if (status === \"pending\") return <>{children}</>;\n return <>{fallback}</>;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/react/context.ts","../../src/react/Provider.tsx","../../src/react/useAuth.ts","../../src/react/useQuery.ts","../../src/react/useApi.ts","../../src/react/useSetting.ts","../../src/react/gates.tsx"],"names":["useEffect","useRef","entry","useMemo","useState","jsx"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ParcaeClient } from \"../client\";\n\nexport const ParcaeContext = createContext<ParcaeClient | null>(null);\n\nexport function useParcae(): ParcaeClient {\n const client = useContext(ParcaeContext);\n if (!client)\n throw new Error(\"useParcae must be used within a <ParcaeProvider>\");\n return client;\n}\n","\"use client\";\n\nimport React, { useEffect, useMemo, useRef } from \"react\";\nimport { createClient } from \"../client\";\nimport type { ParcaeClient, ClientConfig } from \"../client\";\nimport { ParcaeContext } from \"./context\";\n\nexport interface ParcaeProviderProps {\n client?: ParcaeClient;\n url?: string;\n /** undefined = auth loading, null = no session, string = token */\n apiKey?: string | null | undefined;\n userId?: string | null;\n version?: string;\n transport?: ClientConfig[\"transport\"];\n children: React.ReactNode;\n onReady?: (client: ParcaeClient) => void;\n onError?: (error: Error) => void;\n}\n\nexport const ParcaeProvider: React.FC<ParcaeProviderProps> = ({\n client: externalClient,\n url,\n apiKey,\n userId,\n version = \"v1\",\n transport = \"socket\",\n children,\n onReady,\n onError,\n}) => {\n const client = useMemo(() => {\n if (externalClient) return externalClient;\n if (!url)\n throw new Error(\n \"ParcaeProvider requires either a `client` or `url` prop\",\n );\n return createClient({ url, version, transport, token: apiKey });\n }, [externalClient, url, version, transport]);\n\n const onReadyRef = useRef(onReady);\n onReadyRef.current = onReady;\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n\n // When apiKey changes, re-authenticate\n useEffect(() => {\n if (apiKey === undefined) return;\n client\n .authenticate(apiKey)\n .then(() => {\n onReadyRef.current?.(client);\n })\n .catch((err: Error) => {\n onErrorRef.current?.(err);\n });\n }, [apiKey, userId, client]);\n\n useEffect(() => {\n const onErr = (err: Error) => onErrorRef.current?.(err);\n client.on(\"error\", onErr);\n return () => {\n client.off(\"error\", onErr);\n };\n }, [client]);\n\n return (\n <ParcaeContext.Provider value={client}>{children}</ParcaeContext.Provider>\n );\n};\n\nexport default ParcaeProvider;\n","\"use client\";\n\n/**\n * Internal hook to read auth state reactively.\n * No Valtio — just reads the gate state and re-renders when it changes.\n */\n\nimport { useState, useEffect } from \"react\";\nimport { useParcae } from \"./context\";\nimport type { AuthStatus } from \"../auth-gate\";\n\nexport function useAuthStatus(): {\n status: AuthStatus;\n userId: string | null;\n version: number;\n} {\n const client = useParcae();\n const transport = client.transport as any;\n const gate = transport?.auth;\n\n const [, forceRender] = useState(0);\n\n useEffect(() => {\n if (!gate) return;\n let mounted = true;\n const check = () => {\n if (mounted) forceRender((n) => n + 1);\n };\n gate.ready.then(check);\n return () => {\n mounted = false;\n };\n }, [gate, gate?.state?.version]);\n\n return {\n status: gate?.state?.status ?? \"pending\",\n userId: gate?.state?.userId ?? null,\n version: gate?.state?.version ?? 0,\n };\n}\n","\"use client\";\n\nimport { useEffect, useRef, useSyncExternalStore } from \"react\";\nimport { useParcae } from \"./context\";\nimport { useAuthStatus } from \"./useAuth\";\nimport { log } from \"../log\";\n\ninterface QueryChain<T> {\n find(): Promise<T[]>;\n __steps?: any[];\n __modelType?: string;\n __modelClass?: any;\n __adapter?: any;\n}\n\ninterface UseQueryOptions {\n waitForAuth?: boolean;\n}\n\ninterface UseQueryResult<T> {\n items: T[];\n loading: boolean;\n error: Error | null;\n refetch: () => void;\n}\n\n// ── Cache ────────────────────────────────────────────────────────────────────\n\ninterface CacheEntry {\n items: any[];\n loading: boolean;\n error: Error | null;\n refs: number;\n listeners: Set<() => void>;\n dispose: (() => void) | null;\n gcTimer: ReturnType<typeof setTimeout> | null;\n}\n\nconst cache = new Map<string, CacheEntry>();\nconst GC_DELAY = 60_000;\nconst EMPTY: any[] = [];\n\nfunction getOrCreate(key: string): CacheEntry {\n let e = cache.get(key);\n if (!e) {\n e = {\n items: EMPTY,\n loading: true,\n error: null,\n refs: 0,\n listeners: new Set(),\n dispose: null,\n gcTimer: null,\n };\n cache.set(key, e);\n }\n return e;\n}\n\nfunction notify(e: CacheEntry): void {\n for (const fn of e.listeners) fn();\n}\n\nfunction doFetch(key: string, entry: CacheEntry, chain: QueryChain<any>): void {\n log.debug(\"useQuery: fetching\", chain.__modelType);\n entry.loading = true;\n entry.error = null;\n notify(entry);\n\n chain\n .find()\n .then((result: any[]) => {\n log.debug(\"useQuery: got\", result.length, \"items for\", chain.__modelType);\n entry.items = result;\n entry.loading = false;\n notify(entry);\n })\n .catch((err: Error) => {\n log.error(\"useQuery: error\", err.message);\n entry.error = err;\n entry.loading = false;\n notify(entry);\n });\n}\n\n// ── useQuery ─────────────────────────────────────────────────────────────────\n\nexport function useQuery<T>(\n chain: QueryChain<T> | null | undefined,\n options: UseQueryOptions = {},\n): UseQueryResult<T> {\n const client = useParcae();\n const waitForAuth = options.waitForAuth ?? true;\n const { status: authStatus, version: authVersion } = useAuthStatus();\n const authReady = !waitForAuth || authStatus !== \"pending\";\n\n const key =\n chain && authReady\n ? `${chain.__modelType}:${authVersion}:${JSON.stringify(chain.__steps ?? [])}`\n : null;\n\n const keyRef = useRef(key);\n keyRef.current = key;\n\n const subscribe = (onChange: () => void) => {\n const k = keyRef.current;\n if (!k) return () => {};\n const e = getOrCreate(k);\n e.refs++;\n e.listeners.add(onChange);\n if (e.gcTimer) {\n clearTimeout(e.gcTimer);\n e.gcTimer = null;\n }\n return () => {\n e.listeners.delete(onChange);\n e.refs--;\n if (e.refs <= 0) {\n e.gcTimer = setTimeout(() => {\n e.dispose?.();\n cache.delete(k);\n }, GC_DELAY);\n }\n };\n };\n\n const getSnapshot = (): any[] => {\n const k = keyRef.current;\n if (!k) return EMPTY;\n return cache.get(k)?.items ?? EMPTY;\n };\n\n const items = useSyncExternalStore(\n subscribe,\n getSnapshot,\n getSnapshot,\n ) as T[];\n\n useEffect(() => {\n if (!key || !chain) return;\n const entry = getOrCreate(key);\n if (entry.items === EMPTY) {\n doFetch(key, entry, chain);\n }\n }, [key]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const refetch = () => {\n if (!key || !chain) return;\n doFetch(key, getOrCreate(key), chain);\n };\n\n if (!key)\n return {\n items: EMPTY as T[],\n loading: !authReady,\n error: null,\n refetch: () => {},\n };\n const entry = cache.get(key);\n return {\n items,\n loading: entry?.loading ?? true,\n error: entry?.error ?? null,\n refetch,\n };\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { useParcae } from \"./context\";\nimport { useAuthStatus } from \"./useAuth\";\n\nexport function useApi() {\n const client = useParcae();\n return useMemo(\n () => ({\n get: client.get.bind(client),\n post: client.post.bind(client),\n put: client.put.bind(client),\n patch: client.patch.bind(client),\n delete: client.delete.bind(client),\n }),\n [client],\n );\n}\n\nexport function useSDK() {\n return useParcae();\n}\n\nexport function useConnectionStatus() {\n const client = useParcae();\n const { status } = useAuthStatus();\n return { isConnected: client.isConnected, authStatus: status };\n}\n\nexport function useAuthState() {\n return useAuthStatus();\n}\n","\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\nimport { useParcae } from \"./context\";\nimport { useAuthStatus } from \"./useAuth\";\n\nexport function useSetting<T = string>(\n key: string,\n defaultValue: T,\n): [T, (value: T) => Promise<void>, { isLoading: boolean }] {\n const client = useParcae();\n const { status: authStatus } = useAuthStatus();\n\n const [value, setValue] = useState<T>(defaultValue);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (authStatus === \"pending\") return;\n if (authStatus === \"unauthenticated\") {\n setIsLoading(false);\n return;\n }\n\n let cancelled = false;\n client\n .get(`/settings/${encodeURIComponent(key)}`)\n .then((result: any) => {\n if (!cancelled && result?.value !== undefined) setValue(result.value);\n })\n .catch(() => {})\n .finally(() => {\n if (!cancelled) setIsLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [key, client, authStatus]);\n\n const update = useCallback(\n async (newValue: T) => {\n setValue(newValue);\n await client.put(`/settings/${encodeURIComponent(key)}`, {\n value: newValue,\n });\n },\n [key, client],\n );\n\n return [value, update, { isLoading }];\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useAuthStatus } from \"./useAuth\";\n\ninterface GateProps {\n children: React.ReactNode;\n fallback?: React.ReactNode;\n}\n\nexport function Authenticated({ children, fallback = null }: GateProps) {\n const { status } = useAuthStatus();\n return status === \"authenticated\" ? <>{children}</> : <>{fallback}</>;\n}\n\nexport function Unauthenticated({ children, fallback = null }: GateProps) {\n const { status } = useAuthStatus();\n return status === \"unauthenticated\" ? <>{children}</> : <>{fallback}</>;\n}\n\nexport function AuthLoading({ children, fallback = null }: GateProps) {\n const { status } = useAuthStatus();\n return status === \"pending\" ? <>{children}</> : <>{fallback}</>;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/log.ts","../../../node_modules/.pnpm/proxy-compare@3.0.1/node_modules/proxy-compare/dist/index.js","../../../node_modules/.pnpm/valtio@2.3.1_@types+react@19.2.14_react@19.2.4/node_modules/valtio/esm/vanilla.mjs","../src/auth-gate.ts","../src/transports/socket.ts","../src/transports/sse.ts","../src/client.ts"],"names":["proxyCache","target","isObject","newProxy","EventEmitter","body"],"mappings":"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","file":"chunk-AD4KUAPS.js","sourcesContent":["/**\n * SDK logger — same format as backend.\n * Only logs in development. Silent in production.\n */\n\nconst isDev =\n typeof process !== \"undefined\" ? process.env.NODE_ENV !== \"production\" : true;\n\nfunction time(): string {\n const d = new Date();\n return `${String(d.getHours()).padStart(2, \"0\")}:${String(d.getMinutes()).padStart(2, \"0\")}:${String(d.getSeconds()).padStart(2, \"0\")}`;\n}\n\nexport const log = {\n info: (...args: any[]) =>\n isDev && console.log(`%c${time()} SDK`, \"color: #6b7\", ...args),\n warn: (...args: any[]) =>\n isDev && console.warn(`%c${time()} SDK`, \"color: #fb3\", ...args),\n error: (...args: any[]) =>\n console.error(`%c${time()} SDK`, \"color: #f44\", ...args),\n debug: (...args: any[]) =>\n isDev && console.debug(`%c${time()} SDK`, \"color: #888\", ...args),\n};\n","/* eslint @typescript-eslint/no-explicit-any: off */\n// symbols\nconst TRACK_MEMO_SYMBOL = Symbol();\nconst GET_ORIGINAL_SYMBOL = Symbol();\n// properties\nconst AFFECTED_PROPERTY = 'a';\nconst IS_TARGET_COPIED_PROPERTY = 'f';\nconst PROXY_PROPERTY = 'p';\nconst PROXY_CACHE_PROPERTY = 'c';\nconst TARGET_CACHE_PROPERTY = 't';\nconst HAS_KEY_PROPERTY = 'h';\nconst ALL_OWN_KEYS_PROPERTY = 'w';\nconst HAS_OWN_KEY_PROPERTY = 'o';\nconst KEYS_PROPERTY = 'k';\n// function to create a new bare proxy\nlet newProxy = (target, handler) => new Proxy(target, handler);\n// get object prototype\nconst getProto = Object.getPrototypeOf;\nconst objectsToTrack = new WeakMap();\n// check if obj is a plain object or an array\nconst isObjectToTrack = (obj) => obj &&\n (objectsToTrack.has(obj)\n ? objectsToTrack.get(obj)\n : getProto(obj) === Object.prototype || getProto(obj) === Array.prototype);\n// check if it is object\nconst isObject = (x) => typeof x === 'object' && x !== null;\n// Properties that are both non-configurable and non-writable will break\n// the proxy get trap when we try to return a recursive/child compare proxy\n// from them. We can avoid this by making a copy of the target object with\n// all descriptors marked as configurable, see `copyTargetObject`.\n// See: https://github.com/dai-shi/proxy-compare/pull/8\nconst needsToCopyTargetObject = (obj) => Object.values(Object.getOwnPropertyDescriptors(obj)).some((descriptor) => !descriptor.configurable && !descriptor.writable);\n// Make a copy with all descriptors marked as configurable.\nconst copyTargetObject = (obj) => {\n if (Array.isArray(obj)) {\n // Arrays need a special way to copy\n return Array.from(obj);\n }\n // For non-array objects, we create a new object keeping the prototype\n // with changing all configurable options (otherwise, proxies will complain)\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n Object.values(descriptors).forEach((desc) => {\n desc.configurable = true;\n });\n return Object.create(getProto(obj), descriptors);\n};\nconst createProxyHandler = (origObj, isTargetCopied) => {\n const state = {\n [IS_TARGET_COPIED_PROPERTY]: isTargetCopied,\n };\n let trackObject = false; // for trackMemo\n const recordUsage = (type, key) => {\n if (!trackObject) {\n let used = state[AFFECTED_PROPERTY].get(origObj);\n if (!used) {\n used = {};\n state[AFFECTED_PROPERTY].set(origObj, used);\n }\n if (type === ALL_OWN_KEYS_PROPERTY) {\n used[ALL_OWN_KEYS_PROPERTY] = true;\n }\n else {\n let set = used[type];\n if (!set) {\n set = new Set();\n used[type] = set;\n }\n set.add(key);\n }\n }\n };\n const recordObjectAsUsed = () => {\n trackObject = true;\n state[AFFECTED_PROPERTY].delete(origObj);\n };\n const handler = {\n get(target, key) {\n if (key === GET_ORIGINAL_SYMBOL) {\n return origObj;\n }\n recordUsage(KEYS_PROPERTY, key);\n return createProxy(Reflect.get(target, key), state[AFFECTED_PROPERTY], state[PROXY_CACHE_PROPERTY], state[TARGET_CACHE_PROPERTY]);\n },\n has(target, key) {\n if (key === TRACK_MEMO_SYMBOL) {\n recordObjectAsUsed();\n return true;\n }\n recordUsage(HAS_KEY_PROPERTY, key);\n return Reflect.has(target, key);\n },\n getOwnPropertyDescriptor(target, key) {\n recordUsage(HAS_OWN_KEY_PROPERTY, key);\n return Reflect.getOwnPropertyDescriptor(target, key);\n },\n ownKeys(target) {\n recordUsage(ALL_OWN_KEYS_PROPERTY);\n return Reflect.ownKeys(target);\n },\n };\n if (isTargetCopied) {\n handler.set = handler.deleteProperty = () => false;\n }\n return [handler, state];\n};\nconst getOriginalObject = (obj) => \n// unwrap proxy\nobj[GET_ORIGINAL_SYMBOL] ||\n // otherwise\n obj;\n/**\n * Create a proxy.\n *\n * This function will create a proxy at top level and proxy nested objects as you access them,\n * in order to keep track of which properties were accessed via get/has proxy handlers:\n *\n * NOTE: Printing of WeakMap is hard to inspect and not very readable\n * for this purpose you can use the `affectedToPathList` helper.\n *\n * @param {object} obj - Object that will be wrapped on the proxy.\n * @param {WeakMap<object, unknown>} affected -\n * WeakMap that will hold the tracking of which properties in the proxied object were accessed.\n * @param {WeakMap<object, unknown>} [proxyCache] -\n * WeakMap that will help keep referential identity for proxies.\n * @returns {Proxy<object>} - Object wrapped in a proxy.\n *\n * @example\n * import { createProxy } from 'proxy-compare';\n *\n * const original = { a: \"1\", c: \"2\", d: { e: \"3\" } };\n * const affected = new WeakMap();\n * const proxy = createProxy(original, affected);\n *\n * proxy.a // Will mark as used and track its value.\n * // This will update the affected WeakMap with original as key\n * // and a Set with \"a\"\n *\n * proxy.d // Will mark \"d\" as accessed to track and proxy itself ({ e: \"3\" }).\n * // This will update the affected WeakMap with original as key\n * // and a Set with \"d\"\n */\nexport const createProxy = (obj, affected, proxyCache, targetCache) => {\n if (!isObjectToTrack(obj))\n return obj;\n let targetAndCopied = targetCache && targetCache.get(obj);\n if (!targetAndCopied) {\n const target = getOriginalObject(obj);\n if (needsToCopyTargetObject(target)) {\n targetAndCopied = [target, copyTargetObject(target)];\n }\n else {\n targetAndCopied = [target];\n }\n targetCache === null || targetCache === void 0 ? void 0 : targetCache.set(obj, targetAndCopied);\n }\n const [target, copiedTarget] = targetAndCopied;\n let handlerAndState = proxyCache && proxyCache.get(target);\n if (!handlerAndState ||\n handlerAndState[1][IS_TARGET_COPIED_PROPERTY] !== !!copiedTarget) {\n handlerAndState = createProxyHandler(target, !!copiedTarget);\n handlerAndState[1][PROXY_PROPERTY] = newProxy(copiedTarget || target, handlerAndState[0]);\n if (proxyCache) {\n proxyCache.set(target, handlerAndState);\n }\n }\n handlerAndState[1][AFFECTED_PROPERTY] = affected;\n handlerAndState[1][PROXY_CACHE_PROPERTY] = proxyCache;\n handlerAndState[1][TARGET_CACHE_PROPERTY] = targetCache;\n return handlerAndState[1][PROXY_PROPERTY];\n};\nconst isAllOwnKeysChanged = (prevObj, nextObj) => {\n const prevKeys = Reflect.ownKeys(prevObj);\n const nextKeys = Reflect.ownKeys(nextObj);\n return (prevKeys.length !== nextKeys.length ||\n prevKeys.some((k, i) => k !== nextKeys[i]));\n};\n/**\n * Compare changes on objects.\n *\n * This will compare the affected properties on tracked objects inside the proxy\n * to check if there were any changes made to it,\n * by default if no property was accessed on the proxy it will attempt to do a\n * reference equality check for the objects provided (Object.is(a, b)). If you access a property\n * on the proxy, then isChanged will only compare the affected properties.\n *\n * @param {object} prevObj - The previous object to compare.\n * @param {object} nextObj - Object to compare with the previous one.\n * @param {WeakMap<object, unknown>} affected -\n * WeakMap that holds the tracking of which properties in the proxied object were accessed.\n * @param {WeakMap<object, unknown>} [cache] -\n * WeakMap that holds a cache of the comparisons for better performance with repetitive comparisons,\n * and to avoid infinite loop with circular structures.\n * @returns {boolean} - Boolean indicating if the affected property on the object has changed.\n *\n * @example\n * import { createProxy, isChanged } from 'proxy-compare';\n *\n * const obj = { a: \"1\", c: \"2\", d: { e: \"3\" } };\n * const affected = new WeakMap();\n *\n * const proxy = createProxy(obj, affected);\n *\n * proxy.a\n *\n * isChanged(obj, { a: \"1\" }, affected) // false\n *\n * proxy.a = \"2\"\n *\n * isChanged(obj, { a: \"1\" }, affected) // true\n */\nexport const isChanged = (prevObj, nextObj, affected, cache, // for object with cycles\nisEqual = Object.is) => {\n if (isEqual(prevObj, nextObj)) {\n return false;\n }\n if (!isObject(prevObj) || !isObject(nextObj))\n return true;\n const used = affected.get(getOriginalObject(prevObj));\n if (!used)\n return true;\n if (cache) {\n const hit = cache.get(prevObj);\n if (hit === nextObj) {\n return false;\n }\n // for object with cycles\n cache.set(prevObj, nextObj);\n }\n let changed = null;\n for (const key of used[HAS_KEY_PROPERTY] || []) {\n changed = Reflect.has(prevObj, key) !== Reflect.has(nextObj, key);\n if (changed)\n return changed;\n }\n if (used[ALL_OWN_KEYS_PROPERTY] === true) {\n changed = isAllOwnKeysChanged(prevObj, nextObj);\n if (changed)\n return changed;\n }\n else {\n for (const key of used[HAS_OWN_KEY_PROPERTY] || []) {\n const hasPrev = !!Reflect.getOwnPropertyDescriptor(prevObj, key);\n const hasNext = !!Reflect.getOwnPropertyDescriptor(nextObj, key);\n changed = hasPrev !== hasNext;\n if (changed)\n return changed;\n }\n }\n for (const key of used[KEYS_PROPERTY] || []) {\n changed = isChanged(prevObj[key], nextObj[key], affected, cache, isEqual);\n if (changed)\n return changed;\n }\n if (changed === null)\n throw new Error('invalid used');\n return changed;\n};\n// explicitly track object with memo\nexport const trackMemo = (obj) => {\n if (isObjectToTrack(obj)) {\n return TRACK_MEMO_SYMBOL in obj;\n }\n return false;\n};\n/**\n * Unwrap proxy to get the original object.\n *\n * Used to retrieve the original object used to create the proxy instance with `createProxy`.\n *\n * @param {Proxy<object>} obj - The proxy wrapper of the originial object.\n * @returns {object | null} - Return either the unwrapped object if exists.\n *\n * @example\n * import { createProxy, getUntracked } from 'proxy-compare';\n *\n * const original = { a: \"1\", c: \"2\", d: { e: \"3\" } };\n * const affected = new WeakMap();\n *\n * const proxy = createProxy(original, affected);\n * const originalFromProxy = getUntracked(proxy)\n *\n * Object.is(original, originalFromProxy) // true\n * isChanged(original, originalFromProxy, affected) // false\n */\nexport const getUntracked = (obj) => {\n if (isObjectToTrack(obj)) {\n return obj[GET_ORIGINAL_SYMBOL] || null;\n }\n return null;\n};\n/**\n * Mark object to be tracked.\n *\n * This function marks an object that will be passed into `createProxy`\n * as marked to track or not. By default only Array and Object are marked to track,\n * so this is useful for example to mark a class instance to track or to mark a object\n * to be untracked when creating your proxy.\n *\n * @param obj - Object to mark as tracked or not.\n * @param mark - Boolean indicating whether you want to track this object or not.\n * @returns - No return.\n *\n * @example\n * import { createProxy, markToTrack, isChanged } from 'proxy-compare';\n *\n * const nested = { e: \"3\" }\n *\n * markToTrack(nested, false)\n *\n * const original = { a: \"1\", c: \"2\", d: nested };\n * const affected = new WeakMap();\n *\n * const proxy = createProxy(original, affected);\n *\n * proxy.d.e\n *\n * isChanged(original, { d: { e: \"3\" } }, affected) // true\n */\nexport const markToTrack = (obj, mark = true) => {\n objectsToTrack.set(obj, mark);\n};\n/**\n * Convert `affected` to path list\n *\n * `affected` is a weak map which is not printable.\n * This function is can convert it to printable path list.\n * It's for debugging purpose.\n *\n * @param obj - An object that is used with `createProxy`.\n * @param affected - A weak map that is used with `createProxy`.\n * @param onlyWithValues - An optional boolean to exclude object getters.\n * @returns - An array of paths.\n */\nexport const affectedToPathList = (obj, affected, onlyWithValues) => {\n const list = [];\n const seen = new WeakSet();\n const walk = (x, path) => {\n var _a, _b, _c;\n if (seen.has(x)) {\n // for object with cycles\n return;\n }\n if (isObject(x)) {\n seen.add(x);\n }\n const used = isObject(x) && affected.get(getOriginalObject(x));\n if (used) {\n (_a = used[HAS_KEY_PROPERTY]) === null || _a === void 0 ? void 0 : _a.forEach((key) => {\n const segment = `:has(${String(key)})`;\n list.push(path ? [...path, segment] : [segment]);\n });\n if (used[ALL_OWN_KEYS_PROPERTY] === true) {\n const segment = ':ownKeys';\n list.push(path ? [...path, segment] : [segment]);\n }\n else {\n (_b = used[HAS_OWN_KEY_PROPERTY]) === null || _b === void 0 ? void 0 : _b.forEach((key) => {\n const segment = `:hasOwn(${String(key)})`;\n list.push(path ? [...path, segment] : [segment]);\n });\n }\n (_c = used[KEYS_PROPERTY]) === null || _c === void 0 ? void 0 : _c.forEach((key) => {\n if (!onlyWithValues ||\n 'value' in (Object.getOwnPropertyDescriptor(x, key) || {})) {\n walk(x[key], path ? [...path, key] : [key]);\n }\n });\n }\n else if (path) {\n list.push(path);\n }\n };\n walk(obj);\n return list;\n};\n/**\n * replace newProxy function.\n *\n * This can be used if you want to use proxy-polyfill.\n * Note that proxy-polyfill can't polyfill everything.\n * Use it at your own risk.\n */\nexport const replaceNewProxy = (fn) => {\n newProxy = fn;\n};\n","import { getUntracked, markToTrack } from 'proxy-compare';\n\nconst isObject = (x) => typeof x === \"object\" && x !== null;\nconst canProxyDefault = (x) => isObject(x) && !refSet.has(x) && (Array.isArray(x) || !(Symbol.iterator in x)) && !(x instanceof WeakMap) && !(x instanceof WeakSet) && !(x instanceof Error) && !(x instanceof Number) && !(x instanceof Date) && !(x instanceof String) && !(x instanceof RegExp) && !(x instanceof ArrayBuffer) && !(x instanceof Promise);\nconst createSnapshotDefault = (target, version) => {\n const cache = snapCache.get(target);\n if ((cache == null ? void 0 : cache[0]) === version) {\n return cache[1];\n }\n const snap = Array.isArray(target) ? [] : Object.create(Object.getPrototypeOf(target));\n markToTrack(snap, true);\n snapCache.set(target, [version, snap]);\n Reflect.ownKeys(target).forEach((key) => {\n if (Object.getOwnPropertyDescriptor(snap, key)) {\n return;\n }\n const value = Reflect.get(target, key);\n const { enumerable } = Reflect.getOwnPropertyDescriptor(\n target,\n key\n );\n const desc = {\n value,\n enumerable,\n // This is intentional to avoid copying with proxy-compare.\n // It's still non-writable, so it avoids assigning a value.\n configurable: true\n };\n if (refSet.has(value)) {\n markToTrack(value, false);\n } else if (proxyStateMap.has(value)) {\n const [target2, ensureVersion] = proxyStateMap.get(\n value\n );\n desc.value = createSnapshotDefault(target2, ensureVersion());\n }\n Object.defineProperty(snap, key, desc);\n });\n return Object.preventExtensions(snap);\n};\nconst createHandlerDefault = (isInitializing, addPropListener, removePropListener, notifyUpdate) => ({\n deleteProperty(target, prop) {\n const prevValue = Reflect.get(target, prop);\n removePropListener(prop);\n const deleted = Reflect.deleteProperty(target, prop);\n if (deleted) {\n notifyUpdate(createOp == null ? void 0 : createOp(\"delete\", prop, prevValue));\n }\n return deleted;\n },\n set(target, prop, value, receiver) {\n const hasPrevValue = !isInitializing() && Reflect.has(target, prop);\n const prevValue = Reflect.get(target, prop, receiver);\n if (hasPrevValue && (objectIs(prevValue, value) || proxyCache.has(value) && objectIs(prevValue, proxyCache.get(value)))) {\n return true;\n }\n removePropListener(prop);\n if (isObject(value)) {\n value = getUntracked(value) || value;\n }\n const nextValue = !proxyStateMap.has(value) && canProxy(value) ? proxy(value) : value;\n addPropListener(prop, nextValue);\n Reflect.set(target, prop, nextValue, receiver);\n notifyUpdate(createOp == null ? void 0 : createOp(\"set\", prop, value, prevValue));\n return true;\n }\n});\nconst createOpDefault = (type, prop, ...args) => [type, [prop], ...args];\nconst proxyStateMap = /* @__PURE__ */ new WeakMap();\nconst refSet = /* @__PURE__ */ new WeakSet();\nconst snapCache = /* @__PURE__ */ new WeakMap();\nconst versionHolder = [1];\nconst proxyCache = /* @__PURE__ */ new WeakMap();\nlet objectIs = Object.is;\nlet newProxy = (target, handler) => new Proxy(target, handler);\nlet canProxy = canProxyDefault;\nlet createSnapshot = createSnapshotDefault;\nlet createHandler = createHandlerDefault;\nlet createOp;\nfunction proxy(baseObject = {}) {\n if (!isObject(baseObject)) {\n throw new Error(\"object required\");\n }\n const found = proxyCache.get(baseObject);\n if (found) {\n return found;\n }\n let version = versionHolder[0];\n const listeners = /* @__PURE__ */ new Set();\n const notifyUpdate = (op, nextVersion = ++versionHolder[0]) => {\n if (version !== nextVersion) {\n checkVersion = version = nextVersion;\n listeners.forEach((listener) => listener(op, nextVersion));\n }\n };\n let checkVersion = version;\n const ensureVersion = (nextCheckVersion = versionHolder[0]) => {\n if (checkVersion !== nextCheckVersion) {\n checkVersion = nextCheckVersion;\n propProxyStates.forEach(([propProxyState]) => {\n const propVersion = propProxyState[1](nextCheckVersion);\n if (propVersion > version) {\n version = propVersion;\n }\n });\n }\n return version;\n };\n const createPropListener = (prop) => (op, nextVersion) => {\n let newOp;\n if (op) {\n newOp = [...op];\n newOp[1] = [prop, ...newOp[1]];\n }\n notifyUpdate(newOp, nextVersion);\n };\n const propProxyStates = /* @__PURE__ */ new Map();\n const addPropListener = (prop, propValue) => {\n const propProxyState = !refSet.has(propValue) && proxyStateMap.get(propValue);\n if (propProxyState) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && propProxyStates.has(prop)) {\n throw new Error(\"prop listener already exists\");\n }\n if (listeners.size) {\n const remove = propProxyState[2](createPropListener(prop));\n propProxyStates.set(prop, [propProxyState, remove]);\n } else {\n propProxyStates.set(prop, [propProxyState]);\n }\n }\n };\n const removePropListener = (prop) => {\n var _a;\n const entry = propProxyStates.get(prop);\n if (entry) {\n propProxyStates.delete(prop);\n (_a = entry[1]) == null ? void 0 : _a.call(entry);\n }\n };\n const addListener = (listener) => {\n listeners.add(listener);\n if (listeners.size === 1) {\n propProxyStates.forEach(([propProxyState, prevRemove], prop) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && prevRemove) {\n throw new Error(\"remove already exists\");\n }\n const remove = propProxyState[2](createPropListener(prop));\n propProxyStates.set(prop, [propProxyState, remove]);\n });\n }\n const removeListener = () => {\n listeners.delete(listener);\n if (listeners.size === 0) {\n propProxyStates.forEach(([propProxyState, remove], prop) => {\n if (remove) {\n remove();\n propProxyStates.set(prop, [propProxyState]);\n }\n });\n }\n };\n return removeListener;\n };\n let initializing = true;\n const handler = createHandler(\n () => initializing,\n addPropListener,\n removePropListener,\n notifyUpdate\n );\n const proxyObject = newProxy(baseObject, handler);\n proxyCache.set(baseObject, proxyObject);\n const proxyState = [baseObject, ensureVersion, addListener];\n proxyStateMap.set(proxyObject, proxyState);\n Reflect.ownKeys(baseObject).forEach((key) => {\n const desc = Object.getOwnPropertyDescriptor(\n baseObject,\n key\n );\n if (\"value\" in desc && desc.writable) {\n proxyObject[key] = baseObject[key];\n }\n });\n initializing = false;\n return proxyObject;\n}\nfunction getVersion(proxyObject) {\n const proxyState = proxyStateMap.get(proxyObject);\n return proxyState == null ? void 0 : proxyState[1]();\n}\nfunction subscribe(proxyObject, callback, notifyInSync) {\n const proxyState = proxyStateMap.get(proxyObject);\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && !proxyState) {\n console.warn(\"Please use proxy object\");\n }\n let promise;\n const ops = [];\n const addListener = proxyState[2];\n let isListenerActive = false;\n const listener = (op) => {\n if (op) {\n ops.push(op);\n }\n if (notifyInSync) {\n callback(ops.splice(0));\n return;\n }\n if (!promise) {\n promise = Promise.resolve().then(() => {\n promise = void 0;\n if (isListenerActive) {\n callback(ops.splice(0));\n }\n });\n }\n };\n const removeListener = addListener(listener);\n isListenerActive = true;\n return () => {\n isListenerActive = false;\n removeListener();\n };\n}\nfunction snapshot(proxyObject) {\n const proxyState = proxyStateMap.get(proxyObject);\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && !proxyState) {\n console.warn(\"Please use proxy object\");\n }\n const [target, ensureVersion] = proxyState;\n return createSnapshot(target, ensureVersion());\n}\nfunction ref(obj) {\n refSet.add(obj);\n return obj;\n}\nfunction unstable_getInternalStates() {\n return {\n proxyStateMap,\n refSet,\n snapCache,\n versionHolder,\n proxyCache\n };\n}\nfunction unstable_replaceInternalFunction(name, fn) {\n switch (name) {\n case \"objectIs\":\n objectIs = fn(objectIs);\n break;\n case \"newProxy\":\n newProxy = fn(newProxy);\n break;\n case \"canProxy\":\n canProxy = fn(canProxy);\n break;\n case \"createSnapshot\":\n createSnapshot = fn(createSnapshot);\n break;\n case \"createHandler\":\n createHandler = fn(createHandler);\n break;\n default:\n throw new Error(\"unknown function\");\n }\n}\nfunction unstable_enableOp(enabled = true) {\n if (enabled === true) {\n createOp = createOpDefault;\n } else if (enabled === false) {\n createOp = void 0;\n } else {\n createOp = enabled;\n }\n}\n\nexport { getVersion, proxy, ref, snapshot, subscribe, unstable_enableOp, unstable_getInternalStates, unstable_replaceInternalFunction };\n","/**\n * AuthGate — reactive auth state via Valtio proxy.\n *\n * The transport writes to this directly. React reads via useSnapshot().\n * No useState, no useEffect, no manual syncing.\n */\n\nimport { log } from \"./log\";\nimport { proxy } from \"valtio\";\n\nexport type AuthStatus = \"pending\" | \"authenticated\" | \"unauthenticated\";\n\nexport interface AuthState {\n status: AuthStatus;\n userId: string | null;\n version: number;\n}\n\nexport class AuthGate {\n /** Reactive state — subscribe with valtio useSnapshot() */\n public state = proxy<AuthState>({\n status: \"pending\",\n userId: null,\n version: 0,\n });\n\n /** Awaitable — resolves when auth is confirmed (either way) */\n public ready: Promise<void>;\n\n private _resolve: (() => void) | null = null;\n\n constructor() {\n this.ready = this._makePending();\n }\n\n /** Auth confirmed — user is authenticated */\n resolve(userId: string): void {\n this.state.status = \"authenticated\";\n log.debug(\"auth: authenticated, userId:\", userId);\n this.state.userId = userId;\n this.state.version++;\n this._resolve?.();\n this._resolve = null;\n }\n\n /** Auth confirmed — no user */\n resolveUnauthenticated(): void {\n this.state.status = \"unauthenticated\";\n log.debug(\"auth: unauthenticated\");\n this.state.userId = null;\n this.state.version++;\n this._resolve?.();\n this._resolve = null;\n }\n\n /** Reset to pending (disconnect, token change) */\n reset(): void {\n if (this.state.status !== \"pending\") {\n this.state.status = \"pending\";\n log.debug(\"auth: reset to pending\");\n this.state.userId = null;\n this.ready = this._makePending();\n }\n }\n\n private _makePending(): Promise<void> {\n return new Promise<void>((r) => {\n this._resolve = r;\n });\n }\n}\n","/**\n * SocketTransport — Socket.IO with Valtio-reactive AuthGate.\n *\n * Auth state lives in a Valtio proxy. React reads via useSnapshot().\n * Transport writes directly — no React involvement.\n */\n\nimport SocketIO from \"socket.io-client\";\nimport pako from \"pako\";\nimport { decompress } from \"compress-json\";\nimport { EventEmitter } from \"eventemitter3\";\nimport ShortId from \"short-unique-id\";\nimport type { Transport } from \"@parcae/model\";\nimport { AuthGate } from \"../auth-gate\";\nimport { log } from \"../log\";\n\nconst uid = new ShortId({ length: 10 });\nconst SOCKETS = new Map<string, any>();\n\nexport interface SocketTransportConfig {\n url: string;\n version?: string;\n path?: string;\n token?: string | null;\n}\n\nexport class SocketTransport extends EventEmitter implements Transport {\n public auth = new AuthGate();\n public isConnected = false;\n\n private socket: any;\n private url: string;\n private version: string;\n private token: string | null | undefined;\n private inflight = new Map<string, Promise<any>>();\n\n constructor(config: SocketTransportConfig) {\n super();\n this.url = config.url;\n this.version = config.version ?? \"v1\";\n this.token = config.token;\n\n const socketPath = config.path ?? \"/ws\";\n const socketKey = `${this.url}:${socketPath}`;\n\n if (SOCKETS.has(socketKey)) {\n this.socket = SOCKETS.get(socketKey);\n } else {\n this.socket = SocketIO(this.url, {\n path: socketPath,\n transports: [\"websocket\"],\n withCredentials: true,\n });\n SOCKETS.set(socketKey, this.socket);\n }\n\n this.socket.on(\"connect\", () => {\n this.isConnected = true;\n log.debug(\"socket connected\");\n this._doAuth();\n this.emit(\"connected\");\n });\n\n this.socket.on(\"disconnect\", () => {\n this.isConnected = false;\n log.debug(\"socket disconnected\");\n this.auth.reset();\n this.emit(\"disconnected\");\n });\n\n this.socket.on(\"error\", (err: Error) => this.emit(\"error\", err));\n\n if (this.socket.connected) {\n this.isConnected = true;\n log.debug(\"socket connected\");\n this._doAuth();\n }\n\n if (this.token === null) {\n this.auth.resolveUnauthenticated();\n }\n }\n\n private _doAuth(): void {\n if (this.token === undefined) return;\n if (this.token === null) {\n this.auth.resolveUnauthenticated();\n return;\n }\n\n const t0 = performance.now();\n log.debug(\"authenticating...\");\n this.socket.emit(\"authenticate\", this.token, (response: any) => {\n const ms = (performance.now() - t0).toFixed(0);\n const userId = response?.userId ?? null;\n if (userId) {\n this.auth.resolve(userId);\n log.debug(`authenticated as ${userId} (${ms}ms)`);\n } else {\n this.auth.resolveUnauthenticated();\n log.debug(`auth rejected (${ms}ms)`);\n }\n });\n }\n\n async authenticate(token: string | null): Promise<{ userId: string | null }> {\n this.token = token;\n this.auth.reset();\n\n if (token === null) {\n this.auth.resolveUnauthenticated();\n return { userId: null };\n }\n\n if (!this.socket.connected) {\n return new Promise((resolve) => {\n const handler = () => {\n this.socket.off(\"connect\", handler);\n this.socket.emit(\"authenticate\", token, (response: any) => {\n const userId = response?.userId ?? null;\n if (userId) this.auth.resolve(userId);\n else this.auth.resolveUnauthenticated();\n resolve({ userId });\n });\n };\n this.socket.once(\"connect\", handler);\n });\n }\n\n return new Promise((resolve) => {\n this.socket.emit(\"authenticate\", token, (response: any) => {\n const userId = response?.userId ?? null;\n if (userId) this.auth.resolve(userId);\n else this.auth.resolveUnauthenticated();\n resolve({ userId });\n });\n });\n }\n\n // ── Request/Response ──────────────────────────────────────────────\n\n private async fetch(\n method: string,\n path: string,\n data: any = {},\n ): Promise<any> {\n await this.auth.ready;\n\n if (!this.socket.connected) {\n await new Promise<void>((resolve, reject) => {\n if (this.socket.connected) return resolve();\n const timeout = setTimeout(() => {\n cleanup();\n reject(new Error(\"Connection timeout\"));\n }, 30000);\n const onConnect = () => {\n cleanup();\n resolve();\n };\n const onError = (err: Error) => {\n cleanup();\n reject(err);\n };\n const cleanup = () => {\n clearTimeout(timeout);\n this.socket.off(\"connect\", onConnect);\n this.socket.off(\"connect_error\", onError);\n };\n this.socket.once(\"connect\", onConnect);\n this.socket.once(\"connect_error\", onError);\n });\n }\n\n const upper = method.toUpperCase();\n if (upper === \"GET\") {\n const dedupeKey = `${path}:${JSON.stringify(data)}`;\n const existing = this.inflight.get(dedupeKey);\n if (existing) return existing;\n const req = this._call(method, path, data);\n this.inflight.set(dedupeKey, req);\n req.finally(() => this.inflight.delete(dedupeKey));\n return req;\n }\n\n return this._call(method, path, data);\n }\n\n private _call(method: string, path: string, data: any): Promise<any> {\n const id = uid.rnd();\n const t0 = performance.now();\n const fullPath = `/${this.version}${path}`;\n log.debug(`→ ${method.toUpperCase()} ${fullPath}`);\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.socket.off(id);\n log.debug(`✗ ${method.toUpperCase()} ${fullPath} timeout (30s)`);\n reject(new Error(`RPC timeout: ${method} ${path}`));\n }, 30000);\n\n this.socket.once(id, (msg: any) => {\n clearTimeout(timeout);\n const ms = (performance.now() - t0).toFixed(0);\n try {\n const uncompressed = pako.ungzip(msg, { to: \"string\" });\n const parsed = decompress(JSON.parse(uncompressed));\n if (parsed.success) {\n log.debug(`← ${method.toUpperCase()} ${fullPath} (${ms}ms)`);\n resolve(parsed.result);\n } else {\n log.debug(\n `✗ ${method.toUpperCase()} ${fullPath} (${ms}ms) ${parsed.error || parsed.message}`,\n );\n reject(\n new Error(\n parsed.message || parsed.error || `${method} ${path} failed`,\n ),\n );\n }\n } catch (err) {\n log.debug(\n `✗ ${method.toUpperCase()} ${fullPath} (${ms}ms) parse error`,\n );\n reject(err);\n }\n });\n\n this.socket.emit(\n \"call\",\n id,\n method.toUpperCase(),\n `/${this.version}${path}`,\n data,\n );\n });\n }\n\n async get(path: string, data?: any): Promise<any> {\n return this.fetch(\"GET\", path, data);\n }\n async post(path: string, data?: any): Promise<any> {\n return this.fetch(\"POST\", path, data);\n }\n async put(path: string, data?: any): Promise<any> {\n return this.fetch(\"PUT\", path, data);\n }\n async patch(path: string, data?: any): Promise<any> {\n return this.fetch(\"PATCH\", path, data);\n }\n async delete(path: string, data?: any): Promise<any> {\n return this.fetch(\"DELETE\", path, data);\n }\n\n subscribe(event: string, handler: (...args: any[]) => void): () => void {\n this.socket.on(event, handler);\n return () => this.socket.off(event, handler);\n }\n\n unsubscribe(event: string, handler?: (...args: any[]) => void): void {\n this.socket.off(event, handler);\n }\n\n async send(event: string, ...args: any[]): Promise<void> {\n await this.auth.ready;\n this.socket.emit(event, ...args);\n }\n\n disconnect(): void {\n this.socket.disconnect();\n this.isConnected = false;\n log.debug(\"socket disconnected\");\n }\n async reconnect(): Promise<void> {\n this.socket.connect();\n }\n}\n\nexport default SocketTransport;\n\n/** @internal — clear socket cache (for testing) */\nexport function _resetSockets(): void {\n SOCKETS.clear();\n}\n","/**\n * SSETransport — HTTP + Server-Sent Events implementation of the Transport interface.\n *\n * Request/response via standard fetch(). Subscriptions via EventSource.\n * Simpler than Socket.IO — no websocket infra needed. Good for read-heavy\n * apps, serverless backends, or environments where WebSocket isn't available.\n *\n * Trade-offs vs SocketTransport:\n * - Simpler infra (no sticky sessions, works behind any CDN/proxy)\n * - Server → client streaming only (no client → server streaming)\n * - Request/response is standard HTTP (cacheable, observable, debuggable)\n * - No compression (relies on HTTP gzip)\n * - No request deduplication (relies on HTTP/2 multiplexing)\n */\n\nimport { EventEmitter } from \"eventemitter3\";\nimport type { Transport } from \"@parcae/model\";\n\nexport interface SSETransportConfig {\n /** Base URL of the Parcae backend. */\n url: string;\n /** API key or async function returning a key. */\n key?: string | null | (() => Promise<string | null>);\n /** API version prefix. Default: \"v1\" */\n version?: string;\n}\n\nexport class SSETransport extends EventEmitter implements Transport {\n private url: string;\n private version: string;\n private apiKey: string | null | (() => Promise<string | null>);\n private key: string | null = null;\n private eventSources = new Map<string, EventSource>();\n\n public isConnected = true; // HTTP is \"always connected\"\n public isLoading = true;\n public loading: Promise<void>;\n\n constructor(config: SSETransportConfig) {\n super();\n this.url = config.url.replace(/\\/$/, \"\");\n this.version = config.version ?? \"v1\";\n this.apiKey = config.key ?? null;\n this.loading = this.resolveKey();\n }\n\n private async resolveKey(): Promise<void> {\n try {\n this.key =\n typeof this.apiKey === \"function\" ? await this.apiKey() : this.apiKey;\n this.isLoading = false;\n this.emit(\"connected\");\n } catch (err) {\n this.isLoading = false;\n this.emit(\"error\", err);\n }\n }\n\n private headers(): Record<string, string> {\n const h: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (this.key) h[\"Authorization\"] = `Bearer ${this.key}`;\n return h;\n }\n\n private fullUrl(path: string): string {\n return `${this.url}/${this.version}${path}`;\n }\n\n // ── Request/Response ──────────────────────────────────────────────────\n\n private async request(\n method: string,\n path: string,\n data?: any,\n ): Promise<any> {\n await this.loading;\n\n const isGet = method.toUpperCase() === \"GET\";\n let url = this.fullUrl(path);\n\n if (isGet && data) {\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(data)) {\n params.set(k, typeof v === \"object\" ? JSON.stringify(v) : String(v));\n }\n url += `?${params.toString()}`;\n }\n\n const res = await fetch(url, {\n method: method.toUpperCase(),\n headers: this.headers(),\n body: isGet ? undefined : JSON.stringify(data),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: res.statusText }));\n throw new Error(body.error || body.message || `HTTP ${res.status}`);\n }\n\n const body = await res.json();\n if (body.success === false) throw new Error(body.error || \"Request failed\");\n return body.result ?? body;\n }\n\n async get(path: string, data?: any): Promise<any> {\n return this.request(\"GET\", path, data);\n }\n async post(path: string, data?: any): Promise<any> {\n return this.request(\"POST\", path, data);\n }\n async put(path: string, data?: any): Promise<any> {\n return this.request(\"PUT\", path, data);\n }\n async patch(path: string, data?: any): Promise<any> {\n return this.request(\"PATCH\", path, data);\n }\n async delete(path: string, data?: any): Promise<any> {\n return this.request(\"DELETE\", path, data);\n }\n\n // ── Subscriptions (via Server-Sent Events) ────────────────────────────\n\n subscribe(event: string, handler: (...args: any[]) => void): () => void {\n const url = `${this.url}/${this.version}/__events/${encodeURIComponent(event)}`;\n const source = new EventSource(url, { withCredentials: true });\n\n source.onmessage = (e) => {\n try {\n const data = JSON.parse(e.data);\n handler(data);\n } catch {\n handler(e.data);\n }\n };\n\n source.onerror = () => {\n // EventSource auto-reconnects\n };\n\n this.eventSources.set(event, source);\n\n return () => {\n source.close();\n this.eventSources.delete(event);\n };\n }\n\n unsubscribe(event: string): void {\n const source = this.eventSources.get(event);\n if (source) {\n source.close();\n this.eventSources.delete(event);\n }\n }\n\n // ── Control messages ──────────────────────────────────────────────────\n\n async send(event: string, ...args: any[]): Promise<void> {\n await this.request(\"POST\", \"/__control\", { event, args });\n }\n\n // ── Lifecycle ─────────────────────────────────────────────────────────\n\n disconnect(): void {\n for (const [, source] of this.eventSources) source.close();\n this.eventSources.clear();\n this.isConnected = false;\n this.emit(\"disconnected\");\n }\n\n async reconnect(): Promise<void> {\n this.loading = this.resolveKey();\n await this.loading;\n }\n}\n\nexport default SSETransport;\n","/**\n * @parcae/sdk — createClient()\n *\n * Auth is handled in the transport, not React.\n * Pass token at creation time, or call authenticate() later.\n */\n\nimport { Model, FrontendAdapter } from \"@parcae/model\";\nimport type { Transport } from \"@parcae/model\";\nimport { SocketTransport } from \"./transports/socket\";\nimport { SSETransport } from \"./transports/sse\";\n\nexport interface ClientConfig {\n url: string;\n version?: string;\n transport?: \"socket\" | \"sse\" | Transport;\n /** Initial auth token. null = no auth. undefined = call authenticate() later. */\n token?: string | null;\n}\n\nexport interface ParcaeClient {\n transport: Transport;\n get(path: string, data?: any): Promise<any>;\n post(path: string, data?: any): Promise<any>;\n put(path: string, data?: any): Promise<any>;\n patch(path: string, data?: any): Promise<any>;\n delete(path: string, data?: any): Promise<any>;\n subscribe(event: string, handler: (...args: any[]) => void): () => void;\n unsubscribe(event: string, handler?: (...args: any[]) => void): void;\n send(event: string, ...args: any[]): void;\n readonly isConnected: boolean;\n authenticate(token: string | null): Promise<{ userId: string | null }>;\n on(event: string, handler: (...args: any[]) => void): void;\n off(event: string, handler?: (...args: any[]) => void): void;\n disconnect(): void;\n reconnect(): Promise<void>;\n}\n\nexport function createClient(config: ClientConfig): ParcaeClient {\n // Idempotent — return existing client if already created for this url\n const cacheKey = `${config.url}:${config.version ?? \"v1\"}`;\n const existing = (globalThis as any).__parcae_clients?.get(cacheKey);\n if (existing) return existing;\n\n const version = config.version ?? \"v1\";\n\n let transport: any;\n\n if (config.transport && typeof config.transport === \"object\") {\n transport = config.transport;\n } else if (config.transport === \"sse\") {\n transport = new SSETransport({ url: config.url, version });\n } else {\n transport = new SocketTransport({\n url: config.url,\n version,\n token: config.token,\n });\n }\n\n Model.use(new FrontendAdapter(transport));\n\n const client: ParcaeClient = {\n transport,\n get: (p, d) => transport.get(p, d),\n post: (p, d) => transport.post(p, d),\n put: (p, d) => transport.put(p, d),\n patch: (p, d) => transport.patch(p, d),\n delete: (p, d) => transport.delete(p, d),\n subscribe: (e, h) => transport.subscribe?.(e, h) ?? (() => {}),\n unsubscribe: (e, h) => transport.unsubscribe?.(e, h),\n send: (e, ...a) => transport.send?.(e, ...a),\n get isConnected() {\n return transport.isConnected ?? false;\n },\n authenticate: (t) =>\n transport.authenticate?.(t) ?? Promise.resolve({ userId: null }),\n on: (e, h) => transport.on?.(e, h),\n off: (e, h) => transport.off?.(e, h),\n disconnect: () => transport.disconnect?.(),\n reconnect: () => transport.reconnect?.() ?? Promise.resolve(),\n };\n\n // Cache the client globally\n if (!(globalThis as any).__parcae_clients) {\n (globalThis as any).__parcae_clients = new Map();\n }\n (globalThis as any).__parcae_clients.set(cacheKey, client);\n\n return client;\n}\n"]}
|