@haex-space/vault-sdk 1.0.1 → 2.0.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/nuxt.js CHANGED
@@ -350,8 +350,8 @@ function readManifest(options) {
350
350
  // src/nuxt.ts
351
351
  var nuxt_default = kit.defineNuxtModule({
352
352
  meta: {
353
- name: "@haexhub/sdk",
354
- configKey: "haexhub",
353
+ name: "@haex-space/vault-sdk",
354
+ configKey: "haexVault",
355
355
  compatibility: {
356
356
  nuxt: "^3.0.0 || ^4.0.0"
357
357
  }
@@ -373,7 +373,7 @@ var nuxt_default = kit.defineNuxtModule({
373
373
  extensionDir
374
374
  });
375
375
  nuxt.options.runtimeConfig.public = nuxt.options.runtimeConfig.public || {};
376
- nuxt.options.runtimeConfig.public.haexhubManifest = manifest;
376
+ nuxt.options.runtimeConfig.public.haexVaultManifest = manifest;
377
377
  kit.addPlugin({
378
378
  src: resolve2("./runtime/nuxt.plugin.client.mjs"),
379
379
  mode: "client"
@@ -391,7 +391,7 @@ var nuxt_default = kit.defineNuxtModule({
391
391
  });
392
392
  });
393
393
  console.log(
394
- "\u2713 [@haexhub/sdk] Dev mode: Priority polyfill injection configured"
394
+ "\u2713 [@haex-space/vault-sdk] Dev mode: Priority polyfill injection configured"
395
395
  );
396
396
  }
397
397
  if (nuxt.options.dev) {
@@ -402,27 +402,27 @@ var nuxt_default = kit.defineNuxtModule({
402
402
  nuxt.options.vite.server.cors = true;
403
403
  nuxt.options.vite.server.headers = getCorsHeaders();
404
404
  console.log(
405
- "\u2713 [@haexhub/sdk] Dev mode: Set app.baseURL to / (absolute paths for dev server)"
405
+ "\u2713 [@haex-space/vault-sdk] Dev mode: Set app.baseURL to / (absolute paths for dev server)"
406
406
  );
407
- console.log("\u2713 [@haexhub/sdk] Dev mode: Enabled CORS headers");
407
+ console.log("\u2713 [@haex-space/vault-sdk] Dev mode: Enabled CORS headers");
408
408
  } else {
409
409
  nuxt.options.app.baseURL = "./";
410
410
  nuxt.options.app.buildAssetsDir = "_nuxt/";
411
411
  console.log(
412
- "\u2713 [@haexhub/sdk] Build mode: Set app.baseURL to relative path (./)"
412
+ "\u2713 [@haex-space/vault-sdk] Build mode: Set app.baseURL to relative path (./)"
413
413
  );
414
414
  console.log(
415
- "\u2713 [@haexhub/sdk] Build mode: Set buildAssetsDir to relative path (_nuxt/)"
415
+ "\u2713 [@haex-space/vault-sdk] Build mode: Set buildAssetsDir to relative path (_nuxt/)"
416
416
  );
417
417
  }
418
418
  nuxt.options.experimental = nuxt.options.experimental || {};
419
419
  nuxt.options.experimental.appManifest = false;
420
420
  nuxt.options.experimental.payloadExtraction = false;
421
421
  console.log(
422
- "\u2713 [@haexhub/sdk] Disabled appManifest (not needed for extensions)"
422
+ "\u2713 [@haex-space/vault-sdk] Disabled appManifest (not needed for extensions)"
423
423
  );
424
424
  console.log(
425
- "\u2713 [@haexhub/sdk] Disabled payloadExtraction (not needed for SPAs)"
425
+ "\u2713 [@haex-space/vault-sdk] Disabled payloadExtraction (not needed for SPAs)"
426
426
  );
427
427
  if (!options.injectPolyfills || nuxt.options.dev) {
428
428
  return;
@@ -458,11 +458,11 @@ var nuxt_default = kit.defineNuxtModule({
458
458
  html = html.replace(/"\/_nuxt\//g, '"./_nuxt/');
459
459
  fs.writeFileSync(filePath, html);
460
460
  console.log(
461
- `\u2713 [@haexhub/sdk] Polyfill and relative paths applied to ${file}`
461
+ `\u2713 [@haex-space/vault-sdk] Polyfill and relative paths applied to ${file}`
462
462
  );
463
463
  }
464
464
  } catch (error) {
465
- console.error("[@haexhub/sdk] Failed to inject polyfill:", error);
465
+ console.error("[@haex-space/vault-sdk] Failed to inject polyfill:", error);
466
466
  }
467
467
  });
468
468
  }
package/dist/nuxt.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cors.ts","../src/polyfills/localStorage.ts","../src/polyfills/cookies.ts","../src/polyfills/history.ts","../src/polyfills/debug.ts","../src/polyfills/standalone.ts","../src/config.ts","../src/manifest.ts","../src/nuxt.ts"],"names":["resolve","existsSync","readFileSync","resolvePath","defineNuxtModule","createResolver","addPlugin","readdirSync","join","writeFileSync"],"mappings":"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","file":"nuxt.js","sourcesContent":["/**\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 * 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 * Utility to read haextension.config.json\n */\nimport { readFileSync, existsSync } from 'fs'\nimport { resolve } from 'path'\n\nexport interface HaextensionConfig {\n dev?: {\n port?: number\n host?: string\n haextension_dir?: string\n }\n keys?: {\n public_key_path?: string\n private_key_path?: string\n }\n build?: {\n distDir?: string\n }\n}\n\n/**\n * Read haextension.config.json from the project root\n * Returns null if file doesn't exist\n */\nexport function readHaextensionConfig(rootDir: string = process.cwd()): HaextensionConfig | null {\n const configPath = resolve(rootDir, 'haextension.config.json')\n \n if (!existsSync(configPath)) {\n return null\n }\n\n try {\n const content = readFileSync(configPath, 'utf-8')\n return JSON.parse(content)\n } catch (error) {\n console.warn(`Failed to parse haextension.config.json: ${error}`)\n return null\n }\n}\n\n/**\n * Get extension directory from config or use default\n */\nexport function getExtensionDir(rootDir: string = process.cwd()): string {\n const config = readHaextensionConfig(rootDir)\n return config?.dev?.haextension_dir || 'haextension'\n}\n","/**\n * Utility for reading and processing extension manifest files\n */\nimport { readFileSync } from \"node:fs\";\nimport { resolve as resolvePath } from \"node:path\";\nimport type { ExtensionManifest } from \"./types\";\n\nexport interface ReadManifestOptions {\n /** Root directory of the project */\n rootDir: string;\n /** Path to manifest.json (if not provided, will use extensionDir) */\n manifestPath?: string;\n /** Directory containing extension files (default: \"haextension\") */\n extensionDir?: string;\n}\n\n/**\n * Reads and processes the extension manifest.json file\n * Falls back to package.json version if manifest doesn't specify one\n */\nexport function readManifest(options: ReadManifestOptions): ExtensionManifest | null {\n const { rootDir, manifestPath, extensionDir = \"haextension\" } = options;\n\n // Determine manifest path\n const resolvedManifestPath = manifestPath\n ? resolvePath(rootDir, manifestPath)\n : resolvePath(rootDir, extensionDir, \"manifest.json\");\n\n try {\n const manifestContent = readFileSync(resolvedManifestPath, \"utf-8\");\n const parsed = JSON.parse(manifestContent);\n\n // Read version from package.json if not provided in manifest\n let version = parsed.version;\n if (!version) {\n try {\n const packageJsonPath = resolvePath(rootDir, \"package.json\");\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\"));\n version = packageJson.version;\n console.log(`✓ [@haexhub/sdk] Using version from package.json: ${version}`);\n } catch (pkgError) {\n console.warn(`[@haexhub/sdk] Warning: Could not read version from package.json`);\n }\n }\n\n const manifest: ExtensionManifest = {\n name: parsed.name,\n version: version,\n author: parsed.author ?? null,\n entry: parsed.entry ?? null,\n icon: parsed.icon ?? null,\n public_key: parsed.public_key,\n signature: parsed.signature || \"\",\n permissions: parsed.permissions || {\n database: [],\n filesystem: [],\n http: [],\n shell: [],\n },\n homepage: parsed.homepage ?? null,\n description: parsed.description ?? null,\n single_instance: parsed.single_instance ?? null,\n display_mode: parsed.display_mode ?? null,\n };\n\n console.log(`✓ [@haexhub/sdk] Loaded ${resolvedManifestPath}`);\n return manifest;\n } catch (error) {\n console.warn(\n `[@haexhub/sdk] Warning: manifest.json not found at ${resolvedManifestPath}, extension info will not be available`\n );\n return null;\n }\n}\n","/**\n * Nuxt Module for HaexHub SDK\n * Automatically injects polyfills into the built HTML files\n */\nimport { addPlugin, createResolver, defineNuxtModule } from \"@nuxt/kit\";\nimport { getCorsHeaders } from \"./cors\";\nimport { getPolyfillCode } from \"./polyfills/standalone\";\nimport { join, resolve as resolvePath } from \"node:path\";\nimport { readFileSync, writeFileSync, readdirSync } from \"node:fs\";\nimport type { Nuxt } from \"@nuxt/schema\";\nimport { readHaextensionConfig } from \"./config\";\nimport { readManifest } from \"./manifest\";\n\nexport interface ModuleOptions {\n injectPolyfills?: boolean;\n /**\n * Directory containing extension files (manifest.json, public.key, private.key)\n * Default: \"haextension\"\n */\n extensionDir?: string;\n /** Path to manifest.json (overrides extensionDir if specified) */\n manifestPath?: string;\n /** Path to public.key (overrides extensionDir if specified) */\n publicKeyPath?: string;\n /** Path to private.key (overrides extensionDir if specified) */\n privateKeyPath?: string;\n}\n\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: \"@haexhub/sdk\",\n configKey: \"haexhub\",\n compatibility: {\n nuxt: \"^3.0.0 || ^4.0.0\",\n },\n },\n\n defaults: {\n injectPolyfills: true,\n extensionDir: \"haextension\",\n },\n\n async setup(options: ModuleOptions, nuxt: Nuxt) {\n const { resolve } = createResolver(import.meta.url);\n\n // Add type declaration for $haexhub\n nuxt.hook('prepare:types', ({ references }) => {\n references.push({ path: resolve('./runtime/nuxt.types.d.ts') })\n })\n\n // Read haextension.config.json if available\n const config = readHaextensionConfig(nuxt.options.rootDir);\n\n // Use config values as defaults if not explicitly set in options\n const extensionDir = options.extensionDir || config?.dev?.haextension_dir || \"haextension\";\n\n // Read manifest.json using shared utility\n const manifest = readManifest({\n rootDir: nuxt.options.rootDir,\n manifestPath: options.manifestPath,\n extensionDir,\n });\n\n // Inject manifest into public runtime config\n nuxt.options.runtimeConfig.public = nuxt.options.runtimeConfig.public || {};\n nuxt.options.runtimeConfig.public.haexhubManifest = manifest;\n\n addPlugin({\n src: resolve(\"./runtime/nuxt.plugin.client.mjs\"),\n mode: \"client\",\n });\n // CRITICAL: Install polyfill hook BEFORE any other module\n // This ensures polyfills load before color-mode or any other script\n if (options.injectPolyfills && nuxt.options.dev) {\n nuxt.hook(\"nitro:config\", (nitroConfig: any) => {\n nitroConfig.hooks = nitroConfig.hooks || {};\n nitroConfig.hooks[\"render:html\"] =\n nitroConfig.hooks[\"render:html\"] || [];\n\n // Prepend (unshift) to run before ALL other hooks\n const polyfillCode = getPolyfillCode();\n const polyfillScript = `<script data-haexhub-polyfill>${polyfillCode}</script>`;\n\n nitroConfig.hooks[\"render:html\"].unshift((html: any) => {\n // Inject at the very beginning of <head>\n if (html.head && Array.isArray(html.head)) {\n html.head.unshift(polyfillScript);\n }\n });\n });\n console.log(\n \"✓ [@haexhub/sdk] Dev mode: Priority polyfill injection configured\"\n );\n }\n\n // Configure Nuxt differently for dev vs production\n if (nuxt.options.dev) {\n // DEV MODE: Use absolute paths for dev server\n nuxt.options.app.baseURL = \"/\";\n nuxt.options.app.buildAssetsDir = \"/_nuxt/\";\n\n // Enable CORS for dev server using shared CORS configuration\n nuxt.options.vite = nuxt.options.vite || {};\n nuxt.options.vite.server = nuxt.options.vite.server || {};\n nuxt.options.vite.server.cors = true;\n nuxt.options.vite.server.headers = getCorsHeaders();\n\n console.log(\n \"✓ [@haexhub/sdk] Dev mode: Set app.baseURL to / (absolute paths for dev server)\"\n );\n console.log(\"✓ [@haexhub/sdk] Dev mode: Enabled CORS headers\");\n } else {\n // PRODUCTION BUILD: Use relative paths\n nuxt.options.app.baseURL = \"./\";\n nuxt.options.app.buildAssetsDir = \"_nuxt/\"; // Remove leading slash\n\n console.log(\n \"✓ [@haexhub/sdk] Build mode: Set app.baseURL to relative path (./)\"\n );\n console.log(\n \"✓ [@haexhub/sdk] Build mode: Set buildAssetsDir to relative path (_nuxt/)\"\n );\n }\n\n // Disable app manifest feature (generates /_nuxt/builds/meta/*.json)\n // This is not needed for extensions and causes 404 errors\n nuxt.options.experimental = nuxt.options.experimental || {};\n nuxt.options.experimental.appManifest = false;\n\n // Disable payload extraction for SPAs (extensions don't need SSR payload)\n // This prevents \"Cannot load payload\" errors for _payload.json files\n nuxt.options.experimental.payloadExtraction = false;\n\n console.log(\n \"✓ [@haexhub/sdk] Disabled appManifest (not needed for extensions)\"\n );\n console.log(\n \"✓ [@haexhub/sdk] Disabled payloadExtraction (not needed for SPAs)\"\n );\n\n // Only inject polyfills if enabled and building for production\n if (!options.injectPolyfills || nuxt.options.dev) {\n return;\n }\n\n // Add hook to inject polyfills after HTML generation\n nuxt.hook(\"nitro:build:public-assets\", async () => {\n try {\n // Use Nuxt's configured output directory\n const nitroOutput = nuxt.options.nitro?.output || {};\n const outputDir = nitroOutput.dir || \".output\";\n const publicDir = nitroOutput.publicDir || \"public\";\n const distDir = resolvePath(nuxt.options.rootDir, outputDir, publicDir);\n\n // Get polyfill code from modular polyfills\n const polyfillCode = getPolyfillCode();\n const polyfillScript = `<script>${polyfillCode}</script>`;\n\n // Find all HTML files in the output directory\n const htmlFiles = readdirSync(distDir).filter((f: string) =>\n f.endsWith(\".html\")\n );\n\n for (const file of htmlFiles) {\n const filePath = join(distDir, file);\n let html = readFileSync(filePath, \"utf-8\");\n\n // Inject polyfill directly after <head>\n const headPos = html.indexOf(\"<head>\");\n if (headPos !== -1) {\n const insertPos = headPos + 6; // after <head>\n html =\n html.slice(0, insertPos) + polyfillScript + html.slice(insertPos);\n }\n\n // IMPORTANT: Convert all absolute asset paths to relative paths\n // Replace all occurrences of /_nuxt/ with _nuxt/ to make paths relative\n\n // Fix <link> and <script> tags\n html = html.replace(/\\b(href|src)=\"\\/_nuxt\\//g, '$1=\"_nuxt/');\n\n // Fix import maps - need to keep it absolute or use ./ prefix for module resolution\n html = html.replace(\n /\"imports\":\\{\"#entry\":\"\\/_nuxt\\//g,\n '\"imports\":{\"#entry\":\"./_nuxt/'\n );\n\n // Fix buildAssetsDir in runtime config\n html = html.replace(\n /buildAssetsDir:\"\\/_nuxt\\/\"/g,\n 'buildAssetsDir:\"./_nuxt/\"'\n );\n\n // Fix any remaining absolute /_nuxt/ references in JSON/JS\n html = html.replace(/\"\\/_nuxt\\//g, '\"./_nuxt/');\n\n writeFileSync(filePath, html);\n console.log(\n `✓ [@haexhub/sdk] Polyfill and relative paths applied to ${file}`\n );\n }\n } catch (error: unknown) {\n console.error(\"[@haexhub/sdk] Failed to inject polyfill:\", error);\n }\n });\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/cors.ts","../src/polyfills/localStorage.ts","../src/polyfills/cookies.ts","../src/polyfills/history.ts","../src/polyfills/debug.ts","../src/polyfills/standalone.ts","../src/config.ts","../src/manifest.ts","../src/nuxt.ts"],"names":["resolve","existsSync","readFileSync","resolvePath","defineNuxtModule","createResolver","addPlugin","readdirSync","join","writeFileSync"],"mappings":"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","file":"nuxt.js","sourcesContent":["/**\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 * 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 * Utility to read haextension.config.json\n */\nimport { readFileSync, existsSync } from 'fs'\nimport { resolve } from 'path'\n\nexport interface HaextensionConfig {\n dev?: {\n port?: number\n host?: string\n haextension_dir?: string\n }\n keys?: {\n public_key_path?: string\n private_key_path?: string\n }\n build?: {\n distDir?: string\n }\n}\n\n/**\n * Read haextension.config.json from the project root\n * Returns null if file doesn't exist\n */\nexport function readHaextensionConfig(rootDir: string = process.cwd()): HaextensionConfig | null {\n const configPath = resolve(rootDir, 'haextension.config.json')\n \n if (!existsSync(configPath)) {\n return null\n }\n\n try {\n const content = readFileSync(configPath, 'utf-8')\n return JSON.parse(content)\n } catch (error) {\n console.warn(`Failed to parse haextension.config.json: ${error}`)\n return null\n }\n}\n\n/**\n * Get extension directory from config or use default\n */\nexport function getExtensionDir(rootDir: string = process.cwd()): string {\n const config = readHaextensionConfig(rootDir)\n return config?.dev?.haextension_dir || 'haextension'\n}\n","/**\n * Utility for reading and processing extension manifest files\n */\nimport { readFileSync } from \"node:fs\";\nimport { resolve as resolvePath } from \"node:path\";\nimport type { ExtensionManifest } from \"./types\";\n\nexport interface ReadManifestOptions {\n /** Root directory of the project */\n rootDir: string;\n /** Path to manifest.json (if not provided, will use extensionDir) */\n manifestPath?: string;\n /** Directory containing extension files (default: \"haextension\") */\n extensionDir?: string;\n}\n\n/**\n * Reads and processes the extension manifest.json file\n * Falls back to package.json version if manifest doesn't specify one\n */\nexport function readManifest(options: ReadManifestOptions): ExtensionManifest | null {\n const { rootDir, manifestPath, extensionDir = \"haextension\" } = options;\n\n // Determine manifest path\n const resolvedManifestPath = manifestPath\n ? resolvePath(rootDir, manifestPath)\n : resolvePath(rootDir, extensionDir, \"manifest.json\");\n\n try {\n const manifestContent = readFileSync(resolvedManifestPath, \"utf-8\");\n const parsed = JSON.parse(manifestContent);\n\n // Read version from package.json if not provided in manifest\n let version = parsed.version;\n if (!version) {\n try {\n const packageJsonPath = resolvePath(rootDir, \"package.json\");\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\"));\n version = packageJson.version;\n console.log(`✓ [@haexhub/sdk] Using version from package.json: ${version}`);\n } catch (pkgError) {\n console.warn(`[@haexhub/sdk] Warning: Could not read version from package.json`);\n }\n }\n\n const manifest: ExtensionManifest = {\n name: parsed.name,\n version: version,\n author: parsed.author ?? null,\n entry: parsed.entry ?? null,\n icon: parsed.icon ?? null,\n public_key: parsed.public_key,\n signature: parsed.signature || \"\",\n permissions: parsed.permissions || {\n database: [],\n filesystem: [],\n http: [],\n shell: [],\n },\n homepage: parsed.homepage ?? null,\n description: parsed.description ?? null,\n single_instance: parsed.single_instance ?? null,\n display_mode: parsed.display_mode ?? null,\n };\n\n console.log(`✓ [@haexhub/sdk] Loaded ${resolvedManifestPath}`);\n return manifest;\n } catch (error) {\n console.warn(\n `[@haexhub/sdk] Warning: manifest.json not found at ${resolvedManifestPath}, extension info will not be available`\n );\n return null;\n }\n}\n","/**\n * Nuxt Module for HaexVault SDK\n * Automatically injects polyfills into the built HTML files\n */\nimport { addPlugin, createResolver, defineNuxtModule } from \"@nuxt/kit\";\nimport { getCorsHeaders } from \"./cors\";\nimport { getPolyfillCode } from \"./polyfills/standalone\";\nimport { join, resolve as resolvePath } from \"node:path\";\nimport { readFileSync, writeFileSync, readdirSync } from \"node:fs\";\nimport type { Nuxt } from \"@nuxt/schema\";\nimport { readHaextensionConfig } from \"./config\";\nimport { readManifest } from \"./manifest\";\n\nexport interface ModuleOptions {\n injectPolyfills?: boolean;\n /**\n * Directory containing extension files (manifest.json, public.key, private.key)\n * Default: \"haextension\"\n */\n extensionDir?: string;\n /** Path to manifest.json (overrides extensionDir if specified) */\n manifestPath?: string;\n /** Path to public.key (overrides extensionDir if specified) */\n publicKeyPath?: string;\n /** Path to private.key (overrides extensionDir if specified) */\n privateKeyPath?: string;\n}\n\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: \"@haex-space/vault-sdk\",\n configKey: \"haexVault\",\n compatibility: {\n nuxt: \"^3.0.0 || ^4.0.0\",\n },\n },\n\n defaults: {\n injectPolyfills: true,\n extensionDir: \"haextension\",\n },\n\n async setup(options: ModuleOptions, nuxt: Nuxt) {\n const { resolve } = createResolver(import.meta.url);\n\n // Add type declaration for $haexVault\n nuxt.hook('prepare:types', ({ references }) => {\n references.push({ path: resolve('./runtime/nuxt.types.d.ts') })\n })\n\n // Read haextension.config.json if available\n const config = readHaextensionConfig(nuxt.options.rootDir);\n\n // Use config values as defaults if not explicitly set in options\n const extensionDir = options.extensionDir || config?.dev?.haextension_dir || \"haextension\";\n\n // Read manifest.json using shared utility\n const manifest = readManifest({\n rootDir: nuxt.options.rootDir,\n manifestPath: options.manifestPath,\n extensionDir,\n });\n\n // Inject manifest into public runtime config\n nuxt.options.runtimeConfig.public = nuxt.options.runtimeConfig.public || {};\n nuxt.options.runtimeConfig.public.haexVaultManifest = manifest;\n\n addPlugin({\n src: resolve(\"./runtime/nuxt.plugin.client.mjs\"),\n mode: \"client\",\n });\n // CRITICAL: Install polyfill hook BEFORE any other module\n // This ensures polyfills load before color-mode or any other script\n if (options.injectPolyfills && nuxt.options.dev) {\n nuxt.hook(\"nitro:config\", (nitroConfig: any) => {\n nitroConfig.hooks = nitroConfig.hooks || {};\n nitroConfig.hooks[\"render:html\"] =\n nitroConfig.hooks[\"render:html\"] || [];\n\n // Prepend (unshift) to run before ALL other hooks\n const polyfillCode = getPolyfillCode();\n const polyfillScript = `<script data-haexhub-polyfill>${polyfillCode}</script>`;\n\n nitroConfig.hooks[\"render:html\"].unshift((html: any) => {\n // Inject at the very beginning of <head>\n if (html.head && Array.isArray(html.head)) {\n html.head.unshift(polyfillScript);\n }\n });\n });\n console.log(\n \"✓ [@haex-space/vault-sdk] Dev mode: Priority polyfill injection configured\"\n );\n }\n\n // Configure Nuxt differently for dev vs production\n if (nuxt.options.dev) {\n // DEV MODE: Use absolute paths for dev server\n nuxt.options.app.baseURL = \"/\";\n nuxt.options.app.buildAssetsDir = \"/_nuxt/\";\n\n // Enable CORS for dev server using shared CORS configuration\n nuxt.options.vite = nuxt.options.vite || {};\n nuxt.options.vite.server = nuxt.options.vite.server || {};\n nuxt.options.vite.server.cors = true;\n nuxt.options.vite.server.headers = getCorsHeaders();\n\n console.log(\n \"✓ [@haex-space/vault-sdk] Dev mode: Set app.baseURL to / (absolute paths for dev server)\"\n );\n console.log(\"✓ [@haex-space/vault-sdk] Dev mode: Enabled CORS headers\");\n } else {\n // PRODUCTION BUILD: Use relative paths\n nuxt.options.app.baseURL = \"./\";\n nuxt.options.app.buildAssetsDir = \"_nuxt/\"; // Remove leading slash\n\n console.log(\n \"✓ [@haex-space/vault-sdk] Build mode: Set app.baseURL to relative path (./)\"\n );\n console.log(\n \"✓ [@haex-space/vault-sdk] Build mode: Set buildAssetsDir to relative path (_nuxt/)\"\n );\n }\n\n // Disable app manifest feature (generates /_nuxt/builds/meta/*.json)\n // This is not needed for extensions and causes 404 errors\n nuxt.options.experimental = nuxt.options.experimental || {};\n nuxt.options.experimental.appManifest = false;\n\n // Disable payload extraction for SPAs (extensions don't need SSR payload)\n // This prevents \"Cannot load payload\" errors for _payload.json files\n nuxt.options.experimental.payloadExtraction = false;\n\n console.log(\n \"✓ [@haex-space/vault-sdk] Disabled appManifest (not needed for extensions)\"\n );\n console.log(\n \"✓ [@haex-space/vault-sdk] Disabled payloadExtraction (not needed for SPAs)\"\n );\n\n // Only inject polyfills if enabled and building for production\n if (!options.injectPolyfills || nuxt.options.dev) {\n return;\n }\n\n // Add hook to inject polyfills after HTML generation\n nuxt.hook(\"nitro:build:public-assets\", async () => {\n try {\n // Use Nuxt's configured output directory\n const nitroOutput = nuxt.options.nitro?.output || {};\n const outputDir = nitroOutput.dir || \".output\";\n const publicDir = nitroOutput.publicDir || \"public\";\n const distDir = resolvePath(nuxt.options.rootDir, outputDir, publicDir);\n\n // Get polyfill code from modular polyfills\n const polyfillCode = getPolyfillCode();\n const polyfillScript = `<script>${polyfillCode}</script>`;\n\n // Find all HTML files in the output directory\n const htmlFiles = readdirSync(distDir).filter((f: string) =>\n f.endsWith(\".html\")\n );\n\n for (const file of htmlFiles) {\n const filePath = join(distDir, file);\n let html = readFileSync(filePath, \"utf-8\");\n\n // Inject polyfill directly after <head>\n const headPos = html.indexOf(\"<head>\");\n if (headPos !== -1) {\n const insertPos = headPos + 6; // after <head>\n html =\n html.slice(0, insertPos) + polyfillScript + html.slice(insertPos);\n }\n\n // IMPORTANT: Convert all absolute asset paths to relative paths\n // Replace all occurrences of /_nuxt/ with _nuxt/ to make paths relative\n\n // Fix <link> and <script> tags\n html = html.replace(/\\b(href|src)=\"\\/_nuxt\\//g, '$1=\"_nuxt/');\n\n // Fix import maps - need to keep it absolute or use ./ prefix for module resolution\n html = html.replace(\n /\"imports\":\\{\"#entry\":\"\\/_nuxt\\//g,\n '\"imports\":{\"#entry\":\"./_nuxt/'\n );\n\n // Fix buildAssetsDir in runtime config\n html = html.replace(\n /buildAssetsDir:\"\\/_nuxt\\/\"/g,\n 'buildAssetsDir:\"./_nuxt/\"'\n );\n\n // Fix any remaining absolute /_nuxt/ references in JSON/JS\n html = html.replace(/\"\\/_nuxt\\//g, '\"./_nuxt/');\n\n writeFileSync(filePath, html);\n console.log(\n `✓ [@haex-space/vault-sdk] Polyfill and relative paths applied to ${file}`\n );\n }\n } catch (error: unknown) {\n console.error(\"[@haex-space/vault-sdk] Failed to inject polyfill:\", error);\n }\n });\n },\n});\n"]}
package/dist/nuxt.mjs CHANGED
@@ -347,8 +347,8 @@ function readManifest(options) {
347
347
  // src/nuxt.ts
348
348
  var nuxt_default = defineNuxtModule({
349
349
  meta: {
350
- name: "@haexhub/sdk",
351
- configKey: "haexhub",
350
+ name: "@haex-space/vault-sdk",
351
+ configKey: "haexVault",
352
352
  compatibility: {
353
353
  nuxt: "^3.0.0 || ^4.0.0"
354
354
  }
@@ -370,7 +370,7 @@ var nuxt_default = defineNuxtModule({
370
370
  extensionDir
371
371
  });
372
372
  nuxt.options.runtimeConfig.public = nuxt.options.runtimeConfig.public || {};
373
- nuxt.options.runtimeConfig.public.haexhubManifest = manifest;
373
+ nuxt.options.runtimeConfig.public.haexVaultManifest = manifest;
374
374
  addPlugin({
375
375
  src: resolve2("./runtime/nuxt.plugin.client.mjs"),
376
376
  mode: "client"
@@ -388,7 +388,7 @@ var nuxt_default = defineNuxtModule({
388
388
  });
389
389
  });
390
390
  console.log(
391
- "\u2713 [@haexhub/sdk] Dev mode: Priority polyfill injection configured"
391
+ "\u2713 [@haex-space/vault-sdk] Dev mode: Priority polyfill injection configured"
392
392
  );
393
393
  }
394
394
  if (nuxt.options.dev) {
@@ -399,27 +399,27 @@ var nuxt_default = defineNuxtModule({
399
399
  nuxt.options.vite.server.cors = true;
400
400
  nuxt.options.vite.server.headers = getCorsHeaders();
401
401
  console.log(
402
- "\u2713 [@haexhub/sdk] Dev mode: Set app.baseURL to / (absolute paths for dev server)"
402
+ "\u2713 [@haex-space/vault-sdk] Dev mode: Set app.baseURL to / (absolute paths for dev server)"
403
403
  );
404
- console.log("\u2713 [@haexhub/sdk] Dev mode: Enabled CORS headers");
404
+ console.log("\u2713 [@haex-space/vault-sdk] Dev mode: Enabled CORS headers");
405
405
  } else {
406
406
  nuxt.options.app.baseURL = "./";
407
407
  nuxt.options.app.buildAssetsDir = "_nuxt/";
408
408
  console.log(
409
- "\u2713 [@haexhub/sdk] Build mode: Set app.baseURL to relative path (./)"
409
+ "\u2713 [@haex-space/vault-sdk] Build mode: Set app.baseURL to relative path (./)"
410
410
  );
411
411
  console.log(
412
- "\u2713 [@haexhub/sdk] Build mode: Set buildAssetsDir to relative path (_nuxt/)"
412
+ "\u2713 [@haex-space/vault-sdk] Build mode: Set buildAssetsDir to relative path (_nuxt/)"
413
413
  );
414
414
  }
415
415
  nuxt.options.experimental = nuxt.options.experimental || {};
416
416
  nuxt.options.experimental.appManifest = false;
417
417
  nuxt.options.experimental.payloadExtraction = false;
418
418
  console.log(
419
- "\u2713 [@haexhub/sdk] Disabled appManifest (not needed for extensions)"
419
+ "\u2713 [@haex-space/vault-sdk] Disabled appManifest (not needed for extensions)"
420
420
  );
421
421
  console.log(
422
- "\u2713 [@haexhub/sdk] Disabled payloadExtraction (not needed for SPAs)"
422
+ "\u2713 [@haex-space/vault-sdk] Disabled payloadExtraction (not needed for SPAs)"
423
423
  );
424
424
  if (!options.injectPolyfills || nuxt.options.dev) {
425
425
  return;
@@ -455,11 +455,11 @@ var nuxt_default = defineNuxtModule({
455
455
  html = html.replace(/"\/_nuxt\//g, '"./_nuxt/');
456
456
  writeFileSync(filePath, html);
457
457
  console.log(
458
- `\u2713 [@haexhub/sdk] Polyfill and relative paths applied to ${file}`
458
+ `\u2713 [@haex-space/vault-sdk] Polyfill and relative paths applied to ${file}`
459
459
  );
460
460
  }
461
461
  } catch (error) {
462
- console.error("[@haexhub/sdk] Failed to inject polyfill:", error);
462
+ console.error("[@haex-space/vault-sdk] Failed to inject polyfill:", error);
463
463
  }
464
464
  });
465
465
  }
package/dist/nuxt.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cors.ts","../src/polyfills/localStorage.ts","../src/polyfills/cookies.ts","../src/polyfills/history.ts","../src/polyfills/debug.ts","../src/polyfills/standalone.ts","../src/config.ts","../src/manifest.ts","../src/nuxt.ts"],"names":["resolvePath","readFileSync","resolve"],"mappings":"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","file":"nuxt.mjs","sourcesContent":["/**\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 * 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 * Utility to read haextension.config.json\n */\nimport { readFileSync, existsSync } from 'fs'\nimport { resolve } from 'path'\n\nexport interface HaextensionConfig {\n dev?: {\n port?: number\n host?: string\n haextension_dir?: string\n }\n keys?: {\n public_key_path?: string\n private_key_path?: string\n }\n build?: {\n distDir?: string\n }\n}\n\n/**\n * Read haextension.config.json from the project root\n * Returns null if file doesn't exist\n */\nexport function readHaextensionConfig(rootDir: string = process.cwd()): HaextensionConfig | null {\n const configPath = resolve(rootDir, 'haextension.config.json')\n \n if (!existsSync(configPath)) {\n return null\n }\n\n try {\n const content = readFileSync(configPath, 'utf-8')\n return JSON.parse(content)\n } catch (error) {\n console.warn(`Failed to parse haextension.config.json: ${error}`)\n return null\n }\n}\n\n/**\n * Get extension directory from config or use default\n */\nexport function getExtensionDir(rootDir: string = process.cwd()): string {\n const config = readHaextensionConfig(rootDir)\n return config?.dev?.haextension_dir || 'haextension'\n}\n","/**\n * Utility for reading and processing extension manifest files\n */\nimport { readFileSync } from \"node:fs\";\nimport { resolve as resolvePath } from \"node:path\";\nimport type { ExtensionManifest } from \"./types\";\n\nexport interface ReadManifestOptions {\n /** Root directory of the project */\n rootDir: string;\n /** Path to manifest.json (if not provided, will use extensionDir) */\n manifestPath?: string;\n /** Directory containing extension files (default: \"haextension\") */\n extensionDir?: string;\n}\n\n/**\n * Reads and processes the extension manifest.json file\n * Falls back to package.json version if manifest doesn't specify one\n */\nexport function readManifest(options: ReadManifestOptions): ExtensionManifest | null {\n const { rootDir, manifestPath, extensionDir = \"haextension\" } = options;\n\n // Determine manifest path\n const resolvedManifestPath = manifestPath\n ? resolvePath(rootDir, manifestPath)\n : resolvePath(rootDir, extensionDir, \"manifest.json\");\n\n try {\n const manifestContent = readFileSync(resolvedManifestPath, \"utf-8\");\n const parsed = JSON.parse(manifestContent);\n\n // Read version from package.json if not provided in manifest\n let version = parsed.version;\n if (!version) {\n try {\n const packageJsonPath = resolvePath(rootDir, \"package.json\");\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\"));\n version = packageJson.version;\n console.log(`✓ [@haexhub/sdk] Using version from package.json: ${version}`);\n } catch (pkgError) {\n console.warn(`[@haexhub/sdk] Warning: Could not read version from package.json`);\n }\n }\n\n const manifest: ExtensionManifest = {\n name: parsed.name,\n version: version,\n author: parsed.author ?? null,\n entry: parsed.entry ?? null,\n icon: parsed.icon ?? null,\n public_key: parsed.public_key,\n signature: parsed.signature || \"\",\n permissions: parsed.permissions || {\n database: [],\n filesystem: [],\n http: [],\n shell: [],\n },\n homepage: parsed.homepage ?? null,\n description: parsed.description ?? null,\n single_instance: parsed.single_instance ?? null,\n display_mode: parsed.display_mode ?? null,\n };\n\n console.log(`✓ [@haexhub/sdk] Loaded ${resolvedManifestPath}`);\n return manifest;\n } catch (error) {\n console.warn(\n `[@haexhub/sdk] Warning: manifest.json not found at ${resolvedManifestPath}, extension info will not be available`\n );\n return null;\n }\n}\n","/**\n * Nuxt Module for HaexHub SDK\n * Automatically injects polyfills into the built HTML files\n */\nimport { addPlugin, createResolver, defineNuxtModule } from \"@nuxt/kit\";\nimport { getCorsHeaders } from \"./cors\";\nimport { getPolyfillCode } from \"./polyfills/standalone\";\nimport { join, resolve as resolvePath } from \"node:path\";\nimport { readFileSync, writeFileSync, readdirSync } from \"node:fs\";\nimport type { Nuxt } from \"@nuxt/schema\";\nimport { readHaextensionConfig } from \"./config\";\nimport { readManifest } from \"./manifest\";\n\nexport interface ModuleOptions {\n injectPolyfills?: boolean;\n /**\n * Directory containing extension files (manifest.json, public.key, private.key)\n * Default: \"haextension\"\n */\n extensionDir?: string;\n /** Path to manifest.json (overrides extensionDir if specified) */\n manifestPath?: string;\n /** Path to public.key (overrides extensionDir if specified) */\n publicKeyPath?: string;\n /** Path to private.key (overrides extensionDir if specified) */\n privateKeyPath?: string;\n}\n\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: \"@haexhub/sdk\",\n configKey: \"haexhub\",\n compatibility: {\n nuxt: \"^3.0.0 || ^4.0.0\",\n },\n },\n\n defaults: {\n injectPolyfills: true,\n extensionDir: \"haextension\",\n },\n\n async setup(options: ModuleOptions, nuxt: Nuxt) {\n const { resolve } = createResolver(import.meta.url);\n\n // Add type declaration for $haexhub\n nuxt.hook('prepare:types', ({ references }) => {\n references.push({ path: resolve('./runtime/nuxt.types.d.ts') })\n })\n\n // Read haextension.config.json if available\n const config = readHaextensionConfig(nuxt.options.rootDir);\n\n // Use config values as defaults if not explicitly set in options\n const extensionDir = options.extensionDir || config?.dev?.haextension_dir || \"haextension\";\n\n // Read manifest.json using shared utility\n const manifest = readManifest({\n rootDir: nuxt.options.rootDir,\n manifestPath: options.manifestPath,\n extensionDir,\n });\n\n // Inject manifest into public runtime config\n nuxt.options.runtimeConfig.public = nuxt.options.runtimeConfig.public || {};\n nuxt.options.runtimeConfig.public.haexhubManifest = manifest;\n\n addPlugin({\n src: resolve(\"./runtime/nuxt.plugin.client.mjs\"),\n mode: \"client\",\n });\n // CRITICAL: Install polyfill hook BEFORE any other module\n // This ensures polyfills load before color-mode or any other script\n if (options.injectPolyfills && nuxt.options.dev) {\n nuxt.hook(\"nitro:config\", (nitroConfig: any) => {\n nitroConfig.hooks = nitroConfig.hooks || {};\n nitroConfig.hooks[\"render:html\"] =\n nitroConfig.hooks[\"render:html\"] || [];\n\n // Prepend (unshift) to run before ALL other hooks\n const polyfillCode = getPolyfillCode();\n const polyfillScript = `<script data-haexhub-polyfill>${polyfillCode}</script>`;\n\n nitroConfig.hooks[\"render:html\"].unshift((html: any) => {\n // Inject at the very beginning of <head>\n if (html.head && Array.isArray(html.head)) {\n html.head.unshift(polyfillScript);\n }\n });\n });\n console.log(\n \"✓ [@haexhub/sdk] Dev mode: Priority polyfill injection configured\"\n );\n }\n\n // Configure Nuxt differently for dev vs production\n if (nuxt.options.dev) {\n // DEV MODE: Use absolute paths for dev server\n nuxt.options.app.baseURL = \"/\";\n nuxt.options.app.buildAssetsDir = \"/_nuxt/\";\n\n // Enable CORS for dev server using shared CORS configuration\n nuxt.options.vite = nuxt.options.vite || {};\n nuxt.options.vite.server = nuxt.options.vite.server || {};\n nuxt.options.vite.server.cors = true;\n nuxt.options.vite.server.headers = getCorsHeaders();\n\n console.log(\n \"✓ [@haexhub/sdk] Dev mode: Set app.baseURL to / (absolute paths for dev server)\"\n );\n console.log(\"✓ [@haexhub/sdk] Dev mode: Enabled CORS headers\");\n } else {\n // PRODUCTION BUILD: Use relative paths\n nuxt.options.app.baseURL = \"./\";\n nuxt.options.app.buildAssetsDir = \"_nuxt/\"; // Remove leading slash\n\n console.log(\n \"✓ [@haexhub/sdk] Build mode: Set app.baseURL to relative path (./)\"\n );\n console.log(\n \"✓ [@haexhub/sdk] Build mode: Set buildAssetsDir to relative path (_nuxt/)\"\n );\n }\n\n // Disable app manifest feature (generates /_nuxt/builds/meta/*.json)\n // This is not needed for extensions and causes 404 errors\n nuxt.options.experimental = nuxt.options.experimental || {};\n nuxt.options.experimental.appManifest = false;\n\n // Disable payload extraction for SPAs (extensions don't need SSR payload)\n // This prevents \"Cannot load payload\" errors for _payload.json files\n nuxt.options.experimental.payloadExtraction = false;\n\n console.log(\n \"✓ [@haexhub/sdk] Disabled appManifest (not needed for extensions)\"\n );\n console.log(\n \"✓ [@haexhub/sdk] Disabled payloadExtraction (not needed for SPAs)\"\n );\n\n // Only inject polyfills if enabled and building for production\n if (!options.injectPolyfills || nuxt.options.dev) {\n return;\n }\n\n // Add hook to inject polyfills after HTML generation\n nuxt.hook(\"nitro:build:public-assets\", async () => {\n try {\n // Use Nuxt's configured output directory\n const nitroOutput = nuxt.options.nitro?.output || {};\n const outputDir = nitroOutput.dir || \".output\";\n const publicDir = nitroOutput.publicDir || \"public\";\n const distDir = resolvePath(nuxt.options.rootDir, outputDir, publicDir);\n\n // Get polyfill code from modular polyfills\n const polyfillCode = getPolyfillCode();\n const polyfillScript = `<script>${polyfillCode}</script>`;\n\n // Find all HTML files in the output directory\n const htmlFiles = readdirSync(distDir).filter((f: string) =>\n f.endsWith(\".html\")\n );\n\n for (const file of htmlFiles) {\n const filePath = join(distDir, file);\n let html = readFileSync(filePath, \"utf-8\");\n\n // Inject polyfill directly after <head>\n const headPos = html.indexOf(\"<head>\");\n if (headPos !== -1) {\n const insertPos = headPos + 6; // after <head>\n html =\n html.slice(0, insertPos) + polyfillScript + html.slice(insertPos);\n }\n\n // IMPORTANT: Convert all absolute asset paths to relative paths\n // Replace all occurrences of /_nuxt/ with _nuxt/ to make paths relative\n\n // Fix <link> and <script> tags\n html = html.replace(/\\b(href|src)=\"\\/_nuxt\\//g, '$1=\"_nuxt/');\n\n // Fix import maps - need to keep it absolute or use ./ prefix for module resolution\n html = html.replace(\n /\"imports\":\\{\"#entry\":\"\\/_nuxt\\//g,\n '\"imports\":{\"#entry\":\"./_nuxt/'\n );\n\n // Fix buildAssetsDir in runtime config\n html = html.replace(\n /buildAssetsDir:\"\\/_nuxt\\/\"/g,\n 'buildAssetsDir:\"./_nuxt/\"'\n );\n\n // Fix any remaining absolute /_nuxt/ references in JSON/JS\n html = html.replace(/\"\\/_nuxt\\//g, '\"./_nuxt/');\n\n writeFileSync(filePath, html);\n console.log(\n `✓ [@haexhub/sdk] Polyfill and relative paths applied to ${file}`\n );\n }\n } catch (error: unknown) {\n console.error(\"[@haexhub/sdk] Failed to inject polyfill:\", error);\n }\n });\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/cors.ts","../src/polyfills/localStorage.ts","../src/polyfills/cookies.ts","../src/polyfills/history.ts","../src/polyfills/debug.ts","../src/polyfills/standalone.ts","../src/config.ts","../src/manifest.ts","../src/nuxt.ts"],"names":["resolvePath","readFileSync","resolve"],"mappings":"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","file":"nuxt.mjs","sourcesContent":["/**\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 * 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 * Utility to read haextension.config.json\n */\nimport { readFileSync, existsSync } from 'fs'\nimport { resolve } from 'path'\n\nexport interface HaextensionConfig {\n dev?: {\n port?: number\n host?: string\n haextension_dir?: string\n }\n keys?: {\n public_key_path?: string\n private_key_path?: string\n }\n build?: {\n distDir?: string\n }\n}\n\n/**\n * Read haextension.config.json from the project root\n * Returns null if file doesn't exist\n */\nexport function readHaextensionConfig(rootDir: string = process.cwd()): HaextensionConfig | null {\n const configPath = resolve(rootDir, 'haextension.config.json')\n \n if (!existsSync(configPath)) {\n return null\n }\n\n try {\n const content = readFileSync(configPath, 'utf-8')\n return JSON.parse(content)\n } catch (error) {\n console.warn(`Failed to parse haextension.config.json: ${error}`)\n return null\n }\n}\n\n/**\n * Get extension directory from config or use default\n */\nexport function getExtensionDir(rootDir: string = process.cwd()): string {\n const config = readHaextensionConfig(rootDir)\n return config?.dev?.haextension_dir || 'haextension'\n}\n","/**\n * Utility for reading and processing extension manifest files\n */\nimport { readFileSync } from \"node:fs\";\nimport { resolve as resolvePath } from \"node:path\";\nimport type { ExtensionManifest } from \"./types\";\n\nexport interface ReadManifestOptions {\n /** Root directory of the project */\n rootDir: string;\n /** Path to manifest.json (if not provided, will use extensionDir) */\n manifestPath?: string;\n /** Directory containing extension files (default: \"haextension\") */\n extensionDir?: string;\n}\n\n/**\n * Reads and processes the extension manifest.json file\n * Falls back to package.json version if manifest doesn't specify one\n */\nexport function readManifest(options: ReadManifestOptions): ExtensionManifest | null {\n const { rootDir, manifestPath, extensionDir = \"haextension\" } = options;\n\n // Determine manifest path\n const resolvedManifestPath = manifestPath\n ? resolvePath(rootDir, manifestPath)\n : resolvePath(rootDir, extensionDir, \"manifest.json\");\n\n try {\n const manifestContent = readFileSync(resolvedManifestPath, \"utf-8\");\n const parsed = JSON.parse(manifestContent);\n\n // Read version from package.json if not provided in manifest\n let version = parsed.version;\n if (!version) {\n try {\n const packageJsonPath = resolvePath(rootDir, \"package.json\");\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\"));\n version = packageJson.version;\n console.log(`✓ [@haexhub/sdk] Using version from package.json: ${version}`);\n } catch (pkgError) {\n console.warn(`[@haexhub/sdk] Warning: Could not read version from package.json`);\n }\n }\n\n const manifest: ExtensionManifest = {\n name: parsed.name,\n version: version,\n author: parsed.author ?? null,\n entry: parsed.entry ?? null,\n icon: parsed.icon ?? null,\n public_key: parsed.public_key,\n signature: parsed.signature || \"\",\n permissions: parsed.permissions || {\n database: [],\n filesystem: [],\n http: [],\n shell: [],\n },\n homepage: parsed.homepage ?? null,\n description: parsed.description ?? null,\n single_instance: parsed.single_instance ?? null,\n display_mode: parsed.display_mode ?? null,\n };\n\n console.log(`✓ [@haexhub/sdk] Loaded ${resolvedManifestPath}`);\n return manifest;\n } catch (error) {\n console.warn(\n `[@haexhub/sdk] Warning: manifest.json not found at ${resolvedManifestPath}, extension info will not be available`\n );\n return null;\n }\n}\n","/**\n * Nuxt Module for HaexVault SDK\n * Automatically injects polyfills into the built HTML files\n */\nimport { addPlugin, createResolver, defineNuxtModule } from \"@nuxt/kit\";\nimport { getCorsHeaders } from \"./cors\";\nimport { getPolyfillCode } from \"./polyfills/standalone\";\nimport { join, resolve as resolvePath } from \"node:path\";\nimport { readFileSync, writeFileSync, readdirSync } from \"node:fs\";\nimport type { Nuxt } from \"@nuxt/schema\";\nimport { readHaextensionConfig } from \"./config\";\nimport { readManifest } from \"./manifest\";\n\nexport interface ModuleOptions {\n injectPolyfills?: boolean;\n /**\n * Directory containing extension files (manifest.json, public.key, private.key)\n * Default: \"haextension\"\n */\n extensionDir?: string;\n /** Path to manifest.json (overrides extensionDir if specified) */\n manifestPath?: string;\n /** Path to public.key (overrides extensionDir if specified) */\n publicKeyPath?: string;\n /** Path to private.key (overrides extensionDir if specified) */\n privateKeyPath?: string;\n}\n\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: \"@haex-space/vault-sdk\",\n configKey: \"haexVault\",\n compatibility: {\n nuxt: \"^3.0.0 || ^4.0.0\",\n },\n },\n\n defaults: {\n injectPolyfills: true,\n extensionDir: \"haextension\",\n },\n\n async setup(options: ModuleOptions, nuxt: Nuxt) {\n const { resolve } = createResolver(import.meta.url);\n\n // Add type declaration for $haexVault\n nuxt.hook('prepare:types', ({ references }) => {\n references.push({ path: resolve('./runtime/nuxt.types.d.ts') })\n })\n\n // Read haextension.config.json if available\n const config = readHaextensionConfig(nuxt.options.rootDir);\n\n // Use config values as defaults if not explicitly set in options\n const extensionDir = options.extensionDir || config?.dev?.haextension_dir || \"haextension\";\n\n // Read manifest.json using shared utility\n const manifest = readManifest({\n rootDir: nuxt.options.rootDir,\n manifestPath: options.manifestPath,\n extensionDir,\n });\n\n // Inject manifest into public runtime config\n nuxt.options.runtimeConfig.public = nuxt.options.runtimeConfig.public || {};\n nuxt.options.runtimeConfig.public.haexVaultManifest = manifest;\n\n addPlugin({\n src: resolve(\"./runtime/nuxt.plugin.client.mjs\"),\n mode: \"client\",\n });\n // CRITICAL: Install polyfill hook BEFORE any other module\n // This ensures polyfills load before color-mode or any other script\n if (options.injectPolyfills && nuxt.options.dev) {\n nuxt.hook(\"nitro:config\", (nitroConfig: any) => {\n nitroConfig.hooks = nitroConfig.hooks || {};\n nitroConfig.hooks[\"render:html\"] =\n nitroConfig.hooks[\"render:html\"] || [];\n\n // Prepend (unshift) to run before ALL other hooks\n const polyfillCode = getPolyfillCode();\n const polyfillScript = `<script data-haexhub-polyfill>${polyfillCode}</script>`;\n\n nitroConfig.hooks[\"render:html\"].unshift((html: any) => {\n // Inject at the very beginning of <head>\n if (html.head && Array.isArray(html.head)) {\n html.head.unshift(polyfillScript);\n }\n });\n });\n console.log(\n \"✓ [@haex-space/vault-sdk] Dev mode: Priority polyfill injection configured\"\n );\n }\n\n // Configure Nuxt differently for dev vs production\n if (nuxt.options.dev) {\n // DEV MODE: Use absolute paths for dev server\n nuxt.options.app.baseURL = \"/\";\n nuxt.options.app.buildAssetsDir = \"/_nuxt/\";\n\n // Enable CORS for dev server using shared CORS configuration\n nuxt.options.vite = nuxt.options.vite || {};\n nuxt.options.vite.server = nuxt.options.vite.server || {};\n nuxt.options.vite.server.cors = true;\n nuxt.options.vite.server.headers = getCorsHeaders();\n\n console.log(\n \"✓ [@haex-space/vault-sdk] Dev mode: Set app.baseURL to / (absolute paths for dev server)\"\n );\n console.log(\"✓ [@haex-space/vault-sdk] Dev mode: Enabled CORS headers\");\n } else {\n // PRODUCTION BUILD: Use relative paths\n nuxt.options.app.baseURL = \"./\";\n nuxt.options.app.buildAssetsDir = \"_nuxt/\"; // Remove leading slash\n\n console.log(\n \"✓ [@haex-space/vault-sdk] Build mode: Set app.baseURL to relative path (./)\"\n );\n console.log(\n \"✓ [@haex-space/vault-sdk] Build mode: Set buildAssetsDir to relative path (_nuxt/)\"\n );\n }\n\n // Disable app manifest feature (generates /_nuxt/builds/meta/*.json)\n // This is not needed for extensions and causes 404 errors\n nuxt.options.experimental = nuxt.options.experimental || {};\n nuxt.options.experimental.appManifest = false;\n\n // Disable payload extraction for SPAs (extensions don't need SSR payload)\n // This prevents \"Cannot load payload\" errors for _payload.json files\n nuxt.options.experimental.payloadExtraction = false;\n\n console.log(\n \"✓ [@haex-space/vault-sdk] Disabled appManifest (not needed for extensions)\"\n );\n console.log(\n \"✓ [@haex-space/vault-sdk] Disabled payloadExtraction (not needed for SPAs)\"\n );\n\n // Only inject polyfills if enabled and building for production\n if (!options.injectPolyfills || nuxt.options.dev) {\n return;\n }\n\n // Add hook to inject polyfills after HTML generation\n nuxt.hook(\"nitro:build:public-assets\", async () => {\n try {\n // Use Nuxt's configured output directory\n const nitroOutput = nuxt.options.nitro?.output || {};\n const outputDir = nitroOutput.dir || \".output\";\n const publicDir = nitroOutput.publicDir || \"public\";\n const distDir = resolvePath(nuxt.options.rootDir, outputDir, publicDir);\n\n // Get polyfill code from modular polyfills\n const polyfillCode = getPolyfillCode();\n const polyfillScript = `<script>${polyfillCode}</script>`;\n\n // Find all HTML files in the output directory\n const htmlFiles = readdirSync(distDir).filter((f: string) =>\n f.endsWith(\".html\")\n );\n\n for (const file of htmlFiles) {\n const filePath = join(distDir, file);\n let html = readFileSync(filePath, \"utf-8\");\n\n // Inject polyfill directly after <head>\n const headPos = html.indexOf(\"<head>\");\n if (headPos !== -1) {\n const insertPos = headPos + 6; // after <head>\n html =\n html.slice(0, insertPos) + polyfillScript + html.slice(insertPos);\n }\n\n // IMPORTANT: Convert all absolute asset paths to relative paths\n // Replace all occurrences of /_nuxt/ with _nuxt/ to make paths relative\n\n // Fix <link> and <script> tags\n html = html.replace(/\\b(href|src)=\"\\/_nuxt\\//g, '$1=\"_nuxt/');\n\n // Fix import maps - need to keep it absolute or use ./ prefix for module resolution\n html = html.replace(\n /\"imports\":\\{\"#entry\":\"\\/_nuxt\\//g,\n '\"imports\":{\"#entry\":\"./_nuxt/'\n );\n\n // Fix buildAssetsDir in runtime config\n html = html.replace(\n /buildAssetsDir:\"\\/_nuxt\\/\"/g,\n 'buildAssetsDir:\"./_nuxt/\"'\n );\n\n // Fix any remaining absolute /_nuxt/ references in JSON/JS\n html = html.replace(/\"\\/_nuxt\\//g, '\"./_nuxt/');\n\n writeFileSync(filePath, html);\n console.log(\n `✓ [@haex-space/vault-sdk] Polyfill and relative paths applied to ${file}`\n );\n }\n } catch (error: unknown) {\n console.error(\"[@haex-space/vault-sdk] Failed to inject polyfill:\", error);\n }\n });\n },\n});\n"]}
@@ -4,7 +4,7 @@ import { a as HaexVaultClient, A as ApplicationContext } from '../client-O_JEOzf
4
4
  import 'drizzle-orm/sqlite-proxy';
5
5
 
6
6
  declare const _default: nuxt_app.Plugin<{
7
- haexhub: {
7
+ haexVault: {
8
8
  client: HaexVaultClient;
9
9
  state: ShallowRef<{
10
10
  isReady: boolean;
@@ -17,7 +17,7 @@ declare const _default: nuxt_app.Plugin<{
17
17
  }>;
18
18
  };
19
19
  }> & nuxt_app.ObjectPlugin<{
20
- haexhub: {
20
+ haexVault: {
21
21
  client: HaexVaultClient;
22
22
  state: ShallowRef<{
23
23
  isReady: boolean;
@@ -31,7 +31,7 @@ declare const _default: nuxt_app.Plugin<{
31
31
  };
32
32
  }>;
33
33
 
34
- type HaexHubNuxtPlugin = {
34
+ type HaexVaultNuxtPlugin = {
35
35
  client: HaexVaultClient;
36
36
  state: ShallowRef<{
37
37
  isReady: boolean;
@@ -40,4 +40,4 @@ type HaexHubNuxtPlugin = {
40
40
  }>;
41
41
  };
42
42
 
43
- export { type HaexHubNuxtPlugin, _default as default };
43
+ export { type HaexVaultNuxtPlugin, _default as default };
@@ -4,7 +4,7 @@ import { a as HaexVaultClient, A as ApplicationContext } from '../client-O_JEOzf
4
4
  import 'drizzle-orm/sqlite-proxy';
5
5
 
6
6
  declare const _default: nuxt_app.Plugin<{
7
- haexhub: {
7
+ haexVault: {
8
8
  client: HaexVaultClient;
9
9
  state: ShallowRef<{
10
10
  isReady: boolean;
@@ -17,7 +17,7 @@ declare const _default: nuxt_app.Plugin<{
17
17
  }>;
18
18
  };
19
19
  }> & nuxt_app.ObjectPlugin<{
20
- haexhub: {
20
+ haexVault: {
21
21
  client: HaexVaultClient;
22
22
  state: ShallowRef<{
23
23
  isReady: boolean;
@@ -31,7 +31,7 @@ declare const _default: nuxt_app.Plugin<{
31
31
  };
32
32
  }>;
33
33
 
34
- type HaexHubNuxtPlugin = {
34
+ type HaexVaultNuxtPlugin = {
35
35
  client: HaexVaultClient;
36
36
  state: ShallowRef<{
37
37
  isReady: boolean;
@@ -40,4 +40,4 @@ type HaexHubNuxtPlugin = {
40
40
  }>;
41
41
  };
42
42
 
43
- export { type HaexHubNuxtPlugin, _default as default };
43
+ export { type HaexVaultNuxtPlugin, _default as default };