@edge-base/web 0.1.1

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.
Files changed (51) hide show
  1. package/README.md +352 -0
  2. package/dist/analytics.d.ts +60 -0
  3. package/dist/analytics.d.ts.map +1 -0
  4. package/dist/analytics.js +146 -0
  5. package/dist/analytics.js.map +1 -0
  6. package/dist/auth-refresh.d.ts +5 -0
  7. package/dist/auth-refresh.d.ts.map +1 -0
  8. package/dist/auth-refresh.js +26 -0
  9. package/dist/auth-refresh.js.map +1 -0
  10. package/dist/auth.d.ts +314 -0
  11. package/dist/auth.d.ts.map +1 -0
  12. package/dist/auth.js +518 -0
  13. package/dist/auth.js.map +1 -0
  14. package/dist/browser-storage.d.ts +7 -0
  15. package/dist/browser-storage.d.ts.map +1 -0
  16. package/dist/browser-storage.js +43 -0
  17. package/dist/browser-storage.js.map +1 -0
  18. package/dist/client.d.ts +145 -0
  19. package/dist/client.d.ts.map +1 -0
  20. package/dist/client.js +310 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/database-live.d.ts +65 -0
  23. package/dist/database-live.d.ts.map +1 -0
  24. package/dist/database-live.js +486 -0
  25. package/dist/database-live.js.map +1 -0
  26. package/dist/index.d.ts +21 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +28 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/match-filter.d.ts +30 -0
  31. package/dist/match-filter.d.ts.map +1 -0
  32. package/dist/match-filter.js +86 -0
  33. package/dist/match-filter.js.map +1 -0
  34. package/dist/room-realtime-media.d.ts +96 -0
  35. package/dist/room-realtime-media.d.ts.map +1 -0
  36. package/dist/room-realtime-media.js +418 -0
  37. package/dist/room-realtime-media.js.map +1 -0
  38. package/dist/room.d.ts +450 -0
  39. package/dist/room.d.ts.map +1 -0
  40. package/dist/room.js +1506 -0
  41. package/dist/room.js.map +1 -0
  42. package/dist/token-manager.d.ts +73 -0
  43. package/dist/token-manager.d.ts.map +1 -0
  44. package/dist/token-manager.js +378 -0
  45. package/dist/token-manager.js.map +1 -0
  46. package/dist/turnstile.d.ts +56 -0
  47. package/dist/turnstile.d.ts.map +1 -0
  48. package/dist/turnstile.js +191 -0
  49. package/dist/turnstile.js.map +1 -0
  50. package/llms.txt +549 -0
  51. package/package.json +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turnstile.d.ts","sourceRoot":"","sources":["../src/turnstile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,CAAC,EAAE;YACV,MAAM,EAAE,CACN,SAAS,EAAE,MAAM,GAAG,WAAW,EAC/B,OAAO,EAAE;gBACP,OAAO,EAAE,MAAM,CAAC;gBAChB,MAAM,CAAC,EAAE,MAAM,CAAC;gBAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;gBACnC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;gBAC5C,6BAA6B,CAAC,EAAE,MAAM,IAAI,CAAC;gBAC3C,4BAA4B,CAAC,EAAE,MAAM,IAAI,CAAC;gBAC1C,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;gBAChC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,kBAAkB,CAAC;gBACvD,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;aAC1C,KACE,MAAM,CAAC;YACZ,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;YACnC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;SACnC,CAAC;KACH;CACF;AAgED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,SAAQ,GAChB,OAAO,CAAC,MAAM,CAAC,CAqDjB;AAOD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqB1E;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAe7B"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Turnstile captcha provider for browser environments.
3
+ *
4
+ * Automatically loads Cloudflare Turnstile JS SDK, renders invisible widget,
5
+ * and returns a captcha token. If interactive challenge is needed, shows
6
+ * a centered modal overlay automatically.
7
+ *
8
+ * Usage (internal — called by AuthClient):
9
+ * const token = await getCaptchaToken(siteKey, 'signup');
10
+ */
11
+ const TURNSTILE_SCRIPT_URL = 'https://challenges.cloudflare.com/turnstile/v0/api.js';
12
+ let scriptLoaded = false;
13
+ let scriptLoading = null;
14
+ /** Load Turnstile JS SDK (idempotent). */
15
+ function loadTurnstileScript() {
16
+ if (scriptLoaded && window.turnstile)
17
+ return Promise.resolve();
18
+ if (scriptLoading)
19
+ return scriptLoading;
20
+ scriptLoading = new Promise((resolve, reject) => {
21
+ // Check if already in DOM
22
+ if (document.querySelector(`script[src^="${TURNSTILE_SCRIPT_URL}"]`)) {
23
+ const check = () => {
24
+ if (window.turnstile) {
25
+ scriptLoaded = true;
26
+ resolve();
27
+ }
28
+ else
29
+ setTimeout(check, 50);
30
+ };
31
+ check();
32
+ return;
33
+ }
34
+ const script = document.createElement('script');
35
+ script.src = `${TURNSTILE_SCRIPT_URL}?render=explicit`;
36
+ script.async = true;
37
+ script.defer = true;
38
+ script.onload = () => {
39
+ const check = () => {
40
+ if (window.turnstile) {
41
+ scriptLoaded = true;
42
+ resolve();
43
+ }
44
+ else
45
+ setTimeout(check, 50);
46
+ };
47
+ check();
48
+ };
49
+ script.onerror = () => {
50
+ scriptLoading = null;
51
+ reject(new Error('Failed to load Turnstile script'));
52
+ };
53
+ document.head.appendChild(script);
54
+ });
55
+ return scriptLoading;
56
+ }
57
+ /** Create modal overlay for interactive challenge. Hidden by default. */
58
+ function createOverlay() {
59
+ const overlay = document.createElement('div');
60
+ overlay.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);display:none;align-items:center;justify-content:center;z-index:999999;';
61
+ const container = document.createElement('div');
62
+ container.style.cssText = 'background:#fff;border-radius:12px;padding:16px;box-shadow:0 4px 24px rgba(0,0,0,0.2);';
63
+ overlay.appendChild(container);
64
+ document.body.appendChild(overlay);
65
+ return {
66
+ overlay,
67
+ container,
68
+ show: () => { overlay.style.display = 'flex'; },
69
+ hide: () => { overlay.style.display = 'none'; },
70
+ destroy: () => { overlay.remove(); },
71
+ };
72
+ }
73
+ /**
74
+ * Get a Turnstile captcha token for the given action.
75
+ *
76
+ * - Loads Turnstile JS SDK if needed (cached)
77
+ * - Renders invisible widget → auto-passes for 99% of users
78
+ * - If interactive challenge needed → shows centered modal overlay automatically
79
+ * - Returns the token string
80
+ *
81
+ * @param siteKey - Turnstile site key from GET /api/config
82
+ * @param action - Action name (e.g. 'signup', 'signin', 'anonymous')
83
+ * @param timeoutMs - Timeout in ms (default: 30000)
84
+ */
85
+ export async function getCaptchaToken(siteKey, action, timeoutMs = 30000) {
86
+ if (typeof window === 'undefined' || typeof document === 'undefined') {
87
+ throw new Error('Turnstile is only available in browser environments');
88
+ }
89
+ await loadTurnstileScript();
90
+ if (!window.turnstile) {
91
+ throw new Error('Turnstile failed to initialize');
92
+ }
93
+ return new Promise((resolve, reject) => {
94
+ const { container, show, hide, destroy } = createOverlay();
95
+ const timer = setTimeout(() => {
96
+ cleanup();
97
+ reject(new Error('Turnstile timeout'));
98
+ }, timeoutMs);
99
+ let widgetId;
100
+ const cleanup = () => {
101
+ clearTimeout(timer);
102
+ if (widgetId && window.turnstile) {
103
+ try {
104
+ window.turnstile.remove(widgetId);
105
+ }
106
+ catch { /* ignore */ }
107
+ }
108
+ destroy();
109
+ };
110
+ widgetId = window.turnstile.render(container, {
111
+ sitekey: siteKey,
112
+ action,
113
+ appearance: 'interaction-only',
114
+ callback: (token) => {
115
+ cleanup();
116
+ resolve(token);
117
+ },
118
+ 'error-callback': (error) => {
119
+ cleanup();
120
+ reject(new Error(`Turnstile error: ${error}`));
121
+ },
122
+ 'before-interactive-callback': () => {
123
+ show();
124
+ },
125
+ 'after-interactive-callback': () => {
126
+ hide();
127
+ },
128
+ 'timeout-callback': () => {
129
+ cleanup();
130
+ reject(new Error('Turnstile challenge timed out'));
131
+ },
132
+ });
133
+ });
134
+ }
135
+ // ─── Site Key Cache ───
136
+ let siteKeyCache = null;
137
+ let siteKeyPromise = null;
138
+ /**
139
+ * Fetch captcha siteKey from GET /api/config (cached).
140
+ * Returns null if captcha is not configured on server.
141
+ */
142
+ export async function fetchSiteKey(baseUrl) {
143
+ if (siteKeyCache !== null)
144
+ return siteKeyCache;
145
+ if (siteKeyPromise)
146
+ return siteKeyPromise;
147
+ siteKeyPromise = (async () => {
148
+ try {
149
+ const res = await fetch(`${baseUrl}/api/config`, {
150
+ signal: AbortSignal.timeout(3000),
151
+ });
152
+ if (!res.ok)
153
+ return null;
154
+ const data = (await res.json());
155
+ siteKeyCache = data.captcha?.siteKey ?? null;
156
+ return siteKeyCache;
157
+ }
158
+ catch {
159
+ return null;
160
+ }
161
+ finally {
162
+ siteKeyPromise = null;
163
+ }
164
+ })();
165
+ return siteKeyPromise;
166
+ }
167
+ /**
168
+ * Resolve captcha token: use provided token or auto-acquire via Turnstile.
169
+ *
170
+ * - If captchaToken is provided → return it (manual override)
171
+ * - If siteKey is available → auto-acquire via Turnstile widget
172
+ * - If no siteKey (captcha not configured) → return undefined
173
+ */
174
+ export async function resolveCaptchaToken(baseUrl, action, captchaToken) {
175
+ // Manual override — skip built-in widget
176
+ if (captchaToken)
177
+ return captchaToken;
178
+ // Fetch siteKey (cached)
179
+ const siteKey = await fetchSiteKey(baseUrl);
180
+ if (!siteKey)
181
+ return undefined; // Captcha not configured on server
182
+ // Auto-acquire token via Turnstile
183
+ try {
184
+ return await getCaptchaToken(siteKey, action);
185
+ }
186
+ catch {
187
+ // Turnstile failed — let server handle (failMode: open/closed)
188
+ return undefined;
189
+ }
190
+ }
191
+ //# sourceMappingURL=turnstile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turnstile.js","sourceRoot":"","sources":["../src/turnstile.ts"],"names":[],"mappings":"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"}