UNPKG

@3dsource/metabox-front-api

Version:

API for Metabox BASIC configurator

1 lines 50.7 kB
{"version":3,"file":"3dsource-metabox-front-api.mjs","sources":["../../../../projects/3dsource/metabox-front-api/src/lib/actions/CommandBase.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/fromCommunicatorEvent.ts","../../../../projects/3dsource/metabox-front-api/src/lib/interfaces/ToMetaboxMessagePayloads.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/MetaboxConfig.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/GetPdf.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/GetCallToActionInformation.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/ResetCamera.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/ApplyZoom.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/InitShowcase.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/PlayShowcase.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/UnrealCommand.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/PauseShowcase.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/StopShowcase.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/GetScreenshot.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/SetProduct.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/SetProductMaterial.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/SetEnvironment.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/SetEnvironmentMaterial.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/ShowEmbeddedMenu.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/ShowOverlayInterface.ts","../../../../projects/3dsource/metabox-front-api/src/lib/actions/WatchCallbacks.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/event-dispatcher.ts","../../../../projects/3dsource/metabox-front-api/src/lib/constants/common.ts","../../../../projects/3dsource/metabox-front-api/src/lib/constants/version.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/communicator.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/prepare-iframe-src.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/integrate-metabox.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/save-image.ts","../../../../projects/3dsource/metabox-front-api/src/lib/helpers/url-utils.ts","../../../../projects/3dsource/metabox-front-api/src/3dsource-metabox-front-api.ts"],"sourcesContent":["import type { ToMetaBoxMessageEnvelope } from '../interfaces';\n\n/**\n * Base class for commands sent to the Metabox API.\n */\nexport class CommandBase {\n data!: ToMetaBoxMessageEnvelope;\n}\n","import type { Communicator } from '../helpers';\nimport type {\n FromMetaBoxApiEvents,\n FromMetaboxMessagePayloads,\n} from '../interfaces';\nimport type { Observable } from 'rxjs';\nimport { fromEvent } from 'rxjs';\n\n/**\n * Wrapper helper function to use it with rxJs the same as `fromEvent` to listen to events from the Communicator.\n * @param {Communicator} target\n * @param eventName\n */\nexport function fromCommunicatorEvent<T extends FromMetaBoxApiEvents>(\n target: Communicator,\n eventName: T,\n) {\n return fromEvent(target, eventName) as Observable<\n FromMetaboxMessagePayloads[T]\n >;\n}\n","import type { MimeType } from '../actions';\nimport type { ApplicationDeviceTypes } from './application-device-types';\nimport type { MetaboxHost } from '../constants';\nimport type { MetaboxCommandConfig } from './metabox-config';\n\nexport const MetaboxBasicConfiguratorActions = {\n metaboxConfig: 'metaboxConfig',\n setEnvironment: 'setEnvironment',\n setEnvironmentMaterialById: 'setEnvironmentMaterialById',\n setProduct: 'setProduct',\n setProductMaterialById: 'setProductMaterialById',\n getPdf: 'getPdf',\n getCallToActionInformation: 'getCallToActionInformation',\n getScreenshot: 'getScreenshot',\n showEmbeddedMenu: 'showEmbeddedMenu',\n forceSetDeviceType: 'forceSetDeviceType',\n showOverlayInterface: 'showOverlayInterface',\n resetCamera: 'resetCamera',\n applyZoom: 'applyZoom',\n initShowcase: 'initShowcase',\n playShowcase: 'playShowcase',\n pauseShowcase: 'pauseShowcase',\n stopShowcase: 'stopShowcase',\n sendCommandToUnreal: 'sendCommandToUnreal',\n watchCallbacks: 'watchCallbacks',\n} as const;\n\nexport type ToMetaBoxActions =\n (typeof MetaboxBasicConfiguratorActions)[keyof typeof MetaboxBasicConfiguratorActions];\n\n/**\n * @internal\n * @hidden\n */\nexport type ToMetaboxMessagePayload =\n ToMetaboxMessagePayloads[keyof ToMetaboxMessagePayloads];\n\n/**\n * Interface for messages sent from the application to the Basic Metabox API.\n */\nexport interface ToMetaboxMessagePayloads {\n [MetaboxBasicConfiguratorActions.metaboxConfig]: {\n appId: string;\n config: MetaboxCommandConfig;\n };\n [MetaboxBasicConfiguratorActions.setProduct]: { productId: string };\n [MetaboxBasicConfiguratorActions.setEnvironment]: { id: string };\n [MetaboxBasicConfiguratorActions.getPdf]: void;\n [MetaboxBasicConfiguratorActions.getCallToActionInformation]: void;\n [MetaboxBasicConfiguratorActions.watchCallbacks]: void;\n [MetaboxBasicConfiguratorActions.getScreenshot]: {\n format: MimeType;\n size?: { x: number; y: number };\n };\n [MetaboxBasicConfiguratorActions.setProductMaterialById]: {\n slotId: string;\n materialId: string;\n };\n [MetaboxBasicConfiguratorActions.setEnvironmentMaterialById]: {\n slotId: string;\n materialId: string;\n };\n [MetaboxBasicConfiguratorActions.showEmbeddedMenu]: { visible: boolean };\n [MetaboxBasicConfiguratorActions.showOverlayInterface]: { visible: boolean };\n [MetaboxBasicConfiguratorActions.forceSetDeviceType]: {\n deviceType: ApplicationDeviceTypes;\n };\n [MetaboxBasicConfiguratorActions.resetCamera]: void;\n [MetaboxBasicConfiguratorActions.applyZoom]: { zoom: number };\n [MetaboxBasicConfiguratorActions.initShowcase]: void;\n [MetaboxBasicConfiguratorActions.playShowcase]: void;\n [MetaboxBasicConfiguratorActions.pauseShowcase]: void;\n [MetaboxBasicConfiguratorActions.stopShowcase]: void;\n [MetaboxBasicConfiguratorActions.sendCommandToUnreal]: object;\n}\n\nexport interface ToMetaBoxMessageEnvelope {\n action: ToMetaBoxActions;\n payload?: ToMetaboxMessagePayload | never;\n}\n\nexport interface ToMetaBoxMessage {\n host: typeof MetaboxHost;\n payload: ToMetaBoxMessageEnvelope;\n}\n","import { CommandBase } from './CommandBase';\nimport type { MetaboxCommandConfig } from '../interfaces';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to send Metabox Config to Metabox Basic Configurator.\n * @remarks\n * Automatically sent when the Communicator instance is ready.\n */\n\nexport class MetaboxConfig extends CommandBase {\n /**\n * Creates an instance of MetaboxConfig.\n * @param {string} appId - The unique identifier for the Communicator Instance\n * @param {MetaboxCommandConfig} config - optional initial config: standalone - if true - disable metabox custom template and all logic\n */\n constructor(appId: string, config: MetaboxCommandConfig) {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.metaboxConfig,\n payload: { appId, config },\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to get a PDF from Metabox Basic Configurator.\n * @remarks\n * This class sends a message to the Metabox API to generate a PDF based on the current configuration.\n * This action does not require any parameters.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { GetPdf, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.sendCommandToMetabox(new GetPdf());\n * };\n */\n\nexport class GetPdf extends CommandBase {\n /**\n * Creates an instance of GetPdf.\n *\n * @remarks\n * This constructor does not require any parameters.\n */\n constructor() {\n super();\n this.data = { action: MetaboxBasicConfiguratorActions.getPdf };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to get a Call To Action Information from Metabox Basic Configurator.\n * @remarks\n * This class sends a message to the Metabox API to generate Call To Action information based on the current configuration and sends it to the endpoint url from the cta information.\n * This action does not require any parameters.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { GetCallToActionInformation, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.sendCommandToMetabox(new GetCallToActionInformation());\n * };\n */\n\nexport class GetCallToActionInformation extends CommandBase {\n /**\n * Creates an instance of GetCallToActionInformation.\n *\n * @remarks\n * This constructor does not require any parameters.\n */\n constructor() {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.getCallToActionInformation,\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to send to unreal and reset camera to initial.\n * @remarks\n * This class sends a message to the Metabox API to reset the camera on a scene.\n * This action does not require any parameters.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { ResetCamera, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.sendCommandToMetabox(new ResetCamera());\n * };\n */\n\nexport class ResetCamera extends CommandBase {\n /**\n * Creates an instance of ResetCamera.\n *\n * @remarks\n * This constructor does not require any parameters.\n */\n constructor() {\n super();\n this.data = { action: MetaboxBasicConfiguratorActions.resetCamera };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to ApplyZoom and change zoom camera on a scene.\n * @remarks\n * This class sends a command to the Metabox API to change zoom on a scene.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { ApplyZoom, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.sendCommandToMetabox(new ApplyZoom(10));\n * api.sendCommandToMetabox(new ApplyZoom(-10));\n * };\n */\n\nexport class ApplyZoom extends CommandBase {\n /**\n * Creates an instance of ApplyZoom.\n *\n * @param {...number} zoom\n */\n constructor(zoom: number) {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.applyZoom,\n payload: { zoom },\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to Init Showcase for a product a scene and start a sequence for the product.\n * @remarks\n * This class sends a command to the Metabox API to init showcase if the product has a sequence.\n * For check this needs to find a showcase property in the current product.\n * If this property exists, you can send init showcase command.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * ```typescript\n * import { InitShowcase, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.sendCommandToMetabox(new InitShowcase());\n * };\n */\nexport class InitShowcase extends CommandBase {\n /**\n * Creates an instance of InitShowcase.\n *\n * @remarks\n * This constructor does not require any parameters.\n */\n constructor() {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.initShowcase,\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to Play Showcase for a product when it already init, and you call pause, for example, before it.\n * @remarks\n * This class sends a command to the Metabox API to play showcase for a product if it is already initialized and pause.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { PlayShowcase, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.sendCommandToMetabox(new PlayShowcase());\n * };\n */\n\nexport class PlayShowcase extends CommandBase {\n /**\n * Creates an instance of PlayShowcase.\n *\n * @remarks\n * This constructor does not require any parameters.\n */\n constructor() {\n super();\n this.data = { action: MetaboxBasicConfiguratorActions.playShowcase };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * @internal\n * @hidden\n * Represents a command to send Unreal command.\n */\nexport class UnrealCommand extends CommandBase {\n constructor(payload: object) {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.sendCommandToUnreal,\n payload,\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to Pause Showcase for a product when it already init and play, and you call pause.\n * @remarks\n * This class sends a command to the Metabox API to pause showcase for a product if it is already initialized and play.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { PauseShowcase, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.sendCommandToMetabox(new PauseShowcase());\n * };\n */\n\nexport class PauseShowcase extends CommandBase {\n /**\n * Creates an instance of PauseShowcase.\n *\n * @remarks\n * This constructor does not require any parameters.\n */\n constructor() {\n super();\n this.data = { action: MetaboxBasicConfiguratorActions.pauseShowcase };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to Stop Showcase for a product when it already init, and you want to destroy it.\n * @remarks\n * This class sends a command to the Metabox API to Stop showcase for a product if it is already initialized.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { StopShowcase, Communicator } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.sendCommandToMetabox(new StopShowcase());\n * };\n */\n\nexport class StopShowcase extends CommandBase {\n /**\n * Creates an instance of StopShowcase.\n *\n * @remarks\n * This constructor does not require any parameters.\n */\n constructor() {\n super();\n this.data = { action: MetaboxBasicConfiguratorActions.stopShowcase };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Image format.\n * @remarks\n * This type represents the allowed image formats.\n */\nexport type MimeType = 'image/png' | 'image/jpeg' | 'image/webp';\n\n/**\n * Represents a command to get a screenshot.\n *\n * **Important**: Invoking this command will buffer it until the viewport is ready. Only then will the request be processed.\n *\n * @example\n * import { GetScreenshot, Communicator, saveImage } from '@3dsource/metabox-front-api';\n * window.env3DSource.apiReady = (api: Communicator) => {\n * // Listen for events from to the Metabox API\n * api.addEventListener('screenshot', (data) => {\n * // Process the get screenshot response\n * saveImage(data, 'Render.png');\n * });\n * api.sendCommandToMetabox(new GetScreenshot('image/png', { x: 1024, y: 1024 }));\n * };\n */\nexport class GetScreenshot extends CommandBase {\n /**\n * Constructs an instance of GetScreenshot.\n * @param {MimeType} mimeType - The output format.\n * @param {{ x: number; y: number }} [size] - Optional size in pixels.\n */\n constructor(mimeType: MimeType, size?: { x: number; y: number }) {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.getScreenshot,\n payload: { format: mimeType, size },\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to set a product by its ID.\n *\n * @remarks\n * This action sends a message to the Metabox API to set a product using the provided product ID.\n *\n * @example\n * import { SetProduct, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.setCommandToMetaBox(new SetProduct(\n * 'ffea6b5c-3a8a-4f56-9417-e605acb5cca3'\n * ));\n * };\n */\nexport class SetProduct extends CommandBase {\n /**\n * Creates an instance of SetProduct.\n *\n * @param {string} productId - The product ID.\n */\n constructor(productId: string) {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.setProduct,\n payload: { productId },\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to set a material by its slot ID and Material ID.\n *\n * @example\n * import { SetProductMaterial, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.sendCommandToMetabox(new SetProductMaterial(\n * 'carpaint',\n * 'dd829d6e-9200-47a7-8d5b-af5df89b7e91',\n * ));\n * };\n */\nexport class SetProductMaterial extends CommandBase {\n /**\n * Creates an instance of SetProductMaterial.\n *\n * @param {string} slotId - The slot ID.\n * @param {string} materialId - The material ID.\n */\n constructor(slotId: string, materialId: string) {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.setProductMaterialById,\n payload: { slotId, materialId },\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to set the environment by its ID.\n *\n * @example\n * import { SetEnvironment, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n * // Change the environment to '55555555-1234-1234-1234-01234567890'\n * api.sendCommandToMetabox(new SetEnvironment('55555555-1234-1234-1234-01234567890'));\n * };\n */\nexport class SetEnvironment extends CommandBase {\n /**\n * Creates an instance of SetEnvironment.\n *\n * @param {string} environmentId - The environment ID.\n */\n constructor(environmentId: string) {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.setEnvironment,\n payload: { id: environmentId },\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to set an environment material by its slot ID and Material ID.\n *\n * @example\n * import { SetEnvironmentMaterial, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.sendCommandToMetabox(new SetEnvironmentMaterial(\n * 'carpaint',\n * 'dd829d6e-9200-47a7-8d5b-af5df89b7e91',\n * ));\n * };\n */\nexport class SetEnvironmentMaterial extends CommandBase {\n /**\n * Creates an instance of SetEnvironmentMaterial.\n *\n * @param {string} slotId - The slot ID.\n * @param {string} materialId - The material ID.\n */\n constructor(slotId: string, materialId: string) {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.setEnvironmentMaterialById,\n payload: { slotId, materialId },\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to toggle the Embedded to the Metabox Menu.\n *\n * @example\n * import { ShowEmbeddedMenu, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.setCommandToMetaBox(new ShowEmbeddedMenu(true));\n * };\n */\nexport class ShowEmbeddedMenu extends CommandBase {\n /**\n * Creates an instance of ShowEmbeddedMenu.\n *\n * @param {boolean} visible - A flag indicating whether the embedded menu should be visible.\n */\n constructor(visible: boolean) {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.showEmbeddedMenu,\n payload: { visible },\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * Represents a command to toggle the Unreal Overlay Interface Menu.\n *\n * @remarks\n * This action sends a message to the Metabox API to toggle the visibility of the Unreal overlay UI.\n *\n * @example\n * import { ShowOverlayInterface, Communicator } from '@3dsource/metabox-front-api';\n *\n * //...Assume that the integration is already implemented\n * window.env3DSource.apiReady = (api: Communicator) => {\n * api.setCommandToMetaBox(new ShowOverlayInterface(true));\n * };\n */\nexport class ShowOverlayInterface extends CommandBase {\n /**\n * Creates an instance of ShowOverlayInterface.\n *\n * @param {boolean} visible - A flag indicating whether the Unreal overlay UI should be visible.\n */\n constructor(visible: boolean) {\n super();\n this.data = {\n action: MetaboxBasicConfiguratorActions.showOverlayInterface,\n payload: { visible },\n };\n }\n}\n","import { CommandBase } from './CommandBase';\nimport { MetaboxBasicConfiguratorActions } from '../interfaces';\n\n/**\n * @experimental\n * @internal\n * @hidden\n * @remarks\n * Represents a command to watch Unreal callbacks from Unreal engine.\n * Can be useful for custom solutions.\n */\nexport class WatchCallbacks extends CommandBase {\n /**\n * Creates an instance of WatchCallbacks.\n *\n * @remarks\n * This constructor does not require any parameters.\n */\n constructor() {\n super();\n this.data = { action: MetaboxBasicConfiguratorActions.watchCallbacks };\n }\n}\n","/**\n * Represents a callback listener for specific message types.\n * Used internally by EventDispatcher to store event listeners.\n *\n * @public\n */\nexport interface Listener {\n /** The message type this listener is registered for */\n messageType: string;\n /** The callback function to execute when a message of the specified type is received */\n callback: (data: unknown) => void;\n}\n\n/**\n * EventDispatcher is a class that manages event listeners and dispatches events to them.\n */\nexport class EventDispatcher {\n /**\n * Storage for callback listeners by message type.\n */\n listeners: Listener[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n destroy(key: string) {\n this.listeners = [];\n }\n\n /**\n * Adds an event listener for receiving specific types of messages.\n *\n * @param messageType - The message type to listen for.\n * @param callback - The callback function to execute when a message is received.\n */\n addEventListener(\n messageType: string,\n callback: (data: unknown) => void,\n ): this {\n this.listeners.push({ messageType, callback });\n return this;\n }\n\n /**\n * Dispatches an event to all listeners of a specific message type.\n *\n * @param messageType - The message type.\n * @param data - The data associated with the event.\n */\n dispatchEvent(messageType: string, data: unknown): this {\n this.listeners\n .filter((listener) => listener.messageType === messageType)\n .forEach((listener) => listener.callback(data));\n return this;\n }\n\n /**\n * Removes an event listener for a specific type of message.\n *\n * @param messageType - The message type.\n * @param callback - The callback function to remove.\n */\n removeEventListener(\n messageType: string,\n callback: (data: unknown) => void,\n ): this {\n this.listeners = this.listeners.filter(\n (listener) =>\n !(\n listener.messageType === messageType && listener.callback === callback\n ),\n );\n return this;\n }\n}\n","export const Metabox = 'metabox_v3';\nexport const MetaboxHost = 'metaboxHost_v3';\nexport const MetaboxData = 'metaboxData_v3';\nexport const AppLoaded = 'appLoaded_v3';\nexport const MetaboxDomain = 'metabox.3dsource.com';\nexport const BasicRouteUrl = 'metabox-configurator/basic';\n","export const VERSION = '3.0.5';\n","import { EventDispatcher } from './event-dispatcher';\nimport type { CommandBase } from '../actions';\nimport { MetaboxConfig } from '../actions';\nimport type {\n FromMetaBoxApiEvents,\n FromMetaBoxMessage,\n FromMetaboxMessagePayloads,\n MCAppLoaded,\n MetaboxCommandConfig,\n MetaboxEnvironment,\n} from '../interfaces';\nimport {\n AppLoaded,\n Metabox,\n MetaboxData,\n MetaboxHost,\n VERSION,\n} from '../constants';\n\nconst communicatorMap = new Map<string, { instance: Communicator }>();\n\n/**\n * Handles messaging between the host page and embedded Metabox content.\n * @internal Use {@link Communicator.createInstance} or the {@link integrateMetabox} helper to instantiate.\n */\nexport class Communicator extends EventDispatcher {\n /**\n * Bound handler for incoming postMessage events.\n */\n private binder = this.handleMessageReceived.bind(this, MetaboxData);\n\n /**\n * Constructs a Communicator, replacing any existing instance, and begins listening for messages.\n * @internal\n */\n constructor(\n data: MCAppLoaded['payload'],\n environment: MetaboxEnvironment,\n config?: Partial<MetaboxCommandConfig>,\n ) {\n super();\n const { appId = 'unknown', version = VERSION } = data ?? {};\n const key = `${version}_${environment}_${appId}`;\n communicatorMap.get(key)?.instance.destroy(key);\n communicatorMap.set(key, { instance: this });\n window.addEventListener('message', this.binder);\n this.sendCommandToMetabox(\n new MetaboxConfig(appId, {\n ...config,\n hostUrl: location.href,\n apiVersion: VERSION,\n }),\n );\n }\n\n /**\n * Listens for Metabox to signal readiness, then initializes communicator.\n * @param apiReadyCallback - Called with the new Communicator once to the Metabox is loaded.\n * @param {MetaboxEnvironment} environment - The environment in which the Communicator is running.\n * @param {MetaboxCommandConfig} config - optional initial config: standalone - if true - disable metabox custom template and all logic\n */\n static createInstance(\n apiReadyCallback: (api: Communicator) => void,\n environment: MetaboxEnvironment,\n config?: Partial<MetaboxCommandConfig>,\n ): void {\n const startHandler = (event: MessageEvent): void => {\n const message = event.data as FromMetaBoxMessage;\n if (message?.envelope?.action === AppLoaded && message.host === Metabox) {\n apiReadyCallback(\n new Communicator(message.envelope.payload, environment, config),\n );\n window.removeEventListener('message', startHandler);\n }\n };\n\n window.addEventListener('message', startHandler);\n }\n\n /**\n * Cleans up resources and stops listening for messages.\n */\n public override destroy(key: string): void {\n super.destroy(key);\n window.removeEventListener('message', this.binder);\n }\n\n static clearAll() {\n if (communicatorMap.size === 0) {\n return;\n }\n\n communicatorMap.forEach((value, key) => value.instance.destroy(key));\n communicatorMap.clear();\n }\n\n static getCommunicator(key: string) {\n return communicatorMap.get(key);\n }\n\n /**\n * Posts a command to the Metabox iframe.\n * @param command - An action command containing data to send.\n */\n public sendCommandToMetabox<T extends CommandBase>(command: T): void {\n const { data } = command;\n const iframe = document.getElementById(\n 'embeddedContent',\n ) as HTMLIFrameElement;\n\n const message = {\n host: MetaboxHost,\n payload: { ...data },\n };\n\n if (!iframe?.contentWindow) {\n console.warn(\n 'to the Metabox IFrame not found or not ready. Message sends to the same window',\n );\n window.postMessage({ ...message, target: 'metabox' }, '*');\n return;\n }\n\n // Replace '*' with a specific origin in production for better security.\n iframe.contentWindow.postMessage({ ...message, target: 'child' }, '*');\n }\n\n /**\n * Registers an event listener for messages dispatched by to the Metabox.\n * @override\n */\n override addEventListener<T extends FromMetaBoxApiEvents>(\n messageType: T,\n callback: (data: FromMetaboxMessagePayloads[T]) => void,\n ) {\n return super.addEventListener(\n messageType,\n callback as (data: unknown) => void,\n );\n }\n\n /**\n * Dispatches a typed event to all registered listeners.\n * @override\n */\n override dispatchEvent<T extends FromMetaBoxApiEvents>(\n messageType: T,\n data: FromMetaboxMessagePayloads[T],\n ) {\n return super.dispatchEvent(messageType, data);\n }\n\n /**\n * Removes a previously registered event listener.\n * @override\n */\n override removeEventListener<T extends FromMetaBoxApiEvents>(\n messageType: T,\n callback: (data: FromMetaboxMessagePayloads[T]) => void,\n ) {\n return super.removeEventListener(\n messageType,\n callback as (data: unknown) => void,\n );\n }\n\n /**\n * Filters and dispatches incoming messages from to the Metabox.\n * @param {FromMetaBoxApiEvents | 'metaboxData' } messageType - Expected message type for filtering ('metaboxData').\n * @param {MessageEvent} event - The postMessage event received on a window.\n */\n private handleMessageReceived<T extends FromMetaBoxApiEvents>(\n messageType: T | typeof MetaboxData,\n event: MessageEvent,\n ): void {\n // Optionally validate event.origin for security.\n if (messageType !== MetaboxData || event.data?.host !== Metabox) {\n return;\n }\n const data = event.data?.envelope;\n this.dispatchEvent(data?.eventType as T, data?.payload);\n }\n}\n","import type { IntegrateMetaboxConfig } from '../interfaces';\nimport { BasicRouteUrl, MetaboxDomain } from '../constants';\n\nexport const prepareIframeSrc = (\n configuratorId: string,\n config?: IntegrateMetaboxConfig,\n) => {\n const base = `https://${config?.domain || MetaboxDomain}/${BasicRouteUrl}/${configuratorId}`;\n const params = new URLSearchParams();\n\n if (config?.introImage) {\n params.set('introImage', config.introImage);\n }\n if (config?.introVideo) {\n params.set('introVideo', config.introVideo);\n }\n if (config?.loadingImage) {\n params.set('loadingImage', config.loadingImage);\n }\n if (config?.state) {\n params.set('state', decodeURIComponent(config.state));\n }\n\n const query = params.toString();\n return query ? `${base}?${query}` : base;\n};\n","import { Communicator } from './communicator';\nimport type { IntegrateMetaboxConfig } from '../interfaces';\nimport { prepareIframeSrc } from './prepare-iframe-src';\n\n/**\n * Integrates the Metabox Basic Configurator into the page by injecting an iframe and\n * initializing a Communicator instance for host-to-iframe messaging.\n *\n * @remarks\n * - Builds a secure iframe URL using the provided configuratorId and config options.\n * - Ensures the resulting URL uses HTTPS and that the target container exists.\n * - Removes any previously embedded iframe with id \"embeddedContent\" before inserting a new one.\n *\n * @param {string} configuratorId - The Basic Configurator ID (not a full URL). It is appended to\n * `https://{domain}/metabox-configurator/basic/{configuratorId}` to form the iframe src.\n *\n * @param {string} [containerId='embed3DSource'] - The id of the container element where the iframe will be injected.\n *\n * @param {(api: Communicator) => void} apiReadyCallback - Called when the Communicator instance is created on the host side.\n *\n * @param {IntegrateMetaboxConfig} config - Optional configuration used to build the iframe URL and initialize the communicator.\n * Supported fields:\n * - standalone?: boolean — if true, disables Metabox custom template and related logic.\n * - introImage?: string — URL to an image shown on the intro screen (added as ?introImage=...).\n * - introVideo?: string — URL to a video shown on the intro screen (added as ?introVideo=...).\n * - loadingImage?: string — URL to an image displayed while loading (added as ?loadingImage=...).\n * - state?: string — Predefined state for configurator for initial loading (added as ?state=...).\n * - domain?: string — custom domain for testing (defaults to metabox.3dsource.com). HTTPS is enforced.\n *\n * @throws Error If configuratorId or containerId are empty strings.\n * @throws Error If the computed iframe URL is invalid or does not use HTTPS.\n * @throws Error If the container element with the provided id cannot be found.\n *\n * @example\n * import { integrateMetabox } from '@3dsource/metabox-front-api';\n *\n * integrateMetabox(\n * 'configurator-id',\n * 'embed3DSource',\n * (api) => {\n * // Communicator is ready to use\n * },\n * {\n * standalone: false,\n * introImage: 'https://example.com/intro.png',\n * loadingImage: 'https://example.com/loading.png',\n * },\n * );\n */\nexport function integrateMetabox(\n configuratorId: string,\n containerId = 'embed3DSource',\n apiReadyCallback: (api: Communicator) => void,\n config?: IntegrateMetaboxConfig,\n) {\n if (!configuratorId.trim()) {\n throw new Error(\n 'integrateMetabox: configuratorId must be a non-empty string',\n );\n }\n const iframeSrc = prepareIframeSrc(configuratorId, config);\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(iframeSrc);\n } catch {\n throw new Error('integrateMetabox: Provided iframeSrc is not a valid URL');\n }\n if (parsedUrl.protocol !== 'https:') {\n throw new Error('integrateMetabox: iframeSrc must use HTTPS protocol');\n }\n if (!containerId.trim()) {\n throw new Error('integrateMetabox: containerId must be a non-empty string');\n }\n\n const container = document.getElementById(containerId);\n if (!container) {\n throw new Error(`Container element with id ${containerId} not found`);\n }\n\n const existingIframe = document.getElementById('embeddedContent');\n if (existingIframe) {\n existingIframe.remove();\n }\n\n Communicator.createInstance(apiReadyCallback, 'host', config);\n\n const style = document.createElement('style');\n style.innerHTML = `\n #${containerId} {\n width: 100%;\n height: 100%;\n overflow: hidden;\n position: relative;\n }\n `;\n document.head.appendChild(style);\n\n const iframe = document.createElement('iframe');\n iframe.setAttribute('allow', 'autoplay; fullscreen; encrypted-media');\n iframe.setAttribute('referrerPolicy', 'no-referrer-when-downgrade');\n iframe.setAttribute('id', 'embeddedContent');\n iframe.style.border = '0';\n iframe.style.width = '100%';\n iframe.style.height = '100%';\n iframe.style.overflow = 'hidden';\n iframe.src = iframeSrc;\n container.appendChild(iframe);\n}\n","/**\n * Saves an image by triggering a download.\n *\n * @remarks\n * This function creates an anchor element, sets its `href` attribute to the provided image URL,\n * and triggers a click event to initiate a download with the specified filename.\n *\n * @param {string} imageUrl - The URL of the image to save.\n * @param {string} filename - The name of the file to save.\n */\nexport function saveImage(imageUrl: string, filename: string): void {\n const a = document.createElement('a');\n a.href = imageUrl;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n}\n","/**\n * Sets the URL parameters based on the provided state.\n *\n * @remarks\n * This function updates the current URL by replacing its search parameters with the key-value pairs from the provided state object.\n *\n * @param {Record<string, string>} state - An object containing key-value pairs to set as URL parameters.\n */\nexport function setUrlParams(state: Record<string, string>): void {\n const url = new URL(window.location.href);\n url.search = '';\n Object.entries(state).forEach(([key, value]) => {\n url.searchParams.set(key, value);\n });\n history.replaceState(null, '', url.toString());\n}\n\n/**\n * Retrieves the URL parameters as an object.\n *\n * @remarks\n * This function parses the current URL's search parameters and returns them as a key-value object.\n *\n * @returns An object containing the URL parameters.\n */\nexport function getUrlParams(): Record<string, string> {\n const urlParams = new URLSearchParams(window.location.search);\n const selections: Record<string, string> = {};\n urlParams.forEach((value, key) => {\n selections[key] = value;\n });\n return selections;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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