@haex-space/vault-sdk 2.3.0 → 2.3.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.
- package/dist/cli/index.js +5 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +5 -5
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.d.mts +7 -7
- package/dist/index.d.ts +7 -7
- package/dist/index.js +37 -37
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +37 -37
- package/dist/index.mjs.map +1 -1
- package/dist/node.js +5 -5
- package/dist/node.js.map +1 -1
- package/dist/node.mjs +5 -5
- package/dist/node.mjs.map +1 -1
- package/dist/nuxt.js +26 -26
- package/dist/nuxt.js.map +1 -1
- package/dist/nuxt.mjs +26 -26
- package/dist/nuxt.mjs.map +1 -1
- package/dist/react.js +29 -29
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +29 -29
- package/dist/react.mjs.map +1 -1
- package/dist/runtime/nuxt.plugin.client.js +14 -14
- package/dist/runtime/nuxt.plugin.client.js.map +1 -1
- package/dist/runtime/nuxt.plugin.client.mjs +14 -14
- package/dist/runtime/nuxt.plugin.client.mjs.map +1 -1
- package/dist/svelte.js +29 -29
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +29 -29
- package/dist/svelte.mjs.map +1 -1
- package/dist/vite.d.mts +6 -6
- package/dist/vite.d.ts +6 -6
- package/dist/vite.js +29 -29
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +29 -29
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.js +29 -29
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +29 -29
- package/dist/vue.mjs.map +1 -1
- package/package.json +1 -1
package/dist/vite.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Plugin } from 'vite';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Vite Plugin for
|
|
4
|
+
* Vite Plugin for HaexSpace SDK
|
|
5
5
|
* Automatically injects polyfills into HTML files
|
|
6
6
|
* Works with React, Vue, Svelte, and any other Vite-based project
|
|
7
7
|
*/
|
|
@@ -19,19 +19,19 @@ interface VitePluginOptions {
|
|
|
19
19
|
configureCors?: boolean;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* HaexSpace Vite Plugin
|
|
23
23
|
* Injects browser API polyfills for extensions running in custom protocols
|
|
24
24
|
*
|
|
25
25
|
* @example
|
|
26
26
|
* ```ts
|
|
27
27
|
* // vite.config.ts
|
|
28
|
-
* import {
|
|
28
|
+
* import { haexspacePlugin } from '@haex-space/vault-sdk/vite'
|
|
29
29
|
*
|
|
30
30
|
* export default {
|
|
31
|
-
* plugins: [
|
|
31
|
+
* plugins: [haexspacePlugin()]
|
|
32
32
|
* }
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
|
-
declare function
|
|
35
|
+
declare function haexspacePlugin(options?: VitePluginOptions): Plugin;
|
|
36
36
|
|
|
37
|
-
export { type VitePluginOptions,
|
|
37
|
+
export { type VitePluginOptions, haexspacePlugin as default, haexspacePlugin };
|
package/dist/vite.js
CHANGED
|
@@ -7,7 +7,7 @@ function installLocalStoragePolyfill() {
|
|
|
7
7
|
if (typeof window === "undefined") {
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
|
-
console.log("[
|
|
10
|
+
console.log("[HaexSpace] Storage Polyfill loading immediately");
|
|
11
11
|
let localStorageWorks = false;
|
|
12
12
|
try {
|
|
13
13
|
const testKey = "__ls_test__";
|
|
@@ -15,7 +15,7 @@ function installLocalStoragePolyfill() {
|
|
|
15
15
|
localStorage.removeItem(testKey);
|
|
16
16
|
localStorageWorks = true;
|
|
17
17
|
} catch (e) {
|
|
18
|
-
console.warn("[
|
|
18
|
+
console.warn("[HaexSpace] localStorage blocked \u2013 using in-memory fallback");
|
|
19
19
|
}
|
|
20
20
|
if (!localStorageWorks) {
|
|
21
21
|
const lsStorage = /* @__PURE__ */ new Map();
|
|
@@ -48,7 +48,7 @@ function installLocalStoragePolyfill() {
|
|
|
48
48
|
} catch (e) {
|
|
49
49
|
window.localStorage = localStoragePoly;
|
|
50
50
|
}
|
|
51
|
-
console.log("[
|
|
51
|
+
console.log("[HaexSpace] localStorage replaced with in-memory polyfill");
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
function installSessionStoragePolyfill() {
|
|
@@ -93,7 +93,7 @@ function installSessionStoragePolyfill() {
|
|
|
93
93
|
key: () => null
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
|
-
console.log("[
|
|
96
|
+
console.log("[HaexSpace] sessionStorage polyfill installed");
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
// src/polyfills/cookies.ts
|
|
@@ -106,7 +106,7 @@ function installCookiePolyfill() {
|
|
|
106
106
|
document.cookie = "__cookie_test__=1";
|
|
107
107
|
cookiesWork = document.cookie.indexOf("__cookie_test__") !== -1;
|
|
108
108
|
} catch (e) {
|
|
109
|
-
console.warn("[
|
|
109
|
+
console.warn("[HaexSpace] Cookies blocked \u2013 using in-memory fallback");
|
|
110
110
|
}
|
|
111
111
|
if (!cookiesWork) {
|
|
112
112
|
const cookieStore = /* @__PURE__ */ new Map();
|
|
@@ -152,7 +152,7 @@ function installCookiePolyfill() {
|
|
|
152
152
|
},
|
|
153
153
|
configurable: true
|
|
154
154
|
});
|
|
155
|
-
console.log("[
|
|
155
|
+
console.log("[HaexSpace] Cookie polyfill installed");
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
158
|
|
|
@@ -162,16 +162,16 @@ function installHistoryPolyfill() {
|
|
|
162
162
|
return;
|
|
163
163
|
}
|
|
164
164
|
const install = () => {
|
|
165
|
-
console.log("[
|
|
165
|
+
console.log("[HaexSpace] History Patch loading");
|
|
166
166
|
const originalPushState = history.pushState;
|
|
167
167
|
const originalReplaceState = history.replaceState;
|
|
168
168
|
let skipNextPush = false;
|
|
169
169
|
let skipNextReplace = false;
|
|
170
170
|
history.pushState = function(state, title, url) {
|
|
171
|
-
console.log("[
|
|
171
|
+
console.log("[HaexSpace] pushState called:", url, "skip:", skipNextPush);
|
|
172
172
|
if (skipNextPush) {
|
|
173
173
|
skipNextPush = false;
|
|
174
|
-
console.log("[
|
|
174
|
+
console.log("[HaexSpace] pushState skipped");
|
|
175
175
|
return;
|
|
176
176
|
}
|
|
177
177
|
try {
|
|
@@ -181,7 +181,7 @@ function installHistoryPolyfill() {
|
|
|
181
181
|
const urlString = url.toString();
|
|
182
182
|
let hashUrl = urlString.replace(/^\/#/, "");
|
|
183
183
|
hashUrl = hashUrl.startsWith("#") ? hashUrl : "#" + hashUrl;
|
|
184
|
-
console.log("[
|
|
184
|
+
console.log("[HaexSpace] SecurityError - setting hash to:", hashUrl);
|
|
185
185
|
skipNextPush = true;
|
|
186
186
|
window.location.hash = hashUrl.replace(/^#/, "");
|
|
187
187
|
return;
|
|
@@ -190,10 +190,10 @@ function installHistoryPolyfill() {
|
|
|
190
190
|
}
|
|
191
191
|
};
|
|
192
192
|
history.replaceState = function(state, title, url) {
|
|
193
|
-
console.log("[
|
|
193
|
+
console.log("[HaexSpace] replaceState called:", url, "skip:", skipNextReplace);
|
|
194
194
|
if (skipNextReplace) {
|
|
195
195
|
skipNextReplace = false;
|
|
196
|
-
console.log("[
|
|
196
|
+
console.log("[HaexSpace] replaceState skipped");
|
|
197
197
|
return;
|
|
198
198
|
}
|
|
199
199
|
try {
|
|
@@ -203,7 +203,7 @@ function installHistoryPolyfill() {
|
|
|
203
203
|
const urlString = url.toString();
|
|
204
204
|
let hashUrl = urlString.replace(/^\/#/, "");
|
|
205
205
|
hashUrl = hashUrl.startsWith("#") ? hashUrl : "#" + hashUrl;
|
|
206
|
-
console.log("[
|
|
206
|
+
console.log("[HaexSpace] SecurityError - setting hash to:", hashUrl);
|
|
207
207
|
skipNextReplace = true;
|
|
208
208
|
window.location.hash = hashUrl.replace(/^#/, "");
|
|
209
209
|
return;
|
|
@@ -211,7 +211,7 @@ function installHistoryPolyfill() {
|
|
|
211
211
|
throw e;
|
|
212
212
|
}
|
|
213
213
|
};
|
|
214
|
-
console.log("[
|
|
214
|
+
console.log("[HaexSpace] History API patched");
|
|
215
215
|
};
|
|
216
216
|
if (document.readyState === "loading") {
|
|
217
217
|
document.addEventListener("DOMContentLoaded", install, { once: true });
|
|
@@ -249,7 +249,7 @@ function getPolyfillCode() {
|
|
|
249
249
|
const iife = `(function() {
|
|
250
250
|
'use strict';
|
|
251
251
|
|
|
252
|
-
console.log('[
|
|
252
|
+
console.log('[HaexSpace] Storage Polyfill loading immediately');
|
|
253
253
|
|
|
254
254
|
// localStorage Polyfill
|
|
255
255
|
(${installLocalStoragePolyfill.toString()})();
|
|
@@ -265,7 +265,7 @@ function getPolyfillCode() {
|
|
|
265
265
|
|
|
266
266
|
// Note: Base tag is injected at build-time by Vite plugin, not at runtime
|
|
267
267
|
|
|
268
|
-
console.log('[
|
|
268
|
+
console.log('[HaexSpace] All polyfills loaded successfully');
|
|
269
269
|
|
|
270
270
|
// Debug diagnostics for Android debugging
|
|
271
271
|
(${installDebugDiagnostics.toString()})();
|
|
@@ -274,38 +274,38 @@ function getPolyfillCode() {
|
|
|
274
274
|
}
|
|
275
275
|
|
|
276
276
|
// src/cors.ts
|
|
277
|
-
var
|
|
277
|
+
var HAEXSPACE_CORS_HEADERS = {
|
|
278
278
|
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
|
|
279
279
|
"Access-Control-Allow-Headers": "*",
|
|
280
280
|
"Access-Control-Allow-Credentials": "true"
|
|
281
281
|
};
|
|
282
282
|
function applyCorsHeaders(res, origin) {
|
|
283
283
|
res.setHeader("Access-Control-Allow-Origin", origin || "*");
|
|
284
|
-
res.setHeader("Access-Control-Allow-Methods",
|
|
285
|
-
res.setHeader("Access-Control-Allow-Headers",
|
|
286
|
-
res.setHeader("Access-Control-Allow-Credentials",
|
|
284
|
+
res.setHeader("Access-Control-Allow-Methods", HAEXSPACE_CORS_HEADERS["Access-Control-Allow-Methods"]);
|
|
285
|
+
res.setHeader("Access-Control-Allow-Headers", HAEXSPACE_CORS_HEADERS["Access-Control-Allow-Headers"]);
|
|
286
|
+
res.setHeader("Access-Control-Allow-Credentials", HAEXSPACE_CORS_HEADERS["Access-Control-Allow-Credentials"]);
|
|
287
287
|
}
|
|
288
288
|
|
|
289
289
|
// src/vite.ts
|
|
290
|
-
function
|
|
290
|
+
function haexspacePlugin(options = {}) {
|
|
291
291
|
const { injectPolyfills = true, configureCors = true } = options;
|
|
292
292
|
let polyfillCode = null;
|
|
293
293
|
return {
|
|
294
|
-
name: "@
|
|
294
|
+
name: "@haex-space/vault-sdk",
|
|
295
295
|
enforce: "post",
|
|
296
296
|
// Run after other plugins
|
|
297
297
|
configResolved(config) {
|
|
298
298
|
if (injectPolyfills) {
|
|
299
299
|
try {
|
|
300
300
|
polyfillCode = getPolyfillCode();
|
|
301
|
-
console.log("\u2713 [@
|
|
301
|
+
console.log("\u2713 [@haex-space/vault-sdk] Polyfills initialized");
|
|
302
302
|
} catch (error) {
|
|
303
|
-
console.error("[@
|
|
303
|
+
console.error("[@haex-space/vault-sdk] Failed to initialize:", error);
|
|
304
304
|
throw error;
|
|
305
305
|
}
|
|
306
306
|
}
|
|
307
307
|
if (configureCors && config.command === "serve") {
|
|
308
|
-
console.log("\u2713 [@
|
|
308
|
+
console.log("\u2713 [@haex-space/vault-sdk] CORS configured for HaexSpace development");
|
|
309
309
|
console.log(" - Allowing all origins (required for custom protocols)");
|
|
310
310
|
console.log(" - Allowing credentials");
|
|
311
311
|
}
|
|
@@ -331,21 +331,21 @@ function haexhubPlugin(options = {}) {
|
|
|
331
331
|
}
|
|
332
332
|
const headPos = html.indexOf("<head>");
|
|
333
333
|
if (headPos === -1) {
|
|
334
|
-
console.warn("[@
|
|
334
|
+
console.warn("[@haex-space/vault-sdk] No <head> tag found in HTML");
|
|
335
335
|
return html;
|
|
336
336
|
}
|
|
337
337
|
const insertPos = headPos + 6;
|
|
338
338
|
const polyfillScript = `<script>${polyfillCode}</script>`;
|
|
339
339
|
const modifiedHtml = html.slice(0, insertPos) + polyfillScript + html.slice(insertPos);
|
|
340
|
-
console.log("\u2713 [@
|
|
340
|
+
console.log("\u2713 [@haex-space/vault-sdk] Polyfill injected into HTML");
|
|
341
341
|
return modifiedHtml;
|
|
342
342
|
}
|
|
343
343
|
}
|
|
344
344
|
};
|
|
345
345
|
}
|
|
346
|
-
var vite_default =
|
|
346
|
+
var vite_default = haexspacePlugin;
|
|
347
347
|
|
|
348
348
|
exports.default = vite_default;
|
|
349
|
-
exports.
|
|
349
|
+
exports.haexspacePlugin = haexspacePlugin;
|
|
350
350
|
//# sourceMappingURL=vite.js.map
|
|
351
351
|
//# sourceMappingURL=vite.js.map
|
package/dist/vite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/polyfills/localStorage.ts","../src/polyfills/cookies.ts","../src/polyfills/history.ts","../src/messages.ts","../src/polyfills/debug.ts","../src/polyfills/standalone.ts","../src/cors.ts","../src/vite.ts"],"names":[],"mappings":"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","file":"vite.js","sourcesContent":["/**\n * localStorage Polyfill for HaexHub Extensions\n *\n * Provides an in-memory fallback when localStorage is blocked\n * due to custom protocol restrictions (haex-extension://)\n */\n\nexport function installLocalStoragePolyfill(): void {\n if (typeof window === 'undefined') {\n return; // Skip in Node.js environment\n }\n\n console.log('[HaexHub] Storage Polyfill loading immediately');\n\n // Test if localStorage is available\n let localStorageWorks = false;\n try {\n const testKey = '__ls_test__';\n localStorage.setItem(testKey, testKey);\n localStorage.removeItem(testKey);\n localStorageWorks = true;\n } catch (e) {\n console.warn('[HaexHub] localStorage blocked – using in-memory fallback');\n }\n\n // If blocked: Replace with In-Memory Storage\n if (!localStorageWorks) {\n const lsStorage = new Map<string, string>();\n\n const localStoragePoly: Storage = {\n getItem(key: string): string | null {\n return lsStorage.get(key) || null;\n },\n setItem(key: string, value: string): void {\n lsStorage.set(key, String(value));\n },\n removeItem(key: string): void {\n lsStorage.delete(key);\n },\n clear(): void {\n lsStorage.clear();\n },\n get length(): number {\n return lsStorage.size;\n },\n key(index: number): string | null {\n return Array.from(lsStorage.keys())[index] || null;\n }\n };\n\n try {\n Object.defineProperty(window, 'localStorage', {\n value: localStoragePoly,\n writable: true,\n configurable: true\n });\n } catch (e) {\n // Fallback: Direct assignment\n (window as any).localStorage = localStoragePoly;\n }\n\n console.log('[HaexHub] localStorage replaced with in-memory polyfill');\n }\n}\n\n/**\n * sessionStorage Polyfill for HaexHub Extensions\n *\n * Provides a no-op implementation as session state doesn't work\n * reliably in custom protocol contexts\n */\nexport function installSessionStoragePolyfill(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n const sessionStoragePoly: Storage = {\n getItem(): null {\n return null;\n },\n setItem(): void {},\n removeItem(): void {},\n clear(): void {},\n get length(): number {\n return 0;\n },\n key(): null {\n return null;\n }\n };\n\n Object.defineProperty(window, 'sessionStorage', {\n value: sessionStoragePoly,\n writable: true,\n configurable: true\n });\n } catch (e) {\n // Fallback: Direct assignment\n (window as any).sessionStorage = {\n getItem: () => null,\n setItem: () => {},\n removeItem: () => {},\n clear: () => {},\n get length() { return 0; },\n key: () => null\n };\n }\n\n console.log('[HaexHub] sessionStorage polyfill installed');\n}\n","/**\n * Cookie Polyfill for HaexHub Extensions\n *\n * Provides an in-memory cookie implementation when cookies are blocked\n * due to custom protocol restrictions (haex-extension://)\n */\n\nexport function installCookiePolyfill(): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return; // Skip in Node.js environment\n }\n\n // Test if cookies are available\n let cookiesWork = false;\n try {\n document.cookie = \"__cookie_test__=1\";\n cookiesWork = document.cookie.indexOf(\"__cookie_test__\") !== -1;\n } catch (e) {\n console.warn(\"[HaexHub] Cookies blocked – using in-memory fallback\");\n }\n\n if (!cookiesWork) {\n const cookieStore = new Map<string, string>();\n\n Object.defineProperty(document, \"cookie\", {\n get(): string {\n const cookies: string[] = [];\n cookieStore.forEach((value, key) => {\n cookies.push(`${key}=${value}`);\n });\n return cookies.join(\"; \");\n },\n set(cookieString: string): void {\n const parts = cookieString.split(\";\").map((p) => p.trim());\n const [keyValue] = parts;\n\n if (!keyValue) return;\n\n const [key, value] = keyValue.split(\"=\");\n if (!key) return;\n\n // Parse options\n const options: Record<string, string | boolean> = {};\n for (let i = 1; i < parts.length; i++) {\n const part = parts[i];\n if (!part) continue;\n const parts_split = part.split(\"=\");\n const optKey = parts_split[0];\n const optValue = parts_split[1];\n if (optKey) {\n options[optKey.toLowerCase()] = optValue || true;\n }\n }\n\n // Check for deletion (expires in past)\n const expiresValue = options.expires;\n if (expiresValue && typeof expiresValue === \"string\") {\n const expiresDate = new Date(expiresValue);\n if (expiresDate < new Date()) {\n cookieStore.delete(key);\n return;\n }\n }\n\n // Check for max-age=0 deletion\n const maxAgeValue = options[\"max-age\"];\n if (typeof maxAgeValue === \"string\" && maxAgeValue === \"0\") {\n cookieStore.delete(key);\n return;\n }\n\n // Store cookie\n cookieStore.set(key, value || \"\");\n },\n configurable: true,\n });\n\n console.log(\"[HaexHub] Cookie polyfill installed\");\n }\n}\n","/**\n * History API Polyfill for HaexHub Extensions\n *\n * Works around SecurityError when using pushState/replaceState\n * in custom protocol contexts (haex-extension://)\n *\n * Falls back to hash-based routing when necessary\n */\n\nexport function installHistoryPolyfill(): void {\n if (typeof window === 'undefined' || typeof history === 'undefined') {\n return; // Skip in Node.js environment\n }\n\n // Install after DOM is ready to avoid race conditions\n const install = () => {\n console.log('[HaexHub] History Patch loading');\n\n const originalPushState = history.pushState;\n const originalReplaceState = history.replaceState;\n let skipNextPush = false;\n let skipNextReplace = false;\n\n // Patch pushState\n history.pushState = function(\n state: any,\n title: string,\n url?: string | URL | null\n ): void {\n console.log('[HaexHub] pushState called:', url, 'skip:', skipNextPush);\n\n if (skipNextPush) {\n skipNextPush = false;\n console.log('[HaexHub] pushState skipped');\n return;\n }\n\n try {\n return originalPushState.call(this, state, title, url);\n } catch (e) {\n if ((e as Error).name === 'SecurityError' && url) {\n // Remove duplicate /#/ prefix\n const urlString = url.toString();\n let hashUrl = urlString.replace(/^\\/#/, '');\n hashUrl = hashUrl.startsWith('#') ? hashUrl : '#' + hashUrl;\n console.log('[HaexHub] SecurityError - setting hash to:', hashUrl);\n skipNextPush = true;\n window.location.hash = hashUrl.replace(/^#/, '');\n return; // Silent fallback\n }\n throw e;\n }\n };\n\n // Patch replaceState\n history.replaceState = function(\n state: any,\n title: string,\n url?: string | URL | null\n ): void {\n console.log('[HaexHub] replaceState called:', url, 'skip:', skipNextReplace);\n\n if (skipNextReplace) {\n skipNextReplace = false;\n console.log('[HaexHub] replaceState skipped');\n return;\n }\n\n try {\n return originalReplaceState.call(this, state, title, url);\n } catch (e) {\n if ((e as Error).name === 'SecurityError' && url) {\n // Remove duplicate /#/ prefix\n const urlString = url.toString();\n let hashUrl = urlString.replace(/^\\/#/, '');\n hashUrl = hashUrl.startsWith('#') ? hashUrl : '#' + hashUrl;\n console.log('[HaexHub] SecurityError - setting hash to:', hashUrl);\n skipNextReplace = true;\n window.location.hash = hashUrl.replace(/^#/, '');\n return; // Silent fallback\n }\n throw e;\n }\n };\n\n console.log('[HaexHub] History API patched');\n };\n\n // Install after DOM is ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', install, { once: true });\n } else {\n // DOM already loaded, install immediately\n install();\n }\n}\n","/**\n * Central message type definitions for HaexSpace SDK\n *\n * Message Naming Schema: haexspace:{subject}\n *\n * These are used for internal communication between extensions and HaexSpace\n */\n\nexport const HAEXSPACE_MESSAGE_TYPES = {\n /** Debug message for development/troubleshooting */\n DEBUG: 'haexspace:debug',\n\n /** Console forwarding from extension iframe */\n CONSOLE_FORWARD: 'console.forward',\n} as const;\n\nexport type HaexspaceMessageType =\n (typeof HAEXSPACE_MESSAGE_TYPES)[keyof typeof HAEXSPACE_MESSAGE_TYPES];\n","import { HAEXSPACE_MESSAGE_TYPES } from '../messages';\n\n/**\n * Debug diagnostics for Android debugging\n * Tests window.parent availability and postMessage functionality\n */\nexport function installDebugDiagnostics(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const hasParent = window.parent && window.parent !== window;\n console.log('[HaexSpace] hasParent:', hasParent);\n\n if (hasParent) {\n console.log('[HaexSpace] Attempting to send debug message to parent...');\n window.parent.postMessage({\n type: HAEXSPACE_MESSAGE_TYPES.DEBUG,\n data: `[Polyfills] window.parent test: exists=${!!window.parent}, different=${hasParent}, selfIsTop=${window.self === window.top}`\n }, '*');\n console.log('[HaexSpace] Debug message sent!');\n } else {\n console.log('[HaexSpace] No parent window or parent === window');\n }\n}\n","/**\n * Generates standalone polyfill code for HTML injection\n * This wraps the modular polyfills into an IIFE for immediate execution\n */\nimport {\n installLocalStoragePolyfill,\n installSessionStoragePolyfill,\n} from './localStorage'\nimport { installCookiePolyfill } from './cookies'\nimport { installHistoryPolyfill } from './history'\nimport { installDebugDiagnostics } from './debug'\n\n/**\n * Get the standalone polyfill code as a string\n * This is used by the Nuxt and Vite plugins to inject polyfills into HTML\n *\n * Note: Base tag is injected statically by the Vite plugin, not at runtime\n */\nexport function getPolyfillCode(): string {\n // Convert functions to string and wrap in IIFE\n const iife = `(function() {\n 'use strict';\n\n console.log('[HaexHub] Storage Polyfill loading immediately');\n\n // localStorage Polyfill\n (${installLocalStoragePolyfill.toString()})();\n\n // sessionStorage Polyfill\n (${installSessionStoragePolyfill.toString()})();\n\n // Cookie Polyfill\n (${installCookiePolyfill.toString()})();\n\n // History API Polyfill\n (${installHistoryPolyfill.toString()})();\n\n // Note: Base tag is injected at build-time by Vite plugin, not at runtime\n\n console.log('[HaexHub] All polyfills loaded successfully');\n\n // Debug diagnostics for Android debugging\n (${installDebugDiagnostics.toString()})();\n})();`\n\n return iife\n}\n","/**\n * CORS Configuration for HaexHub Extensions\n * Used by both Vite and Nuxt plugins to ensure consistent CORS headers\n */\n\n/**\n * Standard CORS headers for HaexHub dev servers\n * Allows extensions to be loaded in custom protocol iframes (haex-extension://)\n */\nexport const HAEXHUB_CORS_HEADERS = {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',\n 'Access-Control-Allow-Headers': '*',\n 'Access-Control-Allow-Credentials': 'true',\n} as const\n\n/**\n * Apply CORS headers to a Node.js response object\n * Used in Vite middleware\n */\nexport function applyCorsHeaders(\n res: { setHeader: (name: string, value: string) => void },\n origin?: string\n) {\n res.setHeader('Access-Control-Allow-Origin', origin || '*')\n res.setHeader('Access-Control-Allow-Methods', HAEXHUB_CORS_HEADERS['Access-Control-Allow-Methods'])\n res.setHeader('Access-Control-Allow-Headers', HAEXHUB_CORS_HEADERS['Access-Control-Allow-Headers'])\n res.setHeader('Access-Control-Allow-Credentials', HAEXHUB_CORS_HEADERS['Access-Control-Allow-Credentials'])\n}\n\n/**\n * Get CORS headers as a plain object\n * Used in Vite/Nuxt config\n */\nexport function getCorsHeaders(origin?: string): Record<string, string> {\n return {\n 'Access-Control-Allow-Origin': origin || HAEXHUB_CORS_HEADERS['Access-Control-Allow-Origin'],\n 'Access-Control-Allow-Methods': HAEXHUB_CORS_HEADERS['Access-Control-Allow-Methods'],\n 'Access-Control-Allow-Headers': HAEXHUB_CORS_HEADERS['Access-Control-Allow-Headers'],\n 'Access-Control-Allow-Credentials': HAEXHUB_CORS_HEADERS['Access-Control-Allow-Credentials'],\n }\n}\n","/**\n * Vite Plugin for HaexHub SDK\n * Automatically injects polyfills into HTML files\n * Works with React, Vue, Svelte, and any other Vite-based project\n */\nimport type { Plugin } from 'vite'\nimport { getPolyfillCode } from './polyfills/standalone'\nimport { applyCorsHeaders } from './cors'\n\nexport interface VitePluginOptions {\n /**\n * Enable/disable polyfill injection\n * @default true\n */\n injectPolyfills?: boolean\n\n /**\n * Configure CORS for dev server\n * @default true\n */\n configureCors?: boolean\n}\n\n/**\n * HaexHub Vite Plugin\n * Injects browser API polyfills for extensions running in custom protocols\n *\n * @example\n * ```ts\n * // vite.config.ts\n * import { haexhubPlugin } from '@haexhub/sdk/vite'\n *\n * export default {\n * plugins: [haexhubPlugin()]\n * }\n * ```\n */\nexport function haexhubPlugin(options: VitePluginOptions = {}): Plugin {\n const { injectPolyfills = true, configureCors = true } = options\n\n let polyfillCode: string | null = null\n\n return {\n name: '@haexhub/sdk',\n enforce: 'post', // Run after other plugins\n\n configResolved(config) {\n if (injectPolyfills) {\n try {\n // Get polyfill code from modular polyfills\n polyfillCode = getPolyfillCode()\n console.log('✓ [@haexhub/sdk] Polyfills initialized')\n } catch (error) {\n console.error('[@haexhub/sdk] Failed to initialize:', error)\n throw error\n }\n }\n\n // Log CORS configuration\n if (configureCors && config.command === 'serve') {\n console.log('✓ [@haexhub/sdk] CORS configured for HaexHub development')\n console.log(' - Allowing all origins (required for custom protocols)')\n console.log(' - Allowing credentials')\n }\n },\n\n configureServer(server) {\n if (!configureCors) return\n\n // Add CORS middleware for HaexHub using shared CORS configuration\n server.middlewares.use((req, res, next) => {\n // Apply CORS headers (allows custom protocols like haex-extension://)\n applyCorsHeaders(res, req.headers.origin)\n\n // Handle preflight requests\n if (req.method === 'OPTIONS') {\n res.statusCode = 200\n res.end()\n return\n }\n\n next()\n })\n },\n\n transformIndexHtml: {\n order: 'pre', // Inject before other transformations\n handler(html: string) {\n if (!injectPolyfills || !polyfillCode) {\n return html\n }\n\n // Inject polyfill script directly after <head>\n const headPos = html.indexOf('<head>')\n if (headPos === -1) {\n console.warn('[@haexhub/sdk] No <head> tag found in HTML')\n return html\n }\n\n const insertPos = headPos + 6 // after <head>\n\n // Inject polyfill only (no base tag needed)\n const polyfillScript = `<script>${polyfillCode}</script>`\n const modifiedHtml = html.slice(0, insertPos) + polyfillScript + html.slice(insertPos)\n\n console.log('✓ [@haexhub/sdk] Polyfill injected into HTML')\n\n return modifiedHtml\n }\n }\n }\n}\n\n// Default export for convenience\nexport default haexhubPlugin\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/polyfills/localStorage.ts","../src/polyfills/cookies.ts","../src/polyfills/history.ts","../src/messages.ts","../src/polyfills/debug.ts","../src/polyfills/standalone.ts","../src/cors.ts","../src/vite.ts"],"names":[],"mappings":"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","file":"vite.js","sourcesContent":["/**\n * localStorage Polyfill for HaexSpace Extensions\n *\n * Provides an in-memory fallback when localStorage is blocked\n * due to custom protocol restrictions (haex-extension://)\n */\n\nexport function installLocalStoragePolyfill(): void {\n if (typeof window === 'undefined') {\n return; // Skip in Node.js environment\n }\n\n console.log('[HaexSpace] Storage Polyfill loading immediately');\n\n // Test if localStorage is available\n let localStorageWorks = false;\n try {\n const testKey = '__ls_test__';\n localStorage.setItem(testKey, testKey);\n localStorage.removeItem(testKey);\n localStorageWorks = true;\n } catch (e) {\n console.warn('[HaexSpace] localStorage blocked – using in-memory fallback');\n }\n\n // If blocked: Replace with In-Memory Storage\n if (!localStorageWorks) {\n const lsStorage = new Map<string, string>();\n\n const localStoragePoly: Storage = {\n getItem(key: string): string | null {\n return lsStorage.get(key) || null;\n },\n setItem(key: string, value: string): void {\n lsStorage.set(key, String(value));\n },\n removeItem(key: string): void {\n lsStorage.delete(key);\n },\n clear(): void {\n lsStorage.clear();\n },\n get length(): number {\n return lsStorage.size;\n },\n key(index: number): string | null {\n return Array.from(lsStorage.keys())[index] || null;\n }\n };\n\n try {\n Object.defineProperty(window, 'localStorage', {\n value: localStoragePoly,\n writable: true,\n configurable: true\n });\n } catch (e) {\n // Fallback: Direct assignment\n (window as any).localStorage = localStoragePoly;\n }\n\n console.log('[HaexSpace] localStorage replaced with in-memory polyfill');\n }\n}\n\n/**\n * sessionStorage Polyfill for HaexSpace Extensions\n *\n * Provides a no-op implementation as session state doesn't work\n * reliably in custom protocol contexts\n */\nexport function installSessionStoragePolyfill(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n const sessionStoragePoly: Storage = {\n getItem(): null {\n return null;\n },\n setItem(): void {},\n removeItem(): void {},\n clear(): void {},\n get length(): number {\n return 0;\n },\n key(): null {\n return null;\n }\n };\n\n Object.defineProperty(window, 'sessionStorage', {\n value: sessionStoragePoly,\n writable: true,\n configurable: true\n });\n } catch (e) {\n // Fallback: Direct assignment\n (window as any).sessionStorage = {\n getItem: () => null,\n setItem: () => {},\n removeItem: () => {},\n clear: () => {},\n get length() { return 0; },\n key: () => null\n };\n }\n\n console.log('[HaexSpace] sessionStorage polyfill installed');\n}\n","/**\n * Cookie Polyfill for HaexSpace Extensions\n *\n * Provides an in-memory cookie implementation when cookies are blocked\n * due to custom protocol restrictions (haex-extension://)\n */\n\nexport function installCookiePolyfill(): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return; // Skip in Node.js environment\n }\n\n // Test if cookies are available\n let cookiesWork = false;\n try {\n document.cookie = \"__cookie_test__=1\";\n cookiesWork = document.cookie.indexOf(\"__cookie_test__\") !== -1;\n } catch (e) {\n console.warn(\"[HaexSpace] Cookies blocked – using in-memory fallback\");\n }\n\n if (!cookiesWork) {\n const cookieStore = new Map<string, string>();\n\n Object.defineProperty(document, \"cookie\", {\n get(): string {\n const cookies: string[] = [];\n cookieStore.forEach((value, key) => {\n cookies.push(`${key}=${value}`);\n });\n return cookies.join(\"; \");\n },\n set(cookieString: string): void {\n const parts = cookieString.split(\";\").map((p) => p.trim());\n const [keyValue] = parts;\n\n if (!keyValue) return;\n\n const [key, value] = keyValue.split(\"=\");\n if (!key) return;\n\n // Parse options\n const options: Record<string, string | boolean> = {};\n for (let i = 1; i < parts.length; i++) {\n const part = parts[i];\n if (!part) continue;\n const parts_split = part.split(\"=\");\n const optKey = parts_split[0];\n const optValue = parts_split[1];\n if (optKey) {\n options[optKey.toLowerCase()] = optValue || true;\n }\n }\n\n // Check for deletion (expires in past)\n const expiresValue = options.expires;\n if (expiresValue && typeof expiresValue === \"string\") {\n const expiresDate = new Date(expiresValue);\n if (expiresDate < new Date()) {\n cookieStore.delete(key);\n return;\n }\n }\n\n // Check for max-age=0 deletion\n const maxAgeValue = options[\"max-age\"];\n if (typeof maxAgeValue === \"string\" && maxAgeValue === \"0\") {\n cookieStore.delete(key);\n return;\n }\n\n // Store cookie\n cookieStore.set(key, value || \"\");\n },\n configurable: true,\n });\n\n console.log(\"[HaexSpace] Cookie polyfill installed\");\n }\n}\n","/**\n * History API Polyfill for HaexSpace Extensions\n *\n * Works around SecurityError when using pushState/replaceState\n * in custom protocol contexts (haex-extension://)\n *\n * Falls back to hash-based routing when necessary\n */\n\nexport function installHistoryPolyfill(): void {\n if (typeof window === 'undefined' || typeof history === 'undefined') {\n return; // Skip in Node.js environment\n }\n\n // Install after DOM is ready to avoid race conditions\n const install = () => {\n console.log('[HaexSpace] History Patch loading');\n\n const originalPushState = history.pushState;\n const originalReplaceState = history.replaceState;\n let skipNextPush = false;\n let skipNextReplace = false;\n\n // Patch pushState\n history.pushState = function(\n state: any,\n title: string,\n url?: string | URL | null\n ): void {\n console.log('[HaexSpace] pushState called:', url, 'skip:', skipNextPush);\n\n if (skipNextPush) {\n skipNextPush = false;\n console.log('[HaexSpace] pushState skipped');\n return;\n }\n\n try {\n return originalPushState.call(this, state, title, url);\n } catch (e) {\n if ((e as Error).name === 'SecurityError' && url) {\n // Remove duplicate /#/ prefix\n const urlString = url.toString();\n let hashUrl = urlString.replace(/^\\/#/, '');\n hashUrl = hashUrl.startsWith('#') ? hashUrl : '#' + hashUrl;\n console.log('[HaexSpace] SecurityError - setting hash to:', hashUrl);\n skipNextPush = true;\n window.location.hash = hashUrl.replace(/^#/, '');\n return; // Silent fallback\n }\n throw e;\n }\n };\n\n // Patch replaceState\n history.replaceState = function(\n state: any,\n title: string,\n url?: string | URL | null\n ): void {\n console.log('[HaexSpace] replaceState called:', url, 'skip:', skipNextReplace);\n\n if (skipNextReplace) {\n skipNextReplace = false;\n console.log('[HaexSpace] replaceState skipped');\n return;\n }\n\n try {\n return originalReplaceState.call(this, state, title, url);\n } catch (e) {\n if ((e as Error).name === 'SecurityError' && url) {\n // Remove duplicate /#/ prefix\n const urlString = url.toString();\n let hashUrl = urlString.replace(/^\\/#/, '');\n hashUrl = hashUrl.startsWith('#') ? hashUrl : '#' + hashUrl;\n console.log('[HaexSpace] SecurityError - setting hash to:', hashUrl);\n skipNextReplace = true;\n window.location.hash = hashUrl.replace(/^#/, '');\n return; // Silent fallback\n }\n throw e;\n }\n };\n\n console.log('[HaexSpace] History API patched');\n };\n\n // Install after DOM is ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', install, { once: true });\n } else {\n // DOM already loaded, install immediately\n install();\n }\n}\n","/**\n * Central message type definitions for HaexSpace SDK\n *\n * Message Naming Schema: haexspace:{subject}\n *\n * These are used for internal communication between extensions and HaexSpace\n */\n\nexport const HAEXSPACE_MESSAGE_TYPES = {\n /** Debug message for development/troubleshooting */\n DEBUG: 'haexspace:debug',\n\n /** Console forwarding from extension iframe */\n CONSOLE_FORWARD: 'console.forward',\n} as const;\n\nexport type HaexspaceMessageType =\n (typeof HAEXSPACE_MESSAGE_TYPES)[keyof typeof HAEXSPACE_MESSAGE_TYPES];\n","import { HAEXSPACE_MESSAGE_TYPES } from '../messages';\n\n/**\n * Debug diagnostics for Android debugging\n * Tests window.parent availability and postMessage functionality\n */\nexport function installDebugDiagnostics(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const hasParent = window.parent && window.parent !== window;\n console.log('[HaexSpace] hasParent:', hasParent);\n\n if (hasParent) {\n console.log('[HaexSpace] Attempting to send debug message to parent...');\n window.parent.postMessage({\n type: HAEXSPACE_MESSAGE_TYPES.DEBUG,\n data: `[Polyfills] window.parent test: exists=${!!window.parent}, different=${hasParent}, selfIsTop=${window.self === window.top}`\n }, '*');\n console.log('[HaexSpace] Debug message sent!');\n } else {\n console.log('[HaexSpace] No parent window or parent === window');\n }\n}\n","/**\n * Generates standalone polyfill code for HTML injection\n * This wraps the modular polyfills into an IIFE for immediate execution\n */\nimport {\n installLocalStoragePolyfill,\n installSessionStoragePolyfill,\n} from './localStorage'\nimport { installCookiePolyfill } from './cookies'\nimport { installHistoryPolyfill } from './history'\nimport { installDebugDiagnostics } from './debug'\n\n/**\n * Get the standalone polyfill code as a string\n * This is used by the Nuxt and Vite plugins to inject polyfills into HTML\n *\n * Note: Base tag is injected statically by the Vite plugin, not at runtime\n */\nexport function getPolyfillCode(): string {\n // Convert functions to string and wrap in IIFE\n const iife = `(function() {\n 'use strict';\n\n console.log('[HaexSpace] Storage Polyfill loading immediately');\n\n // localStorage Polyfill\n (${installLocalStoragePolyfill.toString()})();\n\n // sessionStorage Polyfill\n (${installSessionStoragePolyfill.toString()})();\n\n // Cookie Polyfill\n (${installCookiePolyfill.toString()})();\n\n // History API Polyfill\n (${installHistoryPolyfill.toString()})();\n\n // Note: Base tag is injected at build-time by Vite plugin, not at runtime\n\n console.log('[HaexSpace] All polyfills loaded successfully');\n\n // Debug diagnostics for Android debugging\n (${installDebugDiagnostics.toString()})();\n})();`\n\n return iife\n}\n","/**\n * CORS Configuration for HaexSpace Extensions\n * Used by both Vite and Nuxt plugins to ensure consistent CORS headers\n */\n\n/**\n * Standard CORS headers for HaexSpace dev servers\n * Allows extensions to be loaded in custom protocol iframes (haex-extension://)\n */\nexport const HAEXSPACE_CORS_HEADERS = {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',\n 'Access-Control-Allow-Headers': '*',\n 'Access-Control-Allow-Credentials': 'true',\n} as const\n\n/**\n * Apply CORS headers to a Node.js response object\n * Used in Vite middleware\n */\nexport function applyCorsHeaders(\n res: { setHeader: (name: string, value: string) => void },\n origin?: string\n) {\n res.setHeader('Access-Control-Allow-Origin', origin || '*')\n res.setHeader('Access-Control-Allow-Methods', HAEXSPACE_CORS_HEADERS['Access-Control-Allow-Methods'])\n res.setHeader('Access-Control-Allow-Headers', HAEXSPACE_CORS_HEADERS['Access-Control-Allow-Headers'])\n res.setHeader('Access-Control-Allow-Credentials', HAEXSPACE_CORS_HEADERS['Access-Control-Allow-Credentials'])\n}\n\n/**\n * Get CORS headers as a plain object\n * Used in Vite/Nuxt config\n */\nexport function getCorsHeaders(origin?: string): Record<string, string> {\n return {\n 'Access-Control-Allow-Origin': origin || HAEXSPACE_CORS_HEADERS['Access-Control-Allow-Origin'],\n 'Access-Control-Allow-Methods': HAEXSPACE_CORS_HEADERS['Access-Control-Allow-Methods'],\n 'Access-Control-Allow-Headers': HAEXSPACE_CORS_HEADERS['Access-Control-Allow-Headers'],\n 'Access-Control-Allow-Credentials': HAEXSPACE_CORS_HEADERS['Access-Control-Allow-Credentials'],\n }\n}\n","/**\n * Vite Plugin for HaexSpace SDK\n * Automatically injects polyfills into HTML files\n * Works with React, Vue, Svelte, and any other Vite-based project\n */\nimport type { Plugin } from 'vite'\nimport { getPolyfillCode } from './polyfills/standalone'\nimport { applyCorsHeaders } from './cors'\n\nexport interface VitePluginOptions {\n /**\n * Enable/disable polyfill injection\n * @default true\n */\n injectPolyfills?: boolean\n\n /**\n * Configure CORS for dev server\n * @default true\n */\n configureCors?: boolean\n}\n\n/**\n * HaexSpace Vite Plugin\n * Injects browser API polyfills for extensions running in custom protocols\n *\n * @example\n * ```ts\n * // vite.config.ts\n * import { haexspacePlugin } from '@haex-space/vault-sdk/vite'\n *\n * export default {\n * plugins: [haexspacePlugin()]\n * }\n * ```\n */\nexport function haexspacePlugin(options: VitePluginOptions = {}): Plugin {\n const { injectPolyfills = true, configureCors = true } = options\n\n let polyfillCode: string | null = null\n\n return {\n name: '@haex-space/vault-sdk',\n enforce: 'post', // Run after other plugins\n\n configResolved(config) {\n if (injectPolyfills) {\n try {\n // Get polyfill code from modular polyfills\n polyfillCode = getPolyfillCode()\n console.log('✓ [@haex-space/vault-sdk] Polyfills initialized')\n } catch (error) {\n console.error('[@haex-space/vault-sdk] Failed to initialize:', error)\n throw error\n }\n }\n\n // Log CORS configuration\n if (configureCors && config.command === 'serve') {\n console.log('✓ [@haex-space/vault-sdk] CORS configured for HaexSpace development')\n console.log(' - Allowing all origins (required for custom protocols)')\n console.log(' - Allowing credentials')\n }\n },\n\n configureServer(server) {\n if (!configureCors) return\n\n // Add CORS middleware for HaexSpace using shared CORS configuration\n server.middlewares.use((req, res, next) => {\n // Apply CORS headers (allows custom protocols like haex-extension://)\n applyCorsHeaders(res, req.headers.origin)\n\n // Handle preflight requests\n if (req.method === 'OPTIONS') {\n res.statusCode = 200\n res.end()\n return\n }\n\n next()\n })\n },\n\n transformIndexHtml: {\n order: 'pre', // Inject before other transformations\n handler(html: string) {\n if (!injectPolyfills || !polyfillCode) {\n return html\n }\n\n // Inject polyfill script directly after <head>\n const headPos = html.indexOf('<head>')\n if (headPos === -1) {\n console.warn('[@haex-space/vault-sdk] No <head> tag found in HTML')\n return html\n }\n\n const insertPos = headPos + 6 // after <head>\n\n // Inject polyfill only (no base tag needed)\n const polyfillScript = `<script>${polyfillCode}</script>`\n const modifiedHtml = html.slice(0, insertPos) + polyfillScript + html.slice(insertPos)\n\n console.log('✓ [@haex-space/vault-sdk] Polyfill injected into HTML')\n\n return modifiedHtml\n }\n }\n }\n}\n\n// Default export for convenience\nexport default haexspacePlugin\n"]}
|
package/dist/vite.mjs
CHANGED
|
@@ -3,7 +3,7 @@ function installLocalStoragePolyfill() {
|
|
|
3
3
|
if (typeof window === "undefined") {
|
|
4
4
|
return;
|
|
5
5
|
}
|
|
6
|
-
console.log("[
|
|
6
|
+
console.log("[HaexSpace] Storage Polyfill loading immediately");
|
|
7
7
|
let localStorageWorks = false;
|
|
8
8
|
try {
|
|
9
9
|
const testKey = "__ls_test__";
|
|
@@ -11,7 +11,7 @@ function installLocalStoragePolyfill() {
|
|
|
11
11
|
localStorage.removeItem(testKey);
|
|
12
12
|
localStorageWorks = true;
|
|
13
13
|
} catch (e) {
|
|
14
|
-
console.warn("[
|
|
14
|
+
console.warn("[HaexSpace] localStorage blocked \u2013 using in-memory fallback");
|
|
15
15
|
}
|
|
16
16
|
if (!localStorageWorks) {
|
|
17
17
|
const lsStorage = /* @__PURE__ */ new Map();
|
|
@@ -44,7 +44,7 @@ function installLocalStoragePolyfill() {
|
|
|
44
44
|
} catch (e) {
|
|
45
45
|
window.localStorage = localStoragePoly;
|
|
46
46
|
}
|
|
47
|
-
console.log("[
|
|
47
|
+
console.log("[HaexSpace] localStorage replaced with in-memory polyfill");
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
function installSessionStoragePolyfill() {
|
|
@@ -89,7 +89,7 @@ function installSessionStoragePolyfill() {
|
|
|
89
89
|
key: () => null
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
|
-
console.log("[
|
|
92
|
+
console.log("[HaexSpace] sessionStorage polyfill installed");
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
// src/polyfills/cookies.ts
|
|
@@ -102,7 +102,7 @@ function installCookiePolyfill() {
|
|
|
102
102
|
document.cookie = "__cookie_test__=1";
|
|
103
103
|
cookiesWork = document.cookie.indexOf("__cookie_test__") !== -1;
|
|
104
104
|
} catch (e) {
|
|
105
|
-
console.warn("[
|
|
105
|
+
console.warn("[HaexSpace] Cookies blocked \u2013 using in-memory fallback");
|
|
106
106
|
}
|
|
107
107
|
if (!cookiesWork) {
|
|
108
108
|
const cookieStore = /* @__PURE__ */ new Map();
|
|
@@ -148,7 +148,7 @@ function installCookiePolyfill() {
|
|
|
148
148
|
},
|
|
149
149
|
configurable: true
|
|
150
150
|
});
|
|
151
|
-
console.log("[
|
|
151
|
+
console.log("[HaexSpace] Cookie polyfill installed");
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
154
|
|
|
@@ -158,16 +158,16 @@ function installHistoryPolyfill() {
|
|
|
158
158
|
return;
|
|
159
159
|
}
|
|
160
160
|
const install = () => {
|
|
161
|
-
console.log("[
|
|
161
|
+
console.log("[HaexSpace] History Patch loading");
|
|
162
162
|
const originalPushState = history.pushState;
|
|
163
163
|
const originalReplaceState = history.replaceState;
|
|
164
164
|
let skipNextPush = false;
|
|
165
165
|
let skipNextReplace = false;
|
|
166
166
|
history.pushState = function(state, title, url) {
|
|
167
|
-
console.log("[
|
|
167
|
+
console.log("[HaexSpace] pushState called:", url, "skip:", skipNextPush);
|
|
168
168
|
if (skipNextPush) {
|
|
169
169
|
skipNextPush = false;
|
|
170
|
-
console.log("[
|
|
170
|
+
console.log("[HaexSpace] pushState skipped");
|
|
171
171
|
return;
|
|
172
172
|
}
|
|
173
173
|
try {
|
|
@@ -177,7 +177,7 @@ function installHistoryPolyfill() {
|
|
|
177
177
|
const urlString = url.toString();
|
|
178
178
|
let hashUrl = urlString.replace(/^\/#/, "");
|
|
179
179
|
hashUrl = hashUrl.startsWith("#") ? hashUrl : "#" + hashUrl;
|
|
180
|
-
console.log("[
|
|
180
|
+
console.log("[HaexSpace] SecurityError - setting hash to:", hashUrl);
|
|
181
181
|
skipNextPush = true;
|
|
182
182
|
window.location.hash = hashUrl.replace(/^#/, "");
|
|
183
183
|
return;
|
|
@@ -186,10 +186,10 @@ function installHistoryPolyfill() {
|
|
|
186
186
|
}
|
|
187
187
|
};
|
|
188
188
|
history.replaceState = function(state, title, url) {
|
|
189
|
-
console.log("[
|
|
189
|
+
console.log("[HaexSpace] replaceState called:", url, "skip:", skipNextReplace);
|
|
190
190
|
if (skipNextReplace) {
|
|
191
191
|
skipNextReplace = false;
|
|
192
|
-
console.log("[
|
|
192
|
+
console.log("[HaexSpace] replaceState skipped");
|
|
193
193
|
return;
|
|
194
194
|
}
|
|
195
195
|
try {
|
|
@@ -199,7 +199,7 @@ function installHistoryPolyfill() {
|
|
|
199
199
|
const urlString = url.toString();
|
|
200
200
|
let hashUrl = urlString.replace(/^\/#/, "");
|
|
201
201
|
hashUrl = hashUrl.startsWith("#") ? hashUrl : "#" + hashUrl;
|
|
202
|
-
console.log("[
|
|
202
|
+
console.log("[HaexSpace] SecurityError - setting hash to:", hashUrl);
|
|
203
203
|
skipNextReplace = true;
|
|
204
204
|
window.location.hash = hashUrl.replace(/^#/, "");
|
|
205
205
|
return;
|
|
@@ -207,7 +207,7 @@ function installHistoryPolyfill() {
|
|
|
207
207
|
throw e;
|
|
208
208
|
}
|
|
209
209
|
};
|
|
210
|
-
console.log("[
|
|
210
|
+
console.log("[HaexSpace] History API patched");
|
|
211
211
|
};
|
|
212
212
|
if (document.readyState === "loading") {
|
|
213
213
|
document.addEventListener("DOMContentLoaded", install, { once: true });
|
|
@@ -245,7 +245,7 @@ function getPolyfillCode() {
|
|
|
245
245
|
const iife = `(function() {
|
|
246
246
|
'use strict';
|
|
247
247
|
|
|
248
|
-
console.log('[
|
|
248
|
+
console.log('[HaexSpace] Storage Polyfill loading immediately');
|
|
249
249
|
|
|
250
250
|
// localStorage Polyfill
|
|
251
251
|
(${installLocalStoragePolyfill.toString()})();
|
|
@@ -261,7 +261,7 @@ function getPolyfillCode() {
|
|
|
261
261
|
|
|
262
262
|
// Note: Base tag is injected at build-time by Vite plugin, not at runtime
|
|
263
263
|
|
|
264
|
-
console.log('[
|
|
264
|
+
console.log('[HaexSpace] All polyfills loaded successfully');
|
|
265
265
|
|
|
266
266
|
// Debug diagnostics for Android debugging
|
|
267
267
|
(${installDebugDiagnostics.toString()})();
|
|
@@ -270,38 +270,38 @@ function getPolyfillCode() {
|
|
|
270
270
|
}
|
|
271
271
|
|
|
272
272
|
// src/cors.ts
|
|
273
|
-
var
|
|
273
|
+
var HAEXSPACE_CORS_HEADERS = {
|
|
274
274
|
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
|
|
275
275
|
"Access-Control-Allow-Headers": "*",
|
|
276
276
|
"Access-Control-Allow-Credentials": "true"
|
|
277
277
|
};
|
|
278
278
|
function applyCorsHeaders(res, origin) {
|
|
279
279
|
res.setHeader("Access-Control-Allow-Origin", origin || "*");
|
|
280
|
-
res.setHeader("Access-Control-Allow-Methods",
|
|
281
|
-
res.setHeader("Access-Control-Allow-Headers",
|
|
282
|
-
res.setHeader("Access-Control-Allow-Credentials",
|
|
280
|
+
res.setHeader("Access-Control-Allow-Methods", HAEXSPACE_CORS_HEADERS["Access-Control-Allow-Methods"]);
|
|
281
|
+
res.setHeader("Access-Control-Allow-Headers", HAEXSPACE_CORS_HEADERS["Access-Control-Allow-Headers"]);
|
|
282
|
+
res.setHeader("Access-Control-Allow-Credentials", HAEXSPACE_CORS_HEADERS["Access-Control-Allow-Credentials"]);
|
|
283
283
|
}
|
|
284
284
|
|
|
285
285
|
// src/vite.ts
|
|
286
|
-
function
|
|
286
|
+
function haexspacePlugin(options = {}) {
|
|
287
287
|
const { injectPolyfills = true, configureCors = true } = options;
|
|
288
288
|
let polyfillCode = null;
|
|
289
289
|
return {
|
|
290
|
-
name: "@
|
|
290
|
+
name: "@haex-space/vault-sdk",
|
|
291
291
|
enforce: "post",
|
|
292
292
|
// Run after other plugins
|
|
293
293
|
configResolved(config) {
|
|
294
294
|
if (injectPolyfills) {
|
|
295
295
|
try {
|
|
296
296
|
polyfillCode = getPolyfillCode();
|
|
297
|
-
console.log("\u2713 [@
|
|
297
|
+
console.log("\u2713 [@haex-space/vault-sdk] Polyfills initialized");
|
|
298
298
|
} catch (error) {
|
|
299
|
-
console.error("[@
|
|
299
|
+
console.error("[@haex-space/vault-sdk] Failed to initialize:", error);
|
|
300
300
|
throw error;
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
303
|
if (configureCors && config.command === "serve") {
|
|
304
|
-
console.log("\u2713 [@
|
|
304
|
+
console.log("\u2713 [@haex-space/vault-sdk] CORS configured for HaexSpace development");
|
|
305
305
|
console.log(" - Allowing all origins (required for custom protocols)");
|
|
306
306
|
console.log(" - Allowing credentials");
|
|
307
307
|
}
|
|
@@ -327,20 +327,20 @@ function haexhubPlugin(options = {}) {
|
|
|
327
327
|
}
|
|
328
328
|
const headPos = html.indexOf("<head>");
|
|
329
329
|
if (headPos === -1) {
|
|
330
|
-
console.warn("[@
|
|
330
|
+
console.warn("[@haex-space/vault-sdk] No <head> tag found in HTML");
|
|
331
331
|
return html;
|
|
332
332
|
}
|
|
333
333
|
const insertPos = headPos + 6;
|
|
334
334
|
const polyfillScript = `<script>${polyfillCode}</script>`;
|
|
335
335
|
const modifiedHtml = html.slice(0, insertPos) + polyfillScript + html.slice(insertPos);
|
|
336
|
-
console.log("\u2713 [@
|
|
336
|
+
console.log("\u2713 [@haex-space/vault-sdk] Polyfill injected into HTML");
|
|
337
337
|
return modifiedHtml;
|
|
338
338
|
}
|
|
339
339
|
}
|
|
340
340
|
};
|
|
341
341
|
}
|
|
342
|
-
var vite_default =
|
|
342
|
+
var vite_default = haexspacePlugin;
|
|
343
343
|
|
|
344
|
-
export { vite_default as default,
|
|
344
|
+
export { vite_default as default, haexspacePlugin };
|
|
345
345
|
//# sourceMappingURL=vite.mjs.map
|
|
346
346
|
//# sourceMappingURL=vite.mjs.map
|