{"version":3,"file":"mf.cjs","names":["computeSriHash","readBundleCache","writeBundleCache","getInstance","createInstance","isEffectCriticalSharedDep","readFileSync"],"sources":["../src/mf.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { createInstance, getInstance } from \"@module-federation/enhanced/runtime\";\nimport { setGlobalFederationInstance } from \"@module-federation/runtime-core\";\nimport { isEffectCriticalSharedDep } from \"every-plugin/build/rspack\";\nimport { readBundleCache, writeBundleCache } from \"./bundle-cache\";\nimport { computeSriHash, type IntegrityRegistry } from \"./integrity\";\nimport type { BosConfig, BosPluginRef } from \"./types\";\n\ntype FederationInstance = ReturnType<typeof createInstance>;\n\nlet mfInstance: FederationInstance | null = null;\n\nfunction fetchWithTimeout(url: string, init: RequestInit, timeoutMs: number): Promise<Response> {\n  const controller = new AbortController();\n  const timer = setTimeout(() => controller.abort(), timeoutMs);\n  return fetch(url, { ...init, signal: controller.signal }).finally(() => clearTimeout(timer));\n}\n\nexport function patchManifestFetchForSsrPublicPath(mf: FederationInstance): void {\n  if (!mf || !(mf as any).loaderHook?.lifecycle?.fetch?.on) return;\n  if ((mf as any).__everythingDevPatchedManifestFetch === true) return;\n  (mf as any).__everythingDevPatchedManifestFetch = true;\n\n  (mf as any).loaderHook.lifecycle.fetch.on((url: unknown, init: unknown) => {\n    if (typeof url !== \"string\" || !url.endsWith(\"/mf-manifest.json\")) {\n      return;\n    }\n    return fetchWithTimeout(url as string, init as RequestInit, 15_000)\n      .then((res) => res.json())\n      .then((json: any) => {\n        json.metaData = json.metaData ?? {};\n        json.metaData.ssrPublicPath =\n          json.metaData.ssrPublicPath ?? url.replace(/\\/mf-manifest\\.json$/, \"/\");\n        if (json.metaData.publicPath === \"auto\" || json.metaData.publicPath === \"\") {\n          json.metaData.publicPath = \"/\";\n        }\n        return new Response(JSON.stringify(json), {\n          headers: { \"content-type\": \"application/json\" },\n        });\n      });\n  });\n}\n\nexport function installIntegrityFetchHook(\n  mf: FederationInstance,\n  registry: IntegrityRegistry,\n  options?: { cacheDir?: string },\n): void {\n  if (!mf || !(mf as any).loaderHook?.lifecycle?.fetch?.on) {\n    console.warn(\"[SRI] MF lifecycle fetch hook not available, skipping integrity-in-pipeline\");\n    return;\n  }\n  if ((mf as any).__everythingDevIntegrityHook === true) return;\n  (mf as any).__everythingDevIntegrityHook = true;\n\n  (mf as any).loaderHook.lifecycle.fetch.on((url: unknown, init: unknown) => {\n    if (typeof url !== \"string\") return;\n\n    const expectedHash = registry.get(url);\n    if (!expectedHash) return;\n\n    return fetchWithTimeout(url as string, init as RequestInit, 15_000).then(async (res) => {\n      const buffer = Buffer.from(await res.arrayBuffer());\n      const computed = computeSriHash(buffer);\n\n      if (computed !== expectedHash) {\n        // ticket 09 (atomic-deploys): an SRI mismatch is treated like an\n        // origin failure — the last-known-good bytes (which satisfied the\n        // same pin when cached) serve instead, and the corrupted bytes are\n        // never written into the cache.\n        const cached = await readBundleCache(url as string, { cacheDir: options?.cacheDir });\n        if (cached && computeSriHash(Buffer.from(cached)) === expectedHash) {\n          console.warn(\n            `[SRI] Origin bytes failed verification for ${url} — serving last-known-good from the bundle cache`,\n          );\n          return new Response(cached.slice().buffer, {\n            status: 200,\n            headers: { \"x-bundle-cache\": \"stale\" },\n          });\n        }\n        console.error(\n          `[SRI] Integrity check failed in MF fetch pipeline for ${url}\\n  Expected: ${expectedHash}\\n  Computed: ${computed}`,\n        );\n        return new Response(`Integrity check failed for ${url}`, {\n          status: 500,\n          statusText: \"Integrity Check Failed\",\n        });\n      }\n\n      // verified: pin-checked write-through\n      await writeBundleCache(url as string, new Uint8Array(buffer), {\n        cacheDir: options?.cacheDir,\n      }).catch(() => {\n        // write-through is best-effort\n      });\n\n      return new Response(buffer, {\n        status: res.status,\n        statusText: res.statusText,\n        headers: res.headers,\n      });\n    });\n  });\n}\n\nexport function getFederationInstance(): FederationInstance {\n  if (mfInstance) return mfInstance;\n\n  const existing = getInstance();\n  if (existing) {\n    mfInstance = existing as FederationInstance;\n    setGlobalFederationInstance(mfInstance as any);\n    patchManifestFetchForSsrPublicPath(mfInstance);\n    return mfInstance;\n  }\n\n  mfInstance = createInstance({\n    name: \"host\",\n    remotes: [],\n  }) as FederationInstance;\n  setGlobalFederationInstance(mfInstance as any);\n  patchManifestFetchForSsrPublicPath(mfInstance);\n  return mfInstance;\n}\n\nexport async function registerRemote(opts: {\n  name: string;\n  entry: string;\n  type?: \"manifest\" | \"script\";\n}): Promise<void> {\n  const instance = getFederationInstance();\n\n  const inferType = (): \"manifest\" | \"script\" => {\n    if (opts.type) return opts.type;\n    if (opts.entry.endsWith(\"/mf-manifest.json\")) return \"manifest\";\n    if (/\\/remoteEntry(\\.[a-f0-9]{8,})?\\.js$/.test(opts.entry)) return \"script\";\n    return typeof window === \"undefined\" ? \"script\" : \"manifest\";\n  };\n\n  const remoteType = inferType();\n\n  instance.registerRemotes([\n    {\n      name: opts.name,\n      entry: opts.entry,\n      type: remoteType,\n    },\n  ]);\n}\n\nexport async function loadRemoteModule<T>(\n  specifier: string,\n  options?: { loadFactory?: boolean; from?: \"build\" | \"runtime\" },\n): Promise<T> {\n  const instance = getFederationInstance();\n\n  const isServer = typeof window === \"undefined\";\n  if (isServer) {\n    await (instance as any).initializeSharing?.(\"default\");\n  }\n\n  const mod = await instance.loadRemote<T>(specifier, options as any);\n  if (!mod) {\n    throw new Error(`Failed to load remote module: ${specifier}`);\n  }\n  return mod;\n}\n\nexport async function ensureNodeRuntimePlugin(): Promise<void> {\n  const instance = getFederationInstance();\n  if (typeof window !== \"undefined\") return;\n  if ((instance as any).__nodeRuntimePluginLoaded) return;\n\n  const mod: any = await import(\"@module-federation/node/runtimePlugin\");\n  const factory = mod?.default ?? mod;\n  const plugin = typeof factory === \"function\" ? factory() : null;\n  if (plugin) {\n    instance.registerPlugins([plugin]);\n  }\n  (instance as any).__nodeRuntimePluginLoaded = true;\n}\n\nexport interface FederationCompatRemote {\n  role: string;\n  url: string;\n  reachable: boolean;\n  pluginVersion: string | null;\n  ok: boolean;\n  reason?: string;\n}\n\nexport interface FederationCompatReport {\n  ok: boolean;\n  hostVersion: string | null;\n  hostReachable: boolean;\n  hostReason?: string;\n  remotes: FederationCompatRemote[];\n}\n\nfunction parseSemver(v: unknown): { major: number; minor: number; patch: number } | null {\n  const m = typeof v === \"string\" ? /^(\\d+)\\.(\\d+)\\.(\\d+)/.exec(v) : null;\n  return m ? { major: +m[1]!, minor: +m[2]!, patch: +m[3]! } : null;\n}\n\nfunction satisfiesConstraint(version: string, constraint: string): boolean {\n  const trimmed = constraint.trim();\n  if (!trimmed) return true;\n  if (![\"^\", \"~\", \">\", \"<\", \"=\", \"x\"].some((c) => trimmed.startsWith(c))) {\n    return version === trimmed;\n  }\n  const m = /^\\s*\\^\\s*(\\d+)\\.(\\d+)\\.(\\d+)/.exec(trimmed);\n  if (!m) return true;\n  const v = parseSemver(version);\n  if (!v) return false;\n  if (v.major !== +m[1]!) return false;\n  if (v.minor < +m[2]! || (v.minor === +m[2]! && v.patch < +m[3]!)) return false;\n  const constraintPrerelease = trimmed.match(/-([0-9A-Za-z.-]+)/);\n  const versionPrerelease = /-([0-9A-Za-z.-]+)\\s*$/.exec(version);\n  if (constraintPrerelease) {\n    if (!versionPrerelease) return false;\n    const cPre = constraintPrerelease[1]!.split(\".\");\n    const vPre = versionPrerelease[1]!.split(\".\");\n    for (let i = 0; i < Math.max(cPre.length, vPre.length); i += 1) {\n      const c = cPre[i] ?? \"0\";\n      const p = vPre[i] ?? \"0\";\n      if (c === p) continue;\n      const cNum = /^\\d+$/.test(c) ? +c : null;\n      const pNum = /^\\d+$/.test(p) ? +p : null;\n      if (cNum !== null && pNum !== null) return cNum < pNum;\n      return cNum === null ? c.localeCompare(p) < 0 : false;\n    }\n    return true;\n  }\n  if (versionPrerelease) return false;\n  return true;\n}\n\nfunction manifestUrl(remoteUrl: string): string {\n  return remoteUrl.endsWith(\"/\") ? `${remoteUrl}mf-manifest.json` : `${remoteUrl}/mf-manifest.json`;\n}\n\nasync function fetchManifest(url: string, timeoutMs: number): Promise<unknown> {\n  const res = await fetch(manifestUrl(url), { signal: AbortSignal.timeout(timeoutMs) });\n  if (!res.ok) throw new Error(`HTTP ${res.status} ${res.statusText}`);\n  return res.json();\n}\n\nfunction listFederationRemotes(bosConfig: BosConfig): Array<{ role: string; url: string }> {\n  const out: Array<{ role: string; url: string }> = [];\n  for (const role of [\"api\", \"auth\"] as const) {\n    const url = readProductionUrl((bosConfig?.app as Record<string, unknown> | undefined)?.[role]);\n    if (url) out.push({ role, url });\n  }\n  for (const [id, slot] of Object.entries(bosConfig?.plugins ?? {})) {\n    const url = readProductionUrl(slot);\n    if (url) out.push({ role: id, url });\n  }\n  return out;\n}\n\nfunction readProductionUrl(entry: unknown): string | null {\n  if (typeof entry === \"string\") return entry.length > 0 ? entry : null;\n  if (entry && typeof (entry as BosPluginRef).production === \"string\") {\n    const url = (entry as BosPluginRef).production!;\n    return url.length > 0 ? url : null;\n  }\n  return null;\n}\n\ninterface RemoteManifest {\n  metaData?: { pluginVersion?: string };\n  shared?: Array<{ name: string; version?: string; requiredVersion?: string | null }>;\n}\n\nexport async function checkFederationCompat(\n  bosConfig: BosConfig | null,\n  opts: { timeoutMs?: number } = {},\n): Promise<FederationCompatReport> {\n  const timeoutMs = opts.timeoutMs ?? 15_000;\n\n  if (!bosConfig?.app?.host?.production) {\n    return { ok: true, hostVersion: null, hostReachable: false, remotes: [] };\n  }\n\n  const hostUrl = bosConfig.app.host.production;\n  let hostManifest: RemoteManifest | null = null;\n  let hostReason: string | undefined;\n  try {\n    hostManifest = (await fetchManifest(hostUrl, timeoutMs)) as RemoteManifest;\n  } catch (e) {\n    hostReason = e instanceof Error ? e.message : String(e);\n  }\n\n  const hostVersion = hostManifest?.metaData?.pluginVersion ?? null;\n  const hostShared = (hostManifest?.shared ?? []).filter(\n    (s) => typeof s.requiredVersion === \"string\",\n  );\n\n  const remotes = listFederationRemotes(bosConfig);\n  const settled = await Promise.allSettled(\n    remotes.map(async ({ role, url }) => {\n      let manifest: RemoteManifest | null = null;\n      let reason: string | undefined;\n      try {\n        manifest = (await fetchManifest(url, timeoutMs)) as RemoteManifest;\n      } catch (e) {\n        reason = e instanceof Error ? e.message : String(e);\n      }\n\n      const version = manifest?.metaData?.pluginVersion ?? null;\n      const versionOk = version !== null && version === hostVersion;\n\n      if (!manifest) {\n        return {\n          role,\n          url,\n          reachable: false,\n          pluginVersion: null,\n          ok: false,\n          reason: reason ?? \"unreachable\",\n        } satisfies FederationCompatRemote;\n      }\n\n      if (!versionOk) {\n        return {\n          role,\n          url,\n          reachable: true,\n          pluginVersion: version,\n          ok: false,\n          reason: hostVersion\n            ? `expected pluginVersion=${hostVersion} (host), got ${version ?? \"missing\"} — redeploy this plugin`\n            : `host manifest missing pluginVersion`,\n        } satisfies FederationCompatRemote;\n      }\n\n      const missingShared: string[] = [];\n      const mismatchedShared: string[] = [];\n      for (const hostDep of hostShared) {\n        const remDep = manifest.shared?.find((s) => s.name === hostDep.name);\n        if (!remDep) {\n          missingShared.push(`${hostDep.name}@${hostDep.requiredVersion}`);\n          continue;\n        }\n        if (!satisfiesConstraint(remDep.version ?? \"\", hostDep.requiredVersion!)) {\n          mismatchedShared.push(\n            `${hostDep.name}: remote=${remDep.version ?? \"?\"} hostReq=${hostDep.requiredVersion}`,\n          );\n        }\n        if (isEffectCriticalSharedDep(hostDep.name)) {\n          const hostVersion = hostDep.version ?? \"\";\n          const remoteVersion = remDep.version ?? \"\";\n          if (remoteVersion && remoteVersion !== hostVersion) {\n            mismatchedShared.push(\n              `${hostDep.name}: exact-version skew — remote=${remoteVersion} host=${hostVersion} — bundle was built against a different prerelease build; redeploy host and plugin together`,\n            );\n          }\n          const remoteRequired =\n            typeof remDep.requiredVersion === \"string\" ? remDep.requiredVersion.trim() : \"\";\n          if (\n            remoteRequired.length > 0 &&\n            remoteRequired[0] !== \"^\" &&\n            !satisfiesConstraint(hostVersion, remoteRequired)\n          ) {\n            mismatchedShared.push(\n              `${hostDep.name}: train skew — host=${hostVersion} vs remote requiredVersion=${remoteRequired}`,\n            );\n          }\n        }\n      }\n\n      const reasons = [\n        ...missingShared.map((d) => `missing shared \"${d}\" required by host`),\n        ...mismatchedShared,\n      ];\n      return {\n        role,\n        url,\n        reachable: true,\n        pluginVersion: version,\n        ok: reasons.length === 0,\n        reason: reasons[0],\n      } satisfies FederationCompatRemote;\n    }),\n  );\n\n  const remoteReports = settled.map((s, i) => {\n    const placeholder = {\n      role: remotes[i]!.role,\n      url: remotes[i]!.url,\n      reachable: false,\n      pluginVersion: null,\n      ok: false,\n    };\n    return s.status === \"fulfilled\" ? s.value : { ...placeholder, reason: String(s.reason) };\n  });\n\n  const ok =\n    hostManifest !== null &&\n    remoteReports.every((r) => r.ok && r.reachable && r.pluginVersion !== null);\n\n  return {\n    ok,\n    hostVersion,\n    hostReachable: hostManifest !== null,\n    hostReason,\n    remotes: remoteReports,\n  };\n}\n\nexport function loadBosConfigForMfCheck(configPath: string): BosConfig {\n  return JSON.parse(readFileSync(configPath, \"utf8\")) as BosConfig;\n}\n"],"mappings":"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"}