@apteva/web-sdk 0.8.0 → 0.10.0
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/CHANGELOG.md +30 -0
- package/README.md +148 -17
- package/dist/auth-session.d.ts +42 -3
- package/dist/auth-session.d.ts.map +1 -1
- package/dist/auth-session.js +331 -23
- package/dist/auth-session.js.map +1 -1
- package/dist/client.d.ts +9 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +67 -25
- package/dist/client.js.map +1 -1
- package/dist/extensions.d.ts +3 -0
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/session-persistence.d.ts +42 -0
- package/dist/session-persistence.d.ts.map +1 -0
- package/dist/session-persistence.js +149 -0
- package/dist/session-persistence.js.map +1 -0
- package/package.json +4 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
export class PersistenceError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
constructor(code, message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.code = code;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
// Storage events exclude the writing document. Keep sibling clients synchronized
|
|
9
|
+
// even when BroadcastChannel is unavailable; messages contain only a scope key.
|
|
10
|
+
const documentObservers = new Set();
|
|
11
|
+
function browserEnvironment() {
|
|
12
|
+
// Accessing localStorage itself can throw (privacy settings or sandboxed frames).
|
|
13
|
+
const storage = globalThis.localStorage;
|
|
14
|
+
const locks = globalThis.navigator?.locks;
|
|
15
|
+
if (!storage || !locks?.request || !globalThis.addEventListener)
|
|
16
|
+
throw new Error("Browser storage and Web Locks are required");
|
|
17
|
+
const listeners = new Map();
|
|
18
|
+
const dispatch = (key) => {
|
|
19
|
+
if (key === null)
|
|
20
|
+
for (const group of listeners.values())
|
|
21
|
+
for (const fn of group)
|
|
22
|
+
fn();
|
|
23
|
+
else if (typeof key === "string")
|
|
24
|
+
for (const fn of listeners.get(key) ?? [])
|
|
25
|
+
fn();
|
|
26
|
+
};
|
|
27
|
+
documentObservers.add(dispatch);
|
|
28
|
+
let channel;
|
|
29
|
+
try {
|
|
30
|
+
channel = new BroadcastChannel("apteva-auth-session:v1");
|
|
31
|
+
}
|
|
32
|
+
catch { /* Storage events still synchronize tabs. */ }
|
|
33
|
+
if (channel)
|
|
34
|
+
channel.onmessage = event => { if (event.data?.type === "changed")
|
|
35
|
+
dispatch(event.data.key); };
|
|
36
|
+
const changed = (event) => { if (event.storageArea === storage)
|
|
37
|
+
dispatch(event.key); };
|
|
38
|
+
const focus = () => dispatch(null);
|
|
39
|
+
globalThis.addEventListener("storage", changed);
|
|
40
|
+
globalThis.addEventListener("pageshow", focus);
|
|
41
|
+
globalThis.addEventListener("focus", focus);
|
|
42
|
+
return {
|
|
43
|
+
storage, locks,
|
|
44
|
+
subscribe(key, fn) { const group = listeners.get(key) ?? new Set(); group.add(fn); listeners.set(key, group); return () => group.delete(fn); },
|
|
45
|
+
publish(key) {
|
|
46
|
+
for (const fn of documentObservers)
|
|
47
|
+
if (fn !== dispatch)
|
|
48
|
+
queueMicrotask(() => fn(key));
|
|
49
|
+
try {
|
|
50
|
+
channel?.postMessage({ type: "changed", key });
|
|
51
|
+
}
|
|
52
|
+
catch { /* Storage events remain available. */ }
|
|
53
|
+
},
|
|
54
|
+
close() { documentObservers.delete(dispatch); channel?.close(); globalThis.removeEventListener("storage", changed); globalThis.removeEventListener("pageshow", focus); globalThis.removeEventListener("focus", focus); },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export class SessionPersistence {
|
|
58
|
+
changed;
|
|
59
|
+
unavailable;
|
|
60
|
+
key;
|
|
61
|
+
scope;
|
|
62
|
+
environment;
|
|
63
|
+
detach;
|
|
64
|
+
constructor(baseURL, projectId, options, changed, unavailable, environment) {
|
|
65
|
+
this.changed = changed;
|
|
66
|
+
this.unavailable = unavailable;
|
|
67
|
+
const server = new URL(baseURL || "/", globalThis.location?.href || "http://localhost");
|
|
68
|
+
if (!/^https?:$/.test(server.protocol) || server.username || server.password || server.search || server.hash)
|
|
69
|
+
throw new Error("Invalid Auth server URL");
|
|
70
|
+
this.scope = JSON.stringify([server.href.replace(/\/+$/, ""), projectId, options.installId ?? null,
|
|
71
|
+
options.organizationSlug?.trim().toLowerCase() || null, options.clientId, options.profile || null]);
|
|
72
|
+
this.key = "apteva.auth.v1:" + encodeURIComponent(this.scope);
|
|
73
|
+
try {
|
|
74
|
+
this.environment = environment ?? browserEnvironment();
|
|
75
|
+
if (!this.environment.locks?.request)
|
|
76
|
+
throw new Error("Web Locks required");
|
|
77
|
+
const probe = this.key + ":probe:" + crypto.randomUUID();
|
|
78
|
+
this.environment.storage.setItem(probe, "1");
|
|
79
|
+
this.environment.storage.removeItem(probe);
|
|
80
|
+
this.detach = this.environment.subscribe(this.key, changed);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
this.disable();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
get enabled() { return Boolean(this.environment); }
|
|
87
|
+
disable() { this.detach?.(); this.environment?.close(); this.environment = undefined; this.unavailable(); }
|
|
88
|
+
dispose() { this.detach?.(); this.environment?.close(); this.environment = undefined; }
|
|
89
|
+
async exclusive(fn) {
|
|
90
|
+
const environment = this.environment;
|
|
91
|
+
if (!environment)
|
|
92
|
+
throw new PersistenceError("persistence_unavailable", "Persistent sessions are unavailable");
|
|
93
|
+
let entered = false;
|
|
94
|
+
try {
|
|
95
|
+
return await environment.locks.request(this.key, { mode: "exclusive" }, async () => { entered = true; return fn(); });
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (!entered) {
|
|
99
|
+
this.disable();
|
|
100
|
+
throw new PersistenceError("persistence_unavailable", "Session lock unavailable");
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
read() {
|
|
106
|
+
let raw;
|
|
107
|
+
try {
|
|
108
|
+
if (!this.environment)
|
|
109
|
+
throw new Error();
|
|
110
|
+
raw = this.environment.storage.getItem(this.key);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
this.disable();
|
|
114
|
+
throw new PersistenceError("persistence_unavailable", "Session storage unavailable");
|
|
115
|
+
}
|
|
116
|
+
if (raw === null)
|
|
117
|
+
return undefined;
|
|
118
|
+
try {
|
|
119
|
+
if (raw.length > 20000)
|
|
120
|
+
throw new Error();
|
|
121
|
+
const record = JSON.parse(raw);
|
|
122
|
+
if (record.version !== 1 || record.scope !== this.scope || !/^[a-f0-9-]{36}$/.test(record.generation) || !/^[a-f0-9-]{36}$/.test(record.revision) ||
|
|
123
|
+
!["active", "refreshing", "logged-out"].includes(record.state) ||
|
|
124
|
+
(record.state === "logged-out" ? record.refreshToken !== undefined : typeof record.refreshToken !== "string" || record.refreshToken.length < 1 || record.refreshToken.length > 16384))
|
|
125
|
+
throw new Error();
|
|
126
|
+
return record;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
throw new PersistenceError("invalid_storage", "Saved session is invalid; login required");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
write(record) {
|
|
133
|
+
try {
|
|
134
|
+
if (!this.environment)
|
|
135
|
+
throw new Error();
|
|
136
|
+
this.environment.storage.setItem(this.key, JSON.stringify(record));
|
|
137
|
+
// Storage events do not reach sibling clients in the same document.
|
|
138
|
+
this.environment.publish(this.key);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
this.disable();
|
|
142
|
+
throw new PersistenceError("persistence_unavailable", "Session could not be saved");
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
record(state, generation = crypto.randomUUID(), refreshToken) {
|
|
146
|
+
return { version: 1, scope: this.scope, generation, revision: crypto.randomUUID(), state, ...(refreshToken ? { refreshToken } : {}) };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=session-persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-persistence.js","sourceRoot":"","sources":["../src/session-persistence.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apteva/web-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Browser SDK for apteva-server. Handles session cookies, API keys, and opaque application-user access tokens; wraps app HTTP, MCP, agents, chat, telemetry, and authenticated SSE. Framework-agnostic.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Apteva",
|
|
@@ -47,10 +47,13 @@
|
|
|
47
47
|
"scripts": {
|
|
48
48
|
"build": "tsc -p tsconfig.build.json",
|
|
49
49
|
"test": "bun test",
|
|
50
|
+
"test:persistence:browser": "bun scripts/test-persistence-browser.ts",
|
|
51
|
+
"test:mixed-apps": "bun scripts/test-mixed-apps.ts",
|
|
50
52
|
"typecheck": "tsc --noEmit",
|
|
51
53
|
"prepublishOnly": "bun run typecheck && bun test && bun run build"
|
|
52
54
|
},
|
|
53
55
|
"devDependencies": {
|
|
56
|
+
"@playwright/test": "^1.63.0",
|
|
54
57
|
"@types/bun": "^1.1.0",
|
|
55
58
|
"typescript": "^5.4.0"
|
|
56
59
|
}
|