@weldsuite/helpdesk-widget-sdk 1.0.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular.js","sources":["../../../node_modules/.pnpm/@rollup+plugin-typescript@1_be1945feb58e0e4c88830838e2909306/node_modules/tslib/tslib.es6.js","../../src/types/config.ts","../../src/utils/logger.ts","../../src/core/IframeManager.ts","../../src/types/messages.ts","../../src/utils/security.ts","../../src/core/MessageBroker.ts","../../src/types/state.ts","../../src/utils/validation.ts","../../src/core/StateCoordinator.ts","../../src/core/WeldSDK.ts","../../frameworks/angular/helpdesk-widget.component.ts","../../frameworks/angular/helpdesk-widget.service.ts","../../frameworks/angular/helpdesk-widget.module.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\r\n * Weld SDK - Configuration Types\r\n * Type definitions for SDK initialization and configuration\r\n */\r\n\r\n/**\r\n * Event types for widget events\r\n */\r\nexport type WidgetEventType = 'ready' | 'open' | 'close' | 'error' | 'message' | 'minimize' | 'maximize' | 'destroy';\r\n\r\n/**\r\n * Widget event structure\r\n */\r\nexport interface WidgetEvent {\r\n type: WidgetEventType;\r\n data?: any;\r\n timestamp: number;\r\n}\r\n\r\n/**\r\n * Event handler function type\r\n */\r\nexport type WidgetEventHandler = (event?: WidgetEvent | any) => void;\r\n\r\n/**\r\n * Position configuration\r\n */\r\nexport interface PositionConfig {\r\n bottom?: string;\r\n right?: string;\r\n left?: string;\r\n top?: string;\r\n}\r\n\r\n/**\r\n * Customization configuration\r\n */\r\nexport interface CustomizationConfig {\r\n primaryColor?: string;\r\n accentColor?: string;\r\n backgroundColor?: string;\r\n textColor?: string;\r\n fontFamily?: string;\r\n fontSize?: string;\r\n borderRadius?: string;\r\n}\r\n\r\n/**\r\n * Feature flags\r\n */\r\nexport interface FeatureConfig {\r\n attachments?: boolean;\r\n reactions?: boolean;\r\n typing?: boolean;\r\n readReceipts?: boolean;\r\n offlineMode?: boolean;\r\n fileUpload?: boolean;\r\n imageUpload?: boolean;\r\n voiceMessages?: boolean;\r\n videoMessages?: boolean;\r\n}\r\n\r\n/**\r\n * Mobile configuration\r\n */\r\nexport interface MobileConfig {\r\n fullScreen?: boolean;\r\n scrollLock?: boolean;\r\n keyboardHandling?: 'auto' | 'manual';\r\n safeAreaInsets?: boolean;\r\n}\r\n\r\n/**\r\n * Iframe configuration\r\n */\r\nexport interface IframeConfig {\r\n launcher: {\r\n url: string;\r\n name: string;\r\n position: PositionConfig;\r\n size: string;\r\n };\r\n widget: {\r\n url: string;\r\n name: string;\r\n position: PositionConfig;\r\n width: string;\r\n height: string;\r\n };\r\n backdrop?: {\r\n enabled: boolean;\r\n closeOnClick: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * API configuration\r\n */\r\nexport interface ApiConfig {\r\n baseUrl: string;\r\n widgetId: string;\r\n endpoints?: {\r\n messages?: string;\r\n users?: string;\r\n conversations?: string;\r\n upload?: string;\r\n };\r\n timeout?: number;\r\n retries?: number;\r\n}\r\n\r\n/**\r\n * Authentication configuration\r\n */\r\nexport interface AuthConfig {\r\n enabled?: boolean;\r\n mode?: 'anonymous' | 'identified';\r\n userId?: string;\r\n email?: string;\r\n name?: string;\r\n avatar?: string;\r\n metadata?: Record<string, any>;\r\n token?: string;\r\n}\r\n\r\n/**\r\n * Locale configuration\r\n */\r\nexport interface LocaleConfig {\r\n locale?: string;\r\n translations?: Record<string, Record<string, string>>;\r\n dateFormat?: string;\r\n timeFormat?: string;\r\n timezone?: string;\r\n}\r\n\r\n/**\r\n * Logging configuration\r\n */\r\nexport interface LogConfig {\r\n enabled?: boolean;\r\n level?: 'debug' | 'info' | 'warn' | 'error';\r\n prefix?: string;\r\n includeTimestamp?: boolean;\r\n}\r\n\r\n/**\r\n * Performance configuration\r\n */\r\nexport interface PerformanceConfig {\r\n lazyLoad?: boolean;\r\n preload?: boolean;\r\n caching?: boolean;\r\n prefetch?: boolean;\r\n}\r\n\r\n/**\r\n * Security configuration\r\n */\r\nexport interface SecurityConfig {\r\n allowedOrigins?: string[];\r\n validateMessages?: boolean;\r\n sanitizeInput?: boolean;\r\n contentSecurityPolicy?: string;\r\n}\r\n\r\n/**\r\n * Main SDK configuration\r\n */\r\nexport interface WeldConfig {\r\n // Required\r\n widgetId: string;\r\n\r\n // Optional\r\n api?: Partial<ApiConfig>;\r\n iframes?: Partial<IframeConfig>;\r\n position?: {\r\n launcher?: PositionConfig;\r\n widget?: PositionConfig;\r\n };\r\n customization?: CustomizationConfig;\r\n features?: FeatureConfig;\r\n mobile?: MobileConfig;\r\n auth?: AuthConfig;\r\n locale?: LocaleConfig;\r\n logging?: LogConfig;\r\n performance?: PerformanceConfig;\r\n security?: SecurityConfig;\r\n\r\n // Callbacks\r\n onReady?: () => void;\r\n onError?: (error: Error) => void;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: any) => void;\r\n onMinimize?: () => void;\r\n onMaximize?: () => void;\r\n onDestroy?: () => void;\r\n}\r\n\r\n/**\r\n * Runtime configuration (resolved from WeldConfig)\r\n */\r\nexport interface ResolvedConfig {\r\n widgetId: string;\r\n api: ApiConfig;\r\n iframes: IframeConfig;\r\n customization: CustomizationConfig;\r\n features: FeatureConfig;\r\n mobile: MobileConfig;\r\n auth: AuthConfig;\r\n locale: LocaleConfig;\r\n logging: LogConfig;\r\n performance: PerformanceConfig;\r\n security: SecurityConfig;\r\n // Callbacks (passed through from WeldConfig)\r\n onReady?: () => void;\r\n onError?: (error: Error) => void;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: any) => void;\r\n onMinimize?: () => void;\r\n onMaximize?: () => void;\r\n onDestroy?: () => void;\r\n}\r\n\r\n/**\r\n * Device detection\r\n */\r\nexport type DeviceType = 'mobile' | 'tablet' | 'desktop';\r\n\r\nexport interface DeviceInfo {\r\n type: DeviceType;\r\n isMobile: boolean;\r\n isTablet: boolean;\r\n isDesktop: boolean;\r\n isTouchDevice: boolean;\r\n screenWidth: number;\r\n screenHeight: number;\r\n orientation: 'portrait' | 'landscape';\r\n userAgent: string;\r\n}\r\n\r\n/**\r\n * Default configuration values\r\n */\r\nexport const DEFAULT_CONFIG: Omit<ResolvedConfig, 'widgetId'> = {\r\n api: {\r\n baseUrl: 'https://weldsuite-helpdesk-widget.vercel.app',\r\n widgetId: '',\r\n timeout: 30000,\r\n retries: 3,\r\n },\r\n iframes: {\r\n launcher: {\r\n url: '/widget?mode=launcher',\r\n name: 'weld-launcher-frame',\r\n position: { bottom: '24px', right: '24px' },\r\n size: '60px',\r\n },\r\n widget: {\r\n url: '/widget?mode=widget',\r\n name: 'weld-widget-frame',\r\n position: { bottom: '100px', right: '24px' },\r\n width: '400px',\r\n height: 'min(680px, calc(100vh - 120px))',\r\n },\r\n backdrop: {\r\n enabled: true,\r\n closeOnClick: true,\r\n },\r\n },\r\n customization: {\r\n primaryColor: '#000000',\r\n accentColor: '#3b82f6',\r\n backgroundColor: '#ffffff',\r\n textColor: '#111827',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n fontSize: '14px',\r\n borderRadius: '12px',\r\n },\r\n features: {\r\n attachments: true,\r\n reactions: true,\r\n typing: true,\r\n readReceipts: true,\r\n offlineMode: false,\r\n fileUpload: true,\r\n imageUpload: true,\r\n voiceMessages: false,\r\n videoMessages: false,\r\n },\r\n mobile: {\r\n fullScreen: true,\r\n scrollLock: true,\r\n keyboardHandling: 'auto',\r\n safeAreaInsets: true,\r\n },\r\n auth: {\r\n enabled: true,\r\n mode: 'anonymous',\r\n },\r\n locale: {\r\n locale: 'en',\r\n dateFormat: 'MMM dd, yyyy',\r\n timeFormat: 'HH:mm',\r\n },\r\n logging: {\r\n enabled: true,\r\n level: 'warn',\r\n prefix: '[Weld]',\r\n includeTimestamp: true,\r\n },\r\n performance: {\r\n lazyLoad: true,\r\n preload: false,\r\n caching: true,\r\n prefetch: false,\r\n },\r\n security: {\r\n allowedOrigins: [],\r\n validateMessages: true,\r\n sanitizeInput: true,\r\n },\r\n};\r\n\r\n/**\r\n * Configuration validation\r\n */\r\nexport function validateConfig(config: Partial<WeldConfig>): boolean {\r\n if (!config.widgetId || typeof config.widgetId !== 'string') {\r\n throw new Error('WeldConfig: widgetId is required and must be a string');\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Merge configuration with defaults\r\n */\r\nexport function resolveConfig(config: WeldConfig): ResolvedConfig {\r\n validateConfig(config);\r\n\r\n return {\r\n widgetId: config.widgetId,\r\n api: {\r\n ...DEFAULT_CONFIG.api,\r\n widgetId: config.widgetId,\r\n ...config.api,\r\n },\r\n iframes: {\r\n launcher: {\r\n ...DEFAULT_CONFIG.iframes.launcher,\r\n ...config.iframes?.launcher,\r\n position: {\r\n ...DEFAULT_CONFIG.iframes.launcher.position,\r\n ...config.position?.launcher,\r\n ...config.iframes?.launcher?.position,\r\n },\r\n },\r\n widget: {\r\n ...DEFAULT_CONFIG.iframes.widget,\r\n ...config.iframes?.widget,\r\n position: {\r\n ...DEFAULT_CONFIG.iframes.widget.position,\r\n ...config.position?.widget,\r\n ...config.iframes?.widget?.position,\r\n },\r\n },\r\n backdrop: {\r\n ...DEFAULT_CONFIG.iframes.backdrop!,\r\n ...config.iframes?.backdrop,\r\n },\r\n },\r\n customization: {\r\n ...DEFAULT_CONFIG.customization,\r\n ...config.customization,\r\n },\r\n features: {\r\n ...DEFAULT_CONFIG.features,\r\n ...config.features,\r\n },\r\n mobile: {\r\n ...DEFAULT_CONFIG.mobile,\r\n ...config.mobile,\r\n },\r\n auth: {\r\n ...DEFAULT_CONFIG.auth,\r\n ...config.auth,\r\n },\r\n locale: {\r\n ...DEFAULT_CONFIG.locale,\r\n ...config.locale,\r\n },\r\n logging: {\r\n ...DEFAULT_CONFIG.logging,\r\n ...config.logging,\r\n },\r\n performance: {\r\n ...DEFAULT_CONFIG.performance,\r\n ...config.performance,\r\n },\r\n security: {\r\n ...DEFAULT_CONFIG.security,\r\n ...config.security,\r\n },\r\n // Pass through callbacks\r\n onReady: config.onReady,\r\n onError: config.onError,\r\n onOpen: config.onOpen,\r\n onClose: config.onClose,\r\n onMessage: config.onMessage,\r\n onMinimize: config.onMinimize,\r\n onMaximize: config.onMaximize,\r\n onDestroy: config.onDestroy,\r\n };\r\n}\r\n","/**\r\n * Weld SDK - Logger Utility\r\n * Centralized logging with configurable levels and formatting\r\n */\r\n\r\nimport type { LogConfig } from '../types/config';\r\n\r\n/**\r\n * Log levels\r\n */\r\nexport enum LogLevel {\r\n DEBUG = 0,\r\n INFO = 1,\r\n WARN = 2,\r\n ERROR = 3,\r\n SILENT = 4,\r\n}\r\n\r\n/**\r\n * Logger class\r\n */\r\nexport class Logger {\r\n private config: LogConfig;\r\n private level: LogLevel;\r\n\r\n constructor(config: LogConfig) {\r\n this.config = {\r\n enabled: true,\r\n level: 'warn',\r\n prefix: '[Weld]',\r\n includeTimestamp: true,\r\n ...config,\r\n };\r\n\r\n this.level = this.getLevelFromString(this.config.level!);\r\n }\r\n\r\n /**\r\n * Convert string level to LogLevel enum\r\n */\r\n private getLevelFromString(level: string): LogLevel {\r\n switch (level.toLowerCase()) {\r\n case 'debug':\r\n return LogLevel.DEBUG;\r\n case 'info':\r\n return LogLevel.INFO;\r\n case 'warn':\r\n return LogLevel.WARN;\r\n case 'error':\r\n return LogLevel.ERROR;\r\n default:\r\n return LogLevel.WARN;\r\n }\r\n }\r\n\r\n /**\r\n * Check if logging is enabled for level\r\n */\r\n private shouldLog(level: LogLevel): boolean {\r\n return (this.config.enabled ?? true) && level >= this.level;\r\n }\r\n\r\n /**\r\n * Format log message\r\n */\r\n private format(level: string, message: string, _data?: any): string[] {\r\n const parts: string[] = [];\r\n\r\n if (this.config.prefix) {\r\n parts.push(this.config.prefix);\r\n }\r\n\r\n if (this.config.includeTimestamp) {\r\n const timestamp = new Date().toISOString();\r\n parts.push(`[${timestamp}]`);\r\n }\r\n\r\n parts.push(`[${level.toUpperCase()}]`);\r\n parts.push(message);\r\n\r\n return parts;\r\n }\r\n\r\n /**\r\n * Log debug message\r\n */\r\n public debug(message: string, data?: any): void {\r\n if (!this.shouldLog(LogLevel.DEBUG)) return;\r\n\r\n const formatted = this.format('debug', message, data);\r\n if (data !== undefined) {\r\n console.debug(...formatted, data);\r\n } else {\r\n console.debug(...formatted);\r\n }\r\n }\r\n\r\n /**\r\n * Log info message\r\n */\r\n public info(message: string, data?: any): void {\r\n if (!this.shouldLog(LogLevel.INFO)) return;\r\n\r\n const formatted = this.format('info', message, data);\r\n if (data !== undefined) {\r\n console.info(...formatted, data);\r\n } else {\r\n console.info(...formatted);\r\n }\r\n }\r\n\r\n /**\r\n * Log warning message\r\n */\r\n public warn(message: string, data?: any): void {\r\n if (!this.shouldLog(LogLevel.WARN)) return;\r\n\r\n const formatted = this.format('warn', message, data);\r\n if (data !== undefined) {\r\n console.warn(...formatted, data);\r\n } else {\r\n console.warn(...formatted);\r\n }\r\n }\r\n\r\n /**\r\n * Log error message\r\n */\r\n public error(message: string, error?: Error | any): void {\r\n if (!this.shouldLog(LogLevel.ERROR)) return;\r\n\r\n const formatted = this.format('error', message);\r\n if (error !== undefined) {\r\n if (error instanceof Error) {\r\n console.error(...formatted, error.message, error.stack);\r\n } else {\r\n console.error(...formatted, error);\r\n }\r\n } else {\r\n console.error(...formatted);\r\n }\r\n }\r\n\r\n /**\r\n * Create child logger with prefix\r\n */\r\n public child(prefix: string): Logger {\r\n return new Logger({\r\n ...this.config,\r\n prefix: `${this.config.prefix} ${prefix}`,\r\n });\r\n }\r\n\r\n /**\r\n * Update log level at runtime\r\n */\r\n public setLevel(level: 'debug' | 'info' | 'warn' | 'error'): void {\r\n this.config.level = level;\r\n this.level = this.getLevelFromString(level);\r\n }\r\n\r\n /**\r\n * Enable/disable logging\r\n */\r\n public setEnabled(enabled: boolean): void {\r\n this.config.enabled = enabled;\r\n }\r\n}\r\n\r\n/**\r\n * Default logger instance\r\n */\r\nexport const defaultLogger = new Logger({\r\n enabled: true,\r\n level: 'warn',\r\n prefix: '[Weld]',\r\n includeTimestamp: true,\r\n});\r\n","/**\r\n * Weld SDK - Iframe Manager\r\n * Manages creation, lifecycle, and communication with multiple iframes\r\n */\r\n\r\nimport type { ResolvedConfig, DeviceInfo } from '../types/config';\r\nimport { Logger } from '../utils/logger';\r\n\r\n/**\r\n * Iframe types\r\n */\r\nexport enum IframeType {\r\n LAUNCHER = 'launcher',\r\n WIDGET = 'widget',\r\n BACKDROP = 'backdrop',\r\n}\r\n\r\n/**\r\n * Iframe metadata\r\n */\r\nexport interface IframeMetadata {\r\n type: IframeType;\r\n element: HTMLIFrameElement;\r\n container: HTMLDivElement;\r\n ready: boolean;\r\n visible: boolean;\r\n createdAt: number;\r\n}\r\n\r\n/**\r\n * Device detection result\r\n */\r\nfunction detectDevice(): DeviceInfo {\r\n const width = window.innerWidth;\r\n const height = window.innerHeight;\r\n const userAgent = navigator.userAgent;\r\n\r\n const isMobile = width < 768;\r\n const isTablet = width >= 768 && width <= 1024;\r\n const isDesktop = width > 1024;\r\n const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n\r\n return {\r\n type: isMobile ? 'mobile' : isTablet ? 'tablet' : 'desktop',\r\n isMobile,\r\n isTablet,\r\n isDesktop,\r\n isTouchDevice,\r\n screenWidth: width,\r\n screenHeight: height,\r\n orientation: width > height ? 'landscape' : 'portrait',\r\n userAgent,\r\n };\r\n}\r\n\r\n/**\r\n * IframeManager class\r\n * Orchestrates multiple iframes for the widget system\r\n */\r\nexport class IframeManager {\r\n private config: ResolvedConfig;\r\n private logger: Logger;\r\n private iframes: Map<IframeType, IframeMetadata> = new Map();\r\n private rootContainer: HTMLDivElement | null = null;\r\n private appContainer: HTMLDivElement | null = null;\r\n private modalContainer: HTMLDivElement | null = null;\r\n private deviceInfo: DeviceInfo;\r\n private styleElement: HTMLStyleElement | null = null;\r\n\r\n constructor(config: ResolvedConfig) {\r\n this.config = config;\r\n this.logger = new Logger(config.logging);\r\n this.deviceInfo = detectDevice();\r\n\r\n this.logger.info('IframeManager initialized', {\r\n device: this.deviceInfo.type,\r\n mobile: this.deviceInfo.isMobile,\r\n });\r\n }\r\n\r\n /**\r\n * Initialize all containers and iframes\r\n */\r\n public async init(): Promise<void> {\r\n this.logger.debug('Initializing iframe manager');\r\n\r\n try {\r\n // Create root container structure\r\n this.createRootContainer();\r\n\r\n // Inject CSS\r\n this.injectCSS();\r\n\r\n // Create iframes\r\n await this.createLauncherIframe();\r\n await this.createBackdropIframe();\r\n await this.createWidgetIframe();\r\n\r\n // Setup event listeners\r\n this.setupEventListeners();\r\n\r\n this.logger.info('IframeManager initialized successfully');\r\n } catch (error) {\r\n this.logger.error('Failed to initialize IframeManager', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Create root container structure\r\n */\r\n private createRootContainer(): void {\r\n // Check if already exists\r\n let existingContainer = document.getElementById('weld-container');\r\n if (existingContainer) {\r\n this.logger.warn('Weld container already exists, removing old instance');\r\n existingContainer.remove();\r\n }\r\n\r\n // Create root container\r\n this.rootContainer = document.createElement('div');\r\n this.rootContainer.id = 'weld-container';\r\n this.rootContainer.className = 'weld-namespace';\r\n\r\n // Create app container\r\n this.appContainer = document.createElement('div');\r\n this.appContainer.className = 'weld-app';\r\n this.appContainer.setAttribute('aria-live', 'polite');\r\n this.appContainer.setAttribute('role', 'complementary');\r\n this.appContainer.setAttribute('aria-label', 'Weld Helpdesk Widget');\r\n\r\n // Create modal container\r\n this.modalContainer = document.createElement('div');\r\n this.modalContainer.id = 'weld-modal-container';\r\n\r\n // Assemble structure\r\n this.rootContainer.appendChild(this.appContainer);\r\n this.rootContainer.appendChild(this.modalContainer);\r\n document.body.appendChild(this.rootContainer);\r\n\r\n this.logger.debug('Root container created');\r\n }\r\n\r\n /**\r\n * Inject CSS into the page\r\n */\r\n private injectCSS(): void {\r\n // Remove existing style if present\r\n const existingStyle = document.getElementById('weld-styles');\r\n if (existingStyle) {\r\n existingStyle.remove();\r\n }\r\n\r\n this.styleElement = document.createElement('style');\r\n this.styleElement.id = 'weld-styles';\r\n this.styleElement.textContent = this.generateCSS();\r\n document.head.appendChild(this.styleElement);\r\n\r\n this.logger.debug('CSS injected');\r\n }\r\n\r\n /**\r\n * Generate CSS for containers\r\n */\r\n private generateCSS(): string {\r\n const { customization } = this.config;\r\n\r\n return `\r\n /* Weld Container */\r\n #weld-container {\r\n --weld-color-primary: ${customization.primaryColor};\r\n --weld-color-accent: ${customization.accentColor};\r\n --weld-font-family: ${customization.fontFamily};\r\n --weld-font-size-base: ${customization.fontSize};\r\n --weld-radius-xl: ${customization.borderRadius};\r\n }\r\n\r\n /* Import main stylesheet */\r\n @import url('/styles/index.css');\r\n\r\n /* Prevent page scroll when mobile widget is open */\r\n body.weld-mobile-open {\r\n overflow: hidden !important;\r\n position: fixed !important;\r\n width: 100% !important;\r\n height: 100% !important;\r\n }\r\n\r\n /* High contrast mode support */\r\n @media (prefers-contrast: high) {\r\n .weld-namespace {\r\n --weld-color-border: currentColor;\r\n }\r\n }\r\n `;\r\n }\r\n\r\n /**\r\n * Create launcher iframe\r\n */\r\n private async createLauncherIframe(): Promise<void> {\r\n const { iframes } = this.config;\r\n const { launcher } = iframes;\r\n\r\n // Create container\r\n const container = document.createElement('div');\r\n container.className = 'weld-launcher-frame';\r\n container.setAttribute('data-state', 'visible');\r\n container.style.cssText = `\r\n position: fixed;\r\n bottom: ${launcher.position.bottom};\r\n right: ${launcher.position.right};\r\n width: ${launcher.size};\r\n height: ${launcher.size};\r\n z-index: 2147483003;\r\n pointer-events: auto;\r\n display: block;\r\n `;\r\n\r\n // Create iframe\r\n const iframe = document.createElement('iframe');\r\n iframe.name = launcher.name;\r\n iframe.title = 'Weld Launcher';\r\n iframe.src = this.buildIframeUrl(launcher.url);\r\n iframe.style.cssText = `\r\n width: 100%;\r\n height: 100%;\r\n border: none;\r\n background: transparent;\r\n display: block;\r\n `;\r\n iframe.setAttribute('allow', 'clipboard-write');\r\n iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-forms allow-popups');\r\n\r\n container.appendChild(iframe);\r\n this.appContainer?.appendChild(container);\r\n\r\n // Store metadata\r\n this.iframes.set(IframeType.LAUNCHER, {\r\n type: IframeType.LAUNCHER,\r\n element: iframe,\r\n container,\r\n ready: false,\r\n visible: true,\r\n createdAt: Date.now(),\r\n });\r\n\r\n // Mark as ready when loaded\r\n iframe.onload = () => {\r\n const metadata = this.iframes.get(IframeType.LAUNCHER);\r\n if (metadata) {\r\n metadata.ready = true;\r\n this.logger.debug('Launcher iframe loaded and ready');\r\n }\r\n };\r\n\r\n this.logger.debug('Launcher iframe created');\r\n }\r\n\r\n /**\r\n * Create widget iframe\r\n */\r\n private async createWidgetIframe(): Promise<void> {\r\n const { iframes } = this.config;\r\n const { widget } = iframes;\r\n\r\n // Create container\r\n const container = document.createElement('div');\r\n container.className = 'weld-widget-frame';\r\n container.setAttribute('data-state', 'closed');\r\n container.style.cssText = `\r\n position: fixed;\r\n bottom: ${widget.position.bottom};\r\n right: ${widget.position.right};\r\n width: ${widget.width};\r\n height: ${widget.height};\r\n max-width: 100vw;\r\n z-index: 2147483001;\r\n pointer-events: none;\r\n display: none;\r\n border-radius: 16px;\r\n overflow: hidden;\r\n background: transparent;\r\n `;\r\n\r\n // Create iframe\r\n const iframe = document.createElement('iframe');\r\n iframe.name = widget.name;\r\n iframe.title = 'Weld Widget';\r\n iframe.src = this.buildIframeUrl(widget.url);\r\n iframe.style.cssText = `\r\n width: 100%;\r\n height: 100%;\r\n border: none;\r\n background: transparent;\r\n display: block;\r\n border-radius: 16px;\r\n `;\r\n iframe.setAttribute('allow', 'clipboard-write; camera; microphone');\r\n iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-forms allow-popups allow-downloads');\r\n\r\n container.appendChild(iframe);\r\n this.appContainer?.appendChild(container);\r\n\r\n // Store metadata\r\n this.iframes.set(IframeType.WIDGET, {\r\n type: IframeType.WIDGET,\r\n element: iframe,\r\n container,\r\n ready: false,\r\n visible: false,\r\n createdAt: Date.now(),\r\n });\r\n\r\n // Mark as ready when loaded\r\n iframe.onload = () => {\r\n const metadata = this.iframes.get(IframeType.WIDGET);\r\n if (metadata) {\r\n metadata.ready = true;\r\n this.logger.debug('Widget iframe loaded and ready');\r\n }\r\n };\r\n\r\n this.logger.debug('Widget iframe created');\r\n }\r\n\r\n /**\r\n * Create backdrop iframe\r\n */\r\n private async createBackdropIframe(): Promise<void> {\r\n if (!this.config.iframes.backdrop?.enabled) {\r\n this.logger.debug('Backdrop disabled, skipping creation');\r\n return;\r\n }\r\n\r\n // Create container\r\n const container = document.createElement('div');\r\n container.className = 'weld-backdrop-frame';\r\n container.setAttribute('data-state', 'hidden');\r\n container.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 2147483000;\r\n background: transparent;\r\n pointer-events: none;\r\n opacity: 0;\r\n transition: opacity 200ms ease;\r\n `;\r\n\r\n this.appContainer?.appendChild(container);\r\n\r\n // Store metadata (backdrop doesn't have an iframe, just a div)\r\n // We'll create a minimal \"iframe\" reference for consistency\r\n const dummyIframe = document.createElement('iframe');\r\n dummyIframe.style.display = 'none';\r\n\r\n this.iframes.set(IframeType.BACKDROP, {\r\n type: IframeType.BACKDROP,\r\n element: dummyIframe,\r\n container,\r\n ready: true, // Backdrop is always ready\r\n visible: false,\r\n createdAt: Date.now(),\r\n });\r\n\r\n this.logger.debug('Backdrop created');\r\n }\r\n\r\n /**\r\n * Build iframe URL with parameters\r\n */\r\n private buildIframeUrl(path: string): string {\r\n const { widgetId, api } = this.config;\r\n const baseUrl = api.baseUrl;\r\n\r\n // Handle paths that may already have query parameters\r\n const url = new URL(path, baseUrl);\r\n url.searchParams.set('widgetId', widgetId);\r\n url.searchParams.set('device', this.deviceInfo.type);\r\n url.searchParams.set('mobile', String(this.deviceInfo.isMobile));\r\n url.searchParams.set('parentOrigin', window.location.origin);\r\n\r\n return url.toString();\r\n }\r\n\r\n /**\r\n * Setup event listeners\r\n */\r\n private setupEventListeners(): void {\r\n // Window resize\r\n window.addEventListener('resize', this.handleResize.bind(this));\r\n\r\n // Orientation change\r\n window.addEventListener('orientationchange', this.handleOrientationChange.bind(this));\r\n\r\n this.logger.debug('Event listeners setup');\r\n }\r\n\r\n /**\r\n * Handle window resize\r\n */\r\n private handleResize(): void {\r\n this.deviceInfo = detectDevice();\r\n this.logger.debug('Window resized', { device: this.deviceInfo.type });\r\n }\r\n\r\n /**\r\n * Handle orientation change\r\n */\r\n private handleOrientationChange(): void {\r\n this.deviceInfo = detectDevice();\r\n this.logger.debug('Orientation changed', { orientation: this.deviceInfo.orientation });\r\n }\r\n\r\n /**\r\n * Get iframe by type\r\n */\r\n public getIframe(type: IframeType): IframeMetadata | undefined {\r\n return this.iframes.get(type);\r\n }\r\n\r\n /**\r\n * Get iframe element\r\n */\r\n public getIframeElement(type: IframeType): HTMLIFrameElement | undefined {\r\n return this.iframes.get(type)?.element;\r\n }\r\n\r\n /**\r\n * Get iframe container\r\n */\r\n public getIframeContainer(type: IframeType): HTMLDivElement | undefined {\r\n return this.iframes.get(type)?.container;\r\n }\r\n\r\n /**\r\n * Mark iframe as ready\r\n */\r\n public setIframeReady(type: IframeType): void {\r\n const iframe = this.iframes.get(type);\r\n if (iframe) {\r\n iframe.ready = true;\r\n this.logger.debug(`Iframe ${type} marked as ready`);\r\n }\r\n }\r\n\r\n /**\r\n * Check if all iframes are ready\r\n */\r\n public areAllIframesReady(): boolean {\r\n for (const [type, iframe] of this.iframes) {\r\n if (type !== IframeType.BACKDROP && !iframe.ready) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Show iframe\r\n */\r\n public showIframe(type: IframeType): void {\r\n const iframe = this.iframes.get(type);\r\n if (!iframe) {\r\n console.warn(`[Weld SDK] showIframe: iframe ${type} not found`);\r\n return;\r\n }\r\n\r\n console.log(`[Weld SDK] Showing iframe ${type}`, { currentDisplay: iframe.container.style.display });\r\n\r\n iframe.visible = true;\r\n iframe.container.setAttribute('data-state', type === IframeType.BACKDROP ? 'visible' : 'open');\r\n iframe.container.style.pointerEvents = 'auto';\r\n iframe.container.style.display = 'block';\r\n\r\n // Handle mobile scroll lock\r\n if (this.deviceInfo.isMobile && type === IframeType.WIDGET && this.config.mobile.scrollLock) {\r\n document.body.classList.add('weld-mobile-open');\r\n }\r\n\r\n console.log(`[Weld SDK] Iframe ${type} shown`, { newDisplay: iframe.container.style.display });\r\n }\r\n\r\n /**\r\n * Hide iframe\r\n */\r\n public hideIframe(type: IframeType): void {\r\n const iframe = this.iframes.get(type);\r\n if (!iframe) {\r\n console.warn(`[Weld SDK] hideIframe: iframe ${type} not found`);\r\n return;\r\n }\r\n\r\n console.log(`[Weld SDK] Hiding iframe ${type}`, { currentDisplay: iframe.container.style.display });\r\n\r\n iframe.visible = false;\r\n iframe.container.setAttribute('data-state', type === IframeType.BACKDROP ? 'hidden' : 'closed');\r\n iframe.container.style.pointerEvents = 'none';\r\n iframe.container.style.display = 'none';\r\n\r\n // Remove mobile scroll lock\r\n if (this.deviceInfo.isMobile && type === IframeType.WIDGET) {\r\n document.body.classList.remove('weld-mobile-open');\r\n }\r\n\r\n console.log(`[Weld SDK] Iframe ${type} hidden`, { newDisplay: iframe.container.style.display });\r\n }\r\n\r\n /**\r\n * Get device info\r\n */\r\n public getDeviceInfo(): DeviceInfo {\r\n return this.deviceInfo;\r\n }\r\n\r\n /**\r\n * Get modal container\r\n */\r\n public getModalContainer(): HTMLDivElement | null {\r\n return this.modalContainer;\r\n }\r\n\r\n /**\r\n * Destroy all iframes and cleanup\r\n */\r\n public destroy(): void {\r\n this.logger.debug('Destroying iframe manager');\r\n\r\n // Remove event listeners\r\n window.removeEventListener('resize', this.handleResize.bind(this));\r\n window.removeEventListener('orientationchange', this.handleOrientationChange.bind(this));\r\n\r\n // Remove mobile scroll lock\r\n document.body.classList.remove('weld-mobile-open');\r\n\r\n // Remove root container\r\n if (this.rootContainer) {\r\n this.rootContainer.remove();\r\n this.rootContainer = null;\r\n }\r\n\r\n // Remove style element\r\n if (this.styleElement) {\r\n this.styleElement.remove();\r\n this.styleElement = null;\r\n }\r\n\r\n // Clear iframe references\r\n this.iframes.clear();\r\n\r\n this.logger.info('IframeManager destroyed');\r\n }\r\n}\r\n","/**\r\n * Weld SDK - Message Types\r\n * Type definitions for postMessage communication between parent and iframes\r\n */\r\n\r\n/**\r\n * Message origins for validation\r\n */\r\nexport enum MessageOrigin {\r\n LAUNCHER = 'launcher',\r\n WIDGET = 'widget',\r\n PARENT = 'parent',\r\n BACKDROP = 'backdrop',\r\n}\r\n\r\n/**\r\n * Message types for different communication patterns\r\n */\r\nexport enum MessageType {\r\n // Lifecycle\r\n READY = 'weld:ready',\r\n INIT = 'weld:init',\r\n DESTROY = 'weld:destroy',\r\n\r\n // State changes\r\n STATE_UPDATE = 'weld:state:update',\r\n STATE_REQUEST = 'weld:state:request',\r\n STATE_RESPONSE = 'weld:state:response',\r\n\r\n // Widget control\r\n WIDGET_OPEN = 'weld:widget:open',\r\n WIDGET_CLOSE = 'weld:widget:close',\r\n WIDGET_TOGGLE = 'weld:widget:toggle',\r\n WIDGET_MINIMIZE = 'weld:widget:minimize',\r\n WIDGET_MAXIMIZE = 'weld:widget:maximize',\r\n\r\n // Launcher control\r\n LAUNCHER_SHOW = 'weld:launcher:show',\r\n LAUNCHER_HIDE = 'weld:launcher:hide',\r\n LAUNCHER_UPDATE = 'weld:launcher:update',\r\n\r\n // Backdrop control\r\n BACKDROP_SHOW = 'weld:backdrop:show',\r\n BACKDROP_HIDE = 'weld:backdrop:hide',\r\n BACKDROP_CLICK = 'weld:backdrop:click',\r\n\r\n // User interactions\r\n MESSAGE_SEND = 'weld:message:send',\r\n MESSAGE_RECEIVE = 'weld:message:receive',\r\n TYPING_START = 'weld:typing:start',\r\n TYPING_STOP = 'weld:typing:stop',\r\n\r\n // Badge updates\r\n BADGE_UPDATE = 'weld:badge:update',\r\n BADGE_CLEAR = 'weld:badge:clear',\r\n\r\n // Mobile handling\r\n MOBILE_SCROLL_LOCK = 'weld:mobile:scroll:lock',\r\n MOBILE_SCROLL_UNLOCK = 'weld:mobile:scroll:unlock',\r\n\r\n // Configuration\r\n CONFIG_UPDATE = 'weld:config:update',\r\n THEME_UPDATE = 'weld:theme:update',\r\n LOCALE_UPDATE = 'weld:locale:update',\r\n\r\n // Authentication\r\n AUTH_LOGIN = 'weld:auth:login',\r\n AUTH_LOGOUT = 'weld:auth:logout',\r\n AUTH_TOKEN_UPDATE = 'weld:auth:token:update',\r\n\r\n // Events\r\n EVENT_TRACK = 'weld:event:track',\r\n ERROR_REPORT = 'weld:error:report',\r\n\r\n // API responses\r\n API_SUCCESS = 'weld:api:success',\r\n API_ERROR = 'weld:api:error',\r\n}\r\n\r\n/**\r\n * Base message structure\r\n */\r\nexport interface BaseMessage {\r\n type: MessageType;\r\n origin: MessageOrigin;\r\n timestamp: number;\r\n id: string;\r\n}\r\n\r\n/**\r\n * Message with payload\r\n */\r\nexport interface PayloadMessage<T = any> extends BaseMessage {\r\n payload: T;\r\n}\r\n\r\n/**\r\n * State update payload\r\n */\r\nexport interface StateUpdatePayload {\r\n path: string;\r\n value: any;\r\n merge?: boolean;\r\n}\r\n\r\n/**\r\n * Widget state payload\r\n */\r\nexport interface WidgetStatePayload {\r\n isOpen: boolean;\r\n isMinimized: boolean;\r\n view?: string;\r\n data?: any;\r\n}\r\n\r\n/**\r\n * Launcher state payload\r\n */\r\nexport interface LauncherStatePayload {\r\n isVisible: boolean;\r\n badgeCount?: number;\r\n badgeText?: string;\r\n customColor?: string;\r\n}\r\n\r\n/**\r\n * Backdrop state payload\r\n */\r\nexport interface BackdropStatePayload {\r\n isVisible: boolean;\r\n onClick?: 'close' | 'ignore';\r\n}\r\n\r\n/**\r\n * Message data payload\r\n */\r\nexport interface MessageDataPayload {\r\n id: string;\r\n text: string;\r\n sender: 'user' | 'agent' | 'bot';\r\n timestamp: number;\r\n attachments?: Array<{\r\n type: string;\r\n url: string;\r\n name?: string;\r\n }>;\r\n}\r\n\r\n/**\r\n * Configuration update payload\r\n */\r\nexport interface ConfigUpdatePayload {\r\n apiKey?: string;\r\n workspaceId?: string;\r\n position?: {\r\n launcher?: { bottom: string; right: string };\r\n widget?: { bottom: string; right: string };\r\n };\r\n customization?: {\r\n primaryColor?: string;\r\n accentColor?: string;\r\n fontFamily?: string;\r\n };\r\n features?: {\r\n attachments?: boolean;\r\n reactions?: boolean;\r\n typing?: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Theme update payload\r\n */\r\nexport interface ThemeUpdatePayload {\r\n mode: 'light' | 'dark' | 'auto';\r\n primaryColor?: string;\r\n accentColor?: string;\r\n customCSS?: string;\r\n}\r\n\r\n/**\r\n * Authentication payload\r\n */\r\nexport interface AuthPayload {\r\n userId?: string;\r\n email?: string;\r\n name?: string;\r\n avatar?: string;\r\n metadata?: Record<string, any>;\r\n token?: string;\r\n}\r\n\r\n/**\r\n * Error payload\r\n */\r\nexport interface ErrorPayload {\r\n code: string;\r\n message: string;\r\n stack?: string;\r\n context?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Event tracking payload\r\n */\r\nexport interface EventPayload {\r\n name: string;\r\n properties?: Record<string, any>;\r\n timestamp: number;\r\n}\r\n\r\n/**\r\n * Type guards\r\n */\r\nexport function isBaseMessage(message: any): message is BaseMessage {\r\n return (\r\n typeof message === 'object' &&\r\n message !== null &&\r\n 'type' in message &&\r\n 'origin' in message &&\r\n 'timestamp' in message &&\r\n 'id' in message\r\n );\r\n}\r\n\r\nexport function isPayloadMessage<T = any>(\r\n message: any\r\n): message is PayloadMessage<T> {\r\n return isBaseMessage(message) && 'payload' in message;\r\n}\r\n\r\n/**\r\n * Message creator utilities\r\n */\r\nexport function createMessage(\r\n type: MessageType,\r\n origin: MessageOrigin,\r\n payload?: any\r\n): PayloadMessage {\r\n return {\r\n type,\r\n origin,\r\n timestamp: Date.now(),\r\n id: `${type}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\r\n payload,\r\n };\r\n}\r\n\r\n/**\r\n * Specific message type definitions\r\n */\r\nexport type ReadyMessage = PayloadMessage<{ iframe: string; ready: true }>;\r\nexport type StateUpdateMessage = PayloadMessage<StateUpdatePayload>;\r\nexport type WidgetStateMessage = PayloadMessage<WidgetStatePayload>;\r\nexport type LauncherStateMessage = PayloadMessage<LauncherStatePayload>;\r\nexport type BackdropStateMessage = PayloadMessage<BackdropStatePayload>;\r\nexport type MessageDataMessage = PayloadMessage<MessageDataPayload>;\r\nexport type ConfigUpdateMessage = PayloadMessage<ConfigUpdatePayload>;\r\nexport type ThemeUpdateMessage = PayloadMessage<ThemeUpdatePayload>;\r\nexport type AuthMessage = PayloadMessage<AuthPayload>;\r\nexport type ErrorMessage = PayloadMessage<ErrorPayload>;\r\nexport type EventMessage = PayloadMessage<EventPayload>;\r\n\r\n/**\r\n * Union type for all messages\r\n */\r\nexport type WeldMessage =\r\n | BaseMessage\r\n | ReadyMessage\r\n | StateUpdateMessage\r\n | WidgetStateMessage\r\n | LauncherStateMessage\r\n | BackdropStateMessage\r\n | MessageDataMessage\r\n | ConfigUpdateMessage\r\n | ThemeUpdateMessage\r\n | AuthMessage\r\n | ErrorMessage\r\n | EventMessage;\r\n","/**\r\n * Weld SDK - Security Utilities\r\n * Security validation and origin checking for postMessage communication\r\n */\r\n\r\nimport type { SecurityConfig } from '../types/config';\r\nimport { Logger } from './logger';\r\n\r\n/**\r\n * SecurityManager class\r\n */\r\nexport class SecurityManager {\r\n private config: SecurityConfig;\r\n private logger: Logger;\r\n private allowedOrigins: Set<string>;\r\n\r\n constructor(config: SecurityConfig, logger: Logger) {\r\n this.config = config;\r\n this.logger = logger;\r\n this.allowedOrigins = new Set(config.allowedOrigins || []);\r\n\r\n // Always allow same origin\r\n this.allowedOrigins.add(window.location.origin);\r\n }\r\n\r\n /**\r\n * Validate message origin\r\n */\r\n public isOriginAllowed(origin: string): boolean {\r\n // If no allowed origins specified, only allow same origin\r\n if (this.config.allowedOrigins?.length === 0) {\r\n return origin === window.location.origin;\r\n }\r\n\r\n // Check if origin is in allowed list\r\n if (this.allowedOrigins.has(origin)) {\r\n return true;\r\n }\r\n\r\n // Check for wildcard patterns\r\n for (const allowed of this.allowedOrigins) {\r\n if (this.matchesPattern(origin, allowed)) {\r\n return true;\r\n }\r\n }\r\n\r\n this.logger.warn('Origin not allowed', { origin });\r\n return false;\r\n }\r\n\r\n /**\r\n * Match origin against pattern (supports wildcards)\r\n */\r\n private matchesPattern(origin: string, pattern: string): boolean {\r\n // Exact match\r\n if (origin === pattern) {\r\n return true;\r\n }\r\n\r\n // Wildcard pattern (e.g., \"https://*.example.com\")\r\n if (pattern.includes('*')) {\r\n const regex = new RegExp(\r\n '^' + pattern.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*') + '$'\r\n );\r\n return regex.test(origin);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Validate postMessage event\r\n */\r\n public validateMessageEvent(event: MessageEvent): boolean {\r\n // Check origin\r\n if (!this.isOriginAllowed(event.origin)) {\r\n this.logger.warn('Invalid message origin', { origin: event.origin });\r\n return false;\r\n }\r\n\r\n // Check if message has data\r\n if (!event.data) {\r\n this.logger.warn('Message has no data');\r\n return false;\r\n }\r\n\r\n // Check if message is an object\r\n if (typeof event.data !== 'object') {\r\n this.logger.warn('Message data is not an object');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Sanitize message data\r\n */\r\n public sanitizeMessageData(data: any): any {\r\n if (!this.config.sanitizeInput) {\r\n return data;\r\n }\r\n\r\n // Deep clone to avoid modifying original\r\n const sanitized = JSON.parse(JSON.stringify(data));\r\n\r\n // Recursively sanitize strings\r\n this.sanitizeObject(sanitized);\r\n\r\n return sanitized;\r\n }\r\n\r\n /**\r\n * Recursively sanitize object properties\r\n */\r\n private sanitizeObject(obj: any): void {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return;\r\n }\r\n\r\n for (const key in obj) {\r\n if (typeof obj[key] === 'string') {\r\n obj[key] = this.sanitizeString(obj[key]);\r\n } else if (typeof obj[key] === 'object') {\r\n this.sanitizeObject(obj[key]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sanitize string to prevent XSS\r\n */\r\n private sanitizeString(str: string): string {\r\n const div = document.createElement('div');\r\n div.textContent = str;\r\n return div.innerHTML\r\n .replace(/javascript:/gi, '')\r\n .replace(/on\\w+\\s*=/gi, '');\r\n }\r\n\r\n /**\r\n * Generate secure random ID\r\n */\r\n public generateSecureId(): string {\r\n const array = new Uint8Array(16);\r\n crypto.getRandomValues(array);\r\n return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');\r\n }\r\n\r\n /**\r\n * Validate iframe source\r\n */\r\n public isValidIframeSource(src: string): boolean {\r\n try {\r\n const url = new URL(src, window.location.origin);\r\n\r\n // Check if URL is from allowed origin\r\n if (!this.isOriginAllowed(url.origin)) {\r\n this.logger.warn('Invalid iframe source origin', { src });\r\n return false;\r\n }\r\n\r\n // Prevent javascript: protocol\r\n if (url.protocol === 'javascript:') {\r\n this.logger.warn('Javascript protocol not allowed in iframe source');\r\n return false;\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n this.logger.warn('Invalid iframe source URL', { src, error });\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Create Content Security Policy\r\n */\r\n public createCSP(): string {\r\n const origins = Array.from(this.allowedOrigins).join(' ');\r\n\r\n return [\r\n `default-src 'self' ${origins}`,\r\n `script-src 'self' 'unsafe-inline' ${origins}`,\r\n `style-src 'self' 'unsafe-inline' ${origins}`,\r\n `img-src 'self' data: https: ${origins}`,\r\n `font-src 'self' data: ${origins}`,\r\n `connect-src 'self' ${origins}`,\r\n `frame-src 'self' ${origins}`,\r\n `media-src 'self' ${origins}`,\r\n ].join('; ');\r\n }\r\n\r\n /**\r\n * Add allowed origin\r\n */\r\n public addAllowedOrigin(origin: string): void {\r\n this.allowedOrigins.add(origin);\r\n this.logger.debug('Added allowed origin', { origin });\r\n }\r\n\r\n /**\r\n * Remove allowed origin\r\n */\r\n public removeAllowedOrigin(origin: string): void {\r\n this.allowedOrigins.delete(origin);\r\n this.logger.debug('Removed allowed origin', { origin });\r\n }\r\n\r\n /**\r\n * Get all allowed origins\r\n */\r\n public getAllowedOrigins(): string[] {\r\n return Array.from(this.allowedOrigins);\r\n }\r\n}\r\n\r\n/**\r\n * Rate limiting utility\r\n */\r\nexport class RateLimiter {\r\n private requests: Map<string, number[]> = new Map();\r\n private maxRequests: number;\r\n private windowMs: number;\r\n\r\n constructor(maxRequests: number = 100, windowMs: number = 60000) {\r\n this.maxRequests = maxRequests;\r\n this.windowMs = windowMs;\r\n }\r\n\r\n /**\r\n * Check if request is allowed\r\n */\r\n public isAllowed(key: string): boolean {\r\n const now = Date.now();\r\n const requests = this.requests.get(key) || [];\r\n\r\n // Remove old requests outside window\r\n const validRequests = requests.filter((time) => now - time < this.windowMs);\r\n\r\n // Check if limit exceeded\r\n if (validRequests.length >= this.maxRequests) {\r\n return false;\r\n }\r\n\r\n // Add current request\r\n validRequests.push(now);\r\n this.requests.set(key, validRequests);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Reset rate limit for key\r\n */\r\n public reset(key: string): void {\r\n this.requests.delete(key);\r\n }\r\n\r\n /**\r\n * Clear all rate limits\r\n */\r\n public clearAll(): void {\r\n this.requests.clear();\r\n }\r\n}\r\n\r\n/**\r\n * Token validation utilities\r\n */\r\nexport class TokenValidator {\r\n private static readonly TOKEN_PATTERN = /^[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_=]+\\.?[A-Za-z0-9-_.+/=]*$/;\r\n\r\n /**\r\n * Check if string looks like a JWT token\r\n */\r\n public static isJWT(token: string): boolean {\r\n return this.TOKEN_PATTERN.test(token);\r\n }\r\n\r\n /**\r\n * Decode JWT payload (without verification)\r\n */\r\n public static decodeJWT(token: string): any | null {\r\n try {\r\n const parts = token.split('.');\r\n if (parts.length !== 3) {\r\n return null;\r\n }\r\n\r\n const payload = parts[1];\r\n const decoded = atob(payload.replace(/-/g, '+').replace(/_/g, '/'));\r\n return JSON.parse(decoded);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Check if JWT is expired\r\n */\r\n public static isExpired(token: string): boolean {\r\n const payload = this.decodeJWT(token);\r\n if (!payload || !payload.exp) {\r\n return true;\r\n }\r\n\r\n return Date.now() >= payload.exp * 1000;\r\n }\r\n}\r\n","/**\r\n * Weld SDK - Message Broker\r\n * Handles secure postMessage communication between parent and iframes\r\n */\r\n\r\nimport type {\r\n WeldMessage,\r\n MessageType,\r\n PayloadMessage,\r\n} from '../types/messages';\r\nimport {\r\n MessageOrigin,\r\n isBaseMessage,\r\n isPayloadMessage,\r\n createMessage,\r\n} from '../types/messages';\r\nimport type { ResolvedConfig } from '../types/config';\r\nimport { Logger } from '../utils/logger';\r\nimport { SecurityManager, RateLimiter } from '../utils/security';\r\nimport { IframeManager, IframeType } from './IframeManager';\r\n\r\n/**\r\n * Message handler callback\r\n */\r\nexport type MessageHandler<T = any> = (payload: T, message: PayloadMessage<T>) => void;\r\n\r\n/**\r\n * Message subscription\r\n */\r\ninterface MessageSubscription {\r\n id: string;\r\n type: MessageType | '*';\r\n origin?: MessageOrigin;\r\n handler: MessageHandler;\r\n}\r\n\r\n/**\r\n * MessageBroker class\r\n * Central hub for all postMessage communication\r\n */\r\nexport class MessageBroker {\r\n private config: ResolvedConfig;\r\n private logger: Logger;\r\n private security: SecurityManager;\r\n private iframeManager: IframeManager;\r\n private subscriptions: Map<string, MessageSubscription> = new Map();\r\n private messageQueue: PayloadMessage[] = [];\r\n private isReady = false;\r\n private rateLimiter: RateLimiter;\r\n private responseHandlers: Map<string, (message: WeldMessage) => void> = new Map();\r\n\r\n constructor(\r\n config: ResolvedConfig,\r\n iframeManager: IframeManager,\r\n logger: Logger\r\n ) {\r\n this.config = config;\r\n this.logger = logger.child('[MessageBroker]');\r\n this.iframeManager = iframeManager;\r\n this.security = new SecurityManager(config.security, this.logger);\r\n this.rateLimiter = new RateLimiter(100, 60000); // 100 messages per minute\r\n\r\n this.setupMessageListener();\r\n this.logger.debug('MessageBroker initialized');\r\n }\r\n\r\n /**\r\n * Setup global message listener\r\n */\r\n private setupMessageListener(): void {\r\n window.addEventListener('message', this.handleMessage.bind(this));\r\n this.logger.debug('Message listener setup');\r\n }\r\n\r\n /**\r\n * Handle incoming postMessage\r\n */\r\n private handleMessage(event: MessageEvent): void {\r\n // Validate message event\r\n if (!this.security.validateMessageEvent(event)) {\r\n return;\r\n }\r\n\r\n // Validate message structure\r\n if (!isBaseMessage(event.data)) {\r\n this.logger.warn('Invalid message structure', event.data);\r\n return;\r\n }\r\n\r\n const message = event.data as WeldMessage;\r\n\r\n // Rate limiting\r\n if (!this.rateLimiter.isAllowed(message.origin)) {\r\n this.logger.warn('Rate limit exceeded', { origin: message.origin });\r\n return;\r\n }\r\n\r\n // Sanitize message if enabled\r\n const sanitized = this.config.security.sanitizeInput\r\n ? this.security.sanitizeMessageData(message)\r\n : message;\r\n\r\n this.logger.debug('Message received', {\r\n type: sanitized.type,\r\n origin: sanitized.origin,\r\n id: sanitized.id,\r\n });\r\n\r\n // Check for response handlers\r\n if (this.responseHandlers.has(sanitized.id)) {\r\n const handler = this.responseHandlers.get(sanitized.id);\r\n handler?.(sanitized);\r\n this.responseHandlers.delete(sanitized.id);\r\n return;\r\n }\r\n\r\n // Dispatch to subscribers\r\n this.dispatchMessage(sanitized);\r\n }\r\n\r\n /**\r\n * Dispatch message to subscribers\r\n */\r\n private dispatchMessage(message: WeldMessage): void {\r\n const subscriptions = Array.from(this.subscriptions.values());\r\n\r\n for (const subscription of subscriptions) {\r\n // Check if type matches\r\n const typeMatches =\r\n subscription.type === '*' || subscription.type === message.type;\r\n\r\n // Check if origin matches (if specified)\r\n const originMatches =\r\n !subscription.origin || subscription.origin === message.origin;\r\n\r\n if (typeMatches && originMatches) {\r\n try {\r\n if (isPayloadMessage(message)) {\r\n subscription.handler(message.payload, message);\r\n } else {\r\n subscription.handler(undefined, message as unknown as PayloadMessage);\r\n }\r\n } catch (error) {\r\n this.logger.error('Error in message handler', error);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Subscribe to messages\r\n */\r\n public subscribe<T = any>(\r\n type: MessageType | '*',\r\n handler: MessageHandler<T>,\r\n origin?: MessageOrigin\r\n ): string {\r\n const id = this.security.generateSecureId();\r\n\r\n this.subscriptions.set(id, {\r\n id,\r\n type,\r\n origin,\r\n handler,\r\n });\r\n\r\n this.logger.debug('Subscribed to messages', { type, origin, id });\r\n return id;\r\n }\r\n\r\n /**\r\n * Unsubscribe from messages\r\n */\r\n public unsubscribe(subscriptionId: string): void {\r\n if (this.subscriptions.delete(subscriptionId)) {\r\n this.logger.debug('Unsubscribed from messages', { id: subscriptionId });\r\n }\r\n }\r\n\r\n /**\r\n * Send message to iframe\r\n */\r\n public sendToIframe(\r\n iframeType: IframeType,\r\n type: MessageType,\r\n payload?: any\r\n ): void {\r\n const iframe = this.iframeManager.getIframe(iframeType);\r\n\r\n if (!iframe) {\r\n this.logger.warn('Iframe not found', { iframeType });\r\n return;\r\n }\r\n\r\n if (!iframe.ready && type !== 'weld:init' as MessageType) {\r\n // Queue message if iframe not ready\r\n const message = createMessage(type, MessageOrigin.PARENT, payload);\r\n this.messageQueue.push(message);\r\n this.logger.debug('Message queued (iframe not ready)', {\r\n iframeType,\r\n type,\r\n });\r\n return;\r\n }\r\n\r\n const message = createMessage(type, MessageOrigin.PARENT, payload);\r\n this.postMessage(iframe.element, message);\r\n }\r\n\r\n /**\r\n * Send message to all iframes\r\n */\r\n public broadcast(type: MessageType, payload?: any): void {\r\n const message = createMessage(type, MessageOrigin.PARENT, payload);\r\n\r\n const launcherIframe = this.iframeManager.getIframe(IframeType.LAUNCHER);\r\n const widgetIframe = this.iframeManager.getIframe(IframeType.WIDGET);\r\n\r\n if (launcherIframe && launcherIframe.ready) {\r\n this.postMessage(launcherIframe.element, message);\r\n }\r\n if (widgetIframe && widgetIframe.ready) {\r\n this.postMessage(widgetIframe.element, message);\r\n }\r\n\r\n this.logger.debug('Message broadcast', { type });\r\n }\r\n\r\n /**\r\n * Send message and wait for response\r\n */\r\n public async sendAndWaitForResponse<T = any>(\r\n iframeType: IframeType,\r\n type: MessageType,\r\n payload?: any,\r\n timeout = 5000\r\n ): Promise<T> {\r\n return new Promise((resolve, reject) => {\r\n const message = createMessage(type, MessageOrigin.PARENT, payload);\r\n\r\n // Setup response handler\r\n const timeoutId = setTimeout(() => {\r\n this.responseHandlers.delete(message.id);\r\n reject(new Error('Message response timeout'));\r\n }, timeout);\r\n\r\n this.responseHandlers.set(message.id, (response: WeldMessage) => {\r\n clearTimeout(timeoutId);\r\n if (isPayloadMessage(response)) {\r\n resolve(response.payload as T);\r\n } else {\r\n resolve(undefined as T);\r\n }\r\n });\r\n\r\n // Send message\r\n const iframe = this.iframeManager.getIframe(iframeType);\r\n if (!iframe) {\r\n reject(new Error('Iframe not found'));\r\n return;\r\n }\r\n\r\n this.postMessage(iframe.element, message);\r\n });\r\n }\r\n\r\n /**\r\n * Post message to iframe\r\n */\r\n private postMessage(iframe: HTMLIFrameElement, message: WeldMessage): void {\r\n if (!iframe.contentWindow) {\r\n this.logger.warn('Iframe contentWindow not available');\r\n return;\r\n }\r\n\r\n try {\r\n iframe.contentWindow.postMessage(message, '*');\r\n this.logger.debug('Message sent', {\r\n type: message.type,\r\n id: message.id,\r\n });\r\n } catch (error) {\r\n this.logger.error('Failed to post message', error);\r\n }\r\n }\r\n\r\n /**\r\n * Mark iframe as ready and flush queued messages\r\n */\r\n public setIframeReady(iframeType: IframeType): void {\r\n this.iframeManager.setIframeReady(iframeType);\r\n\r\n // Flush queued messages for this iframe\r\n this.flushMessageQueue(iframeType);\r\n\r\n // Check if all iframes ready\r\n if (this.iframeManager.areAllIframesReady()) {\r\n this.isReady = true;\r\n this.logger.info('All iframes ready');\r\n }\r\n }\r\n\r\n /**\r\n * Flush queued messages to iframe\r\n */\r\n private flushMessageQueue(iframeType: IframeType): void {\r\n const iframe = this.iframeManager.getIframe(iframeType);\r\n if (!iframe) return;\r\n\r\n const queuedMessages = this.messageQueue.splice(0);\r\n\r\n for (const message of queuedMessages) {\r\n this.postMessage(iframe.element, message);\r\n }\r\n\r\n if (queuedMessages.length > 0) {\r\n this.logger.debug('Flushed queued messages', {\r\n count: queuedMessages.length,\r\n iframeType,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Check if broker is ready\r\n */\r\n public isMessageBrokerReady(): boolean {\r\n return this.isReady;\r\n }\r\n\r\n /**\r\n * Get queued message count\r\n */\r\n public getQueuedMessageCount(): number {\r\n return this.messageQueue.length;\r\n }\r\n\r\n /**\r\n * Clear message queue\r\n */\r\n public clearMessageQueue(): void {\r\n this.messageQueue = [];\r\n this.logger.debug('Message queue cleared');\r\n }\r\n\r\n /**\r\n * Get active subscription count\r\n */\r\n public getSubscriptionCount(): number {\r\n return this.subscriptions.size;\r\n }\r\n\r\n /**\r\n * Destroy broker and cleanup\r\n */\r\n public destroy(): void {\r\n this.logger.debug('Destroying message broker');\r\n\r\n // Remove event listener\r\n window.removeEventListener('message', this.handleMessage.bind(this));\r\n\r\n // Clear subscriptions\r\n this.subscriptions.clear();\r\n\r\n // Clear message queue\r\n this.messageQueue = [];\r\n\r\n // Clear response handlers\r\n this.responseHandlers.clear();\r\n\r\n // Reset rate limiter\r\n this.rateLimiter.clearAll();\r\n\r\n this.isReady = false;\r\n this.logger.info('MessageBroker destroyed');\r\n }\r\n}\r\n","/**\r\n * Weld SDK - State Types\r\n * Type definitions for state management across iframes\r\n */\r\n\r\n/**\r\n * Widget visibility state\r\n */\r\nexport enum WidgetVisibility {\r\n HIDDEN = 'hidden',\r\n VISIBLE = 'visible',\r\n MINIMIZED = 'minimized',\r\n}\r\n\r\n/**\r\n * Widget view types\r\n */\r\nexport enum WidgetView {\r\n HOME = 'home',\r\n CONVERSATION = 'conversation',\r\n CONVERSATIONS = 'conversations',\r\n HELP = 'help',\r\n SETTINGS = 'settings',\r\n SEARCH = 'search',\r\n}\r\n\r\n/**\r\n * Connection status\r\n */\r\nexport enum ConnectionStatus {\r\n DISCONNECTED = 'disconnected',\r\n CONNECTING = 'connecting',\r\n CONNECTED = 'connected',\r\n RECONNECTING = 'reconnecting',\r\n ERROR = 'error',\r\n}\r\n\r\n/**\r\n * Message status\r\n */\r\nexport enum MessageStatus {\r\n SENDING = 'sending',\r\n SENT = 'sent',\r\n DELIVERED = 'delivered',\r\n READ = 'read',\r\n FAILED = 'failed',\r\n}\r\n\r\n/**\r\n * User state\r\n */\r\nexport interface UserState {\r\n id?: string;\r\n email?: string;\r\n name?: string;\r\n avatar?: string;\r\n metadata?: Record<string, any>;\r\n isAuthenticated: boolean;\r\n isAnonymous: boolean;\r\n}\r\n\r\n/**\r\n * Conversation state\r\n */\r\nexport interface ConversationState {\r\n id?: string;\r\n messages: Message[];\r\n participants: Participant[];\r\n unreadCount: number;\r\n lastMessageAt?: number;\r\n isTyping: boolean;\r\n typingUsers: string[];\r\n}\r\n\r\n/**\r\n * Message interface\r\n */\r\nexport interface Message {\r\n id: string;\r\n conversationId: string;\r\n text: string;\r\n sender: {\r\n id: string;\r\n name: string;\r\n avatar?: string;\r\n type: 'user' | 'agent' | 'bot';\r\n };\r\n status: MessageStatus;\r\n timestamp: number;\r\n createdAt: number;\r\n updatedAt?: number;\r\n attachments?: Attachment[];\r\n reactions?: Reaction[];\r\n metadata?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Attachment interface\r\n */\r\nexport interface Attachment {\r\n id: string;\r\n type: 'image' | 'file' | 'video' | 'audio';\r\n url: string;\r\n name: string;\r\n size: number;\r\n mimeType: string;\r\n thumbnail?: string;\r\n}\r\n\r\n/**\r\n * Reaction interface\r\n */\r\nexport interface Reaction {\r\n emoji: string;\r\n count: number;\r\n users: string[];\r\n}\r\n\r\n/**\r\n * Participant interface\r\n */\r\nexport interface Participant {\r\n id: string;\r\n name: string;\r\n avatar?: string;\r\n type: 'user' | 'agent' | 'bot';\r\n isOnline: boolean;\r\n lastSeenAt?: number;\r\n}\r\n\r\n/**\r\n * Widget state\r\n */\r\nexport interface WidgetState {\r\n visibility: WidgetVisibility;\r\n view: WidgetView;\r\n isOpen: boolean;\r\n isMinimized: boolean;\r\n dimensions: {\r\n width: string;\r\n height: string;\r\n };\r\n position: {\r\n bottom: string;\r\n right: string;\r\n };\r\n}\r\n\r\n/**\r\n * Launcher state\r\n */\r\nexport interface LauncherState {\r\n isVisible: boolean;\r\n badge: {\r\n count: number;\r\n text?: string;\r\n show: boolean;\r\n };\r\n customColor?: string;\r\n tooltip?: string;\r\n}\r\n\r\n/**\r\n * Backdrop state\r\n */\r\nexport interface BackdropState {\r\n isVisible: boolean;\r\n closeOnClick: boolean;\r\n opacity: number;\r\n}\r\n\r\n/**\r\n * Mobile state\r\n */\r\nexport interface MobileState {\r\n isFullScreen: boolean;\r\n isScrollLocked: boolean;\r\n keyboardHeight: number;\r\n orientation: 'portrait' | 'landscape';\r\n safeAreaInsets: {\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n left: number;\r\n };\r\n}\r\n\r\n/**\r\n * Network state\r\n */\r\nexport interface NetworkState {\r\n status: ConnectionStatus;\r\n lastConnected?: number;\r\n retryCount: number;\r\n latency?: number;\r\n}\r\n\r\n/**\r\n * UI state\r\n */\r\nexport interface UIState {\r\n theme: 'light' | 'dark' | 'auto';\r\n locale: string;\r\n isLoading: boolean;\r\n error?: {\r\n code: string;\r\n message: string;\r\n recoverable: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Main application state\r\n */\r\nexport interface WeldState {\r\n user: UserState;\r\n conversation: ConversationState;\r\n widget: WidgetState;\r\n launcher: LauncherState;\r\n backdrop: BackdropState;\r\n mobile: MobileState;\r\n network: NetworkState;\r\n ui: UIState;\r\n initialized: boolean;\r\n lastUpdated: number;\r\n}\r\n\r\n/**\r\n * State update action\r\n */\r\nexport interface StateAction<T = any> {\r\n type: string;\r\n path: keyof WeldState | string;\r\n payload: T;\r\n merge?: boolean;\r\n timestamp: number;\r\n}\r\n\r\n/**\r\n * State listener callback\r\n */\r\nexport type StateListener<T = any> = (newState: T, oldState: T) => void;\r\n\r\n/**\r\n * State subscription\r\n */\r\nexport interface StateSubscription {\r\n id: string;\r\n path: string;\r\n listener: StateListener;\r\n immediate?: boolean;\r\n}\r\n\r\n/**\r\n * Initial state factory\r\n */\r\nexport function createInitialState(): WeldState {\r\n return {\r\n user: {\r\n isAuthenticated: false,\r\n isAnonymous: true,\r\n },\r\n conversation: {\r\n messages: [],\r\n participants: [],\r\n unreadCount: 0,\r\n isTyping: false,\r\n typingUsers: [],\r\n },\r\n widget: {\r\n visibility: WidgetVisibility.HIDDEN,\r\n view: WidgetView.HOME,\r\n isOpen: false,\r\n isMinimized: false,\r\n dimensions: {\r\n width: '400px',\r\n height: 'min(680px, 88vh)',\r\n },\r\n position: {\r\n bottom: '24px',\r\n right: '24px',\r\n },\r\n },\r\n launcher: {\r\n isVisible: true,\r\n badge: {\r\n count: 0,\r\n show: false,\r\n },\r\n },\r\n backdrop: {\r\n isVisible: false,\r\n closeOnClick: true,\r\n opacity: 0,\r\n },\r\n mobile: {\r\n isFullScreen: false,\r\n isScrollLocked: false,\r\n keyboardHeight: 0,\r\n orientation: 'portrait',\r\n safeAreaInsets: {\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n },\r\n },\r\n network: {\r\n status: ConnectionStatus.DISCONNECTED,\r\n retryCount: 0,\r\n },\r\n ui: {\r\n theme: 'auto',\r\n locale: 'en',\r\n isLoading: false,\r\n },\r\n initialized: false,\r\n lastUpdated: Date.now(),\r\n };\r\n}\r\n\r\n/**\r\n * State path utility\r\n */\r\nexport function getStateValue<T = any>(state: WeldState, path: string): T {\r\n const keys = path.split('.');\r\n let value: any = state;\r\n\r\n for (const key of keys) {\r\n if (value && typeof value === 'object' && key in value) {\r\n value = value[key];\r\n } else {\r\n return undefined as T;\r\n }\r\n }\r\n\r\n return value as T;\r\n}\r\n\r\n/**\r\n * State update utility\r\n */\r\nexport function setStateValue(\r\n state: WeldState,\r\n path: string,\r\n value: any,\r\n merge = false\r\n): WeldState {\r\n const keys = path.split('.');\r\n const newState = JSON.parse(JSON.stringify(state));\r\n let current: any = newState;\r\n\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n if (!(key in current)) {\r\n current[key] = {};\r\n }\r\n current = current[key];\r\n }\r\n\r\n const lastKey = keys[keys.length - 1];\r\n\r\n if (merge && typeof current[lastKey] === 'object' && typeof value === 'object') {\r\n current[lastKey] = { ...current[lastKey], ...value };\r\n } else {\r\n current[lastKey] = value;\r\n }\r\n\r\n newState.lastUpdated = Date.now();\r\n return newState;\r\n}\r\n","/**\r\n * Weld SDK - Validation Utilities\r\n * Input validation and sanitization functions\r\n */\r\n\r\n/**\r\n * Validate email format\r\n */\r\nexport function isValidEmail(email: string): boolean {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(email);\r\n}\r\n\r\n/**\r\n * Validate URL format\r\n */\r\nexport function isValidUrl(url: string): boolean {\r\n try {\r\n new URL(url);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Validate API key format\r\n */\r\nexport function isValidApiKey(apiKey: string): boolean {\r\n return typeof apiKey === 'string' && apiKey.length > 0 && apiKey.length <= 256;\r\n}\r\n\r\n/**\r\n * Validate workspace ID format\r\n */\r\nexport function isValidWorkspaceId(workspaceId: string): boolean {\r\n return typeof workspaceId === 'string' && workspaceId.length > 0 && workspaceId.length <= 128;\r\n}\r\n\r\n/**\r\n * Validate color format (hex, rgb, rgba)\r\n */\r\nexport function isValidColor(color: string): boolean {\r\n const hexRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\r\n const rgbRegex = /^rgb\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*\\)$/;\r\n const rgbaRegex = /^rgba\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*(0|1|0?\\.\\d+)\\s*\\)$/;\r\n\r\n return hexRegex.test(color) || rgbRegex.test(color) || rgbaRegex.test(color);\r\n}\r\n\r\n/**\r\n * Validate message text\r\n */\r\nexport function isValidMessageText(text: string): boolean {\r\n return typeof text === 'string' && text.trim().length > 0 && text.length <= 10000;\r\n}\r\n\r\n/**\r\n * Sanitize HTML to prevent XSS\r\n */\r\nexport function sanitizeHtml(html: string): string {\r\n const div = document.createElement('div');\r\n div.textContent = html;\r\n return div.innerHTML;\r\n}\r\n\r\n/**\r\n * Sanitize user input\r\n */\r\nexport function sanitizeInput(input: string): string {\r\n if (typeof input !== 'string') {\r\n return '';\r\n }\r\n\r\n return input\r\n .trim()\r\n .replace(/[<>]/g, '') // Remove angle brackets\r\n .replace(/javascript:/gi, '') // Remove javascript: protocol\r\n .replace(/on\\w+\\s*=/gi, ''); // Remove event handlers\r\n}\r\n\r\n/**\r\n * Validate object has required properties\r\n */\r\nexport function hasRequiredProperties<T extends Record<string, any>>(\r\n obj: any,\r\n properties: (keyof T)[]\r\n): obj is T {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n\r\n return properties.every((prop) => prop in obj);\r\n}\r\n\r\n/**\r\n * Validate string length\r\n */\r\nexport function isValidLength(\r\n str: string,\r\n options: { min?: number; max?: number }\r\n): boolean {\r\n const length = str.length;\r\n\r\n if (options.min !== undefined && length < options.min) {\r\n return false;\r\n }\r\n\r\n if (options.max !== undefined && length > options.max) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Validate number range\r\n */\r\nexport function isInRange(\r\n num: number,\r\n options: { min?: number; max?: number }\r\n): boolean {\r\n if (options.min !== undefined && num < options.min) {\r\n return false;\r\n }\r\n\r\n if (options.max !== undefined && num > options.max) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Validate array length\r\n */\r\nexport function isValidArrayLength<T>(\r\n arr: T[],\r\n options: { min?: number; max?: number }\r\n): boolean {\r\n if (!Array.isArray(arr)) {\r\n return false;\r\n }\r\n\r\n return isInRange(arr.length, options);\r\n}\r\n\r\n/**\r\n * Deep clone object (safe for JSON-serializable objects)\r\n */\r\nexport function deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime()) as any;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n return obj.map((item) => deepClone(item)) as any;\r\n }\r\n\r\n if (obj instanceof Object) {\r\n const cloned: any = {};\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n cloned[key] = deepClone(obj[key]);\r\n }\r\n }\r\n return cloned;\r\n }\r\n\r\n return obj;\r\n}\r\n\r\n/**\r\n * Check if value is a plain object\r\n */\r\nexport function isPlainObject(value: any): value is Record<string, any> {\r\n if (typeof value !== 'object' || value === null) {\r\n return false;\r\n }\r\n\r\n const proto = Object.getPrototypeOf(value);\r\n return proto === null || proto === Object.prototype;\r\n}\r\n\r\n/**\r\n * Merge objects deeply\r\n */\r\nexport function deepMerge<T extends Record<string, any>>(\r\n target: T,\r\n ...sources: Partial<T>[]\r\n): T {\r\n if (!sources.length) return target;\r\n\r\n const source = sources.shift();\r\n if (!source) return target;\r\n\r\n if (isPlainObject(target) && isPlainObject(source)) {\r\n for (const key in source) {\r\n if (isPlainObject(source[key])) {\r\n if (!target[key]) {\r\n Object.assign(target, { [key]: {} });\r\n }\r\n deepMerge(target[key], source[key] as any);\r\n } else {\r\n Object.assign(target, { [key]: source[key] });\r\n }\r\n }\r\n }\r\n\r\n return deepMerge(target, ...sources);\r\n}\r\n\r\n/**\r\n * Validate file type\r\n */\r\nexport function isValidFileType(file: File, allowedTypes: string[]): boolean {\r\n return allowedTypes.some((type) => {\r\n if (type.endsWith('/*')) {\r\n const category = type.split('/')[0];\r\n return file.type.startsWith(category + '/');\r\n }\r\n return file.type === type;\r\n });\r\n}\r\n\r\n/**\r\n * Validate file size\r\n */\r\nexport function isValidFileSize(file: File, maxSizeBytes: number): boolean {\r\n return file.size <= maxSizeBytes;\r\n}\r\n\r\n/**\r\n * Format file size for display\r\n */\r\nexport function formatFileSize(bytes: number): string {\r\n if (bytes === 0) return '0 Bytes';\r\n\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\r\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\r\n}\r\n","/**\r\n * Weld SDK - State Coordinator\r\n * Manages and synchronizes state across iframes\r\n */\r\n\r\nimport type {\r\n WeldState,\r\n StateAction,\r\n StateListener,\r\n StateSubscription,\r\n} from '../types/state';\r\nimport {\r\n createInitialState,\r\n getStateValue,\r\n setStateValue,\r\n} from '../types/state';\r\nimport type { MessageType } from '../types/messages';\r\nimport { Logger } from '../utils/logger';\r\nimport { MessageBroker } from './MessageBroker';\r\nimport { deepClone } from '../utils/validation';\r\n\r\n/**\r\n * StateCoordinator class\r\n * Central state management for multi-iframe architecture\r\n */\r\nexport class StateCoordinator {\r\n private state: WeldState;\r\n private logger: Logger;\r\n private messageBroker: MessageBroker;\r\n private subscriptions: Map<string, StateSubscription> = new Map();\r\n private stateHistory: StateAction[] = [];\r\n private maxHistorySize = 50;\r\n\r\n constructor(messageBroker: MessageBroker, logger: Logger) {\r\n this.messageBroker = messageBroker;\r\n this.logger = logger.child('[StateCoordinator]');\r\n this.state = createInitialState();\r\n\r\n this.setupMessageHandlers();\r\n this.logger.debug('StateCoordinator initialized');\r\n }\r\n\r\n /**\r\n * Setup message handlers for state updates\r\n */\r\n private setupMessageHandlers(): void {\r\n // Listen for state update requests from iframes\r\n this.messageBroker.subscribe(\r\n 'weld:state:update' as MessageType,\r\n this.handleStateUpdate.bind(this)\r\n );\r\n\r\n // Listen for state request messages\r\n this.messageBroker.subscribe(\r\n 'weld:state:request' as MessageType,\r\n this.handleStateRequest.bind(this)\r\n );\r\n\r\n this.logger.debug('Message handlers setup');\r\n }\r\n\r\n /**\r\n * Handle state update from iframe\r\n */\r\n private handleStateUpdate(payload: any): void {\r\n const { path, value, merge } = payload;\r\n\r\n if (!path) {\r\n this.logger.warn('State update missing path', payload);\r\n return;\r\n }\r\n\r\n this.updateState(path, value, merge);\r\n }\r\n\r\n /**\r\n * Handle state request from iframe\r\n */\r\n private handleStateRequest(payload: any): void {\r\n const { path } = payload;\r\n\r\n if (path) {\r\n const value = getStateValue(this.state, path);\r\n this.messageBroker.broadcast('weld:state:response' as MessageType, {\r\n path,\r\n value,\r\n });\r\n } else {\r\n // Send entire state\r\n this.messageBroker.broadcast('weld:state:response' as MessageType, {\r\n state: this.state,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get current state\r\n */\r\n public getState(): WeldState {\r\n return deepClone(this.state);\r\n }\r\n\r\n /**\r\n * Get state value by path\r\n */\r\n public getValue<T = any>(path: string): T {\r\n return getStateValue(this.state, path);\r\n }\r\n\r\n /**\r\n * Update state\r\n */\r\n public updateState(path: string, value: any, merge = false): void {\r\n const oldState = deepClone(this.state);\r\n this.state = setStateValue(this.state, path, value, merge);\r\n\r\n // Create state action\r\n const action: StateAction = {\r\n type: 'UPDATE',\r\n path,\r\n payload: value,\r\n merge,\r\n timestamp: Date.now(),\r\n };\r\n\r\n // Add to history\r\n this.addToHistory(action);\r\n\r\n // Notify subscribers\r\n this.notifySubscribers(path, value, getStateValue(oldState, path));\r\n\r\n // Broadcast to iframes\r\n this.messageBroker.broadcast('weld:state:update' as MessageType, {\r\n path,\r\n value,\r\n merge,\r\n });\r\n\r\n this.logger.debug('State updated', { path, merge });\r\n }\r\n\r\n /**\r\n * Batch update multiple state paths\r\n */\r\n public batchUpdate(updates: Array<{ path: string; value: any; merge?: boolean }>): void {\r\n const oldState = deepClone(this.state);\r\n\r\n for (const update of updates) {\r\n this.state = setStateValue(\r\n this.state,\r\n update.path,\r\n update.value,\r\n update.merge\r\n );\r\n }\r\n\r\n // Notify subscribers for each update\r\n for (const update of updates) {\r\n this.notifySubscribers(\r\n update.path,\r\n getStateValue(this.state, update.path),\r\n getStateValue(oldState, update.path)\r\n );\r\n }\r\n\r\n // Broadcast all updates\r\n this.messageBroker.broadcast('weld:state:update' as MessageType, {\r\n batch: updates,\r\n });\r\n\r\n this.logger.debug('Batch state update', { count: updates.length });\r\n }\r\n\r\n /**\r\n * Reset state to initial\r\n */\r\n public resetState(): void {\r\n const oldState = this.state;\r\n this.state = createInitialState();\r\n\r\n // Notify all subscribers\r\n for (const [_id, subscription] of this.subscriptions) {\r\n const oldValue = getStateValue(oldState, subscription.path);\r\n const newValue = getStateValue(this.state, subscription.path);\r\n subscription.listener(newValue, oldValue);\r\n }\r\n\r\n // Broadcast reset\r\n this.messageBroker.broadcast('weld:state:update' as MessageType, {\r\n reset: true,\r\n state: this.state,\r\n });\r\n\r\n this.logger.debug('State reset');\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n */\r\n public subscribe<T = any>(\r\n path: string,\r\n listener: StateListener<T>,\r\n immediate = false\r\n ): string {\r\n const id = `sub_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n this.subscriptions.set(id, {\r\n id,\r\n path,\r\n listener,\r\n immediate,\r\n });\r\n\r\n // Call listener immediately if requested\r\n if (immediate) {\r\n const value = getStateValue(this.state, path);\r\n listener(value, value);\r\n }\r\n\r\n this.logger.debug('State subscription added', { id, path });\r\n return id;\r\n }\r\n\r\n /**\r\n * Unsubscribe from state changes\r\n */\r\n public unsubscribe(subscriptionId: string): void {\r\n if (this.subscriptions.delete(subscriptionId)) {\r\n this.logger.debug('State subscription removed', { id: subscriptionId });\r\n }\r\n }\r\n\r\n /**\r\n * Notify subscribers of state change\r\n */\r\n private notifySubscribers(path: string, newValue: any, oldValue: any): void {\r\n const subscriptions = Array.from(this.subscriptions.values());\r\n\r\n for (const subscription of subscriptions) {\r\n // Exact path match\r\n if (subscription.path === path) {\r\n try {\r\n subscription.listener(newValue, oldValue);\r\n } catch (error) {\r\n this.logger.error('Error in state listener', error);\r\n }\r\n continue;\r\n }\r\n\r\n // Parent path match (e.g., subscriber to \"user\" gets notified for \"user.name\")\r\n if (path.startsWith(subscription.path + '.')) {\r\n const subValue = getStateValue(this.state, subscription.path);\r\n try {\r\n subscription.listener(subValue, oldValue);\r\n } catch (error) {\r\n this.logger.error('Error in state listener', error);\r\n }\r\n continue;\r\n }\r\n\r\n // Child path match (e.g., subscriber to \"user.name\" gets notified for \"user\")\r\n if (subscription.path.startsWith(path + '.')) {\r\n const subValue = getStateValue(this.state, subscription.path);\r\n try {\r\n subscription.listener(subValue, undefined);\r\n } catch (error) {\r\n this.logger.error('Error in state listener', error);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add action to history\r\n */\r\n private addToHistory(action: StateAction): void {\r\n this.stateHistory.push(action);\r\n\r\n // Trim history if too large\r\n if (this.stateHistory.length > this.maxHistorySize) {\r\n this.stateHistory.shift();\r\n }\r\n }\r\n\r\n /**\r\n * Get state history\r\n */\r\n public getHistory(): StateAction[] {\r\n return [...this.stateHistory];\r\n }\r\n\r\n /**\r\n * Clear state history\r\n */\r\n public clearHistory(): void {\r\n this.stateHistory = [];\r\n this.logger.debug('State history cleared');\r\n }\r\n\r\n /**\r\n * Get snapshot of state at specific time\r\n */\r\n public getSnapshot(timestamp: number): WeldState | null {\r\n // Find all actions before timestamp\r\n const actions = this.stateHistory.filter((a) => a.timestamp <= timestamp);\r\n\r\n if (actions.length === 0) {\r\n return null;\r\n }\r\n\r\n // Replay actions to reconstruct state\r\n let state = createInitialState();\r\n for (const action of actions) {\r\n state = setStateValue(state, action.path, action.payload, action.merge);\r\n }\r\n\r\n return state;\r\n }\r\n\r\n /**\r\n * Widget-specific state helpers\r\n */\r\n public openWidget(): void {\r\n this.batchUpdate([\r\n { path: 'widget.isOpen', value: true },\r\n { path: 'widget.visibility', value: 'visible' },\r\n { path: 'launcher.isVisible', value: false },\r\n { path: 'backdrop.isVisible', value: true },\r\n ]);\r\n }\r\n\r\n public closeWidget(): void {\r\n this.batchUpdate([\r\n { path: 'widget.isOpen', value: false },\r\n { path: 'widget.visibility', value: 'hidden' },\r\n { path: 'launcher.isVisible', value: true },\r\n { path: 'backdrop.isVisible', value: false },\r\n ]);\r\n }\r\n\r\n public minimizeWidget(): void {\r\n this.batchUpdate([\r\n { path: 'widget.isMinimized', value: true },\r\n { path: 'widget.visibility', value: 'minimized' },\r\n ]);\r\n }\r\n\r\n public maximizeWidget(): void {\r\n this.batchUpdate([\r\n { path: 'widget.isMinimized', value: false },\r\n { path: 'widget.visibility', value: 'visible' },\r\n ]);\r\n }\r\n\r\n public setBadgeCount(count: number): void {\r\n this.batchUpdate([\r\n { path: 'launcher.badge.count', value: count },\r\n { path: 'launcher.badge.show', value: count > 0 },\r\n ]);\r\n }\r\n\r\n public setUserAuth(userId: string, email?: string, name?: string): void {\r\n this.batchUpdate([\r\n { path: 'user.isAuthenticated', value: true },\r\n { path: 'user.isAnonymous', value: false },\r\n { path: 'user.id', value: userId },\r\n { path: 'user.email', value: email },\r\n { path: 'user.name', value: name },\r\n ]);\r\n }\r\n\r\n public setConnectionStatus(status: string): void {\r\n this.updateState('network.status', status);\r\n }\r\n\r\n public setLoading(isLoading: boolean): void {\r\n this.updateState('ui.isLoading', isLoading);\r\n }\r\n\r\n public setError(code: string, message: string, recoverable = true): void {\r\n this.updateState('ui.error', { code, message, recoverable });\r\n }\r\n\r\n public clearError(): void {\r\n this.updateState('ui.error', undefined);\r\n }\r\n\r\n /**\r\n * Get active subscription count\r\n */\r\n public getSubscriptionCount(): number {\r\n return this.subscriptions.size;\r\n }\r\n\r\n /**\r\n * Validate state integrity\r\n */\r\n public validateState(): boolean {\r\n try {\r\n // Check required properties exist\r\n const requiredPaths = [\r\n 'user',\r\n 'conversation',\r\n 'widget',\r\n 'launcher',\r\n 'backdrop',\r\n 'mobile',\r\n 'network',\r\n 'ui',\r\n ];\r\n\r\n for (const path of requiredPaths) {\r\n if (getStateValue(this.state, path) === undefined) {\r\n this.logger.error('Missing required state path', { path });\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n this.logger.error('State validation failed', error);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Export state as JSON\r\n */\r\n public exportState(): string {\r\n return JSON.stringify(this.state, null, 2);\r\n }\r\n\r\n /**\r\n * Import state from JSON\r\n */\r\n public importState(json: string): boolean {\r\n try {\r\n const imported = JSON.parse(json);\r\n this.state = { ...createInitialState(), ...imported };\r\n this.messageBroker.broadcast('weld:state:update' as MessageType, {\r\n reset: true,\r\n state: this.state,\r\n });\r\n this.logger.info('State imported');\r\n return true;\r\n } catch (error) {\r\n this.logger.error('Failed to import state', error);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Destroy coordinator and cleanup\r\n */\r\n public destroy(): void {\r\n this.logger.debug('Destroying state coordinator');\r\n\r\n // Clear subscriptions\r\n this.subscriptions.clear();\r\n\r\n // Clear history\r\n this.stateHistory = [];\r\n\r\n // Reset state\r\n this.state = createInitialState();\r\n\r\n this.logger.info('StateCoordinator destroyed');\r\n }\r\n}\r\n","/**\r\n * Weld SDK - Main Entry Point\r\n * Public API for the Weld helpdesk widget\r\n */\r\n\r\nimport type { WeldConfig, ResolvedConfig } from '../types/config';\r\nimport { resolveConfig } from '../types/config';\r\nimport type { WeldState } from '../types/state';\r\nimport type { MessageType } from '../types/messages';\r\nimport { Logger } from '../utils/logger';\r\nimport { IframeManager, IframeType } from './IframeManager';\r\nimport { MessageBroker } from './MessageBroker';\r\nimport { StateCoordinator } from './StateCoordinator';\r\nimport packageJson from '../../package.json';\r\n\r\n/**\r\n * SDK initialization status\r\n */\r\nenum SDKStatus {\r\n UNINITIALIZED = 'uninitialized',\r\n INITIALIZING = 'initializing',\r\n READY = 'ready',\r\n ERROR = 'error',\r\n DESTROYED = 'destroyed',\r\n}\r\n\r\n/**\r\n * User identification data\r\n */\r\nexport interface UserIdentity {\r\n userId: string;\r\n email?: string;\r\n name?: string;\r\n avatar?: string;\r\n metadata?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * WeldSDK class\r\n * Main SDK interface for embedding the widget\r\n */\r\nexport class WeldSDK {\r\n private config: ResolvedConfig;\r\n private logger: Logger;\r\n private iframeManager: IframeManager;\r\n private messageBroker: MessageBroker;\r\n private stateCoordinator: StateCoordinator;\r\n private status: SDKStatus = SDKStatus.UNINITIALIZED;\r\n private readyPromise: Promise<void> | null = null;\r\n private readyResolve: (() => void) | null = null;\r\n\r\n constructor(config: WeldConfig) {\r\n // Resolve configuration\r\n this.config = resolveConfig(config);\r\n\r\n // Initialize logger\r\n this.logger = new Logger(this.config.logging);\r\n this.logger.info('WeldSDK created', {\r\n widgetId: this.config.widgetId,\r\n });\r\n\r\n // Create ready promise\r\n this.readyPromise = new Promise((resolve) => {\r\n this.readyResolve = resolve;\r\n });\r\n\r\n // Initialize managers\r\n this.iframeManager = new IframeManager(this.config);\r\n this.messageBroker = new MessageBroker(\r\n this.config,\r\n this.iframeManager,\r\n this.logger\r\n );\r\n this.stateCoordinator = new StateCoordinator(\r\n this.messageBroker,\r\n this.logger\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the SDK and render widget\r\n */\r\n public async init(): Promise<void> {\r\n if (this.status !== SDKStatus.UNINITIALIZED) {\r\n this.logger.warn('SDK already initialized');\r\n return this.readyPromise!;\r\n }\r\n\r\n this.status = SDKStatus.INITIALIZING;\r\n this.logger.info('Initializing WeldSDK');\r\n\r\n try {\r\n // Initialize iframe manager\r\n await this.iframeManager.init();\r\n\r\n // Setup ready handlers\r\n this.setupReadyHandlers();\r\n\r\n // Wait for all iframes to be ready\r\n await this.waitForIframesReady();\r\n\r\n // Mark as ready\r\n this.status = SDKStatus.READY;\r\n this.readyResolve?.();\r\n this.logger.info('WeldSDK ready');\r\n\r\n // Call onReady callback\r\n this.config.onReady?.();\r\n } catch (error) {\r\n this.status = SDKStatus.ERROR;\r\n this.logger.error('Failed to initialize WeldSDK', error);\r\n this.config.onError?.(error as Error);\r\n throw error;\r\n }\r\n\r\n return this.readyPromise!;\r\n }\r\n\r\n /**\r\n * Setup ready message handlers\r\n */\r\n private setupReadyHandlers(): void {\r\n this.messageBroker.subscribe('weld:ready' as MessageType, (payload) => {\r\n const { iframe } = payload;\r\n this.logger.debug('Iframe ready', { iframe });\r\n\r\n // Map iframe name to type\r\n const iframeType = this.mapIframeNameToType(iframe);\r\n if (iframeType) {\r\n this.messageBroker.setIframeReady(iframeType);\r\n }\r\n });\r\n\r\n // Listen for launcher click events from the iframe\r\n window.addEventListener('message', (event: MessageEvent) => {\r\n // Log all messages from iframes for debugging\r\n if (event.data?.type) {\r\n console.log('[Weld SDK] Received message:', event.data.type);\r\n }\r\n\r\n if (event.data?.type === 'launcher:clicked') {\r\n // Toggle behavior - if widget is open, close it; if closed, open it\r\n const state = this.stateCoordinator.getState();\r\n if (state.widget.isOpen) {\r\n console.log('[Weld SDK] Launcher clicked - closing widget (toggle)');\r\n this.close();\r\n } else {\r\n console.log('[Weld SDK] Launcher clicked - opening widget');\r\n this.open();\r\n }\r\n }\r\n if (event.data?.type === 'weld:close') {\r\n console.log('[Weld SDK] Widget close requested');\r\n this.close();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Map iframe name to type\r\n */\r\n private mapIframeNameToType(name: string): IframeType | null {\r\n if (name.includes('launcher')) return IframeType.LAUNCHER;\r\n if (name.includes('widget')) return IframeType.WIDGET;\r\n return null;\r\n }\r\n\r\n /**\r\n * Wait for all iframes to be ready\r\n */\r\n private async waitForIframesReady(timeout = 10000): Promise<void> {\r\n const startTime = Date.now();\r\n\r\n return new Promise((resolve, reject) => {\r\n const checkReady = () => {\r\n if (this.iframeManager.areAllIframesReady()) {\r\n resolve();\r\n return;\r\n }\r\n\r\n if (Date.now() - startTime > timeout) {\r\n reject(new Error('Timeout waiting for iframes to be ready'));\r\n return;\r\n }\r\n\r\n setTimeout(checkReady, 100);\r\n };\r\n\r\n checkReady();\r\n });\r\n }\r\n\r\n /**\r\n * Wait for SDK to be ready\r\n */\r\n public async ready(): Promise<void> {\r\n return this.readyPromise!;\r\n }\r\n\r\n /**\r\n * Check if SDK is ready\r\n */\r\n public isReady(): boolean {\r\n return this.status === SDKStatus.READY;\r\n }\r\n\r\n /**\r\n * Open the widget\r\n */\r\n public open(): void {\r\n this.ensureReady();\r\n console.log('[Weld SDK] Opening widget...');\r\n\r\n this.stateCoordinator.openWidget();\r\n this.iframeManager.showIframe(IframeType.WIDGET);\r\n this.iframeManager.showIframe(IframeType.BACKDROP);\r\n // Keep launcher visible so user can click it to close the widget\r\n\r\n // Send open message to the widget iframe\r\n const widgetIframe = this.iframeManager.getIframe(IframeType.WIDGET);\r\n if (widgetIframe?.element?.contentWindow) {\r\n widgetIframe.element.contentWindow.postMessage({ type: 'weld:open' }, '*');\r\n }\r\n\r\n // Notify launcher that widget is now open (so it can show X icon)\r\n const launcherIframe = this.iframeManager.getIframe(IframeType.LAUNCHER);\r\n if (launcherIframe?.element?.contentWindow) {\r\n launcherIframe.element.contentWindow.postMessage({ type: 'weld:widget-opened' }, '*');\r\n }\r\n\r\n this.config.onOpen?.();\r\n }\r\n\r\n /**\r\n * Close the widget\r\n */\r\n public close(): void {\r\n this.ensureReady();\r\n console.log('[Weld SDK] Closing widget...');\r\n\r\n this.stateCoordinator.closeWidget();\r\n this.iframeManager.hideIframe(IframeType.WIDGET);\r\n this.iframeManager.hideIframe(IframeType.BACKDROP);\r\n // Launcher stays visible\r\n\r\n // Send close message to the widget iframe\r\n const widgetIframe = this.iframeManager.getIframe(IframeType.WIDGET);\r\n if (widgetIframe?.element?.contentWindow) {\r\n widgetIframe.element.contentWindow.postMessage({ type: 'weld:close' }, '*');\r\n }\r\n\r\n // Notify launcher that widget is now closed (so it can show chat icon)\r\n const launcherIframe = this.iframeManager.getIframe(IframeType.LAUNCHER);\r\n if (launcherIframe?.element?.contentWindow) {\r\n launcherIframe.element.contentWindow.postMessage({ type: 'weld:widget-closed' }, '*');\r\n }\r\n\r\n this.config.onClose?.();\r\n }\r\n\r\n /**\r\n * Toggle widget open/close\r\n */\r\n public toggle(): void {\r\n const state = this.stateCoordinator.getState();\r\n if (state.widget.isOpen) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n /**\r\n * Minimize the widget\r\n */\r\n public minimize(): void {\r\n this.ensureReady();\r\n this.logger.debug('Minimizing widget');\r\n\r\n this.stateCoordinator.minimizeWidget();\r\n this.config.onMinimize?.();\r\n }\r\n\r\n /**\r\n * Maximize the widget\r\n */\r\n public maximize(): void {\r\n this.ensureReady();\r\n this.logger.debug('Maximizing widget');\r\n\r\n this.stateCoordinator.maximizeWidget();\r\n this.config.onMaximize?.();\r\n }\r\n\r\n /**\r\n * Show the launcher\r\n */\r\n public showLauncher(): void {\r\n this.ensureReady();\r\n this.logger.debug('Showing launcher');\r\n\r\n this.iframeManager.showIframe(IframeType.LAUNCHER);\r\n this.stateCoordinator.updateState('launcher.isVisible', true);\r\n }\r\n\r\n /**\r\n * Hide the launcher\r\n */\r\n public hideLauncher(): void {\r\n this.ensureReady();\r\n this.logger.debug('Hiding launcher');\r\n\r\n this.iframeManager.hideIframe(IframeType.LAUNCHER);\r\n this.stateCoordinator.updateState('launcher.isVisible', false);\r\n }\r\n\r\n /**\r\n * Set badge count\r\n */\r\n public setBadgeCount(count: number): void {\r\n this.ensureReady();\r\n this.logger.debug('Setting badge count', { count });\r\n\r\n this.stateCoordinator.setBadgeCount(count);\r\n }\r\n\r\n /**\r\n * Clear badge\r\n */\r\n public clearBadge(): void {\r\n this.setBadgeCount(0);\r\n }\r\n\r\n /**\r\n * Send a message\r\n */\r\n public sendMessage(text: string, metadata?: Record<string, any>): void {\r\n this.ensureReady();\r\n this.logger.debug('Sending message', { text });\r\n\r\n this.messageBroker.sendToIframe(IframeType.WIDGET, 'weld:message:send' as MessageType, {\r\n text,\r\n metadata,\r\n timestamp: Date.now(),\r\n });\r\n }\r\n\r\n /**\r\n * Identify user\r\n */\r\n public identify(identity: UserIdentity): void {\r\n this.ensureReady();\r\n this.logger.debug('Identifying user', { userId: identity.userId });\r\n\r\n this.stateCoordinator.setUserAuth(\r\n identity.userId,\r\n identity.email,\r\n identity.name\r\n );\r\n\r\n this.messageBroker.broadcast('weld:auth:login' as MessageType, identity);\r\n }\r\n\r\n /**\r\n * Logout user\r\n */\r\n public logout(): void {\r\n this.ensureReady();\r\n this.logger.debug('Logging out user');\r\n\r\n this.stateCoordinator.updateState('user', {\r\n isAuthenticated: false,\r\n isAnonymous: true,\r\n });\r\n\r\n this.messageBroker.broadcast('weld:auth:logout' as MessageType, {});\r\n }\r\n\r\n /**\r\n * Update configuration\r\n */\r\n public updateConfig(updates: Partial<WeldConfig>): void {\r\n this.ensureReady();\r\n this.logger.debug('Updating configuration');\r\n\r\n // Merge config\r\n this.config = resolveConfig({ ...this.config, ...updates });\r\n\r\n // Broadcast config update\r\n this.messageBroker.broadcast('weld:config:update' as MessageType, updates);\r\n }\r\n\r\n /**\r\n * Update theme\r\n */\r\n public setTheme(theme: 'light' | 'dark' | 'auto'): void {\r\n this.ensureReady();\r\n this.logger.debug('Setting theme', { theme });\r\n\r\n this.stateCoordinator.updateState('ui.theme', theme);\r\n this.messageBroker.broadcast('weld:theme:update' as MessageType, { mode: theme });\r\n }\r\n\r\n /**\r\n * Update locale\r\n */\r\n public setLocale(locale: string): void {\r\n this.ensureReady();\r\n this.logger.debug('Setting locale', { locale });\r\n\r\n this.stateCoordinator.updateState('ui.locale', locale);\r\n this.messageBroker.broadcast('weld:locale:update' as MessageType, { locale });\r\n }\r\n\r\n /**\r\n * Track custom event\r\n */\r\n public track(eventName: string, properties?: Record<string, any>): void {\r\n this.ensureReady();\r\n this.logger.debug('Tracking event', { eventName });\r\n\r\n this.messageBroker.broadcast('weld:event:track' as MessageType, {\r\n name: eventName,\r\n properties,\r\n timestamp: Date.now(),\r\n });\r\n }\r\n\r\n /**\r\n * Get current state\r\n */\r\n public getState(): WeldState {\r\n return this.stateCoordinator.getState();\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n */\r\n public onStateChange<T = any>(\r\n path: string,\r\n listener: (newValue: T, oldValue: T) => void\r\n ): () => void {\r\n this.ensureReady();\r\n\r\n const subscriptionId = this.stateCoordinator.subscribe(path, listener);\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n this.stateCoordinator.unsubscribe(subscriptionId);\r\n };\r\n }\r\n\r\n /**\r\n * Get device info\r\n */\r\n public getDeviceInfo() {\r\n return this.iframeManager.getDeviceInfo();\r\n }\r\n\r\n /**\r\n * Get SDK status\r\n */\r\n public getStatus(): string {\r\n return this.status;\r\n }\r\n\r\n /**\r\n * Get SDK version\r\n */\r\n public getVersion(): string {\r\n return packageJson.version;\r\n }\r\n\r\n /**\r\n * Enable debug mode\r\n */\r\n public enableDebug(): void {\r\n this.logger.setLevel('debug');\r\n this.logger.info('Debug mode enabled');\r\n }\r\n\r\n /**\r\n * Disable debug mode\r\n */\r\n public disableDebug(): void {\r\n this.logger.setLevel('warn');\r\n this.logger.info('Debug mode disabled');\r\n }\r\n\r\n /**\r\n * Ensure SDK is ready before operation\r\n */\r\n private ensureReady(): void {\r\n if (this.status !== SDKStatus.READY) {\r\n throw new Error('SDK not ready. Call init() first.');\r\n }\r\n }\r\n\r\n /**\r\n * Destroy SDK and cleanup\r\n */\r\n public destroy(): void {\r\n this.logger.info('Destroying WeldSDK');\r\n\r\n // Destroy modules\r\n this.stateCoordinator.destroy();\r\n this.messageBroker.destroy();\r\n this.iframeManager.destroy();\r\n\r\n // Reset status\r\n this.status = SDKStatus.DESTROYED;\r\n\r\n // Call onDestroy callback\r\n this.config.onDestroy?.();\r\n\r\n this.logger.info('WeldSDK destroyed');\r\n }\r\n}\r\n\r\n/**\r\n * Create and initialize WeldSDK instance\r\n */\r\nexport async function createWeldSDK(config: WeldConfig): Promise<WeldSDK> {\r\n const sdk = new WeldSDK(config);\r\n await sdk.init();\r\n return sdk;\r\n}\r\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\r\nimport { WeldSDK, type WeldConfig, type WidgetEventHandler } from '../../src/index';\r\n\r\n/**\r\n * Angular component for the Helpdesk Widget\r\n *\r\n * This component provides a declarative way to add the widget to your app.\r\n * The widget loads in an iframe and doesn't render any visible children.\r\n *\r\n * @example\r\n * ```typescript\r\n * // app.component.ts\r\n * import { Component } from '@angular/core';\r\n *\r\n * @Component({\r\n * selector: 'app-root',\r\n * template: `\r\n * <h1>My App</h1>\r\n * <helpdesk-widget [widgetId]=\"'your-widget-id'\"></helpdesk-widget>\r\n * `\r\n * })\r\n * export class AppComponent {}\r\n * ```\r\n *\r\n * @example With event handlers\r\n * ```typescript\r\n * @Component({\r\n * selector: 'app-root',\r\n * template: `\r\n * <helpdesk-widget\r\n * [widgetId]=\"'your-widget-id'\"\r\n * [onReady]=\"handleReady\"\r\n * [onOpen]=\"handleOpened\">\r\n * </helpdesk-widget>\r\n * `\r\n * })\r\n * export class AppComponent {\r\n * handleReady = () => {\r\n * console.log('Widget ready');\r\n * }\r\n *\r\n * handleOpened = () => {\r\n * console.log('Widget opened');\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Component({\r\n selector: 'helpdesk-widget',\r\n template: '',\r\n standalone: true,\r\n})\r\nexport class HelpdeskWidgetComponent implements OnInit, OnDestroy {\r\n @Input() widgetId!: string;\r\n @Input() onReady?: WidgetEventHandler;\r\n @Input() onOpen?: WidgetEventHandler;\r\n @Input() onClose?: WidgetEventHandler;\r\n @Input() onError?: WidgetEventHandler;\r\n\r\n private widget: WeldSDK | null = null;\r\n\r\n ngOnInit(): void {\r\n if (!this.widgetId) {\r\n throw new Error('widgetId is required for HelpdeskWidgetComponent');\r\n }\r\n\r\n const config: WeldConfig = {\r\n widgetId: this.widgetId,\r\n onReady: this.onReady,\r\n onOpen: this.onOpen,\r\n onClose: this.onClose,\r\n onError: this.onError as ((error: Error) => void) | undefined,\r\n };\r\n\r\n try {\r\n this.widget = new WeldSDK(config);\r\n this.widget.init();\r\n } catch (error) {\r\n console.error('Failed to initialize Helpdesk Widget:', error);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.widget) {\r\n this.widget.destroy();\r\n this.widget = null;\r\n }\r\n }\r\n\r\n /**\r\n * Open the widget programmatically\r\n */\r\n open(): void {\r\n this.widget?.open();\r\n }\r\n\r\n /**\r\n * Close the widget programmatically\r\n */\r\n close(): void {\r\n this.widget?.close();\r\n }\r\n\r\n /**\r\n * Toggle widget visibility programmatically\r\n */\r\n toggle(): void {\r\n this.widget?.toggle();\r\n }\r\n\r\n /**\r\n * Send a message to the widget\r\n */\r\n sendMessage(message: string): void {\r\n this.widget?.sendMessage(message);\r\n }\r\n}\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { WeldSDK, type WeldConfig } from '../../src/index';\r\n\r\n/**\r\n * Angular service for managing the Helpdesk Widget\r\n *\r\n * @example\r\n * ```typescript\r\n * import { Component } from '@angular/core';\r\n * import { HelpdeskWidgetService } from '@weldsuite/helpdesk-widget-sdk/angular';\r\n *\r\n * @Component({\r\n * selector: 'app-root',\r\n * template: `\r\n * <button (click)=\"openWidget()\">Show Support</button>\r\n * `\r\n * })\r\n * export class AppComponent {\r\n * constructor(private helpdeskService: HelpdeskWidgetService) {\r\n * this.helpdeskService.initialize({ widgetId: 'your-widget-id' });\r\n * }\r\n *\r\n * openWidget() {\r\n * this.helpdeskService.open();\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class HelpdeskWidgetService implements OnDestroy {\r\n private widget: WeldSDK | null = null;\r\n\r\n /**\r\n * Initialize the widget with configuration\r\n */\r\n initialize(config: WeldConfig): void {\r\n if (this.widget) {\r\n console.warn('Helpdesk widget is already initialized. Destroying previous instance.');\r\n this.destroy();\r\n }\r\n\r\n try {\r\n this.widget = new WeldSDK(config);\r\n this.widget.init();\r\n } catch (error) {\r\n console.error('Failed to initialize Helpdesk Widget:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Open the widget\r\n */\r\n open(): void {\r\n if (!this.widget) {\r\n console.warn('Widget not initialized. Call initialize() first.');\r\n return;\r\n }\r\n this.widget.open();\r\n }\r\n\r\n /**\r\n * Close the widget\r\n */\r\n close(): void {\r\n if (!this.widget) {\r\n console.warn('Widget not initialized. Call initialize() first.');\r\n return;\r\n }\r\n this.widget.close();\r\n }\r\n\r\n /**\r\n * Toggle widget visibility\r\n */\r\n toggle(): void {\r\n if (!this.widget) {\r\n console.warn('Widget not initialized. Call initialize() first.');\r\n return;\r\n }\r\n this.widget.toggle();\r\n }\r\n\r\n /**\r\n * Send a message to the widget\r\n */\r\n sendMessage(message: string): void {\r\n if (!this.widget) {\r\n console.warn('Widget not initialized. Call initialize() first.');\r\n return;\r\n }\r\n this.widget.sendMessage(message);\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n * @returns Unsubscribe function\r\n */\r\n onStateChange<T = any>(path: string, listener: (newValue: T, oldValue: T) => void): () => void {\r\n if (!this.widget) {\r\n console.warn('Widget not initialized. Call initialize() first.');\r\n return () => {};\r\n }\r\n return this.widget.onStateChange(path, listener);\r\n }\r\n\r\n /**\r\n * Destroy the widget and clean up resources\r\n */\r\n destroy(): void {\r\n if (this.widget) {\r\n this.widget.destroy();\r\n this.widget = null;\r\n }\r\n }\r\n\r\n /**\r\n * Get the widget instance\r\n */\r\n getWidget(): WeldSDK | null {\r\n return this.widget;\r\n }\r\n\r\n /**\r\n * Check if SDK is ready\r\n */\r\n isReady(): boolean {\r\n return this.widget?.isReady() ?? false;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HelpdeskWidgetComponent } from './helpdesk-widget.component';\r\nimport { HelpdeskWidgetService } from './helpdesk-widget.service';\r\n\r\n/**\r\n * Angular module for the Helpdesk Widget\r\n *\r\n * This module is for backwards compatibility with Angular apps not using standalone components.\r\n * For modern Angular apps (v14+), prefer importing the standalone component directly.\r\n *\r\n * @example\r\n * ```typescript\r\n * // app.module.ts\r\n * import { HelpdeskWidgetModule } from '@weldsuite/helpdesk-widget-sdk/angular';\r\n *\r\n * @NgModule({\r\n * declarations: [AppComponent],\r\n * imports: [\r\n * BrowserModule,\r\n * HelpdeskWidgetModule\r\n * ],\r\n * providers: [],\r\n * bootstrap: [AppComponent]\r\n * })\r\n * export class AppModule { }\r\n * ```\r\n *\r\n * @example For standalone components (Angular 14+), import directly:\r\n * ```typescript\r\n * import { HelpdeskWidgetComponent } from '@weldsuite/helpdesk-widget-sdk/angular';\r\n *\r\n * @Component({\r\n * selector: 'app-root',\r\n * standalone: true,\r\n * imports: [HelpdeskWidgetComponent],\r\n * template: `<helpdesk-widget [widgetId]=\"'your-widget-id'\"></helpdesk-widget>`\r\n * })\r\n * export class AppComponent {}\r\n * ```\r\n */\r\n@NgModule({\r\n imports: [HelpdeskWidgetComponent],\r\n exports: [HelpdeskWidgetComponent],\r\n providers: [HelpdeskWidgetService],\r\n})\r\nexport class HelpdeskWidgetModule {}\r\n"],"names":["Component","Input","Injectable","NgModule"],"mappings":"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","x_google_ignoreList":[0]}