@haex-space/vault-sdk 2.2.6 → 2.3.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/dist/{client-wxMr0ONL.d.mts → client-BIiJwbdW.d.mts} +1 -1
- package/dist/{client-DeP-DCz5.d.ts → client-D4hDL-PR.d.ts} +1 -1
- package/dist/index.d.mts +20 -5
- package/dist/index.d.ts +20 -5
- package/dist/index.js +22 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -11
- package/dist/index.mjs.map +1 -1
- package/dist/node.d.mts +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/nuxt.js +10 -5
- package/dist/nuxt.js.map +1 -1
- package/dist/nuxt.mjs +10 -5
- package/dist/nuxt.mjs.map +1 -1
- package/dist/react.d.mts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js +20 -10
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +20 -10
- package/dist/react.mjs.map +1 -1
- package/dist/runtime/nuxt.plugin.client.d.mts +2 -2
- package/dist/runtime/nuxt.plugin.client.d.ts +2 -2
- package/dist/runtime/nuxt.plugin.client.js +15 -5
- package/dist/runtime/nuxt.plugin.client.js.map +1 -1
- package/dist/runtime/nuxt.plugin.client.mjs +15 -5
- package/dist/runtime/nuxt.plugin.client.mjs.map +1 -1
- package/dist/svelte.d.mts +2 -2
- package/dist/svelte.d.ts +2 -2
- package/dist/svelte.js +20 -10
- package/dist/svelte.js.map +1 -1
- package/dist/svelte.mjs +20 -10
- package/dist/svelte.mjs.map +1 -1
- package/dist/{types-DiGbHxTr.d.mts → types-FE9ewl3r.d.mts} +23 -1
- package/dist/{types-DiGbHxTr.d.ts → types-FE9ewl3r.d.ts} +23 -1
- package/dist/vite.js +10 -5
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +10 -5
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.d.mts +2 -2
- package/dist/vue.d.ts +2 -2
- package/dist/vue.js +20 -10
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +20 -10
- package/dist/vue.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -22,6 +22,28 @@ type HaextensionEvent = typeof HAEXTENSION_EVENTS[keyof typeof HAEXTENSION_EVENT
|
|
|
22
22
|
|
|
23
23
|
declare const DEFAULT_TIMEOUT = 30000;
|
|
24
24
|
declare const TABLE_SEPARATOR = "__";
|
|
25
|
+
/**
|
|
26
|
+
* Build a fully qualified table name for extensions.
|
|
27
|
+
* Use this in Drizzle schemas to create table names at build time.
|
|
28
|
+
*
|
|
29
|
+
* @param publicKey - The extension's public key (from manifest.json)
|
|
30
|
+
* @param extensionName - The extension name (from manifest.json or package.json)
|
|
31
|
+
* @param tableName - The table name (e.g., "users", "items")
|
|
32
|
+
* @returns Fully qualified table name: `{publicKey}__{extensionName}__{tableName}`
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* import { getTableName } from "@haex-space/vault-sdk";
|
|
37
|
+
* import manifest from "../haextension/manifest.json";
|
|
38
|
+
* import pkg from "../package.json";
|
|
39
|
+
*
|
|
40
|
+
* const tableName = (name: string) =>
|
|
41
|
+
* getTableName(manifest.publicKey, manifest.name || pkg.name, name);
|
|
42
|
+
*
|
|
43
|
+
* export const users = sqliteTable(tableName("users"), { ... });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
declare function getTableName(publicKey: string, extensionName: string, tableName: string): string;
|
|
25
47
|
interface HaexHubRequest {
|
|
26
48
|
method: string;
|
|
27
49
|
params: Record<string, unknown>;
|
|
@@ -213,4 +235,4 @@ declare class HaexHubError extends Error {
|
|
|
213
235
|
};
|
|
214
236
|
}
|
|
215
237
|
|
|
216
|
-
export { type ApplicationContext as A, type ContextChangedEvent as C, type DatabaseQueryResult as D, type ExtensionManifest as E, type HaexHubConfig as H, type Migration as M, type PermissionResponse as P, type SearchResult as S, TABLE_SEPARATOR as T, type WebRequestOptions as W, type ExtensionInfo as a, type MigrationResult as b, type WebResponse as c, type DatabasePermissionRequest as d, type EventCallback as e, type HaexHubRequest as f, type HaexHubResponse as g, type HaexHubEvent as h, type DatabasePermission as i, type DatabaseQueryParams as j, type DatabaseExecuteParams as k, type DatabaseTableInfo as l, type DatabaseColumnInfo as m, type SearchQuery as n, type SearchRequestEvent as o, PermissionStatus as p, ErrorCode as q, DEFAULT_TIMEOUT as r,
|
|
238
|
+
export { type ApplicationContext as A, type ContextChangedEvent as C, type DatabaseQueryResult as D, type ExtensionManifest as E, type HaexHubConfig as H, type Migration as M, type PermissionResponse as P, type SearchResult as S, TABLE_SEPARATOR as T, type WebRequestOptions as W, type ExtensionInfo as a, type MigrationResult as b, type WebResponse as c, type DatabasePermissionRequest as d, type EventCallback as e, type HaexHubRequest as f, type HaexHubResponse as g, type HaexHubEvent as h, type DatabasePermission as i, type DatabaseQueryParams as j, type DatabaseExecuteParams as k, type DatabaseTableInfo as l, type DatabaseColumnInfo as m, type SearchQuery as n, type SearchRequestEvent as o, PermissionStatus as p, ErrorCode as q, DEFAULT_TIMEOUT as r, getTableName as s, HaexHubError as t, HAEXTENSION_EVENTS as u, type HaextensionEvent as v };
|
package/dist/vite.js
CHANGED
|
@@ -220,22 +220,27 @@ function installHistoryPolyfill() {
|
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
+
// src/messages.ts
|
|
224
|
+
var HAEXSPACE_MESSAGE_TYPES = {
|
|
225
|
+
/** Debug message for development/troubleshooting */
|
|
226
|
+
DEBUG: "haexspace:debug"};
|
|
227
|
+
|
|
223
228
|
// src/polyfills/debug.ts
|
|
224
229
|
function installDebugDiagnostics() {
|
|
225
230
|
if (typeof window === "undefined") {
|
|
226
231
|
return;
|
|
227
232
|
}
|
|
228
233
|
const hasParent = window.parent && window.parent !== window;
|
|
229
|
-
console.log("[
|
|
234
|
+
console.log("[HaexSpace] hasParent:", hasParent);
|
|
230
235
|
if (hasParent) {
|
|
231
|
-
console.log("[
|
|
236
|
+
console.log("[HaexSpace] Attempting to send debug message to parent...");
|
|
232
237
|
window.parent.postMessage({
|
|
233
|
-
type:
|
|
238
|
+
type: HAEXSPACE_MESSAGE_TYPES.DEBUG,
|
|
234
239
|
data: `[Polyfills] window.parent test: exists=${!!window.parent}, different=${hasParent}, selfIsTop=${window.self === window.top}`
|
|
235
240
|
}, "*");
|
|
236
|
-
console.log("[
|
|
241
|
+
console.log("[HaexSpace] Debug message sent!");
|
|
237
242
|
} else {
|
|
238
|
-
console.log("[
|
|
243
|
+
console.log("[HaexSpace] No parent window or parent === window");
|
|
239
244
|
}
|
|
240
245
|
}
|
|
241
246
|
|
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/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 * 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('[HaexHub] hasParent:', hasParent);\n\n if (hasParent) {\n console.log('[HaexHub] Attempting to send debug message to parent...');\n window.parent.postMessage({\n type: 'haexhub:debug',\n data: `[Polyfills] window.parent test: exists=${!!window.parent}, different=${hasParent}, selfIsTop=${window.self === window.top}`\n }, '*');\n console.log('[HaexHub] Debug message sent!');\n } else {\n console.log('[HaexHub] 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 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"]}
|
package/dist/vite.mjs
CHANGED
|
@@ -216,22 +216,27 @@ function installHistoryPolyfill() {
|
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
+
// src/messages.ts
|
|
220
|
+
var HAEXSPACE_MESSAGE_TYPES = {
|
|
221
|
+
/** Debug message for development/troubleshooting */
|
|
222
|
+
DEBUG: "haexspace:debug"};
|
|
223
|
+
|
|
219
224
|
// src/polyfills/debug.ts
|
|
220
225
|
function installDebugDiagnostics() {
|
|
221
226
|
if (typeof window === "undefined") {
|
|
222
227
|
return;
|
|
223
228
|
}
|
|
224
229
|
const hasParent = window.parent && window.parent !== window;
|
|
225
|
-
console.log("[
|
|
230
|
+
console.log("[HaexSpace] hasParent:", hasParent);
|
|
226
231
|
if (hasParent) {
|
|
227
|
-
console.log("[
|
|
232
|
+
console.log("[HaexSpace] Attempting to send debug message to parent...");
|
|
228
233
|
window.parent.postMessage({
|
|
229
|
-
type:
|
|
234
|
+
type: HAEXSPACE_MESSAGE_TYPES.DEBUG,
|
|
230
235
|
data: `[Polyfills] window.parent test: exists=${!!window.parent}, different=${hasParent}, selfIsTop=${window.self === window.top}`
|
|
231
236
|
}, "*");
|
|
232
|
-
console.log("[
|
|
237
|
+
console.log("[HaexSpace] Debug message sent!");
|
|
233
238
|
} else {
|
|
234
|
-
console.log("[
|
|
239
|
+
console.log("[HaexSpace] No parent window or parent === window");
|
|
235
240
|
}
|
|
236
241
|
}
|
|
237
242
|
|
package/dist/vite.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/polyfills/localStorage.ts","../src/polyfills/cookies.ts","../src/polyfills/history.ts","../src/polyfills/debug.ts","../src/polyfills/standalone.ts","../src/cors.ts","../src/vite.ts"],"names":[],"mappings":"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","file":"vite.mjs","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 * 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('[HaexHub] hasParent:', hasParent);\n\n if (hasParent) {\n console.log('[HaexHub] Attempting to send debug message to parent...');\n window.parent.postMessage({\n type: 'haexhub:debug',\n data: `[Polyfills] window.parent test: exists=${!!window.parent}, different=${hasParent}, selfIsTop=${window.self === window.top}`\n }, '*');\n console.log('[HaexHub] Debug message sent!');\n } else {\n console.log('[HaexHub] 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.mjs","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"]}
|
package/dist/vue.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { H as HaexVaultClient, S as StorageAPI } from './client-
|
|
1
|
+
import { H as HaexVaultClient, S as StorageAPI } from './client-BIiJwbdW.mjs';
|
|
2
2
|
import * as drizzle_orm_sqlite_proxy from 'drizzle-orm/sqlite-proxy';
|
|
3
3
|
import { Ref } from 'vue';
|
|
4
|
-
import { H as HaexHubConfig } from './types-
|
|
4
|
+
import { H as HaexHubConfig } from './types-FE9ewl3r.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Vue 3 composable for HaexHub SDK
|
package/dist/vue.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { H as HaexVaultClient, S as StorageAPI } from './client-
|
|
1
|
+
import { H as HaexVaultClient, S as StorageAPI } from './client-D4hDL-PR.js';
|
|
2
2
|
import * as drizzle_orm_sqlite_proxy from 'drizzle-orm/sqlite-proxy';
|
|
3
3
|
import { Ref } from 'vue';
|
|
4
|
-
import { H as HaexHubConfig } from './types-
|
|
4
|
+
import { H as HaexHubConfig } from './types-FE9ewl3r.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Vue 3 composable for HaexHub SDK
|
package/dist/vue.js
CHANGED
|
@@ -223,22 +223,30 @@ function installHistoryPolyfill() {
|
|
|
223
223
|
}
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
+
// src/messages.ts
|
|
227
|
+
var HAEXSPACE_MESSAGE_TYPES = {
|
|
228
|
+
/** Debug message for development/troubleshooting */
|
|
229
|
+
DEBUG: "haexspace:debug",
|
|
230
|
+
/** Console forwarding from extension iframe */
|
|
231
|
+
CONSOLE_FORWARD: "console.forward"
|
|
232
|
+
};
|
|
233
|
+
|
|
226
234
|
// src/polyfills/debug.ts
|
|
227
235
|
function installDebugDiagnostics() {
|
|
228
236
|
if (typeof window === "undefined") {
|
|
229
237
|
return;
|
|
230
238
|
}
|
|
231
239
|
const hasParent = window.parent && window.parent !== window;
|
|
232
|
-
console.log("[
|
|
240
|
+
console.log("[HaexSpace] hasParent:", hasParent);
|
|
233
241
|
if (hasParent) {
|
|
234
|
-
console.log("[
|
|
242
|
+
console.log("[HaexSpace] Attempting to send debug message to parent...");
|
|
235
243
|
window.parent.postMessage({
|
|
236
|
-
type:
|
|
244
|
+
type: HAEXSPACE_MESSAGE_TYPES.DEBUG,
|
|
237
245
|
data: `[Polyfills] window.parent test: exists=${!!window.parent}, different=${hasParent}, selfIsTop=${window.self === window.top}`
|
|
238
246
|
}, "*");
|
|
239
|
-
console.log("[
|
|
247
|
+
console.log("[HaexSpace] Debug message sent!");
|
|
240
248
|
} else {
|
|
241
|
-
console.log("[
|
|
249
|
+
console.log("[HaexSpace] No parent window or parent === window");
|
|
242
250
|
}
|
|
243
251
|
}
|
|
244
252
|
|
|
@@ -273,7 +281,7 @@ function interceptConsole(level) {
|
|
|
273
281
|
const timestamp = (/* @__PURE__ */ new Date()).toLocaleTimeString();
|
|
274
282
|
window.parent.postMessage(
|
|
275
283
|
{
|
|
276
|
-
type:
|
|
284
|
+
type: HAEXSPACE_MESSAGE_TYPES.CONSOLE_FORWARD,
|
|
277
285
|
data: {
|
|
278
286
|
timestamp,
|
|
279
287
|
level,
|
|
@@ -366,6 +374,9 @@ var HAEXTENSION_METHODS = {
|
|
|
366
374
|
// src/types.ts
|
|
367
375
|
var DEFAULT_TIMEOUT = 3e4;
|
|
368
376
|
var TABLE_SEPARATOR = "__";
|
|
377
|
+
function getTableName(publicKey, extensionName, tableName) {
|
|
378
|
+
return `${publicKey}${TABLE_SEPARATOR}${extensionName}${TABLE_SEPARATOR}${tableName}`;
|
|
379
|
+
}
|
|
369
380
|
var HaexHubError = class extends Error {
|
|
370
381
|
constructor(code, messageKey, details) {
|
|
371
382
|
super(messageKey);
|
|
@@ -907,14 +918,13 @@ var HaexVaultClient = class {
|
|
|
907
918
|
}
|
|
908
919
|
this.validateTableName(tableName);
|
|
909
920
|
const { publicKey, name } = this._extensionInfo;
|
|
910
|
-
|
|
911
|
-
return `"${publicKey}${TABLE_SEPARATOR}${extensionName}${TABLE_SEPARATOR}${tableName}"`;
|
|
921
|
+
return `"${getTableName(publicKey, name, tableName)}"`;
|
|
912
922
|
}
|
|
913
923
|
getDependencyTableName(publicKey, extensionName, tableName) {
|
|
914
924
|
this.validatePublicKey(publicKey);
|
|
915
925
|
this.validateExtensionName(extensionName);
|
|
916
926
|
this.validateTableName(tableName);
|
|
917
|
-
return `"${publicKey
|
|
927
|
+
return `"${getTableName(publicKey, extensionName, tableName)}"`;
|
|
918
928
|
}
|
|
919
929
|
parseTableName(fullTableName) {
|
|
920
930
|
let cleanTableName = fullTableName;
|
|
@@ -1207,7 +1217,7 @@ window.parent === window: ${window.parent === window}
|
|
|
1207
1217
|
window.self === window.top: ${window.self === window.top}`;
|
|
1208
1218
|
try {
|
|
1209
1219
|
window.parent.postMessage({
|
|
1210
|
-
type:
|
|
1220
|
+
type: HAEXSPACE_MESSAGE_TYPES.DEBUG,
|
|
1211
1221
|
data: debugInfo
|
|
1212
1222
|
}, "*");
|
|
1213
1223
|
} catch (e) {
|