helpdesk-app-framework-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +177 -0
- package/README.md +587 -0
- package/build/baf_sdk.js +2107 -0
- package/build/baf_sdk.js.map +1 -0
- package/build/baf_sdk.min.js +1 -0
- package/lib/apis/context.js +172 -0
- package/lib/apis/instance.js +225 -0
- package/lib/apis/metadata.js +156 -0
- package/lib/apis/request.js +196 -0
- package/lib/client.js +422 -0
- package/lib/index.js +99 -0
- package/lib/utils.js +202 -0
- package/package.json +95 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baf_sdk.js","mappings":"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rI,QAAQ,CAACsI,GAAG,CAAC,CAAC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASnI,UAAUA,CAAEI,GAAG,EAAE;EAC/B,IAAI;IACF,IAAIgI,GAAG,CAAChI,GAAG,CAAC;IACZ,OAAO,IAAI;EACb,CAAC,CAAC,OAAOiI,CAAC,EAAE;IACV,OAAO,KAAK;EACd;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,WAAWA,CAAE3F,OAAO,EAAE9F,KAAK,EAAE;EAC3C,OAAO,IAAI8F,OAAO,KAAK9F,KAAK,CAACuG,OAAO,IAAIvG,KAAK,EAAE;AACjD,C;;;;;;;;;;ACzMA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK,KAA4B,sBAAsB;AACvD,UAAU,IAAyC,IAAI,mCAAO,kBAAkB,uBAAuB;AAAA,kGAAC;AACxG,CAAC,mBAAmB,qBAAM,kBAAkB,qBAAM;AAClD;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;;AAEA;AACA;AACA,0BAA0B,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB;;AAExB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAuC;AACpE,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB;;AAExB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,GAAG;AACH,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ,GAAG;AACH,EAAE;;AAEF;AACA,CAAC;;;;;;;UCpXD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA;;;;;WC5BA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC,I;;;;;WCPD,wF;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;;AAE6B;AACY;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM0L,SAAS,GAAG;EAChB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,IAAI,EAAE,SAAAA,CAAUtF,QAAQ,EAAEiF,GAAG,EAAE;IAC7BA,GAAG,GAAGA,GAAG,IAAIpG,MAAM,CAACnC,QAAQ;;IAE5B;IACA,MAAM6I,WAAW,GAAG/G,uDAAe,CAACyG,GAAG,CAACO,MAAM,CAAC;IAC/C,MAAMC,UAAU,GAAGjH,uDAAe,CAACyG,GAAG,CAACS,IAAI,CAAC;;IAE5C;IACA,MAAMxG,MAAM,GAAGqG,WAAW,CAACrG,MAAM,IAAIuG,UAAU,CAACvG,MAAM;IACtD,MAAMC,OAAO,GAAGoG,WAAW,CAACI,QAAQ,IAAIF,UAAU,CAACE,QAAQ;;IAE3D;IACA,IAAI,CAACzG,MAAM,IAAI,CAACC,OAAO,EAAE;MACvBpE,OAAO,CAACpB,KAAK,CACX,iDAAiD,GACjD,6DACF,CAAC;MACD,OAAO,KAAK;IACd;;IAEA;IACA,MAAMlB,MAAM,GAAG,IAAIwG,+CAAM,CAAC;MAAEC,MAAM;MAAEC;IAAQ,CAAC,CAAC;;IAE9C;IACA,IAAI,OAAOa,QAAQ,KAAK,UAAU,EAAE;MAClCvH,MAAM,CAAC0I,EAAE,CAAC,gBAAgB,EAAE,UAAU1B,OAAO,EAAE;QAC7CO,QAAQ,CAACuC,IAAI,CAAC9J,MAAM,EAAEgH,OAAO,CAAC;MAChC,CAAC,CAAC;IACJ;IAEA,OAAOhH,MAAM;EACf;AACF,CAAC;AAED,iEAAe4M,SAAS;;AAExB;AAC4C;;AAE5C;AACuB;;AAEvB;AACsD;AACE;AACX","sources":["webpack://BAFClient/webpack/universalModuleDefinition","webpack://BAFClient/./lib/apis/context.js","webpack://BAFClient/./lib/apis/instance.js","webpack://BAFClient/./lib/apis/metadata.js","webpack://BAFClient/./lib/apis/request.js","webpack://BAFClient/./lib/client.js","webpack://BAFClient/./lib/utils.js","webpack://BAFClient/./node_modules/native-promise-only/lib/npo.src.js","webpack://BAFClient/webpack/bootstrap","webpack://BAFClient/webpack/runtime/compat get default export","webpack://BAFClient/webpack/runtime/define property getters","webpack://BAFClient/webpack/runtime/global","webpack://BAFClient/webpack/runtime/hasOwnProperty shorthand","webpack://BAFClient/webpack/runtime/make namespace object","webpack://BAFClient/./lib/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"BAFClient\"] = factory();\n\telse\n\t\troot[\"BAFClient\"] = factory();\n})(Object(typeof self !== \"undefined\" ? self : this), () => {\nreturn ","/**\r\n * BoldDesk App Framework - Context API\r\n * Provides information about the current runtime environment\r\n */\r\n\r\nclass ContextAPI {\r\n constructor (data = {}) {\r\n this._data = {\r\n orgId: data.orgId || null,\r\n orgName: data.orgName || null,\r\n brandId: data.brandId || null,\r\n brandName: data.brandName || null,\r\n brandUrl: data.brandUrl || null,\r\n defaultBrandUrl: data.defaultBrandUrl || null,\r\n planId: data.planId || null,\r\n planName: data.planName || null,\r\n module: data.module || null,\r\n objectId: data.objectId || null,\r\n product: data.product || 'BoldDesk',\r\n user: data.user || {\r\n id: null,\r\n email: null,\r\n name: null,\r\n displayName: null,\r\n language: null,\r\n timezone: null\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get organization ID\r\n * @returns {string} Organization ID\r\n */\r\n getOrgId () {\r\n return this._data.orgId\r\n }\r\n\r\n /**\r\n * Get organization name\r\n * @returns {string} Organization name\r\n */\r\n getOrgName () {\r\n return this._data.orgName\r\n }\r\n\r\n /**\r\n * Get brand ID\r\n * @returns {string} Brand ID\r\n */\r\n getBrandId () {\r\n return this._data.brandId\r\n }\r\n\r\n /**\r\n * Get brand name\r\n * @returns {string} Brand name\r\n */\r\n getBrandName () {\r\n return this._data.brandName\r\n }\r\n\r\n /**\r\n * Get brand URL\r\n * @returns {string} Brand URL\r\n */\r\n getBrandUrl () {\r\n return this._data.brandUrl\r\n }\r\n\r\n /**\r\n * Get current module (ticket, contact, chat, etc.)\r\n * @returns {string} Current module\r\n */\r\n getModule () {\r\n return this._data.module\r\n }\r\n\r\n /**\r\n * Get current object ID in context\r\n * @returns {string} Object ID\r\n */\r\n getObjectId () {\r\n return this._data.objectId\r\n }\r\n\r\n /**\r\n * Get current product\r\n * @returns {string} Product name\r\n */\r\n getProduct () {\r\n return this._data.product\r\n }\r\n\r\n /**\r\n * Get current user information\r\n * @returns {Object} User object\r\n */\r\n getUser () {\r\n return this._data.user\r\n }\r\n\r\n /**\r\n * Get user ID\r\n * @returns {string} User ID\r\n */\r\n getUserId () {\r\n return this._data.user?.id\r\n }\r\n\r\n /**\r\n * Get user email\r\n * @returns {string} User email\r\n */\r\n getUserEmail () {\r\n return this._data.user?.email\r\n }\r\n\r\n /**\r\n * Get user name\r\n * @returns {string} User name\r\n */\r\n getUserName () {\r\n return this._data.user?.name\r\n }\r\n\r\n /**\r\n * Get user language preference\r\n * @returns {string} Language code (e.g., en-US)\r\n */\r\n getUserLanguage () {\r\n return this._data.user?.language\r\n }\r\n\r\n /**\r\n * Get user timezone\r\n * @returns {string} Timezone (e.g., Asia/Kolkata)\r\n */\r\n getUserTimezone () {\r\n return this._data.user?.timezone\r\n }\r\n\r\n /**\r\n * Get plan information\r\n * @returns {Object} Plan object with id and name\r\n */\r\n getPlan () {\r\n return {\r\n id: this._data.planId,\r\n name: this._data.planName\r\n }\r\n }\r\n\r\n /**\r\n * Get all context data\r\n * @returns {Object} Full context object\r\n */\r\n getAll () {\r\n return JSON.parse(JSON.stringify(this._data))\r\n }\r\n\r\n /**\r\n * Update context data (internal use)\r\n * @param {Object} data - New data to merge\r\n * @internal\r\n */\r\n _updateData (data) {\r\n Object.assign(this._data, data)\r\n }\r\n}\r\n\r\nexport default ContextAPI\r\n","/**\r\n * BoldDesk App Framework - Instance API\r\n * Provides access to app instances and instance-level operations\r\n */\r\n\r\nimport { generateUUID, isArray, isFunction } from '../utils'\r\n\r\nclass Instance {\r\n constructor (id, config = {}) {\r\n this.id = id || generateUUID()\r\n this.config = config\r\n this.widgets = config.widgets || []\r\n this.isActive = true\r\n }\r\n\r\n /**\r\n * Get instance ID\r\n * @returns {string}\r\n */\r\n getId () {\r\n return this.id\r\n }\r\n\r\n /**\r\n * Check if instance is active\r\n * @returns {boolean}\r\n */\r\n getIsActive () {\r\n return this.isActive\r\n }\r\n}\r\n\r\nclass InstanceAPI {\r\n constructor (client) {\r\n this._client = client\r\n this._instances = {}\r\n this._messageHandlers = {}\r\n }\r\n\r\n /**\r\n * Get current active instance\r\n * @returns {Instance}\r\n */\r\n current () {\r\n const currentId = this._client._currentInstanceId\r\n return this._instances[currentId] || null\r\n }\r\n\r\n /**\r\n * Get instance by ID\r\n * @param {string} id - Instance ID\r\n * @returns {Instance}\r\n */\r\n get (id) {\r\n return this._instances[id] || null\r\n }\r\n\r\n /**\r\n * Get all active instances\r\n * @returns {Array} Array of instances\r\n */\r\n all () {\r\n return Object.values(this._instances).filter(inst => inst && inst.getIsActive())\r\n }\r\n\r\n /**\r\n * Create a new instance\r\n * @param {Object} config - Instance configuration\r\n * @returns {Promise} Resolves with instance\r\n */\r\n create (config = {}) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const instance = new Instance(null, config)\r\n this._instances[instance.id] = instance\r\n\r\n // Post message to host to register instance\r\n this._client.postMessage('instance.create', { id: instance.id, config })\r\n\r\n resolve(instance)\r\n } catch (error) {\r\n reject(error)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Send message/data to other instances\r\n * @param {string|Array} instanceIds - Instance ID or array of IDs\r\n * @param {string} channel - Channel name\r\n * @param {*} payload - Data to send\r\n * @returns {Promise}\r\n */\r\n send (instanceIds, channel, payload) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const ids = isArray(instanceIds) ? instanceIds : [instanceIds]\r\n this._client.postMessage('instance.send', {\r\n instanceIds: ids,\r\n channel,\r\n payload\r\n })\r\n resolve()\r\n } catch (error) {\r\n reject(error)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Register handler to receive messages from other instances\r\n * @param {string} channel - Channel name\r\n * @param {Function} handler - Message handler\r\n * @returns {void}\r\n */\r\n receive (channel, handler) {\r\n if (!isFunction(handler)) {\r\n throw new Error('Handler must be a function')\r\n }\r\n\r\n if (!this._messageHandlers[channel]) {\r\n this._messageHandlers[channel] = []\r\n }\r\n\r\n this._messageHandlers[channel].push(handler)\r\n\r\n // Inform host about subscription\r\n this._client.postMessage('instance.receive', { channel })\r\n }\r\n\r\n /**\r\n * Unregister message handler\r\n * @param {string} channel - Channel name\r\n * @param {Function} handler - Optional specific handler to remove\r\n * @returns {void}\r\n */\r\n unreceive (channel, handler) {\r\n if (!this._messageHandlers[channel]) return\r\n\r\n if (handler) {\r\n const index = this._messageHandlers[channel].indexOf(handler)\r\n if (index > -1) {\r\n this._messageHandlers[channel].splice(index, 1)\r\n }\r\n } else {\r\n this._messageHandlers[channel] = []\r\n }\r\n }\r\n\r\n /**\r\n * Close current instance\r\n * @returns {Promise}\r\n */\r\n close () {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const instance = this.current()\r\n if (instance) {\r\n instance.isActive = false\r\n delete this._instances[instance.id]\r\n }\r\n this._client.postMessage('instance.close', { instanceId: instance?.id })\r\n resolve()\r\n } catch (error) {\r\n reject(error)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Resize widget container\r\n * @param {number} height - Height in pixels\r\n * @returns {Promise}\r\n */\r\n resize (height) {\r\n return new Promise((resolve, reject) => {\r\n if (typeof height !== 'number' || height < 0) {\r\n return reject(new Error('Height must be a positive number'))\r\n }\r\n\r\n try {\r\n this._client.postMessage('instance.resize', { height })\r\n resolve()\r\n } catch (error) {\r\n reject(error)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Trigger instance event (for receiving messages)\r\n * @internal\r\n * @param {string} channel - Channel name\r\n * @param {*} payload - Message payload\r\n */\r\n _triggerMessage (channel, payload) {\r\n if (this._messageHandlers[channel]) {\r\n this._messageHandlers[channel].forEach(handler => {\r\n try {\r\n handler(payload)\r\n } catch (error) {\r\n console.error(`Error in instance message handler for channel ${channel}:`, error)\r\n }\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Register instance (internal use)\r\n * @internal\r\n * @param {Object} data - Instance data from host\r\n */\r\n _registerInstance (data) {\r\n if (data.id) {\r\n if (!this._instances[data.id]) {\r\n this._instances[data.id] = new Instance(data.id, data.config)\r\n }\r\n if (data.isCurrent) {\r\n this._client._currentInstanceId = data.id\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { Instance, InstanceAPI }\r\n","/**\r\n * BoldDesk App Framework - Metadata API\r\n * Provides app and installation metadata information\r\n */\r\n\r\nclass MetadataAPI {\r\n constructor (data = {}) {\r\n this._data = {\r\n appId: data.appId || null,\r\n installationId: data.installationId || null,\r\n appName: data.appName || null,\r\n version: data.version || null,\r\n locations: data.locations || [],\r\n hasAllBrandAccess: data.hasAllBrandAccess || false,\r\n hasReadAccess: data.hasReadAccess || false,\r\n hasWriteAccess: data.hasWriteAccess || false,\r\n isActive: data.isActive || false,\r\n isEnabled: data.isEnabled || false,\r\n frameworkVersion: data.frameworkVersion || null,\r\n installDate: data.installDate || null,\r\n developer: data.developer || null\r\n }\r\n }\r\n\r\n /**\r\n * Get app ID\r\n * @returns {string} App ID\r\n */\r\n getAppId () {\r\n return this._data.appId\r\n }\r\n\r\n /**\r\n * Get installation ID (unique per installation)\r\n * @returns {string} Installation ID\r\n */\r\n getInstallationId () {\r\n return this._data.installationId\r\n }\r\n\r\n /**\r\n * Get app name\r\n * @returns {string} App name\r\n */\r\n getAppName () {\r\n return this._data.appName\r\n }\r\n\r\n /**\r\n * Get app version\r\n * @returns {string} Version (semantic versioning)\r\n */\r\n getVersion () {\r\n return this._data.version\r\n }\r\n\r\n /**\r\n * Get widget locations where app is available\r\n * @returns {Array} Array of location strings\r\n */\r\n getLocations () {\r\n return Array.from(this._data.locations)\r\n }\r\n\r\n /**\r\n * Check if app has all brand access\r\n * @returns {boolean}\r\n */\r\n hasAllBrandAccess () {\r\n return this._data.hasAllBrandAccess === true\r\n }\r\n\r\n /**\r\n * Check if app has read permissions\r\n * @returns {boolean}\r\n */\r\n hasReadAccess () {\r\n return this._data.hasReadAccess === true\r\n }\r\n\r\n /**\r\n * Check if app has write permissions\r\n * @returns {boolean}\r\n */\r\n hasWriteAccess () {\r\n return this._data.hasWriteAccess === true\r\n }\r\n\r\n /**\r\n * Check if app is active\r\n * @returns {boolean}\r\n */\r\n isActive () {\r\n return this._data.isActive === true\r\n }\r\n\r\n /**\r\n * Check if app is enabled\r\n * @returns {boolean}\r\n */\r\n isEnabled () {\r\n return this._data.isEnabled === true\r\n }\r\n\r\n /**\r\n * Get framework version\r\n * @returns {string} Framework version\r\n */\r\n getFrameworkVersion () {\r\n return this._data.frameworkVersion\r\n }\r\n\r\n /**\r\n * Get installation date\r\n * @returns {string} ISO date string\r\n */\r\n getInstallDate () {\r\n return this._data.installDate\r\n }\r\n\r\n /**\r\n * Get developer information\r\n * @returns {Object} Developer object\r\n */\r\n getDeveloper () {\r\n return this._data.developer ? JSON.parse(JSON.stringify(this._data.developer)) : null\r\n }\r\n\r\n /**\r\n * Check if location is supported\r\n * @param {string} location - Location to check\r\n * @returns {boolean}\r\n */\r\n isLocationSupported (location) {\r\n return this._data.locations.includes(location)\r\n }\r\n\r\n /**\r\n * Get all metadata\r\n * @returns {Object} Full metadata object\r\n */\r\n getAll () {\r\n return JSON.parse(JSON.stringify(this._data))\r\n }\r\n\r\n /**\r\n * Update metadata (internal use)\r\n * @param {Object} data - New data to merge\r\n * @internal\r\n */\r\n _updateData (data) {\r\n Object.assign(this._data, data)\r\n }\r\n}\r\n\r\nexport default MetadataAPI\r\n","/**\r\n * BoldDesk App Framework - Request API (Proxy)\r\n * Provides secure HTTP request capability through server-side proxy\r\n */\r\n\r\nimport { isObject, isString, isValidUrl } from '../utils'\r\n\r\nclass RequestAPI {\r\n constructor (client) {\r\n this._client = client\r\n }\r\n\r\n /**\r\n * Make an HTTP request through BoldDesk proxy\r\n * Prevents exposing sensitive data and handles CORS automatically\r\n *\r\n * @param {Object} options - Request options\r\n * @param {string} options.url - Full URL of the API endpoint (required)\r\n * @param {string} options.method - HTTP method (GET, POST, PUT, DELETE, PATCH) (required)\r\n * @param {Object} options.headers - HTTP headers (optional)\r\n * @param {Object} options.params - Query parameters (optional)\r\n * @param {Object|string} options.body - Request payload (optional, for POST/PUT/PATCH)\r\n * @param {number} options.timeout - Request timeout in ms (optional, default: 15000, max: 30000)\r\n * @param {boolean} options.autoRetry - Auto-retry on 429/5xx (optional, default: true)\r\n * @param {number} options.maxRetry - Max retry attempts (optional, default: 3)\r\n * @param {number} options.retryDelay - Delay between retries in ms (optional, default: 1000)\r\n *\r\n * @returns {Promise} Resolves with response object { status, statusText, headers, data, body }\r\n *\r\n * @example\r\n * // Simple GET request\r\n * sdk.request({\r\n * url: 'https://api.example.com/users',\r\n * method: 'GET'\r\n * }).then(response => console.log(response.data))\r\n *\r\n * @example\r\n * // POST with data\r\n * sdk.request({\r\n * url: 'https://api.example.com/tickets',\r\n * method: 'POST',\r\n * headers: { 'Content-Type': 'application/json' },\r\n * body: JSON.stringify({ subject: 'Help needed', priority: 'high' })\r\n * })\r\n *\r\n * @example\r\n * // Using secure settings placeholders\r\n * sdk.request({\r\n * url: 'https://api.example.com/secure-endpoint',\r\n * method: 'GET',\r\n * headers: { 'Authorization': 'Bearer {{setting.api_key}}' }\r\n * })\r\n */\r\n request (options = {}) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // Validate required options\r\n if (!options.url) {\r\n throw new Error('Request URL is required')\r\n }\r\n\r\n if (!options.method) {\r\n throw new Error('Request method is required')\r\n }\r\n\r\n // Validate URL format\r\n if (!isValidUrl(options.url)) {\r\n throw new Error('Invalid URL format: ' + options.url)\r\n }\r\n\r\n // Validate method\r\n const validMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']\r\n const method = (options.method || 'GET').toUpperCase()\r\n if (!validMethods.includes(method)) {\r\n throw new Error('Invalid HTTP method: ' + method)\r\n }\r\n\r\n // Build request object\r\n const requestObj = {\r\n url: options.url,\r\n method,\r\n headers: options.headers || {},\r\n timeout: Math.min(options.timeout || 15000, 30000),\r\n autoRetry: options.autoRetry !== false,\r\n maxRetry: options.maxRetry || 3,\r\n retryDelay: options.retryDelay || 1000\r\n }\r\n\r\n // Add query parameters if provided\r\n if (options.params && isObject(options.params)) {\r\n const params = new URLSearchParams(options.params)\r\n const separator = options.url.includes('?') ? '&' : '?'\r\n requestObj.url += separator + params.toString()\r\n }\r\n\r\n // Add body for POST/PUT/PATCH\r\n if (['POST', 'PUT', 'PATCH'].includes(method)) {\r\n if (options.body) {\r\n requestObj.body = isObject(options.body)\r\n ? JSON.stringify(options.body)\r\n : options.body\r\n }\r\n }\r\n\r\n // Send request through BoldDesk proxy\r\n this._client.postMessage('request.send', requestObj, (response) => {\r\n if (response.error) {\r\n reject(new Error(response.error))\r\n } else {\r\n resolve(response)\r\n }\r\n })\r\n } catch (error) {\r\n reject(error)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Make a GET request\r\n * @param {string} url - URL endpoint\r\n * @param {Object} options - Additional options\r\n * @returns {Promise}\r\n */\r\n get (url, options = {}) {\r\n return this.request({\r\n ...options,\r\n url,\r\n method: 'GET'\r\n })\r\n }\r\n\r\n /**\r\n * Make a POST request\r\n * @param {string} url - URL endpoint\r\n * @param {*} body - Request body\r\n * @param {Object} options - Additional options\r\n * @returns {Promise}\r\n */\r\n post (url, body, options = {}) {\r\n return this.request({\r\n ...options,\r\n url,\r\n method: 'POST',\r\n body\r\n })\r\n }\r\n\r\n /**\r\n * Make a PUT request\r\n * @param {string} url - URL endpoint\r\n * @param {*} body - Request body\r\n * @param {Object} options - Additional options\r\n * @returns {Promise}\r\n */\r\n put (url, body, options = {}) {\r\n return this.request({\r\n ...options,\r\n url,\r\n method: 'PUT',\r\n body\r\n })\r\n }\r\n\r\n /**\r\n * Make a PATCH request\r\n * @param {string} url - URL endpoint\r\n * @param {*} body - Request body\r\n * @param {Object} options - Additional options\r\n * @returns {Promise}\r\n */\r\n patch (url, body, options = {}) {\r\n return this.request({\r\n ...options,\r\n url,\r\n method: 'PATCH',\r\n body\r\n })\r\n }\r\n\r\n /**\r\n * Make a DELETE request\r\n * @param {string} url - URL endpoint\r\n * @param {Object} options - Additional options\r\n * @returns {Promise}\r\n */\r\n delete (url, options = {}) {\r\n return this.request({\r\n ...options,\r\n url,\r\n method: 'DELETE'\r\n })\r\n }\r\n}\r\n\r\nexport default RequestAPI\r\n","/**\r\n * BoldDesk App Framework - Client SDK\r\n * Core client for cross-frame communication and data access\r\n */\r\n\r\nimport { queryParameters, when, isObject, isString, isArray, isFunction, debounce, deepClone } from './utils'\r\nimport ContextAPI from './apis/context'\r\nimport MetadataAPI from './apis/metadata'\r\nimport { InstanceAPI } from './apis/instance'\r\nimport RequestAPI from './apis/request'\r\nimport NativePromise from 'native-promise-only'\r\n\r\nconst Promise = window.Promise || NativePromise\r\n\r\n// Constants\r\nconst IFRAME_SESSION_TIMEOUT = 5 * 60 * 1000\r\nconst PROMISE_TIMEOUT = 10000\r\nconst PROMISE_TIMEOUT_LONG = 5 * 60 * 1000\r\n\r\nclass Client {\r\n constructor (options = {}) {\r\n this.origin = options.origin\r\n this.appGuid = options.appGuid\r\n\r\n // Initialize state\r\n this._isReady = false\r\n this._messageQueue = []\r\n this._pendingRequests = {}\r\n this._eventListeners = {}\r\n this._requestId = 0\r\n this._currentInstanceId = null\r\n\r\n // Initialize APIs\r\n this.context = new ContextAPI()\r\n this.metadata = new MetadataAPI()\r\n this.instance = new InstanceAPI(this)\r\n this.request = new RequestAPI(this)\r\n\r\n // Bind message handler\r\n this._handleMessage = this._handleMessage.bind(this)\r\n window.addEventListener('message', this._handleMessage)\r\n\r\n // Register with host\r\n this._registerWithHost()\r\n }\r\n\r\n /**\r\n * Register app with BoldDesk host\r\n * @private\r\n */\r\n _registerWithHost () {\r\n this.postMessage('app.register', {\r\n appGuid: this.appGuid,\r\n version: '1.0.0'\r\n })\r\n }\r\n\r\n /**\r\n * Post message to host frame\r\n * @param {string} action - Action name\r\n * @param {*} data - Data payload\r\n * @param {Function} callback - Optional callback\r\n * @private\r\n */\r\n postMessage (action, data, callback) {\r\n const requestId = ++this._requestId\r\n\r\n if (callback && isFunction(callback)) {\r\n this._pendingRequests[requestId] = callback\r\n }\r\n\r\n const message = {\r\n type: 'baf.request',\r\n action,\r\n data,\r\n requestId,\r\n appGuid: this.appGuid,\r\n timestamp: Date.now()\r\n }\r\n\r\n if (this._isReady) {\r\n window.parent.postMessage(message, this.origin)\r\n } else {\r\n this._messageQueue.push(message)\r\n }\r\n }\r\n\r\n /**\r\n * Handle incoming messages from host\r\n * @private\r\n */\r\n _handleMessage (event) {\r\n if (event.origin !== this.origin) return\r\n\r\n const message = event.data\r\n if (!message || message.type !== 'baf.response') return\r\n\r\n // Handle app registration\r\n if (message.action === 'app.registered') {\r\n this._isReady = true\r\n this._processMessageQueue()\r\n this._handleAppRegistered(message.data)\r\n return\r\n }\r\n\r\n // Handle pending request responses\r\n if (message.requestId && this._pendingRequests[message.requestId]) {\r\n const callback = this._pendingRequests[message.requestId]\r\n delete this._pendingRequests[message.requestId]\r\n callback(message.data)\r\n return\r\n }\r\n\r\n // Handle events\r\n if (message.action === 'event') {\r\n this._handleEvent(message.eventName, message.data)\r\n return\r\n }\r\n\r\n // Handle instance messages\r\n if (message.action === 'instance.message') {\r\n this.instance._triggerMessage(message.channel, message.payload)\r\n return\r\n }\r\n\r\n // Handle instance registration\r\n if (message.action === 'instance.registered') {\r\n this.instance._registerInstance(message.data)\r\n return\r\n }\r\n }\r\n\r\n /**\r\n * Handle app registration from host\r\n * @private\r\n */\r\n _handleAppRegistered (data) {\r\n if (data.context) {\r\n this.context._updateData(data.context)\r\n }\r\n\r\n if (data.metadata) {\r\n this.metadata._updateData(data.metadata)\r\n }\r\n\r\n if (data.instanceId) {\r\n this._currentInstanceId = data.instanceId\r\n }\r\n\r\n // Emit app.registered event\r\n this._emitEvent('app.registered', {\r\n context: this.context.getAll(),\r\n metadata: this.metadata.getAll()\r\n })\r\n }\r\n\r\n /**\r\n * Process queued messages\r\n * @private\r\n */\r\n _processMessageQueue () {\r\n while (this._messageQueue.length > 0) {\r\n const message = this._messageQueue.shift()\r\n window.parent.postMessage(message, this.origin)\r\n }\r\n }\r\n\r\n /**\r\n * Get data from platform context\r\n * Retrieves data like ticket info, user info, etc.\r\n *\r\n * @param {string|Array} path - Data path or array of paths\r\n * @returns {Promise} Resolves with requested data\r\n *\r\n * @example\r\n * // Get single value\r\n * sdk.get('ticket.subject').then(data => {\r\n * console.log(data['ticket.subject']);\r\n * });\r\n *\r\n * @example\r\n * // Get multiple values\r\n * sdk.get(['ticket.subject', 'ticket.requester.email']).then(data => {\r\n * console.log(data['ticket.subject']);\r\n * console.log(data['ticket.requester.email']);\r\n * });\r\n */\r\n get (path) {\r\n return new Promise((resolve, reject) => {\r\n if (!path) {\r\n return reject(new Error('Path is required for get() method'))\r\n }\r\n\r\n try {\r\n const paths = isArray(path) ? path : [path]\r\n this.postMessage('data.get', { paths }, (response) => {\r\n if (response.error) {\r\n reject(new Error(response.error))\r\n } else {\r\n resolve(response.data || {})\r\n }\r\n })\r\n } catch (error) {\r\n reject(error)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Set data in platform context\r\n * Updates or stores data like ticket properties, custom fields, etc.\r\n *\r\n * @param {string} path - Data path to update\r\n * @param {*} value - Value to set\r\n * @returns {Promise} Resolves when data is set\r\n *\r\n * @example\r\n * sdk.set('ticket.subject', 'Issue Resolved').then(() => {\r\n * console.log('Subject updated');\r\n * });\r\n */\r\n set (path, value) {\r\n return new Promise((resolve, reject) => {\r\n if (!path) {\r\n return reject(new Error('Path is required for set() method'))\r\n }\r\n\r\n try {\r\n this.postMessage('data.set', { path, value }, (response) => {\r\n if (response.error) {\r\n reject(new Error(response.error))\r\n } else {\r\n resolve()\r\n }\r\n })\r\n } catch (error) {\r\n reject(error)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Register event listener\r\n * Listen for platform events like data changes, UI events, etc.\r\n *\r\n * @param {string} eventName - Event name to listen for\r\n * @param {Function} callback - Handler function\r\n * @returns {void}\r\n *\r\n * @example\r\n * sdk.on('ticket.updated', (ticket) => {\r\n * console.log('Ticket updated:', ticket);\r\n * });\r\n */\r\n on (eventName, callback) {\r\n if (!isString(eventName) || !isFunction(callback)) {\r\n throw new Error('on() requires eventName (string) and callback (function)')\r\n }\r\n\r\n if (!this._eventListeners[eventName]) {\r\n this._eventListeners[eventName] = []\r\n this.postMessage('event.register', { eventName })\r\n }\r\n\r\n this._eventListeners[eventName].push(callback)\r\n }\r\n\r\n /**\r\n * Unregister event listener\r\n * Stop listening for platform events\r\n *\r\n * @param {string} eventName - Event name\r\n * @param {Function} callback - Optional specific handler to remove\r\n * @returns {void}\r\n *\r\n * @example\r\n * sdk.off('ticket.updated');\r\n */\r\n off (eventName, callback) {\r\n if (!this._eventListeners[eventName]) return\r\n\r\n if (callback && isFunction(callback)) {\r\n const index = this._eventListeners[eventName].indexOf(callback)\r\n if (index > -1) {\r\n this._eventListeners[eventName].splice(index, 1)\r\n }\r\n } else {\r\n this._eventListeners[eventName] = []\r\n }\r\n\r\n // Unregister from host if no more listeners\r\n if (this._eventListeners[eventName].length === 0) {\r\n this.postMessage('event.unregister', { eventName })\r\n }\r\n }\r\n\r\n /**\r\n * Invoke a platform action or method\r\n * Execute platform-exposed methods like opening modals, etc.\r\n *\r\n * @param {string} methodName - Method name to invoke\r\n * @param {*} payload - Optional data for the method\r\n * @returns {Promise} Resolves with method result\r\n *\r\n * @example\r\n * sdk.invoke('modal.open', {\r\n * title: 'Contact Details',\r\n * content: 'View full contact information'\r\n * });\r\n */\r\n invoke (methodName, payload) {\r\n return new Promise((resolve, reject) => {\r\n if (!isString(methodName)) {\r\n return reject(new Error('Method name is required'))\r\n }\r\n\r\n try {\r\n this.postMessage('action.invoke', { methodName, payload }, (response) => {\r\n if (response.error) {\r\n reject(new Error(response.error))\r\n } else {\r\n resolve(response.result)\r\n }\r\n })\r\n } catch (error) {\r\n reject(error)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Trigger a custom event\r\n * Emit custom events to the platform or other app components\r\n *\r\n * @param {string} eventName - Event name\r\n * @param {*} data - Event data\r\n * @returns {void}\r\n *\r\n * @example\r\n * sdk.trigger('custom.notification', {\r\n * message: 'Data saved successfully'\r\n * });\r\n */\r\n trigger (eventName, data) {\r\n if (!isString(eventName)) {\r\n throw new Error('Event name must be a string')\r\n }\r\n\r\n this.postMessage('event.trigger', { eventName, data })\r\n\r\n // Also emit locally\r\n this._emitEvent(eventName, data)\r\n }\r\n\r\n /**\r\n * Check if capability or value exists\r\n * Verify availability of features or data paths\r\n *\r\n * @param {string} name - Capability or value name\r\n * @returns {Promise} Resolves with boolean\r\n *\r\n * @example\r\n * sdk.has('ticket.custom_field_123').then(exists => {\r\n * if (exists) {\r\n * console.log('Custom field is available');\r\n * }\r\n * });\r\n */\r\n has (name) {\r\n return new Promise((resolve, reject) => {\r\n if (!isString(name)) {\r\n return reject(new Error('Name must be a string'))\r\n }\r\n\r\n try {\r\n this.postMessage('capability.check', { name }, (response) => {\r\n resolve(response.exists === true)\r\n })\r\n } catch (error) {\r\n reject(error)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Internal: Emit event to local listeners\r\n * @private\r\n */\r\n _emitEvent (eventName, data) {\r\n if (this._eventListeners[eventName]) {\r\n this._eventListeners[eventName].forEach(callback => {\r\n try {\r\n callback(data)\r\n } catch (error) {\r\n console.error(`Error in event listener for ${eventName}:`, error)\r\n }\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Internal: Handle incoming event from host\r\n * @private\r\n */\r\n _handleEvent (eventName, data) {\r\n this._emitEvent(eventName, data)\r\n }\r\n\r\n /**\r\n * Destroy client and clean up\r\n * @returns {void}\r\n */\r\n destroy () {\r\n window.removeEventListener('message', this._handleMessage)\r\n this._eventListeners = {}\r\n this._pendingRequests = {}\r\n this._messageQueue = []\r\n this._isReady = false\r\n }\r\n}\r\n\r\nexport default Client\r\n","/**\r\n * BoldDesk App Framework - Utility Functions\r\n * Provides helper functions for common operations\r\n */\r\n\r\n/**\r\n * Query string parser\r\n * @param {string} queryString - Query string to parse (with or without ?)\r\n * @returns {Object} Parsed parameters\r\n */\r\nexport function queryParameters (queryString) {\r\n const params = {}\r\n if (!queryString) return params\r\n\r\n const cleaned = queryString.replace(/^\\?|^#/, '')\r\n if (!cleaned) return params\r\n\r\n cleaned.split('&').forEach((pair) => {\r\n const [key, value] = pair.split('=')\r\n if (key) {\r\n params[decodeURIComponent(key)] = value ? decodeURIComponent(value) : true\r\n }\r\n })\r\n\r\n return params\r\n}\r\n\r\n/**\r\n * Promise utility - when all conditions are met\r\n * @param {Array} promises - Array of promises to wait for\r\n * @returns {Promise}\r\n */\r\nexport function when (promises) {\r\n return Promise.all(promises)\r\n}\r\n\r\n/**\r\n * Type checking utilities\r\n */\r\nexport const isObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]'\r\nexport const isString = (str) => typeof str === 'string'\r\nexport const isArray = (arr) => Array.isArray(arr)\r\nexport const isFunction = (fn) => typeof fn === 'function'\r\nexport const isUndefined = (val) => typeof val === 'undefined'\r\nexport const isNull = (val) => val === null\r\n\r\n/**\r\n * Debounce function - delays execution\r\n * @param {Function} fn - Function to debounce\r\n * @param {number} delay - Delay in milliseconds\r\n * @returns {Function} Debounced function\r\n */\r\nexport function debounce (fn, delay) {\r\n let timeoutId\r\n return function (...args) {\r\n clearTimeout(timeoutId)\r\n timeoutId = setTimeout(() => fn.apply(this, args), delay)\r\n }\r\n}\r\n\r\n/**\r\n * Throttle function - rate limits execution\r\n * @param {Function} fn - Function to throttle\r\n * @param {number} limit - Time limit in milliseconds\r\n * @returns {Function} Throttled function\r\n */\r\nexport function throttle (fn, limit) {\r\n let inThrottle\r\n return function (...args) {\r\n if (!inThrottle) {\r\n fn.apply(this, args)\r\n inThrottle = true\r\n setTimeout(() => (inThrottle = false), limit)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Deep clone an object\r\n * @param {*} obj - Object to clone\r\n * @returns {*} Cloned object\r\n */\r\nexport function deepClone (obj) {\r\n if (obj === null || typeof obj !== 'object') return obj\r\n if (obj instanceof Date) return new Date(obj.getTime())\r\n if (obj instanceof Array) return obj.map(item => deepClone(item))\r\n if (obj instanceof Object) {\r\n const cloned = {}\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\r\n/**\r\n * Merge objects deeply\r\n * @param {Object} target - Target object\r\n * @param {Object} source - Source object\r\n * @returns {Object} Merged object\r\n */\r\nexport function deepMerge (target, source) {\r\n const result = { ...target }\r\n for (const key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n if (isObject(source[key]) && isObject(result[key])) {\r\n result[key] = deepMerge(result[key], source[key])\r\n } else {\r\n result[key] = deepClone(source[key])\r\n }\r\n }\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * UUID v4 generator\r\n * @returns {string} Generated UUID\r\n */\r\nexport function generateUUID () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n const r = (Math.random() * 16) | 0\r\n const v = c === 'x' ? r : (r & 0x3) | 0x8\r\n return v.toString(16)\r\n })\r\n}\r\n\r\n/**\r\n * Validate manifest fields\r\n * @param {Object} manifest - Manifest object to validate\r\n * @returns {Object} Validation result { valid: boolean, errors: Array }\r\n */\r\nexport function validateManifest (manifest) {\r\n const errors = []\r\n\r\n if (!manifest.name) errors.push('Manifest field \"name\" is required')\r\n if (!manifest.version) errors.push('Manifest field \"version\" is required')\r\n if (!manifest.frameworkVersion) errors.push('Manifest field \"frameworkVersion\" is required')\r\n if (!manifest.product) errors.push('Manifest field \"product\" is required')\r\n\r\n if (manifest.developer) {\r\n const dev = manifest.developer\r\n if (!dev.name) errors.push('Developer field \"name\" is required')\r\n if (!dev.contactEmail) errors.push('Developer field \"contactEmail\" is required')\r\n if (!dev.supportEmail) errors.push('Developer field \"supportEmail\" is required')\r\n } else {\r\n errors.push('Manifest field \"developer\" is required')\r\n }\r\n\r\n if (!Array.isArray(manifest.trustedDomains)) {\r\n errors.push('Manifest field \"trustedDomains\" must be an array')\r\n }\r\n\r\n return {\r\n valid: errors.length === 0,\r\n errors\r\n }\r\n}\r\n\r\n/**\r\n * Parse widget locations to ensure valid format\r\n * @param {Array} locations - Widget locations from manifest\r\n * @returns {Array} Parsed locations\r\n */\r\nexport function parseWidgetLocations (locations) {\r\n const validLocations = [\r\n 'desk.menu.left',\r\n 'desk.ticket.view.rightpanel',\r\n 'desk.contact.view.rightpanel',\r\n 'desk.contactgroup.view.rightpanel',\r\n 'desk.chat.view.rightpanel',\r\n 'desk.cti.widget'\r\n ]\r\n\r\n return locations.filter(loc => validLocations.includes(loc))\r\n}\r\n\r\n/**\r\n * Validate URL format\r\n * @param {string} url - URL to validate\r\n * @returns {boolean} Is valid URL\r\n */\r\nexport function isValidUrl (url) {\r\n try {\r\n new URL(url)\r\n return true\r\n } catch (e) {\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * Format error message for logging\r\n * @param {string} context - Context of error\r\n * @param {Error} error - Error object\r\n * @returns {string} Formatted error message\r\n */\r\nexport function formatError (context, error) {\r\n return `[${context}] ${error.message || error}`\r\n}\r\n","/*! Native Promise Only\n v0.8.1 (c) Kyle Simpson\n MIT License: http://getify.mit-license.org\n*/\n\n(function UMD(name,context,definition){\n\t// special form of UMD for polyfilling across evironments\n\tcontext[name] = context[name] || definition();\n\tif (typeof module != \"undefined\" && module.exports) { module.exports = context[name]; }\n\telse if (typeof define == \"function\" && define.amd) { define(function $AMD$(){ return context[name]; }); }\n})(\"Promise\",typeof global != \"undefined\" ? global : this,function DEF(){\n\t/*jshint validthis:true */\n\t\"use strict\";\n\n\tvar builtInProp, cycle, scheduling_queue,\n\t\tToString = Object.prototype.toString,\n\t\ttimer = (typeof setImmediate != \"undefined\") ?\n\t\t\tfunction timer(fn) { return setImmediate(fn); } :\n\t\t\tsetTimeout\n\t;\n\n\t// dammit, IE8.\n\ttry {\n\t\tObject.defineProperty({},\"x\",{});\n\t\tbuiltInProp = function builtInProp(obj,name,val,config) {\n\t\t\treturn Object.defineProperty(obj,name,{\n\t\t\t\tvalue: val,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: config !== false\n\t\t\t});\n\t\t};\n\t}\n\tcatch (err) {\n\t\tbuiltInProp = function builtInProp(obj,name,val) {\n\t\t\tobj[name] = val;\n\t\t\treturn obj;\n\t\t};\n\t}\n\n\t// Note: using a queue instead of array for efficiency\n\tscheduling_queue = (function Queue() {\n\t\tvar first, last, item;\n\n\t\tfunction Item(fn,self) {\n\t\t\tthis.fn = fn;\n\t\t\tthis.self = self;\n\t\t\tthis.next = void 0;\n\t\t}\n\n\t\treturn {\n\t\t\tadd: function add(fn,self) {\n\t\t\t\titem = new Item(fn,self);\n\t\t\t\tif (last) {\n\t\t\t\t\tlast.next = item;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfirst = item;\n\t\t\t\t}\n\t\t\t\tlast = item;\n\t\t\t\titem = void 0;\n\t\t\t},\n\t\t\tdrain: function drain() {\n\t\t\t\tvar f = first;\n\t\t\t\tfirst = last = cycle = void 0;\n\n\t\t\t\twhile (f) {\n\t\t\t\t\tf.fn.call(f.self);\n\t\t\t\t\tf = f.next;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t})();\n\n\tfunction schedule(fn,self) {\n\t\tscheduling_queue.add(fn,self);\n\t\tif (!cycle) {\n\t\t\tcycle = timer(scheduling_queue.drain);\n\t\t}\n\t}\n\n\t// promise duck typing\n\tfunction isThenable(o) {\n\t\tvar _then, o_type = typeof o;\n\n\t\tif (o != null &&\n\t\t\t(\n\t\t\t\to_type == \"object\" || o_type == \"function\"\n\t\t\t)\n\t\t) {\n\t\t\t_then = o.then;\n\t\t}\n\t\treturn typeof _then == \"function\" ? _then : false;\n\t}\n\n\tfunction notify() {\n\t\tfor (var i=0; i<this.chain.length; i++) {\n\t\t\tnotifyIsolated(\n\t\t\t\tthis,\n\t\t\t\t(this.state === 1) ? this.chain[i].success : this.chain[i].failure,\n\t\t\t\tthis.chain[i]\n\t\t\t);\n\t\t}\n\t\tthis.chain.length = 0;\n\t}\n\n\t// NOTE: This is a separate function to isolate\n\t// the `try..catch` so that other code can be\n\t// optimized better\n\tfunction notifyIsolated(self,cb,chain) {\n\t\tvar ret, _then;\n\t\ttry {\n\t\t\tif (cb === false) {\n\t\t\t\tchain.reject(self.msg);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (cb === true) {\n\t\t\t\t\tret = self.msg;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tret = cb.call(void 0,self.msg);\n\t\t\t\t}\n\n\t\t\t\tif (ret === chain.promise) {\n\t\t\t\t\tchain.reject(TypeError(\"Promise-chain cycle\"));\n\t\t\t\t}\n\t\t\t\telse if (_then = isThenable(ret)) {\n\t\t\t\t\t_then.call(ret,chain.resolve,chain.reject);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tchain.resolve(ret);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tchain.reject(err);\n\t\t}\n\t}\n\n\tfunction resolve(msg) {\n\t\tvar _then, self = this;\n\n\t\t// already triggered?\n\t\tif (self.triggered) { return; }\n\n\t\tself.triggered = true;\n\n\t\t// unwrap\n\t\tif (self.def) {\n\t\t\tself = self.def;\n\t\t}\n\n\t\ttry {\n\t\t\tif (_then = isThenable(msg)) {\n\t\t\t\tschedule(function(){\n\t\t\t\t\tvar def_wrapper = new MakeDefWrapper(self);\n\t\t\t\t\ttry {\n\t\t\t\t\t\t_then.call(msg,\n\t\t\t\t\t\t\tfunction $resolve$(){ resolve.apply(def_wrapper,arguments); },\n\t\t\t\t\t\t\tfunction $reject$(){ reject.apply(def_wrapper,arguments); }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\treject.call(def_wrapper,err);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\telse {\n\t\t\t\tself.msg = msg;\n\t\t\t\tself.state = 1;\n\t\t\t\tif (self.chain.length > 0) {\n\t\t\t\t\tschedule(notify,self);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\treject.call(new MakeDefWrapper(self),err);\n\t\t}\n\t}\n\n\tfunction reject(msg) {\n\t\tvar self = this;\n\n\t\t// already triggered?\n\t\tif (self.triggered) { return; }\n\n\t\tself.triggered = true;\n\n\t\t// unwrap\n\t\tif (self.def) {\n\t\t\tself = self.def;\n\t\t}\n\n\t\tself.msg = msg;\n\t\tself.state = 2;\n\t\tif (self.chain.length > 0) {\n\t\t\tschedule(notify,self);\n\t\t}\n\t}\n\n\tfunction iteratePromises(Constructor,arr,resolver,rejecter) {\n\t\tfor (var idx=0; idx<arr.length; idx++) {\n\t\t\t(function IIFE(idx){\n\t\t\t\tConstructor.resolve(arr[idx])\n\t\t\t\t.then(\n\t\t\t\t\tfunction $resolver$(msg){\n\t\t\t\t\t\tresolver(idx,msg);\n\t\t\t\t\t},\n\t\t\t\t\trejecter\n\t\t\t\t);\n\t\t\t})(idx);\n\t\t}\n\t}\n\n\tfunction MakeDefWrapper(self) {\n\t\tthis.def = self;\n\t\tthis.triggered = false;\n\t}\n\n\tfunction MakeDef(self) {\n\t\tthis.promise = self;\n\t\tthis.state = 0;\n\t\tthis.triggered = false;\n\t\tthis.chain = [];\n\t\tthis.msg = void 0;\n\t}\n\n\tfunction Promise(executor) {\n\t\tif (typeof executor != \"function\") {\n\t\t\tthrow TypeError(\"Not a function\");\n\t\t}\n\n\t\tif (this.__NPO__ !== 0) {\n\t\t\tthrow TypeError(\"Not a promise\");\n\t\t}\n\n\t\t// instance shadowing the inherited \"brand\"\n\t\t// to signal an already \"initialized\" promise\n\t\tthis.__NPO__ = 1;\n\n\t\tvar def = new MakeDef(this);\n\n\t\tthis[\"then\"] = function then(success,failure) {\n\t\t\tvar o = {\n\t\t\t\tsuccess: typeof success == \"function\" ? success : true,\n\t\t\t\tfailure: typeof failure == \"function\" ? failure : false\n\t\t\t};\n\t\t\t// Note: `then(..)` itself can be borrowed to be used against\n\t\t\t// a different promise constructor for making the chained promise,\n\t\t\t// by substituting a different `this` binding.\n\t\t\to.promise = new this.constructor(function extractChain(resolve,reject) {\n\t\t\t\tif (typeof resolve != \"function\" || typeof reject != \"function\") {\n\t\t\t\t\tthrow TypeError(\"Not a function\");\n\t\t\t\t}\n\n\t\t\t\to.resolve = resolve;\n\t\t\t\to.reject = reject;\n\t\t\t});\n\t\t\tdef.chain.push(o);\n\n\t\t\tif (def.state !== 0) {\n\t\t\t\tschedule(notify,def);\n\t\t\t}\n\n\t\t\treturn o.promise;\n\t\t};\n\t\tthis[\"catch\"] = function $catch$(failure) {\n\t\t\treturn this.then(void 0,failure);\n\t\t};\n\n\t\ttry {\n\t\t\texecutor.call(\n\t\t\t\tvoid 0,\n\t\t\t\tfunction publicResolve(msg){\n\t\t\t\t\tresolve.call(def,msg);\n\t\t\t\t},\n\t\t\t\tfunction publicReject(msg) {\n\t\t\t\t\treject.call(def,msg);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\tcatch (err) {\n\t\t\treject.call(def,err);\n\t\t}\n\t}\n\n\tvar PromisePrototype = builtInProp({},\"constructor\",Promise,\n\t\t/*configurable=*/false\n\t);\n\n\t// Note: Android 4 cannot use `Object.defineProperty(..)` here\n\tPromise.prototype = PromisePrototype;\n\n\t// built-in \"brand\" to signal an \"uninitialized\" promise\n\tbuiltInProp(PromisePrototype,\"__NPO__\",0,\n\t\t/*configurable=*/false\n\t);\n\n\tbuiltInProp(Promise,\"resolve\",function Promise$resolve(msg) {\n\t\tvar Constructor = this;\n\n\t\t// spec mandated checks\n\t\t// note: best \"isPromise\" check that's practical for now\n\t\tif (msg && typeof msg == \"object\" && msg.__NPO__ === 1) {\n\t\t\treturn msg;\n\t\t}\n\n\t\treturn new Constructor(function executor(resolve,reject){\n\t\t\tif (typeof resolve != \"function\" || typeof reject != \"function\") {\n\t\t\t\tthrow TypeError(\"Not a function\");\n\t\t\t}\n\n\t\t\tresolve(msg);\n\t\t});\n\t});\n\n\tbuiltInProp(Promise,\"reject\",function Promise$reject(msg) {\n\t\treturn new this(function executor(resolve,reject){\n\t\t\tif (typeof resolve != \"function\" || typeof reject != \"function\") {\n\t\t\t\tthrow TypeError(\"Not a function\");\n\t\t\t}\n\n\t\t\treject(msg);\n\t\t});\n\t});\n\n\tbuiltInProp(Promise,\"all\",function Promise$all(arr) {\n\t\tvar Constructor = this;\n\n\t\t// spec mandated checks\n\t\tif (ToString.call(arr) != \"[object Array]\") {\n\t\t\treturn Constructor.reject(TypeError(\"Not an array\"));\n\t\t}\n\t\tif (arr.length === 0) {\n\t\t\treturn Constructor.resolve([]);\n\t\t}\n\n\t\treturn new Constructor(function executor(resolve,reject){\n\t\t\tif (typeof resolve != \"function\" || typeof reject != \"function\") {\n\t\t\t\tthrow TypeError(\"Not a function\");\n\t\t\t}\n\n\t\t\tvar len = arr.length, msgs = Array(len), count = 0;\n\n\t\t\titeratePromises(Constructor,arr,function resolver(idx,msg) {\n\t\t\t\tmsgs[idx] = msg;\n\t\t\t\tif (++count === len) {\n\t\t\t\t\tresolve(msgs);\n\t\t\t\t}\n\t\t\t},reject);\n\t\t});\n\t});\n\n\tbuiltInProp(Promise,\"race\",function Promise$race(arr) {\n\t\tvar Constructor = this;\n\n\t\t// spec mandated checks\n\t\tif (ToString.call(arr) != \"[object Array]\") {\n\t\t\treturn Constructor.reject(TypeError(\"Not an array\"));\n\t\t}\n\n\t\treturn new Constructor(function executor(resolve,reject){\n\t\t\tif (typeof resolve != \"function\" || typeof reject != \"function\") {\n\t\t\t\tthrow TypeError(\"Not a function\");\n\t\t\t}\n\n\t\t\titeratePromises(Constructor,arr,function resolver(idx,msg){\n\t\t\t\tresolve(msg);\n\t\t\t},reject);\n\t\t});\n\t});\n\n\treturn Promise;\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tif (!(moduleId in __webpack_modules__)) {\n\t\tdelete __webpack_module_cache__[moduleId];\n\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\r\n * BoldDesk App Framework SDK\r\n * Main entry point for the BAF SDK library\r\n */\r\n\r\nimport Client from './client'\r\nimport { queryParameters } from './utils'\r\n\r\n/**\r\n * BAFClient - BoldDesk App Framework Client\r\n *\r\n * Main API for initializing and using the BoldDesk App Framework SDK\r\n * in embedded app iframes.\r\n *\r\n * @example\r\n * // Initialize the client\r\n * const client = BAFClient.init((context) => {\r\n * console.log('App initialized');\r\n * console.log('Current module:', context.module);\r\n * console.log('User:', context.user.name);\r\n * });\r\n *\r\n * // Use the client APIs\r\n * client.get('ticket.subject').then(data => {\r\n * console.log(data['ticket.subject']);\r\n * });\r\n */\r\n\r\nconst BAFClient = {\r\n /**\r\n * Initialize BAFClient and establish connection with BoldDesk host\r\n *\r\n * Call this function in your app's HTML to initialize the SDK.\r\n * The client will automatically detect the app instance and establish\r\n * two-way communication with the BoldDesk platform.\r\n *\r\n * @param {Function} callback - Optional callback function called when app is registered\r\n * Receives context object with app information\r\n * @param {Object} loc - Optional window location object (for testing)\r\n * @returns {Client|boolean} Client instance or false if not in iframe\r\n *\r\n * @example\r\n * // Basic usage\r\n * const client = BAFClient.init();\r\n *\r\n * @example\r\n * // With callback\r\n * const client = BAFClient.init((context) => {\r\n * const currentUser = context.user;\r\n * console.log('Hello ' + currentUser.name);\r\n * });\r\n */\r\n init: function (callback, loc) {\r\n loc = loc || window.location\r\n\r\n // Parse query/hash parameters\r\n const queryParams = queryParameters(loc.search)\r\n const hashParams = queryParameters(loc.hash)\r\n\r\n // Required parameters for iframe app\r\n const origin = queryParams.origin || hashParams.origin\r\n const appGuid = queryParams.app_guid || hashParams.app_guid\r\n\r\n // Validate required parameters\r\n if (!origin || !appGuid) {\r\n console.error(\r\n 'BAFClient.init(): Missing required parameters. ' +\r\n 'App must be loaded with \"origin\" and \"app_guid\" parameters.'\r\n )\r\n return false\r\n }\r\n\r\n // Create client instance\r\n const client = new Client({ origin, appGuid })\r\n\r\n // Register callback for app registration event\r\n if (typeof callback === 'function') {\r\n client.on('app.registered', function (context) {\r\n callback.call(client, context)\r\n })\r\n }\r\n\r\n return client\r\n }\r\n}\r\n\r\nexport default BAFClient\r\n\r\n// Also export Client for advanced usage\r\nexport { default as Client } from './client'\r\n\r\n// Export utility functions\r\nexport * from './utils'\r\n\r\n// Export APIs for direct access\r\nexport { default as ContextAPI } from './apis/context'\r\nexport { default as MetadataAPI } from './apis/metadata'\r\nexport { InstanceAPI } from './apis/instance'\r\nexport { default as RequestAPI } from './apis/request'\r\n"],"names":["ContextAPI","constructor","data","arguments","length","undefined","_data","orgId","orgName","brandId","brandName","brandUrl","defaultBrandUrl","planId","planName","module","objectId","product","user","id","email","name","displayName","language","timezone","getOrgId","getOrgName","getBrandId","getBrandName","getBrandUrl","getModule","getObjectId","getProduct","getUser","getUserId","getUserEmail","getUserName","getUserLanguage","getUserTimezone","getPlan","getAll","JSON","parse","stringify","_updateData","Object","assign","generateUUID","isArray","isFunction","Instance","config","widgets","isActive","getId","getIsActive","InstanceAPI","client","_client","_instances","_messageHandlers","current","currentId","_currentInstanceId","get","all","values","filter","inst","create","Promise","resolve","reject","instance","postMessage","error","send","instanceIds","channel","payload","ids","receive","handler","Error","push","unreceive","index","indexOf","splice","close","instanceId","resize","height","_triggerMessage","forEach","console","_registerInstance","isCurrent","MetadataAPI","appId","installationId","appName","version","locations","hasAllBrandAccess","hasReadAccess","hasWriteAccess","isEnabled","frameworkVersion","installDate","developer","getAppId","getInstallationId","getAppName","getVersion","getLocations","Array","from","getFrameworkVersion","getInstallDate","getDeveloper","isLocationSupported","location","includes","isObject","isString","isValidUrl","RequestAPI","request","options","url","method","validMethods","toUpperCase","requestObj","headers","timeout","Math","min","autoRetry","maxRetry","retryDelay","params","URLSearchParams","separator","toString","body","response","post","put","patch","delete","queryParameters","when","debounce","deepClone","NativePromise","window","IFRAME_SESSION_TIMEOUT","PROMISE_TIMEOUT","PROMISE_TIMEOUT_LONG","Client","origin","appGuid","_isReady","_messageQueue","_pendingRequests","_eventListeners","_requestId","context","metadata","_handleMessage","bind","addEventListener","_registerWithHost","action","callback","requestId","message","type","timestamp","Date","now","parent","event","_processMessageQueue","_handleAppRegistered","_handleEvent","eventName","_emitEvent","shift","path","paths","set","value","on","off","invoke","methodName","result","trigger","has","exists","destroy","removeEventListener","queryString","cleaned","replace","split","pair","key","decodeURIComponent","promises","obj","prototype","call","str","arr","fn","isUndefined","val","isNull","delay","timeoutId","_len","args","_key","clearTimeout","setTimeout","apply","throttle","limit","inThrottle","_len2","_key2","getTime","map","item","cloned","hasOwnProperty","deepMerge","target","source","c","r","random","v","validateManifest","manifest","errors","dev","contactEmail","supportEmail","trustedDomains","valid","parseWidgetLocations","validLocations","loc","URL","e","formatError","BAFClient","init","queryParams","search","hashParams","hash","app_guid","default"],"sourceRoot":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.BAFClient=t():e.BAFClient=t()}(Object("undefined"!=typeof self?self:this),()=>(()=>{var e={632(e,t,n){var r,s,i,a;s="Promise",i=void 0!==n.g?n.g:this,a=function(){"use strict";var e,t,n,r=Object.prototype.toString,s="undefined"!=typeof setImmediate?function(e){return setImmediate(e)}:setTimeout;try{Object.defineProperty({},"x",{}),e=function(e,t,n,r){return Object.defineProperty(e,t,{value:n,writable:!0,configurable:!1!==r})}}catch(t){e=function(e,t,n){return e[t]=n,e}}function i(e,r){n.add(e,r),t||(t=s(n.drain))}function a(e){var t,n=typeof e;return null==e||"object"!=n&&"function"!=n||(t=e.then),"function"==typeof t&&t}function o(){for(var e=0;e<this.chain.length;e++)c(this,1===this.state?this.chain[e].success:this.chain[e].failure,this.chain[e]);this.chain.length=0}function c(e,t,n){var r,s;try{!1===t?n.reject(e.msg):(r=!0===t?e.msg:t.call(void 0,e.msg))===n.promise?n.reject(TypeError("Promise-chain cycle")):(s=a(r))?s.call(r,n.resolve,n.reject):n.resolve(r)}catch(e){n.reject(e)}}function u(e){var t,n=this;if(!n.triggered){n.triggered=!0,n.def&&(n=n.def);try{(t=a(e))?i(function(){var r=new h(n);try{t.call(e,function(){u.apply(r,arguments)},function(){d.apply(r,arguments)})}catch(e){d.call(r,e)}}):(n.msg=e,n.state=1,n.chain.length>0&&i(o,n))}catch(e){d.call(new h(n),e)}}}function d(e){var t=this;t.triggered||(t.triggered=!0,t.def&&(t=t.def),t.msg=e,t.state=2,t.chain.length>0&&i(o,t))}function l(e,t,n,r){for(var s=0;s<t.length;s++)(function(s){e.resolve(t[s]).then(function(e){n(s,e)},r)})(s)}function h(e){this.def=e,this.triggered=!1}function f(e){this.promise=e,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function p(e){if("function"!=typeof e)throw TypeError("Not a function");if(0!==this.__NPO__)throw TypeError("Not a promise");this.__NPO__=1;var t=new f(this);this.then=function(e,n){var r={success:"function"!=typeof e||e,failure:"function"==typeof n&&n};return r.promise=new this.constructor(function(e,t){if("function"!=typeof e||"function"!=typeof t)throw TypeError("Not a function");r.resolve=e,r.reject=t}),t.chain.push(r),0!==t.state&&i(o,t),r.promise},this.catch=function(e){return this.then(void 0,e)};try{e.call(void 0,function(e){u.call(t,e)},function(e){d.call(t,e)})}catch(e){d.call(t,e)}}n=function(){var e,n,r;function s(e,t){this.fn=e,this.self=t,this.next=void 0}return{add:function(t,i){r=new s(t,i),n?n.next=r:e=r,n=r,r=void 0},drain:function(){var r=e;for(e=n=t=void 0;r;)r.fn.call(r.self),r=r.next}}}();var g=e({},"constructor",p,!1);return p.prototype=g,e(g,"__NPO__",0,!1),e(p,"resolve",function(e){return e&&"object"==typeof e&&1===e.__NPO__?e:new this(function(t,n){if("function"!=typeof t||"function"!=typeof n)throw TypeError("Not a function");t(e)})}),e(p,"reject",function(e){return new this(function(t,n){if("function"!=typeof t||"function"!=typeof n)throw TypeError("Not a function");n(e)})}),e(p,"all",function(e){var t=this;return"[object Array]"!=r.call(e)?t.reject(TypeError("Not an array")):0===e.length?t.resolve([]):new t(function(n,r){if("function"!=typeof n||"function"!=typeof r)throw TypeError("Not a function");var s=e.length,i=Array(s),a=0;l(t,e,function(e,t){i[e]=t,++a===s&&n(i)},r)})}),e(p,"race",function(e){var t=this;return"[object Array]"!=r.call(e)?t.reject(TypeError("Not an array")):new t(function(n,r){if("function"!=typeof n||"function"!=typeof r)throw TypeError("Not a function");l(t,e,function(e,t){n(t)},r)})}),p},i[s]=i[s]||a(),e.exports?e.exports=i[s]:void 0===(r=function(){return i[s]}.call(t,n,t,e))||(e.exports=r)}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{"use strict";function e(e){const t={};if(!e)return t;const n=e.replace(/^\?|^#/,"");return n?(n.split("&").forEach(e=>{const[n,r]=e.split("=");n&&(t[decodeURIComponent(n)]=!r||decodeURIComponent(r))}),t):t}function t(e){return Promise.all(e)}n.r(r),n.d(r,{Client:()=>M,ContextAPI:()=>y,InstanceAPI:()=>I,MetadataAPI:()=>w,RequestAPI:()=>x,debounce:()=>d,deepClone:()=>h,deepMerge:()=>f,default:()=>q,formatError:()=>v,generateUUID:()=>p,isArray:()=>a,isFunction:()=>o,isNull:()=>u,isObject:()=>s,isString:()=>i,isUndefined:()=>c,isValidUrl:()=>_,parseWidgetLocations:()=>m,queryParameters:()=>e,throttle:()=>l,validateManifest:()=>g,when:()=>t});const s=e=>"[object Object]"===Object.prototype.toString.call(e),i=e=>"string"==typeof e,a=e=>Array.isArray(e),o=e=>"function"==typeof e,c=e=>void 0===e,u=e=>null===e;function d(e,t){let n;return function(){for(var r=arguments.length,s=new Array(r),i=0;i<r;i++)s[i]=arguments[i];clearTimeout(n),n=setTimeout(()=>e.apply(this,s),t)}}function l(e,t){let n;return function(){if(!n){for(var r=arguments.length,s=new Array(r),i=0;i<r;i++)s[i]=arguments[i];e.apply(this,s),n=!0,setTimeout(()=>n=!1,t)}}}function h(e){if(null===e||"object"!=typeof e)return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof Array)return e.map(e=>h(e));if(e instanceof Object){const t={};for(const n in e)e.hasOwnProperty(n)&&(t[n]=h(e[n]));return t}}function f(e,t){const n={...e};for(const e in t)t.hasOwnProperty(e)&&(s(t[e])&&s(n[e])?n[e]=f(n[e],t[e]):n[e]=h(t[e]));return n}function p(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function g(e){const t=[];if(e.name||t.push('Manifest field "name" is required'),e.version||t.push('Manifest field "version" is required'),e.frameworkVersion||t.push('Manifest field "frameworkVersion" is required'),e.product||t.push('Manifest field "product" is required'),e.developer){const n=e.developer;n.name||t.push('Developer field "name" is required'),n.contactEmail||t.push('Developer field "contactEmail" is required'),n.supportEmail||t.push('Developer field "supportEmail" is required')}else t.push('Manifest field "developer" is required');return Array.isArray(e.trustedDomains)||t.push('Manifest field "trustedDomains" must be an array'),{valid:0===t.length,errors:t}}function m(e){const t=["desk.menu.left","desk.ticket.view.rightpanel","desk.contact.view.rightpanel","desk.contactgroup.view.rightpanel","desk.chat.view.rightpanel","desk.cti.widget"];return e.filter(e=>t.includes(e))}function _(e){try{return new URL(e),!0}catch(e){return!1}}function v(e,t){return`[${e}] ${t.message||t}`}const y=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._data={orgId:e.orgId||null,orgName:e.orgName||null,brandId:e.brandId||null,brandName:e.brandName||null,brandUrl:e.brandUrl||null,defaultBrandUrl:e.defaultBrandUrl||null,planId:e.planId||null,planName:e.planName||null,module:e.module||null,objectId:e.objectId||null,product:e.product||"BoldDesk",user:e.user||{id:null,email:null,name:null,displayName:null,language:null,timezone:null}}}getOrgId(){return this._data.orgId}getOrgName(){return this._data.orgName}getBrandId(){return this._data.brandId}getBrandName(){return this._data.brandName}getBrandUrl(){return this._data.brandUrl}getModule(){return this._data.module}getObjectId(){return this._data.objectId}getProduct(){return this._data.product}getUser(){return this._data.user}getUserId(){return this._data.user?.id}getUserEmail(){return this._data.user?.email}getUserName(){return this._data.user?.name}getUserLanguage(){return this._data.user?.language}getUserTimezone(){return this._data.user?.timezone}getPlan(){return{id:this._data.planId,name:this._data.planName}}getAll(){return JSON.parse(JSON.stringify(this._data))}_updateData(e){Object.assign(this._data,e)}};const w=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._data={appId:e.appId||null,installationId:e.installationId||null,appName:e.appName||null,version:e.version||null,locations:e.locations||[],hasAllBrandAccess:e.hasAllBrandAccess||!1,hasReadAccess:e.hasReadAccess||!1,hasWriteAccess:e.hasWriteAccess||!1,isActive:e.isActive||!1,isEnabled:e.isEnabled||!1,frameworkVersion:e.frameworkVersion||null,installDate:e.installDate||null,developer:e.developer||null}}getAppId(){return this._data.appId}getInstallationId(){return this._data.installationId}getAppName(){return this._data.appName}getVersion(){return this._data.version}getLocations(){return Array.from(this._data.locations)}hasAllBrandAccess(){return!0===this._data.hasAllBrandAccess}hasReadAccess(){return!0===this._data.hasReadAccess}hasWriteAccess(){return!0===this._data.hasWriteAccess}isActive(){return!0===this._data.isActive}isEnabled(){return!0===this._data.isEnabled}getFrameworkVersion(){return this._data.frameworkVersion}getInstallDate(){return this._data.installDate}getDeveloper(){return this._data.developer?JSON.parse(JSON.stringify(this._data.developer)):null}isLocationSupported(e){return this._data.locations.includes(e)}getAll(){return JSON.parse(JSON.stringify(this._data))}_updateData(e){Object.assign(this._data,e)}};class b{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.id=e||p(),this.config=t,this.widgets=t.widgets||[],this.isActive=!0}getId(){return this.id}getIsActive(){return this.isActive}}class I{constructor(e){this._client=e,this._instances={},this._messageHandlers={}}current(){const e=this._client._currentInstanceId;return this._instances[e]||null}get(e){return this._instances[e]||null}all(){return Object.values(this._instances).filter(e=>e&&e.getIsActive())}create(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Promise((t,n)=>{try{const n=new b(null,e);this._instances[n.id]=n,this._client.postMessage("instance.create",{id:n.id,config:e}),t(n)}catch(e){n(e)}})}send(e,t,n){return new Promise((r,s)=>{try{const s=a(e)?e:[e];this._client.postMessage("instance.send",{instanceIds:s,channel:t,payload:n}),r()}catch(e){s(e)}})}receive(e,t){if(!o(t))throw new Error("Handler must be a function");this._messageHandlers[e]||(this._messageHandlers[e]=[]),this._messageHandlers[e].push(t),this._client.postMessage("instance.receive",{channel:e})}unreceive(e,t){if(this._messageHandlers[e])if(t){const n=this._messageHandlers[e].indexOf(t);n>-1&&this._messageHandlers[e].splice(n,1)}else this._messageHandlers[e]=[]}close(){return new Promise((e,t)=>{try{const t=this.current();t&&(t.isActive=!1,delete this._instances[t.id]),this._client.postMessage("instance.close",{instanceId:t?.id}),e()}catch(e){t(e)}})}resize(e){return new Promise((t,n)=>{if("number"!=typeof e||e<0)return n(new Error("Height must be a positive number"));try{this._client.postMessage("instance.resize",{height:e}),t()}catch(e){n(e)}})}_triggerMessage(e,t){this._messageHandlers[e]&&this._messageHandlers[e].forEach(e=>{try{e(t)}catch(e){}})}_registerInstance(e){e.id&&(this._instances[e.id]||(this._instances[e.id]=new b(e.id,e.config)),e.isCurrent&&(this._client._currentInstanceId=e.id))}}const x=class{constructor(e){this._client=e}request(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Promise((t,n)=>{try{if(!e.url)throw new Error("Request URL is required");if(!e.method)throw new Error("Request method is required");if(!_(e.url))throw new Error("Invalid URL format: "+e.url);const r=["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"],i=(e.method||"GET").toUpperCase();if(!r.includes(i))throw new Error("Invalid HTTP method: "+i);const a={url:e.url,method:i,headers:e.headers||{},timeout:Math.min(e.timeout||15e3,3e4),autoRetry:!1!==e.autoRetry,maxRetry:e.maxRetry||3,retryDelay:e.retryDelay||1e3};if(e.params&&s(e.params)){const t=new URLSearchParams(e.params),n=e.url.includes("?")?"&":"?";a.url+=n+t.toString()}["POST","PUT","PATCH"].includes(i)&&e.body&&(a.body=s(e.body)?JSON.stringify(e.body):e.body),this._client.postMessage("request.send",a,e=>{e.error?n(new Error(e.error)):t(e)})}catch(e){n(e)}})}get(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.request({...t,url:e,method:"GET"})}post(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request({...n,url:e,method:"POST",body:t})}put(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request({...n,url:e,method:"PUT",body:t})}patch(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request({...n,url:e,method:"PATCH",body:t})}delete(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.request({...t,url:e,method:"DELETE"})}};var E=n(632),A=n.n(E);const N=window.Promise||A();const M=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.origin=e.origin,this.appGuid=e.appGuid,this._isReady=!1,this._messageQueue=[],this._pendingRequests={},this._eventListeners={},this._requestId=0,this._currentInstanceId=null,this.context=new y,this.metadata=new w,this.instance=new I(this),this.request=new x(this),this._handleMessage=this._handleMessage.bind(this),window.addEventListener("message",this._handleMessage),this._registerWithHost()}_registerWithHost(){this.postMessage("app.register",{appGuid:this.appGuid,version:"1.0.0"})}postMessage(e,t,n){const r=++this._requestId;n&&o(n)&&(this._pendingRequests[r]=n);const s={type:"baf.request",action:e,data:t,requestId:r,appGuid:this.appGuid,timestamp:Date.now()};this._isReady?window.parent.postMessage(s,this.origin):this._messageQueue.push(s)}_handleMessage(e){if(e.origin!==this.origin)return;const t=e.data;if(t&&"baf.response"===t.type){if("app.registered"===t.action)return this._isReady=!0,this._processMessageQueue(),void this._handleAppRegistered(t.data);if(t.requestId&&this._pendingRequests[t.requestId]){const e=this._pendingRequests[t.requestId];return delete this._pendingRequests[t.requestId],void e(t.data)}"event"!==t.action?"instance.message"!==t.action?"instance.registered"!==t.action||this.instance._registerInstance(t.data):this.instance._triggerMessage(t.channel,t.payload):this._handleEvent(t.eventName,t.data)}}_handleAppRegistered(e){e.context&&this.context._updateData(e.context),e.metadata&&this.metadata._updateData(e.metadata),e.instanceId&&(this._currentInstanceId=e.instanceId),this._emitEvent("app.registered",{context:this.context.getAll(),metadata:this.metadata.getAll()})}_processMessageQueue(){for(;this._messageQueue.length>0;){const e=this._messageQueue.shift();window.parent.postMessage(e,this.origin)}}get(e){return new N((t,n)=>{if(!e)return n(new Error("Path is required for get() method"));try{const r=a(e)?e:[e];this.postMessage("data.get",{paths:r},e=>{e.error?n(new Error(e.error)):t(e.data||{})})}catch(e){n(e)}})}set(e,t){return new N((n,r)=>{if(!e)return r(new Error("Path is required for set() method"));try{this.postMessage("data.set",{path:e,value:t},e=>{e.error?r(new Error(e.error)):n()})}catch(e){r(e)}})}on(e,t){if(!i(e)||!o(t))throw new Error("on() requires eventName (string) and callback (function)");this._eventListeners[e]||(this._eventListeners[e]=[],this.postMessage("event.register",{eventName:e})),this._eventListeners[e].push(t)}off(e,t){if(this._eventListeners[e]){if(t&&o(t)){const n=this._eventListeners[e].indexOf(t);n>-1&&this._eventListeners[e].splice(n,1)}else this._eventListeners[e]=[];0===this._eventListeners[e].length&&this.postMessage("event.unregister",{eventName:e})}}invoke(e,t){return new N((n,r)=>{if(!i(e))return r(new Error("Method name is required"));try{this.postMessage("action.invoke",{methodName:e,payload:t},e=>{e.error?r(new Error(e.error)):n(e.result)})}catch(e){r(e)}})}trigger(e,t){if(!i(e))throw new Error("Event name must be a string");this.postMessage("event.trigger",{eventName:e,data:t}),this._emitEvent(e,t)}has(e){return new N((t,n)=>{if(!i(e))return n(new Error("Name must be a string"));try{this.postMessage("capability.check",{name:e},e=>{t(!0===e.exists)})}catch(e){n(e)}})}_emitEvent(e,t){this._eventListeners[e]&&this._eventListeners[e].forEach(e=>{try{e(t)}catch(e){}})}_handleEvent(e,t){this._emitEvent(e,t)}destroy(){window.removeEventListener("message",this._handleMessage),this._eventListeners={},this._pendingRequests={},this._messageQueue=[],this._isReady=!1}},P={init:function(t,n){const r=e((n=n||window.location).search),s=e(n.hash),i=r.origin||s.origin,a=r.app_guid||s.app_guid;if(!i||!a)return!1;const o=new M({origin:i,appGuid:a});return"function"==typeof t&&o.on("app.registered",function(e){t.call(o,e)}),o}},q=P})(),r})());
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BoldDesk App Framework - Context API
|
|
3
|
+
* Provides information about the current runtime environment
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
class ContextAPI {
|
|
7
|
+
constructor (data = {}) {
|
|
8
|
+
this._data = {
|
|
9
|
+
orgId: data.orgId || null,
|
|
10
|
+
orgName: data.orgName || null,
|
|
11
|
+
brandId: data.brandId || null,
|
|
12
|
+
brandName: data.brandName || null,
|
|
13
|
+
brandUrl: data.brandUrl || null,
|
|
14
|
+
defaultBrandUrl: data.defaultBrandUrl || null,
|
|
15
|
+
planId: data.planId || null,
|
|
16
|
+
planName: data.planName || null,
|
|
17
|
+
module: data.module || null,
|
|
18
|
+
objectId: data.objectId || null,
|
|
19
|
+
product: data.product || 'BoldDesk',
|
|
20
|
+
user: data.user || {
|
|
21
|
+
id: null,
|
|
22
|
+
email: null,
|
|
23
|
+
name: null,
|
|
24
|
+
displayName: null,
|
|
25
|
+
language: null,
|
|
26
|
+
timezone: null
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Get organization ID
|
|
33
|
+
* @returns {string} Organization ID
|
|
34
|
+
*/
|
|
35
|
+
getOrgId () {
|
|
36
|
+
return this._data.orgId
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Get organization name
|
|
41
|
+
* @returns {string} Organization name
|
|
42
|
+
*/
|
|
43
|
+
getOrgName () {
|
|
44
|
+
return this._data.orgName
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Get brand ID
|
|
49
|
+
* @returns {string} Brand ID
|
|
50
|
+
*/
|
|
51
|
+
getBrandId () {
|
|
52
|
+
return this._data.brandId
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Get brand name
|
|
57
|
+
* @returns {string} Brand name
|
|
58
|
+
*/
|
|
59
|
+
getBrandName () {
|
|
60
|
+
return this._data.brandName
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Get brand URL
|
|
65
|
+
* @returns {string} Brand URL
|
|
66
|
+
*/
|
|
67
|
+
getBrandUrl () {
|
|
68
|
+
return this._data.brandUrl
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Get current module (ticket, contact, chat, etc.)
|
|
73
|
+
* @returns {string} Current module
|
|
74
|
+
*/
|
|
75
|
+
getModule () {
|
|
76
|
+
return this._data.module
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Get current object ID in context
|
|
81
|
+
* @returns {string} Object ID
|
|
82
|
+
*/
|
|
83
|
+
getObjectId () {
|
|
84
|
+
return this._data.objectId
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Get current product
|
|
89
|
+
* @returns {string} Product name
|
|
90
|
+
*/
|
|
91
|
+
getProduct () {
|
|
92
|
+
return this._data.product
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Get current user information
|
|
97
|
+
* @returns {Object} User object
|
|
98
|
+
*/
|
|
99
|
+
getUser () {
|
|
100
|
+
return this._data.user
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Get user ID
|
|
105
|
+
* @returns {string} User ID
|
|
106
|
+
*/
|
|
107
|
+
getUserId () {
|
|
108
|
+
return this._data.user?.id
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Get user email
|
|
113
|
+
* @returns {string} User email
|
|
114
|
+
*/
|
|
115
|
+
getUserEmail () {
|
|
116
|
+
return this._data.user?.email
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Get user name
|
|
121
|
+
* @returns {string} User name
|
|
122
|
+
*/
|
|
123
|
+
getUserName () {
|
|
124
|
+
return this._data.user?.name
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Get user language preference
|
|
129
|
+
* @returns {string} Language code (e.g., en-US)
|
|
130
|
+
*/
|
|
131
|
+
getUserLanguage () {
|
|
132
|
+
return this._data.user?.language
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Get user timezone
|
|
137
|
+
* @returns {string} Timezone (e.g., Asia/Kolkata)
|
|
138
|
+
*/
|
|
139
|
+
getUserTimezone () {
|
|
140
|
+
return this._data.user?.timezone
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Get plan information
|
|
145
|
+
* @returns {Object} Plan object with id and name
|
|
146
|
+
*/
|
|
147
|
+
getPlan () {
|
|
148
|
+
return {
|
|
149
|
+
id: this._data.planId,
|
|
150
|
+
name: this._data.planName
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Get all context data
|
|
156
|
+
* @returns {Object} Full context object
|
|
157
|
+
*/
|
|
158
|
+
getAll () {
|
|
159
|
+
return JSON.parse(JSON.stringify(this._data))
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Update context data (internal use)
|
|
164
|
+
* @param {Object} data - New data to merge
|
|
165
|
+
* @internal
|
|
166
|
+
*/
|
|
167
|
+
_updateData (data) {
|
|
168
|
+
Object.assign(this._data, data)
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export default ContextAPI
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BoldDesk App Framework - Instance API
|
|
3
|
+
* Provides access to app instances and instance-level operations
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { generateUUID, isArray, isFunction } from '../utils'
|
|
7
|
+
|
|
8
|
+
class Instance {
|
|
9
|
+
constructor (id, config = {}) {
|
|
10
|
+
this.id = id || generateUUID()
|
|
11
|
+
this.config = config
|
|
12
|
+
this.widgets = config.widgets || []
|
|
13
|
+
this.isActive = true
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Get instance ID
|
|
18
|
+
* @returns {string}
|
|
19
|
+
*/
|
|
20
|
+
getId () {
|
|
21
|
+
return this.id
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Check if instance is active
|
|
26
|
+
* @returns {boolean}
|
|
27
|
+
*/
|
|
28
|
+
getIsActive () {
|
|
29
|
+
return this.isActive
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
class InstanceAPI {
|
|
34
|
+
constructor (client) {
|
|
35
|
+
this._client = client
|
|
36
|
+
this._instances = {}
|
|
37
|
+
this._messageHandlers = {}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Get current active instance
|
|
42
|
+
* @returns {Instance}
|
|
43
|
+
*/
|
|
44
|
+
current () {
|
|
45
|
+
const currentId = this._client._currentInstanceId
|
|
46
|
+
return this._instances[currentId] || null
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Get instance by ID
|
|
51
|
+
* @param {string} id - Instance ID
|
|
52
|
+
* @returns {Instance}
|
|
53
|
+
*/
|
|
54
|
+
get (id) {
|
|
55
|
+
return this._instances[id] || null
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Get all active instances
|
|
60
|
+
* @returns {Array} Array of instances
|
|
61
|
+
*/
|
|
62
|
+
all () {
|
|
63
|
+
return Object.values(this._instances).filter(inst => inst && inst.getIsActive())
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Create a new instance
|
|
68
|
+
* @param {Object} config - Instance configuration
|
|
69
|
+
* @returns {Promise} Resolves with instance
|
|
70
|
+
*/
|
|
71
|
+
create (config = {}) {
|
|
72
|
+
return new Promise((resolve, reject) => {
|
|
73
|
+
try {
|
|
74
|
+
const instance = new Instance(null, config)
|
|
75
|
+
this._instances[instance.id] = instance
|
|
76
|
+
|
|
77
|
+
// Post message to host to register instance
|
|
78
|
+
this._client.postMessage('instance.create', { id: instance.id, config })
|
|
79
|
+
|
|
80
|
+
resolve(instance)
|
|
81
|
+
} catch (error) {
|
|
82
|
+
reject(error)
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Send message/data to other instances
|
|
89
|
+
* @param {string|Array} instanceIds - Instance ID or array of IDs
|
|
90
|
+
* @param {string} channel - Channel name
|
|
91
|
+
* @param {*} payload - Data to send
|
|
92
|
+
* @returns {Promise}
|
|
93
|
+
*/
|
|
94
|
+
send (instanceIds, channel, payload) {
|
|
95
|
+
return new Promise((resolve, reject) => {
|
|
96
|
+
try {
|
|
97
|
+
const ids = isArray(instanceIds) ? instanceIds : [instanceIds]
|
|
98
|
+
this._client.postMessage('instance.send', {
|
|
99
|
+
instanceIds: ids,
|
|
100
|
+
channel,
|
|
101
|
+
payload
|
|
102
|
+
})
|
|
103
|
+
resolve()
|
|
104
|
+
} catch (error) {
|
|
105
|
+
reject(error)
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Register handler to receive messages from other instances
|
|
112
|
+
* @param {string} channel - Channel name
|
|
113
|
+
* @param {Function} handler - Message handler
|
|
114
|
+
* @returns {void}
|
|
115
|
+
*/
|
|
116
|
+
receive (channel, handler) {
|
|
117
|
+
if (!isFunction(handler)) {
|
|
118
|
+
throw new Error('Handler must be a function')
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (!this._messageHandlers[channel]) {
|
|
122
|
+
this._messageHandlers[channel] = []
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
this._messageHandlers[channel].push(handler)
|
|
126
|
+
|
|
127
|
+
// Inform host about subscription
|
|
128
|
+
this._client.postMessage('instance.receive', { channel })
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Unregister message handler
|
|
133
|
+
* @param {string} channel - Channel name
|
|
134
|
+
* @param {Function} handler - Optional specific handler to remove
|
|
135
|
+
* @returns {void}
|
|
136
|
+
*/
|
|
137
|
+
unreceive (channel, handler) {
|
|
138
|
+
if (!this._messageHandlers[channel]) return
|
|
139
|
+
|
|
140
|
+
if (handler) {
|
|
141
|
+
const index = this._messageHandlers[channel].indexOf(handler)
|
|
142
|
+
if (index > -1) {
|
|
143
|
+
this._messageHandlers[channel].splice(index, 1)
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
this._messageHandlers[channel] = []
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Close current instance
|
|
152
|
+
* @returns {Promise}
|
|
153
|
+
*/
|
|
154
|
+
close () {
|
|
155
|
+
return new Promise((resolve, reject) => {
|
|
156
|
+
try {
|
|
157
|
+
const instance = this.current()
|
|
158
|
+
if (instance) {
|
|
159
|
+
instance.isActive = false
|
|
160
|
+
delete this._instances[instance.id]
|
|
161
|
+
}
|
|
162
|
+
this._client.postMessage('instance.close', { instanceId: instance?.id })
|
|
163
|
+
resolve()
|
|
164
|
+
} catch (error) {
|
|
165
|
+
reject(error)
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Resize widget container
|
|
172
|
+
* @param {number} height - Height in pixels
|
|
173
|
+
* @returns {Promise}
|
|
174
|
+
*/
|
|
175
|
+
resize (height) {
|
|
176
|
+
return new Promise((resolve, reject) => {
|
|
177
|
+
if (typeof height !== 'number' || height < 0) {
|
|
178
|
+
return reject(new Error('Height must be a positive number'))
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
try {
|
|
182
|
+
this._client.postMessage('instance.resize', { height })
|
|
183
|
+
resolve()
|
|
184
|
+
} catch (error) {
|
|
185
|
+
reject(error)
|
|
186
|
+
}
|
|
187
|
+
})
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Trigger instance event (for receiving messages)
|
|
192
|
+
* @internal
|
|
193
|
+
* @param {string} channel - Channel name
|
|
194
|
+
* @param {*} payload - Message payload
|
|
195
|
+
*/
|
|
196
|
+
_triggerMessage (channel, payload) {
|
|
197
|
+
if (this._messageHandlers[channel]) {
|
|
198
|
+
this._messageHandlers[channel].forEach(handler => {
|
|
199
|
+
try {
|
|
200
|
+
handler(payload)
|
|
201
|
+
} catch (error) {
|
|
202
|
+
console.error(`Error in instance message handler for channel ${channel}:`, error)
|
|
203
|
+
}
|
|
204
|
+
})
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Register instance (internal use)
|
|
210
|
+
* @internal
|
|
211
|
+
* @param {Object} data - Instance data from host
|
|
212
|
+
*/
|
|
213
|
+
_registerInstance (data) {
|
|
214
|
+
if (data.id) {
|
|
215
|
+
if (!this._instances[data.id]) {
|
|
216
|
+
this._instances[data.id] = new Instance(data.id, data.config)
|
|
217
|
+
}
|
|
218
|
+
if (data.isCurrent) {
|
|
219
|
+
this._client._currentInstanceId = data.id
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export { Instance, InstanceAPI }
|