"use strict"; var __bootstrap = (() => { var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/bootstrap/index.ts var bootstrap_exports = {}; __export(bootstrap_exports, { SDK_ENTRY_LOADED_EVENT: () => SDK_ENTRY_LOADED_EVENT, default: () => bootstrap }); var SDK_ENTRY_LOADED_EVENT = "websitebuilder__sdk_entry-loaded"; function loadScript(doc, src, onload) { const script = doc.createElement("script"); script.src = src; script.defer = true; if (onload) { script.addEventListener("load", onload, { once: true }); } script.addEventListener("error", () => { console.error(`SDK script failed to load: ${src}`); }, { once: true }); doc.head.append(script); } function buildScriptUrl(entry) { const url = new URL(entry.path); url.searchParams.append("version", entry.etag); return url.toString(); } function dispatchSdkScriptLoadedEvent(doc, sdkName) { const detail = { sdkName }; doc.dispatchEvent(new CustomEvent(SDK_ENTRY_LOADED_EVENT, { detail })); } function parseOptions(options) { let parsed; try { parsed = JSON.parse(options); } catch (error) { console.error("SDK bootstrap: failed to parse options", error); return null; } if (!parsed || typeof parsed !== "object") { console.error("SDK bootstrap: options is not an object"); return null; } const { websiteData, sdkEntries, manifestPath, loadAllSdkScripts } = parsed; if (!websiteData || typeof websiteData.publishedWebsiteId !== "string") { console.error("SDK bootstrap: invalid websiteData.publishedWebsiteId"); return null; } if (!Array.isArray(sdkEntries)) { console.error("SDK bootstrap: sdkEntries must be an array"); return null; } if (typeof manifestPath !== "string") { console.error("SDK bootstrap: manifestPath must be a string"); return null; } return { websiteData, sdkEntries, manifestPath, loadAllSdkScripts }; } function bootstrap(options, doc = document) { const parsed = parseOptions(options); if (!parsed) return; const { websiteData, manifestPath, loadAllSdkScripts } = parsed; const sdkEntries = parsed.sdkEntries; fetch(manifestPath).then((response) => { if (!response.ok) { throw new Error(`SDK manifest fetch failed: ${response.status}`); } return response.json(); }).then((manifest) => { if (manifest.behaviors) { loadScript(doc, buildScriptUrl(manifest.behaviors)); } if (sdkEntries.length === 0 && !loadAllSdkScripts) { return; } loadScript(doc, buildScriptUrl(manifest.sdk.websiteSdkRegistry), () => { window.WebsiteSdkRegistry.init({ publishedWebsiteId: websiteData.publishedWebsiteId }, doc); const initialSdksEntriesMap = loadAllSdkScripts ? Object.keys(manifest.sdk).reduce((acc, sdkName) => { if (sdkName !== "websiteSdkRegistry") { acc[sdkName] = []; } return acc; }, {}) : {}; const entriesBySdkName = sdkEntries.reduce((acc, sdkEntry) => { if (manifest.sdk[sdkEntry.sdkName]) { const sdksList = acc[sdkEntry.sdkName] || []; sdksList.push(sdkEntry); acc[sdkEntry.sdkName] = sdksList; } return acc; }, initialSdksEntriesMap); const sdkEntriesToLoad = Object.entries(entriesBySdkName); let remainingScripts = sdkEntriesToLoad.length; sdkEntriesToLoad.forEach(([sdkName, entries]) => { loadScript(doc, buildScriptUrl(manifest.sdk[sdkName]), () => { entries.forEach((sdk) => { window.WebsiteSdkRegistry.initSectionSdk({ sectionId: sdk.sectionId, sdkName: sdk.sdkName, configuration: sdk.configuration, sdkKey: sdk.key || "" }); }); dispatchSdkScriptLoadedEvent(doc, sdkName); remainingScripts -= 1; if (remainingScripts === 0) { window.WebsiteSdkRegistry.allScriptsLoaded(); } }); }); }); }).catch((error) => { console.error("SDK bootstrap failed:", error); }); } return __toCommonJS(bootstrap_exports); })(); window.bootstrap = __bootstrap.default;