@looker/extension-sdk 23.20.1 → 24.2.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.
Files changed (65) hide show
  1. package/CHANGELOG.md +209 -249
  2. package/README.md +28 -28
  3. package/lib/connect/connect_extension_host.js +5 -6
  4. package/lib/connect/connect_extension_host.js.map +1 -1
  5. package/lib/connect/extension_host_api.d.ts +1 -1
  6. package/lib/connect/extension_host_api.js +3 -4
  7. package/lib/connect/extension_host_api.js.map +1 -1
  8. package/lib/connect/fetch_proxy.d.ts +1 -1
  9. package/lib/connect/fetch_proxy.js.map +1 -1
  10. package/lib/connect/global_listener.js.map +1 -1
  11. package/lib/connect/index.js.map +1 -1
  12. package/lib/connect/tile/index.js.map +1 -1
  13. package/lib/connect/tile/tile_sdk.d.ts +4 -2
  14. package/lib/connect/tile/tile_sdk.js +22 -4
  15. package/lib/connect/tile/tile_sdk.js.map +1 -1
  16. package/lib/connect/tile/types.d.ts +8 -4
  17. package/lib/connect/tile/types.js +1 -2
  18. package/lib/connect/tile/types.js.map +1 -1
  19. package/lib/connect/types.d.ts +5 -5
  20. package/lib/connect/types.js +6 -12
  21. package/lib/connect/types.js.map +1 -1
  22. package/lib/connect/visualization/index.js.map +1 -1
  23. package/lib/connect/visualization/types.d.ts +6 -4
  24. package/lib/connect/visualization/types.js.map +1 -1
  25. package/lib/connect/visualization/visualization_sdk.d.ts +2 -2
  26. package/lib/connect/visualization/visualization_sdk.js +2 -2
  27. package/lib/connect/visualization/visualization_sdk.js.map +1 -1
  28. package/lib/esm/connect/connect_extension_host.js +4 -4
  29. package/lib/esm/connect/connect_extension_host.js.map +1 -1
  30. package/lib/esm/connect/extension_host_api.js +2 -2
  31. package/lib/esm/connect/extension_host_api.js.map +1 -1
  32. package/lib/esm/connect/fetch_proxy.js.map +1 -1
  33. package/lib/esm/connect/global_listener.js.map +1 -1
  34. package/lib/esm/connect/index.js.map +1 -1
  35. package/lib/esm/connect/tile/index.js.map +1 -1
  36. package/lib/esm/connect/tile/tile_sdk.js +22 -4
  37. package/lib/esm/connect/tile/tile_sdk.js.map +1 -1
  38. package/lib/esm/connect/tile/types.js.map +1 -1
  39. package/lib/esm/connect/types.js.map +1 -1
  40. package/lib/esm/connect/visualization/index.js.map +1 -1
  41. package/lib/esm/connect/visualization/types.js.map +1 -1
  42. package/lib/esm/connect/visualization/visualization_sdk.js +2 -2
  43. package/lib/esm/connect/visualization/visualization_sdk.js.map +1 -1
  44. package/lib/esm/index.js.map +1 -1
  45. package/lib/esm/sdk/extension_sdk.js +1 -1
  46. package/lib/esm/sdk/extension_sdk.js.map +1 -1
  47. package/lib/esm/sdk/extension_sdk_40.js +1 -1
  48. package/lib/esm/sdk/extension_sdk_40.js.map +1 -1
  49. package/lib/esm/sdk/index.js.map +1 -1
  50. package/lib/esm/sdk/sdk_connection.js.map +1 -1
  51. package/lib/esm/util/errors.js.map +1 -1
  52. package/lib/esm/util/index.js.map +1 -1
  53. package/lib/esm/util/logger.js.map +1 -1
  54. package/lib/index.js.map +1 -1
  55. package/lib/sdk/extension_sdk.js.map +1 -1
  56. package/lib/sdk/extension_sdk_40.js.map +1 -1
  57. package/lib/sdk/index.js.map +1 -1
  58. package/lib/sdk/sdk_connection.d.ts +2 -2
  59. package/lib/sdk/sdk_connection.js.map +1 -1
  60. package/lib/util/errors.js +1 -2
  61. package/lib/util/errors.js.map +1 -1
  62. package/lib/util/index.js.map +1 -1
  63. package/lib/util/logger.js +2 -4
  64. package/lib/util/logger.js.map +1 -1
  65. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"visualization_sdk.js","names":["_errors","require","_types","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","QueryResponseImpl","constructor","queryResponse","_queryResponse","update","fieldMeasures","_this$_queryResponse","_this$_queryResponse$","fields","measures","fieldDimensions","_this$_queryResponse2","_this$_queryResponse3","dimensions","fieldTableCalculations","_this$_queryResponse4","_this$_queryResponse5","table_calculations","fieldPivots","_this$_queryResponse6","_this$_queryResponse7","pivots","fieldMeasureLike","_this$_queryResponse8","_this$_queryResponse9","measure_like","fieldDimensionLike","_this$_queryResponse10","_this$_queryResponse11","dimension_like","data","_this$_queryResponse12","VisualizationConfigImpl","visConfig","_visConfig","queryFieldMeasures","_this$_visConfig","_this$_visConfig$quer","query_fields","queryFieldDimensions","_this$_visConfig2","_this$_visConfig2$que","queryFieldTableCalculations","_this$_visConfig3","_this$_visConfig3$que","queryFieldPivots","_this$_visConfig4","_this$_visConfig4$que","VisualizationSDKImpl","hostApi","updateVisData","visualizationData","isDashboardMountSupported","configureVisualization","options","send","ExtensionRequestType","VIS_DEFAULT_CONFIG","NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR","setVisConfig","config","VIS_CONFIG_UPDATE","updatedConfig","_this$visualizationDa","updateRowLimit","rowLimit","TILE_ROW_LIMIT_UPDATE","_this$visualizationDa2","exports"],"sources":["../../../src/connect/visualization/visualization_sdk.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2022 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport { NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR } from '../../util/errors'\nimport type { ExtensionHostApiImpl } from '../extension_host_api'\nimport { ExtensionRequestType } from '../types'\nimport type { Row } from '../tile'\nimport type {\n VisualizationSDK,\n RawVisualizationData,\n RawVisConfig,\n VisualizationConfig,\n QueryResponse,\n Measure,\n Dimension,\n TableCalculation,\n PivotConfig,\n RawVisQueryResponse,\n VisOptions,\n} from './types'\n\nclass QueryResponseImpl implements QueryResponse {\n _queryResponse?: RawVisQueryResponse\n\n constructor(queryResponse?: RawVisQueryResponse) {\n this._queryResponse = queryResponse\n }\n\n update(queryResponse: RawVisQueryResponse) {\n this._queryResponse = queryResponse\n }\n\n get fieldMeasures(): Measure[] {\n return this._queryResponse?.fields?.measures || []\n }\n\n get fieldDimensions(): Dimension[] {\n return this._queryResponse?.fields?.dimensions || []\n }\n\n get fieldTableCalculations(): TableCalculation[] {\n return this._queryResponse?.fields?.table_calculations || []\n }\n\n get fieldPivots(): PivotConfig[] {\n return this._queryResponse?.fields?.pivots || []\n }\n\n get fieldMeasureLike(): Measure[] {\n return this._queryResponse?.fields?.measure_like || []\n }\n\n get fieldDimensionLike(): Dimension[] {\n return this._queryResponse?.fields?.dimension_like || []\n }\n\n get data(): Row[] {\n return this._queryResponse?.data || []\n }\n}\n\nclass VisualizationConfigImpl implements VisualizationConfig {\n _visConfig?: RawVisConfig\n\n constructor(visConfig?: RawVisConfig) {\n this._visConfig = visConfig\n }\n\n update(visConfig: RawVisConfig) {\n this._visConfig = visConfig\n }\n\n get visConfig(): RawVisConfig {\n return this._visConfig || {}\n }\n\n get queryFieldMeasures(): Measure[] {\n return this._visConfig?.query_fields?.measures || []\n }\n\n get queryFieldDimensions(): Dimension[] {\n return this._visConfig?.query_fields?.dimensions || []\n }\n\n get queryFieldTableCalculations(): TableCalculation[] {\n return this._visConfig?.query_fields?.table_calculations || []\n }\n\n get queryFieldPivots(): PivotConfig[] {\n return this._visConfig?.query_fields?.pivots || []\n }\n}\n\nexport class VisualizationSDKImpl implements VisualizationSDK {\n hostApi: ExtensionHostApiImpl\n visualizationData?: RawVisualizationData\n _visConfig?: VisualizationConfigImpl\n _queryResponse?: QueryResponseImpl\n\n constructor(hostApi: ExtensionHostApiImpl) {\n this.hostApi = hostApi\n }\n\n updateVisData(visualizationData: RawVisualizationData) {\n // Ignore update messages if dashboard mounts not supported.\n // Should never happen.\n if (this.hostApi.isDashboardMountSupported) {\n this.visualizationData = visualizationData\n if (this.visConfig && this._visConfig) {\n this._visConfig.update(this.visualizationData.visConfig)\n }\n if (this.queryResponse && this._queryResponse) {\n this._queryResponse.update(this.visualizationData.queryResponse)\n }\n }\n }\n\n configureVisualization(options: VisOptions): void {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.VIS_DEFAULT_CONFIG, { options })\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR\n }\n }\n\n setVisConfig(config: RawVisConfig) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.VIS_CONFIG_UPDATE, {\n updatedConfig: config,\n })\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR\n }\n }\n\n get visConfig(): VisualizationConfig {\n if (!this._visConfig) {\n this._visConfig = new VisualizationConfigImpl(\n this.visualizationData?.visConfig\n )\n }\n return this._visConfig\n }\n\n updateRowLimit(rowLimit: number) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_ROW_LIMIT_UPDATE, {\n rowLimit,\n })\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR\n }\n }\n\n get queryResponse(): QueryResponse {\n if (!this._queryResponse) {\n this._queryResponse = new QueryResponseImpl(\n this.visualizationData?.queryResponse\n )\n }\n return this._queryResponse\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"visualization_sdk.js","names":["_errors","require","_types","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","call","TypeError","Number","QueryResponseImpl","constructor","queryResponse","_queryResponse","update","fieldMeasures","_this$_queryResponse","_this$_queryResponse$","fields","measures","fieldDimensions","_this$_queryResponse2","_this$_queryResponse3","dimensions","fieldTableCalculations","_this$_queryResponse4","_this$_queryResponse5","table_calculations","fieldPivots","_this$_queryResponse6","_this$_queryResponse7","pivots","fieldMeasureLike","_this$_queryResponse8","_this$_queryResponse9","measure_like","fieldDimensionLike","_this$_queryResponse10","_this$_queryResponse11","dimension_like","data","_this$_queryResponse12","VisualizationConfigImpl","visConfig","_visConfig","queryFieldMeasures","_this$_visConfig","_this$_visConfig$quer","query_fields","queryFieldDimensions","_this$_visConfig2","_this$_visConfig2$que","queryFieldTableCalculations","_this$_visConfig3","_this$_visConfig3$que","queryFieldPivots","_this$_visConfig4","_this$_visConfig4$que","VisualizationSDKImpl","hostApi","updateVisData","visualizationData","isDashboardMountSupported","configureVisualization","options","send","ExtensionRequestType","VIS_DEFAULT_CONFIG","NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR","setVisConfig","config","VIS_CONFIG_UPDATE","updatedConfig","_this$visualizationDa","updateRowLimit","rowLimit","TILE_ROW_LIMIT_UPDATE","_this$visualizationDa2","exports"],"sources":["../../../src/connect/visualization/visualization_sdk.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2022 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport { NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR } from '../../util/errors';\nimport type { ExtensionHostApiImpl } from '../extension_host_api';\nimport { ExtensionRequestType } from '../types';\nimport type { Row } from '../tile';\nimport type {\n Dimension,\n Measure,\n PivotConfig,\n QueryResponse,\n RawVisConfig,\n RawVisQueryResponse,\n RawVisualizationData,\n TableCalculation,\n VisOptions,\n VisualizationConfig,\n VisualizationSDKInternal,\n} from './types';\n\nclass QueryResponseImpl implements QueryResponse {\n _queryResponse?: RawVisQueryResponse;\n\n constructor(queryResponse?: RawVisQueryResponse) {\n this._queryResponse = queryResponse;\n }\n\n update(queryResponse: RawVisQueryResponse) {\n this._queryResponse = queryResponse;\n }\n\n get fieldMeasures(): Measure[] {\n return this._queryResponse?.fields?.measures || [];\n }\n\n get fieldDimensions(): Dimension[] {\n return this._queryResponse?.fields?.dimensions || [];\n }\n\n get fieldTableCalculations(): TableCalculation[] {\n return this._queryResponse?.fields?.table_calculations || [];\n }\n\n get fieldPivots(): PivotConfig[] {\n return this._queryResponse?.fields?.pivots || [];\n }\n\n get fieldMeasureLike(): Measure[] {\n return this._queryResponse?.fields?.measure_like || [];\n }\n\n get fieldDimensionLike(): Dimension[] {\n return this._queryResponse?.fields?.dimension_like || [];\n }\n\n get data(): Row[] {\n return this._queryResponse?.data || [];\n }\n}\n\nclass VisualizationConfigImpl implements VisualizationConfig {\n _visConfig?: RawVisConfig;\n\n constructor(visConfig?: RawVisConfig) {\n this._visConfig = visConfig;\n }\n\n update(visConfig: RawVisConfig) {\n this._visConfig = visConfig;\n }\n\n get visConfig(): RawVisConfig {\n return this._visConfig || {};\n }\n\n get queryFieldMeasures(): Measure[] {\n return this._visConfig?.query_fields?.measures || [];\n }\n\n get queryFieldDimensions(): Dimension[] {\n return this._visConfig?.query_fields?.dimensions || [];\n }\n\n get queryFieldTableCalculations(): TableCalculation[] {\n return this._visConfig?.query_fields?.table_calculations || [];\n }\n\n get queryFieldPivots(): PivotConfig[] {\n return this._visConfig?.query_fields?.pivots || [];\n }\n}\n\nexport class VisualizationSDKImpl implements VisualizationSDKInternal {\n hostApi: ExtensionHostApiImpl;\n visualizationData?: RawVisualizationData;\n _visConfig?: VisualizationConfigImpl;\n _queryResponse?: QueryResponseImpl;\n\n constructor(hostApi: ExtensionHostApiImpl) {\n this.hostApi = hostApi;\n }\n\n updateVisData(visualizationData: RawVisualizationData) {\n // Ignore update messages if dashboard mounts not supported.\n // Should never happen.\n if (this.hostApi.isDashboardMountSupported) {\n this.visualizationData = visualizationData;\n if (this.visConfig && this._visConfig) {\n this._visConfig.update(this.visualizationData.visConfig);\n }\n if (this.queryResponse && this._queryResponse) {\n this._queryResponse.update(this.visualizationData.queryResponse);\n }\n }\n }\n\n configureVisualization(options: VisOptions): void {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.VIS_DEFAULT_CONFIG, { options });\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n setVisConfig(config: RawVisConfig) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.VIS_CONFIG_UPDATE, {\n updatedConfig: config,\n });\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n get visConfig(): VisualizationConfig {\n if (!this._visConfig) {\n this._visConfig = new VisualizationConfigImpl(\n this.visualizationData?.visConfig\n );\n }\n return this._visConfig;\n }\n\n updateRowLimit(rowLimit: number) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_ROW_LIMIT_UPDATE, {\n rowLimit,\n });\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n get queryResponse(): QueryResponse {\n if (!this._queryResponse) {\n this._queryResponse = new QueryResponseImpl(\n this.visualizationData?.queryResponse\n );\n }\n return this._queryResponse;\n }\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
3
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
6
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
7
7
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
8
8
  import { Chatty } from '@looker/chatty';
@@ -1 +1 @@
1
- {"version":3,"file":"connect_extension_host.js","names":["Chatty","ExtensionHostApiImpl","registerHostApi","ExtensionEvent","connectExtensionHost","_ref","_asyncToGenerator","configuration","arguments","length","undefined","Promise","_ref2","resolve","reject","initializationTimer","window","setTimeout","Error","initializedCallback","chattyTimeout","extensionHost","targetOrigin","initialized","initializationResponse","errorMessage","parent","location","origin","err","chattyHost","createClient","on","EXTENSION_HOST_NOTIFICATION","message","messageResponse","clearTimeout","handleNotification","error","withTargetOrigin","withDefaultTimeout","build","connect","_objectSpread","_x","_x2","apply"],"sources":["../../../src/connect/connect_extension_host.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport { Chatty } from '@looker/chatty'\nimport { ExtensionHostApiImpl } from './extension_host_api'\nimport { registerHostApi } from './global_listener'\nimport type {\n ExtensionHostApi,\n ExtensionHostConfiguration,\n ExtensionInitializationResponse,\n ExtensionNotification,\n} from './types'\nimport { ExtensionEvent } from './types'\n\n/**\n * Connect extension to Looker host. React extensions using the extension-sdk-react\n * package and ExtensionProvider do not need to call this as the ExtensionProvider\n * sets up the connection.\n * @param configuration\n */\nexport const connectExtensionHost = async (\n configuration: ExtensionHostConfiguration = {}\n): Promise<ExtensionHostApi> =>\n // eslint-disable-next-line no-async-promise-executor\n new Promise(async (resolve, reject) => {\n // Timer to handle the unlikely event that an initialization message\n // is not received from the host. If this happens it's a bug in the\n // host code.\n let initializationTimer: number | undefined = window.setTimeout(\n () =>\n reject(new Error('Failed to establish communication with Looker host')),\n 30000\n )\n // Legacy callback to indicate that connection is established\n const { initializedCallback, chattyTimeout } = configuration\n let extensionHost: ExtensionHostApi\n let targetOrigin\n // The initialized function replaces the need the legacy callback as it\n // resolves/rejects the promise that now wraps the chatty promise that\n // was originally returned.\n const initialized = (\n initializationResponse?: ExtensionInitializationResponse\n ) => {\n // An initialization response is expected but the handle notification\n // method can return undefined.\n if (initializationResponse) {\n // The initialization can fail, for example, Looker host is not\n // at the right version.\n const { errorMessage } = initializationResponse\n if (initializedCallback) {\n initializedCallback(errorMessage)\n }\n if (errorMessage) {\n reject(new Error(errorMessage))\n } else {\n resolve(extensionHost)\n }\n } else {\n reject(new Error('Unexpected response from initialization'))\n }\n }\n try {\n // if extension is not sandboxed the following will succeed\n targetOrigin = window.parent.location.origin\n } catch (err) {\n // failure indicates running in a sandboxed environment\n targetOrigin = '*'\n }\n try {\n const chattyHost = await Chatty.createClient()\n .on(\n ExtensionEvent.EXTENSION_HOST_NOTIFICATION,\n (\n message?: ExtensionNotification\n ): ExtensionInitializationResponse | undefined => {\n // Handle messages from the looker host. The first message should\n // be an initialization message containing information about the host\n // and host extension (looker version, extension id for example).\n let messageResponse: ExtensionInitializationResponse | undefined\n if (message) {\n if (initializationTimer) {\n // The initialization timer is present so assume this is an initialization\n // message. The initialization timer is now cleared.\n window.clearTimeout(initializationTimer)\n initializationTimer = undefined\n if (extensionHost) {\n try {\n messageResponse = extensionHost.handleNotification(message)\n initialized(messageResponse)\n } catch (error) {\n // Handle invalid extension host initialization failure\n reject(error)\n }\n } else {\n // The extension host should be initialized if we get here\n // so this should never happen.\n reject(new Error('Extension host not created'))\n }\n } else {\n // All other extension host messages\n messageResponse = extensionHost.handleNotification(message)\n }\n }\n return messageResponse\n }\n )\n .withTargetOrigin(targetOrigin)\n .withDefaultTimeout(chattyTimeout || 30000)\n .build()\n .connect()\n // Create the extension host (a extension specific wrapper around the\n // chatty host)\n extensionHost = new ExtensionHostApiImpl({\n chattyHost,\n ...configuration,\n })\n // Register the extension host so that global event listeners can send\n // messages to the looker host (for example beforeUnload event).\n registerHostApi(extensionHost)\n } catch (error) {\n window.clearTimeout(initializationTimer)\n initializationTimer = undefined\n reject(error)\n }\n })\n"],"mappings":"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"}
1
+ {"version":3,"file":"connect_extension_host.js","names":["Chatty","ExtensionHostApiImpl","registerHostApi","ExtensionEvent","connectExtensionHost","_ref","_asyncToGenerator","configuration","arguments","length","undefined","Promise","_ref2","resolve","reject","initializationTimer","window","setTimeout","Error","initializedCallback","chattyTimeout","extensionHost","targetOrigin","initialized","initializationResponse","errorMessage","parent","location","origin","err","chattyHost","createClient","on","EXTENSION_HOST_NOTIFICATION","message","messageResponse","clearTimeout","handleNotification","error","withTargetOrigin","withDefaultTimeout","build","connect","_objectSpread","_x","_x2","apply"],"sources":["../../../src/connect/connect_extension_host.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport { Chatty } from '@looker/chatty';\nimport { ExtensionHostApiImpl } from './extension_host_api';\nimport { registerHostApi } from './global_listener';\nimport type {\n ExtensionHostApi,\n ExtensionHostConfiguration,\n ExtensionInitializationResponse,\n ExtensionNotification,\n} from './types';\nimport { ExtensionEvent } from './types';\n\n/**\n * Connect extension to Looker host. React extensions using the extension-sdk-react\n * package and ExtensionProvider do not need to call this as the ExtensionProvider\n * sets up the connection.\n * @param configuration\n */\nexport const connectExtensionHost = async (\n configuration: ExtensionHostConfiguration = {}\n): Promise<ExtensionHostApi> =>\n // eslint-disable-next-line no-async-promise-executor\n new Promise(async (resolve, reject) => {\n // Timer to handle the unlikely event that an initialization message\n // is not received from the host. If this happens it's a bug in the\n // host code.\n let initializationTimer: number | undefined = window.setTimeout(\n () =>\n reject(new Error('Failed to establish communication with Looker host')),\n 30000\n );\n // Legacy callback to indicate that connection is established\n const { initializedCallback, chattyTimeout } = configuration;\n let extensionHost: ExtensionHostApi;\n let targetOrigin;\n // The initialized function replaces the need the legacy callback as it\n // resolves/rejects the promise that now wraps the chatty promise that\n // was originally returned.\n const initialized = (\n initializationResponse?: ExtensionInitializationResponse\n ) => {\n // An initialization response is expected but the handle notification\n // method can return undefined.\n if (initializationResponse) {\n // The initialization can fail, for example, Looker host is not\n // at the right version.\n const { errorMessage } = initializationResponse;\n if (initializedCallback) {\n initializedCallback(errorMessage);\n }\n if (errorMessage) {\n reject(new Error(errorMessage));\n } else {\n resolve(extensionHost);\n }\n } else {\n reject(new Error('Unexpected response from initialization'));\n }\n };\n try {\n // if extension is not sandboxed the following will succeed\n targetOrigin = window.parent.location.origin;\n } catch (err) {\n // failure indicates running in a sandboxed environment\n targetOrigin = '*';\n }\n try {\n const chattyHost = await Chatty.createClient()\n .on(\n ExtensionEvent.EXTENSION_HOST_NOTIFICATION,\n (\n message?: ExtensionNotification\n ): ExtensionInitializationResponse | undefined => {\n // Handle messages from the looker host. The first message should\n // be an initialization message containing information about the host\n // and host extension (looker version, extension id for example).\n let messageResponse: ExtensionInitializationResponse | undefined;\n if (message) {\n if (initializationTimer) {\n // The initialization timer is present so assume this is an initialization\n // message. The initialization timer is now cleared.\n window.clearTimeout(initializationTimer);\n initializationTimer = undefined;\n if (extensionHost) {\n try {\n messageResponse = extensionHost.handleNotification(message);\n initialized(messageResponse);\n } catch (error) {\n // Handle invalid extension host initialization failure\n reject(error);\n }\n } else {\n // The extension host should be initialized if we get here\n // so this should never happen.\n reject(new Error('Extension host not created'));\n }\n } else {\n // All other extension host messages\n messageResponse = extensionHost.handleNotification(message);\n }\n }\n return messageResponse;\n }\n )\n .withTargetOrigin(targetOrigin)\n .withDefaultTimeout(chattyTimeout || 30000)\n .build()\n .connect();\n // Create the extension host (a extension specific wrapper around the\n // chatty host)\n extensionHost = new ExtensionHostApiImpl({\n chattyHost,\n ...configuration,\n });\n // Register the extension host so that global event listeners can send\n // messages to the looker host (for example beforeUnload event).\n registerHostApi(extensionHost);\n } catch (error) {\n window.clearTimeout(initializationTimer);\n initializationTimer = undefined;\n reject(error);\n }\n });\n"],"mappings":";;;;;;;AA0BA,SAASA,MAAM,QAAQ,gBAAgB;AACvC,SAASC,oBAAoB,QAAQ,sBAAsB;AAC3D,SAASC,eAAe,QAAQ,mBAAmB;AAOnD,SAASC,cAAc,QAAQ,SAAS;AAQxC,OAAO,IAAMC,oBAAoB;EAAA,IAAAC,IAAA,GAAAC,iBAAA,CAAG;IAAA,IAClCC,aAAyC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAAA,OAG9C,IAAIG,OAAO;MAAA,IAAAC,KAAA,GAAAN,iBAAA,CAAC,WAAOO,OAAO,EAAEC,MAAM,EAAK;QAIrC,IAAIC,mBAAuC,GAAGC,MAAM,CAACC,UAAU,CAC7D,MACEH,MAAM,CAAC,IAAII,KAAK,CAAC,oDAAoD,CAAC,CAAC,EACzE,KACF,CAAC;QAED,IAAM;UAAEC,mBAAmB;UAAEC;QAAc,CAAC,GAAGb,aAAa;QAC5D,IAAIc,aAA+B;QACnC,IAAIC,YAAY;QAIhB,IAAMC,WAAW,GACfC,sBAAwD,IACrD;UAGH,IAAIA,sBAAsB,EAAE;YAG1B,IAAM;cAAEC;YAAa,CAAC,GAAGD,sBAAsB;YAC/C,IAAIL,mBAAmB,EAAE;cACvBA,mBAAmB,CAACM,YAAY,CAAC;YACnC;YACA,IAAIA,YAAY,EAAE;cAChBX,MAAM,CAAC,IAAII,KAAK,CAACO,YAAY,CAAC,CAAC;YACjC,CAAC,MAAM;cACLZ,OAAO,CAACQ,aAAa,CAAC;YACxB;UACF,CAAC,MAAM;YACLP,MAAM,CAAC,IAAII,KAAK,CAAC,yCAAyC,CAAC,CAAC;UAC9D;QACF,CAAC;QACD,IAAI;UAEFI,YAAY,GAAGN,MAAM,CAACU,MAAM,CAACC,QAAQ,CAACC,MAAM;QAC9C,CAAC,CAAC,OAAOC,GAAG,EAAE;UAEZP,YAAY,GAAG,GAAG;QACpB;QACA,IAAI;UACF,IAAMQ,UAAU,SAAS9B,MAAM,CAAC+B,YAAY,CAAC,CAAC,CAC3CC,EAAE,CACD7B,cAAc,CAAC8B,2BAA2B,EAExCC,OAA+B,IACiB;YAIhD,IAAIC,eAA4D;YAChE,IAAID,OAAO,EAAE;cACX,IAAInB,mBAAmB,EAAE;gBAGvBC,MAAM,CAACoB,YAAY,CAACrB,mBAAmB,CAAC;gBACxCA,mBAAmB,GAAGL,SAAS;gBAC/B,IAAIW,aAAa,EAAE;kBACjB,IAAI;oBACFc,eAAe,GAAGd,aAAa,CAACgB,kBAAkB,CAACH,OAAO,CAAC;oBAC3DX,WAAW,CAACY,eAAe,CAAC;kBAC9B,CAAC,CAAC,OAAOG,KAAK,EAAE;oBAEdxB,MAAM,CAACwB,KAAK,CAAC;kBACf;gBACF,CAAC,MAAM;kBAGLxB,MAAM,CAAC,IAAII,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBACjD;cACF,CAAC,MAAM;gBAELiB,eAAe,GAAGd,aAAa,CAACgB,kBAAkB,CAACH,OAAO,CAAC;cAC7D;YACF;YACA,OAAOC,eAAe;UACxB,CACF,CAAC,CACAI,gBAAgB,CAACjB,YAAY,CAAC,CAC9BkB,kBAAkB,CAACpB,aAAa,IAAI,KAAK,CAAC,CAC1CqB,KAAK,CAAC,CAAC,CACPC,OAAO,CAAC,CAAC;UAGZrB,aAAa,GAAG,IAAIpB,oBAAoB,CAAA0C,aAAA;YACtCb;UAAU,GACPvB,aAAa,CACjB,CAAC;UAGFL,eAAe,CAACmB,aAAa,CAAC;QAChC,CAAC,CAAC,OAAOiB,KAAK,EAAE;UACdtB,MAAM,CAACoB,YAAY,CAACrB,mBAAmB,CAAC;UACxCA,mBAAmB,GAAGL,SAAS;UAC/BI,MAAM,CAACwB,KAAK,CAAC;QACf;MACF,CAAC;MAAA,iBAAAM,EAAA,EAAAC,GAAA;QAAA,OAAAjC,KAAA,CAAAkC,KAAA,OAAAtC,SAAA;MAAA;IAAA,IAAC;EAAA;EAAA,gBAxGSJ,oBAAoBA,CAAA;IAAA,OAAAC,IAAA,CAAAyC,KAAA,OAAAtC,SAAA;EAAA;AAAA,GAwG7B"}
@@ -1,8 +1,8 @@
1
1
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
2
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
3
3
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
6
  import intersects from 'semver/ranges/intersects';
7
7
  import { logError } from '../util';
8
8
  import { VisualizationSDKImpl } from './visualization/visualization_sdk';
@@ -1 +1 @@
1
- {"version":3,"file":"extension_host_api.js","names":["intersects","logError","VisualizationSDKImpl","TileSDKImpl","FetchProxyImpl","ExtensionEvent","ExtensionNotificationType","ExtensionRequestType","MountPoint","EXTENSION_SDK_VERSION","ExtensionHostApiImpl","constructor","configuration","_defineProperty","_configuration","chattyHost","setInitialRoute","hostChangedRoute","visualizationDataReceivedCallback","tileHostDataChangedCallback","isDashboardMountSupported","_this$_lookerHostData","_this$lookerHostData","_this$lookerHostData2","_this$lookerHostData3","_lookerHostData","extensionDashboardTileEnabled","lookerHostData","mountPoint","dashboardTile","dashboardVisualization","dashboardTilePopup","visualizationSDK","_visualizationSDK","tileSDK","_tileSDK","handleNotification","message","type","ROUTE_CHANGED","payload","route","routeState","undefined","VISUALIZATION_DATA","updateVisData","TILE_HOST_DATA","tileHostDataChanged","INITIALIZE","standalone","contextData","errorMessage","requiredLookerVersion","lookerVersion","verifyLookerVersion","extensionSdkVersion","Error","concat","createSecretKeyTag","keyName","match","extensionId","replace","verifyHostConnection","_this","_asyncToGenerator","sendAndReceive","VERIFY_HOST","invokeCoreSdk","httpMethod","path","params","body","authenticator","options","apiVersion","_this2","INVOKE_CORE_SDK","invokeCoreSdkRaw","_this3","RAW_INVOKE_CORE_SDK","updateTitle","title","send","UPDATE_TITLE","updateLocation","url","state","target","UPDATE_LOCATION","spartanLogout","SPARTAN_LOGOUT","openBrowserWindow","closeHostPopovers","CLOSE_HOST_POPOVERS","clientRouteChanged","localStorageSetItem","name","_arguments","arguments","_this4","value","length","Promise","reject","LOCAL_STORAGE","localStorageGetItem","_this5","localStorageRemoveItem","_this6","clipboardWrite","_this7","CLIPBOARD","userAttributeSetItem","_arguments2","_this8","USER_ATTRIBUTE","userAttributeGetItem","_this9","userAttributeResetItem","_this10","getContextData","JSON","parse","saveContextData","context","_this11","stringify","err","CONTEXT_DATA","refreshContextData","_this12","track","trackAction","attributes","TRACK_ACTION","error","errorEvent","filename","lineno","colno","ERROR_EVENT","toString","unloaded","EXTENSION_UNLOADED","createFetchProxy","baseUrl","init","responseBodyType","fetchProxy","resource","_this13","INVOKE_EXTERNAL_API","serverProxy","_this14","oauth2Authenticate","authEndpoint","authParameters","_arguments3","_this15","validateAuthParameters","signal","AbortController","oauth2ExchangeCodeForToken","_this16","rendered","failureMessage","RENDERED","_this17","messagePayload","chattyPayload","EXTENSION_API_REQUEST","then","values","version","client_id","redirect_uri","response_type"],"sources":["../../../src/connect/extension_host_api.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { ChattyHostConnection, Options } from '@looker/chatty'\nimport intersects from 'semver/ranges/intersects'\nimport { logError } from '../util'\nimport type {\n VisualizationDataReceivedCallback,\n VisualizationSDK,\n} from './visualization'\nimport { VisualizationSDKImpl } from './visualization/visualization_sdk'\nimport type { TileHostDataChangedCallback, TileSDK } from './tile'\nimport { TileSDKImpl } from './tile/tile_sdk'\nimport { FetchProxyImpl } from './fetch_proxy'\nimport type {\n ExtensionInitializationResponse,\n ExtensionHostApi,\n ExtensionHostApiConfiguration,\n ExtensionNotification,\n FetchCustomParameters,\n FetchResponseBodyType,\n LookerHostData,\n ApiVersion,\n} from './types'\nimport {\n ExtensionEvent,\n ExtensionNotificationType,\n ExtensionRequestType,\n MountPoint,\n} from './types'\n\nexport const EXTENSION_SDK_VERSION = '0.10.5'\n\nexport class ExtensionHostApiImpl implements ExtensionHostApi {\n private _configuration: ExtensionHostApiConfiguration\n private _lookerHostData?: Readonly<LookerHostData>\n private chattyHost: ChattyHostConnection\n private setInitialRoute?: (route: string, routeState?: any) => void\n private hostChangedRoute?: (route: string, routeState?: any) => void\n private visualizationDataReceivedCallback?: VisualizationDataReceivedCallback\n private tileHostDataChangedCallback?: TileHostDataChangedCallback\n private _visualizationSDK?: VisualizationSDK\n private _tileSDK?: TileSDK\n\n private contextData?: string\n\n constructor(configuration: ExtensionHostApiConfiguration) {\n this._configuration = configuration\n const {\n chattyHost,\n setInitialRoute,\n hostChangedRoute,\n visualizationDataReceivedCallback,\n tileHostDataChangedCallback,\n } = this._configuration\n this.chattyHost = chattyHost\n this.setInitialRoute = setInitialRoute\n this.hostChangedRoute = hostChangedRoute\n this.visualizationDataReceivedCallback = visualizationDataReceivedCallback\n this.tileHostDataChangedCallback = tileHostDataChangedCallback\n }\n\n get isDashboardMountSupported(): boolean {\n return (\n !!this._lookerHostData?.extensionDashboardTileEnabled &&\n (this.lookerHostData?.mountPoint === MountPoint.dashboardTile ||\n this.lookerHostData?.mountPoint === MountPoint.dashboardVisualization ||\n this.lookerHostData?.mountPoint === MountPoint.dashboardTilePopup)\n )\n }\n\n get visualizationSDK(): VisualizationSDK {\n if (!this._visualizationSDK) {\n this._visualizationSDK = new VisualizationSDKImpl(this)\n }\n return this._visualizationSDK\n }\n\n get tileSDK(): TileSDK {\n if (!this._tileSDK) {\n this._tileSDK = new TileSDKImpl(this)\n }\n return this._tileSDK\n }\n\n get lookerHostData() {\n return this._lookerHostData\n }\n\n handleNotification(\n message: ExtensionNotification\n ): ExtensionInitializationResponse | undefined {\n const { type } = message\n switch (type) {\n case ExtensionNotificationType.ROUTE_CHANGED: {\n const { payload } = message\n if (this.hostChangedRoute && payload) {\n const { route, routeState } = payload\n if (route) {\n this.hostChangedRoute(route, routeState)\n }\n }\n return undefined\n }\n case ExtensionNotificationType.VISUALIZATION_DATA: {\n const { payload } = message\n this.visualizationSDK.updateVisData(payload)\n if (this.visualizationDataReceivedCallback) {\n this.visualizationDataReceivedCallback(payload)\n }\n return undefined\n }\n case ExtensionNotificationType.TILE_HOST_DATA: {\n const { payload } = message\n this.tileSDK.tileHostDataChanged(payload)\n if (this.tileHostDataChangedCallback) {\n this.tileHostDataChangedCallback(payload)\n }\n return undefined\n }\n case ExtensionNotificationType.INITIALIZE: {\n const { payload } = message\n const lookerHostData = payload || {}\n if (!lookerHostData.mountPoint) {\n lookerHostData.mountPoint = MountPoint.standalone\n }\n this._lookerHostData = lookerHostData\n this.contextData = lookerHostData.contextData\n let errorMessage\n if (\n this._configuration.requiredLookerVersion &&\n lookerHostData.lookerVersion\n ) {\n errorMessage = this.verifyLookerVersion(\n this._configuration.requiredLookerVersion\n )\n if (errorMessage) {\n logError(errorMessage)\n }\n }\n if (this.setInitialRoute && payload) {\n const { route, routeState } = payload\n if (route) {\n this.setInitialRoute(route, routeState)\n }\n }\n return {\n extensionSdkVersion: EXTENSION_SDK_VERSION,\n errorMessage,\n }\n }\n default:\n logError('Unrecognized extension notification', message)\n throw new Error(`Unrecognized extension notification type ${type}`)\n }\n }\n\n createSecretKeyTag(keyName: string): string {\n const errorMessage = this.verifyLookerVersion('>=7.11')\n if (errorMessage) {\n throw new Error(errorMessage)\n }\n if (!keyName.match(/^[A-Za-z0-9_.]+$/)) {\n throw new Error('Unsupported characters in key name')\n }\n return `{{${(this._lookerHostData as LookerHostData).extensionId.replace(\n /::|-/g,\n '_'\n )}_${keyName}}}`\n }\n\n async verifyHostConnection() {\n return this.sendAndReceive(ExtensionRequestType.VERIFY_HOST)\n }\n\n async invokeCoreSdk(\n httpMethod: string,\n path: string,\n params?: any,\n body?: any,\n authenticator?: any,\n options?: any,\n apiVersion?: ApiVersion\n ): Promise<any> {\n return this.sendAndReceive(ExtensionRequestType.INVOKE_CORE_SDK, {\n httpMethod,\n path,\n params,\n body,\n authenticator,\n options,\n apiVersion,\n })\n }\n\n async invokeCoreSdkRaw(\n httpMethod: string,\n path: string,\n params?: any,\n body?: any,\n apiVersion?: ApiVersion\n ): Promise<any> {\n return this.sendAndReceive(ExtensionRequestType.RAW_INVOKE_CORE_SDK, {\n httpMethod,\n path,\n params,\n body,\n apiVersion,\n })\n }\n\n updateTitle(title: string) {\n this.send(ExtensionRequestType.UPDATE_TITLE, { title })\n }\n\n updateLocation(url: string, state?: any, target?: string) {\n this.send(ExtensionRequestType.UPDATE_LOCATION, { url, state, target })\n }\n\n spartanLogout() {\n this.send(ExtensionRequestType.SPARTAN_LOGOUT)\n }\n\n openBrowserWindow(url: string, target?: string) {\n this.send(ExtensionRequestType.UPDATE_LOCATION, {\n url,\n undefined,\n target: target || '_blank',\n })\n }\n\n closeHostPopovers() {\n this.send(ExtensionRequestType.CLOSE_HOST_POPOVERS)\n }\n\n clientRouteChanged(route: string, routeState?: any) {\n this.send(ExtensionRequestType.ROUTE_CHANGED, {\n route,\n routeState,\n })\n }\n\n async localStorageSetItem(name: string, value = ''): Promise<boolean> {\n if (this._lookerHostData && !this._lookerHostData.lookerVersion) {\n return Promise.reject(\n new Error(\n 'localStorageSetItem not supported by the current Looker host'\n )\n )\n }\n return this.sendAndReceive(ExtensionRequestType.LOCAL_STORAGE, {\n type: 'set',\n name,\n value,\n })\n }\n\n async localStorageGetItem(name: string): Promise<string | null> {\n if (this._lookerHostData && !this._lookerHostData.lookerVersion) {\n return Promise.reject(\n new Error(\n 'localStorageGetItem not supported by the current Looker host'\n )\n )\n }\n return this.sendAndReceive(ExtensionRequestType.LOCAL_STORAGE, {\n type: 'get',\n name,\n })\n }\n\n async localStorageRemoveItem(name: string): Promise<boolean> {\n if (this._lookerHostData && !this._lookerHostData.lookerVersion) {\n return Promise.reject(\n new Error(\n 'localStorageRemoveItem not supported by the current Looker host'\n )\n )\n }\n return this.sendAndReceive(ExtensionRequestType.LOCAL_STORAGE, {\n type: 'remove',\n name,\n })\n }\n\n async clipboardWrite(value: string): Promise<void> {\n const errorMessage = this.verifyLookerVersion('>=21.7')\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage))\n }\n return this.sendAndReceive(ExtensionRequestType.CLIPBOARD, {\n type: 'write',\n value,\n })\n }\n\n async userAttributeSetItem(name: string, value = ''): Promise<boolean> {\n // User attributes added in Looker version 7.13, updated in 7.15\n const errorMessage = this.verifyLookerVersion('>=7.15')\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage))\n }\n return this.sendAndReceive(ExtensionRequestType.USER_ATTRIBUTE, {\n type: 'set',\n name,\n value,\n })\n }\n\n async userAttributeGetItem(name: string): Promise<string | null> {\n // User attributes added in Looker version 7.13, updated in 7.15\n const errorMessage = this.verifyLookerVersion('>=7.15')\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage))\n }\n return this.sendAndReceive(ExtensionRequestType.USER_ATTRIBUTE, {\n type: 'get',\n name,\n })\n }\n\n async userAttributeResetItem(name: string): Promise<void> {\n // User attributes added in Looker version 7.13, updated in 7.15\n const errorMessage = this.verifyLookerVersion('>=7.15')\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage))\n }\n return this.sendAndReceive(ExtensionRequestType.USER_ATTRIBUTE, {\n type: 'reset',\n name,\n })\n }\n\n getContextData() {\n const errorMessage = this.verifyLookerVersion('>=7.13')\n if (errorMessage) {\n throw new Error(errorMessage)\n }\n if (this.contextData) {\n return JSON.parse(this.contextData)\n } else {\n return undefined\n }\n }\n\n async saveContextData(context: any): Promise<any> {\n const errorMessage = this.verifyLookerVersion('>=7.13')\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage))\n }\n let contextData: string | undefined\n if (context) {\n try {\n contextData = JSON.stringify(context)\n } catch (err) {\n return Promise.reject(new Error('context cannot be serialized'))\n }\n } else {\n contextData = undefined\n }\n await this.sendAndReceive(ExtensionRequestType.CONTEXT_DATA, {\n type: 'save',\n contextData,\n })\n return this.getContextData()\n }\n\n async refreshContextData(): Promise<any> {\n const errorMessage = this.verifyLookerVersion('>=7.13')\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage))\n }\n this.contextData = await this.sendAndReceive(\n ExtensionRequestType.CONTEXT_DATA,\n {\n type: 'refresh',\n }\n )\n return this.getContextData()\n }\n\n track(name: string, trackAction: string, attributes?: Record<string, any>) {\n this.send(ExtensionRequestType.TRACK_ACTION, {\n name,\n trackAction,\n attributes,\n })\n }\n\n error(errorEvent: ErrorEvent) {\n if (this._lookerHostData) {\n const { message, filename, lineno, colno, error } = errorEvent || {}\n this.send(ExtensionRequestType.ERROR_EVENT, {\n message,\n filename,\n lineno,\n colno,\n error: error && error.toString ? error.toString() : error,\n })\n } else {\n logError(\n 'Unhandled error but Looker host connection not established',\n errorEvent\n )\n }\n }\n\n unloaded() {\n this.send(ExtensionRequestType.EXTENSION_UNLOADED, {})\n }\n\n createFetchProxy(\n baseUrl?: string,\n init?: FetchCustomParameters,\n responseBodyType?: FetchResponseBodyType\n ) {\n return new FetchProxyImpl(this, baseUrl, init, responseBodyType)\n }\n\n async fetchProxy(\n resource: string,\n init?: FetchCustomParameters,\n responseBodyType?: FetchResponseBodyType\n ) {\n // Fetch proxy support added to Looker 7.9\n const errorMessage = this.verifyLookerVersion('>=7.9')\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage))\n }\n return this.sendAndReceive(ExtensionRequestType.INVOKE_EXTERNAL_API, {\n type: 'fetch',\n payload: {\n resource,\n init,\n responseBodyType,\n },\n })\n }\n\n async serverProxy(\n resource: string,\n init?: FetchCustomParameters,\n responseBodyType?: FetchResponseBodyType\n ) {\n // Server proxy support added to Looker 7.11\n const errorMessage = this.verifyLookerVersion('>=7.11')\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage))\n }\n return this.sendAndReceive(ExtensionRequestType.INVOKE_EXTERNAL_API, {\n type: 'server-proxy',\n payload: {\n resource,\n init,\n responseBodyType,\n },\n })\n }\n\n async oauth2Authenticate(\n authEndpoint: string,\n authParameters: Record<string, string>,\n httpMethod = 'POST'\n ) {\n // oauth2Authenticate proxy support added to Looker 7.9\n let errorMessage = this.verifyLookerVersion('>=7.9')\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage))\n }\n errorMessage = this.validateAuthParameters(authParameters)\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage))\n }\n return this.sendAndReceive(\n ExtensionRequestType.INVOKE_EXTERNAL_API,\n {\n type: 'oauth2_authenticate',\n payload: {\n authEndpoint,\n authParameters,\n httpMethod,\n },\n },\n // Adding the signal disables the default timeout\n { signal: new AbortController().signal }\n )\n }\n\n async oauth2ExchangeCodeForToken(\n authEndpoint: string,\n authParameters: Record<string, string>\n ) {\n const errorMessage = this.verifyLookerVersion('>=7.11')\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage))\n }\n return this.sendAndReceive(ExtensionRequestType.INVOKE_EXTERNAL_API, {\n type: 'oauth2_exchange_code',\n payload: {\n authEndpoint,\n authParameters,\n },\n })\n }\n\n rendered(failureMessage?: string) {\n this.send(ExtensionRequestType.RENDERED, { failureMessage })\n }\n\n async sendAndReceive(\n type: string,\n payload?: any,\n options?: Options\n ): Promise<any> {\n if (!this._lookerHostData) {\n return Promise.reject(new Error('Looker host connection not established'))\n }\n const messagePayload = {\n type,\n payload,\n }\n const chattyPayload = options ? [messagePayload, options] : [messagePayload]\n return this.chattyHost\n .sendAndReceive(ExtensionEvent.EXTENSION_API_REQUEST, ...chattyPayload)\n .then((values) => values[0])\n }\n\n send(type: string, payload?: any) {\n if (!this._lookerHostData) {\n throw new Error('Looker host connection not established')\n }\n this.chattyHost.send(ExtensionEvent.EXTENSION_API_REQUEST, {\n type,\n payload,\n })\n }\n\n private verifyLookerVersion(version: string): string | undefined {\n // Default version to 7.0 as that's the first Looker version that officially\n // supported extensions. Version 6.24 has some support for extensions but most\n // likely will fail before reaching this point\n const lookerVersion = this._lookerHostData\n ? this._lookerHostData.lookerVersion || '7.0'\n : '7.0'\n if (!this._lookerHostData || !intersects(version, lookerVersion, true)) {\n return `Extension requires Looker version ${version}, got ${lookerVersion}`\n }\n return undefined\n }\n\n private validateAuthParameters(authParameters: Record<string, string>) {\n if (!authParameters.client_id) {\n return 'client_id missing'\n }\n if (authParameters.redirect_uri) {\n return 'redirect_uri must NOT be included'\n }\n if (\n authParameters.response_type !== 'token' &&\n authParameters.response_type !== 'id_token' &&\n authParameters.response_type !== 'code'\n ) {\n return `invalid response_type, must be token, id_token or code, ${authParameters.response_type}`\n }\n return undefined\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"extension_host_api.js","names":["intersects","logError","VisualizationSDKImpl","TileSDKImpl","FetchProxyImpl","ExtensionEvent","ExtensionNotificationType","ExtensionRequestType","MountPoint","EXTENSION_SDK_VERSION","ExtensionHostApiImpl","constructor","configuration","_defineProperty","_configuration","chattyHost","setInitialRoute","hostChangedRoute","visualizationDataReceivedCallback","tileHostDataChangedCallback","isDashboardMountSupported","_this$_lookerHostData","_this$lookerHostData","_this$lookerHostData2","_this$lookerHostData3","_lookerHostData","extensionDashboardTileEnabled","lookerHostData","mountPoint","dashboardTile","dashboardVisualization","dashboardTilePopup","visualizationSDK","_visualizationSDK","tileSDK","_tileSDK","handleNotification","message","type","ROUTE_CHANGED","payload","route","routeState","undefined","VISUALIZATION_DATA","updateVisData","TILE_HOST_DATA","tileHostDataChanged","INITIALIZE","standalone","contextData","errorMessage","requiredLookerVersion","lookerVersion","verifyLookerVersion","extensionSdkVersion","Error","concat","createSecretKeyTag","keyName","match","extensionId","replace","verifyHostConnection","_this","_asyncToGenerator","sendAndReceive","VERIFY_HOST","invokeCoreSdk","httpMethod","path","params","body","authenticator","options","apiVersion","_this2","INVOKE_CORE_SDK","invokeCoreSdkRaw","_this3","RAW_INVOKE_CORE_SDK","updateTitle","title","send","UPDATE_TITLE","updateLocation","url","state","target","UPDATE_LOCATION","spartanLogout","SPARTAN_LOGOUT","openBrowserWindow","closeHostPopovers","CLOSE_HOST_POPOVERS","clientRouteChanged","localStorageSetItem","name","_arguments","arguments","_this4","value","length","Promise","reject","LOCAL_STORAGE","localStorageGetItem","_this5","localStorageRemoveItem","_this6","clipboardWrite","_this7","CLIPBOARD","userAttributeSetItem","_arguments2","_this8","USER_ATTRIBUTE","userAttributeGetItem","_this9","userAttributeResetItem","_this10","getContextData","JSON","parse","saveContextData","context","_this11","stringify","err","CONTEXT_DATA","refreshContextData","_this12","track","trackAction","attributes","TRACK_ACTION","error","errorEvent","filename","lineno","colno","ERROR_EVENT","toString","unloaded","EXTENSION_UNLOADED","createFetchProxy","baseUrl","init","responseBodyType","fetchProxy","resource","_this13","INVOKE_EXTERNAL_API","serverProxy","_this14","oauth2Authenticate","authEndpoint","authParameters","_arguments3","_this15","validateAuthParameters","signal","AbortController","oauth2ExchangeCodeForToken","_this16","rendered","failureMessage","RENDERED","_this17","messagePayload","chattyPayload","EXTENSION_API_REQUEST","then","values","version","client_id","redirect_uri","response_type"],"sources":["../../../src/connect/extension_host_api.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { ChattyHostConnection, Options } from '@looker/chatty';\nimport intersects from 'semver/ranges/intersects';\nimport { logError } from '../util';\nimport type {\n VisualizationDataReceivedCallback,\n VisualizationSDK,\n VisualizationSDKInternal,\n} from './visualization';\nimport { VisualizationSDKImpl } from './visualization/visualization_sdk';\nimport type {\n TileHostDataChangedCallback,\n TileSDK,\n TileSDKInternal,\n} from './tile';\nimport { TileSDKImpl } from './tile/tile_sdk';\nimport { FetchProxyImpl } from './fetch_proxy';\nimport type {\n ApiVersion,\n ExtensionHostApi,\n ExtensionHostApiConfiguration,\n ExtensionInitializationResponse,\n ExtensionNotification,\n FetchCustomParameters,\n FetchResponseBodyType,\n LookerHostData,\n} from './types';\nimport {\n ExtensionEvent,\n ExtensionNotificationType,\n ExtensionRequestType,\n MountPoint,\n} from './types';\n\nexport const EXTENSION_SDK_VERSION = '0.10.5';\n\nexport class ExtensionHostApiImpl implements ExtensionHostApi {\n private _configuration: ExtensionHostApiConfiguration;\n private _lookerHostData?: Readonly<LookerHostData>;\n private chattyHost: ChattyHostConnection;\n private setInitialRoute?: (route: string, routeState?: any) => void;\n private hostChangedRoute?: (route: string, routeState?: any) => void;\n private visualizationDataReceivedCallback?: VisualizationDataReceivedCallback;\n private tileHostDataChangedCallback?: TileHostDataChangedCallback;\n private _visualizationSDK?: VisualizationSDKInternal;\n private _tileSDK?: TileSDKInternal;\n\n private contextData?: string;\n\n constructor(configuration: ExtensionHostApiConfiguration) {\n this._configuration = configuration;\n const {\n chattyHost,\n setInitialRoute,\n hostChangedRoute,\n visualizationDataReceivedCallback,\n tileHostDataChangedCallback,\n } = this._configuration;\n this.chattyHost = chattyHost;\n this.setInitialRoute = setInitialRoute;\n this.hostChangedRoute = hostChangedRoute;\n this.visualizationDataReceivedCallback = visualizationDataReceivedCallback;\n this.tileHostDataChangedCallback = tileHostDataChangedCallback;\n }\n\n get isDashboardMountSupported(): boolean {\n return (\n !!this._lookerHostData?.extensionDashboardTileEnabled &&\n (this.lookerHostData?.mountPoint === MountPoint.dashboardTile ||\n this.lookerHostData?.mountPoint === MountPoint.dashboardVisualization ||\n this.lookerHostData?.mountPoint === MountPoint.dashboardTilePopup)\n );\n }\n\n get visualizationSDK(): VisualizationSDK {\n if (!this._visualizationSDK) {\n this._visualizationSDK = new VisualizationSDKImpl(this);\n }\n return this._visualizationSDK;\n }\n\n get tileSDK(): TileSDK {\n if (!this._tileSDK) {\n this._tileSDK = new TileSDKImpl(this);\n }\n return this._tileSDK;\n }\n\n get lookerHostData() {\n return this._lookerHostData;\n }\n\n handleNotification(\n message: ExtensionNotification\n ): ExtensionInitializationResponse | undefined {\n const { type } = message;\n switch (type) {\n case ExtensionNotificationType.ROUTE_CHANGED: {\n const { payload } = message;\n if (this.hostChangedRoute && payload) {\n const { route, routeState } = payload;\n if (route) {\n this.hostChangedRoute(route, routeState);\n }\n }\n return undefined;\n }\n case ExtensionNotificationType.VISUALIZATION_DATA: {\n const { payload } = message;\n (this.visualizationSDK as VisualizationSDKInternal).updateVisData(\n payload\n );\n if (this.visualizationDataReceivedCallback) {\n this.visualizationDataReceivedCallback(payload);\n }\n return undefined;\n }\n case ExtensionNotificationType.TILE_HOST_DATA: {\n const { payload } = message;\n (this.tileSDK as TileSDKInternal).tileHostDataChanged(payload);\n if (this.tileHostDataChangedCallback) {\n this.tileHostDataChangedCallback(payload);\n }\n return undefined;\n }\n case ExtensionNotificationType.INITIALIZE: {\n const { payload } = message;\n const lookerHostData = payload || {};\n if (!lookerHostData.mountPoint) {\n lookerHostData.mountPoint = MountPoint.standalone;\n }\n this._lookerHostData = lookerHostData;\n this.contextData = lookerHostData.contextData;\n let errorMessage;\n if (\n this._configuration.requiredLookerVersion &&\n lookerHostData.lookerVersion\n ) {\n errorMessage = this.verifyLookerVersion(\n this._configuration.requiredLookerVersion\n );\n if (errorMessage) {\n logError(errorMessage);\n }\n }\n if (this.setInitialRoute && payload) {\n const { route, routeState } = payload;\n if (route) {\n this.setInitialRoute(route, routeState);\n }\n }\n return {\n extensionSdkVersion: EXTENSION_SDK_VERSION,\n errorMessage,\n };\n }\n default:\n logError('Unrecognized extension notification', message);\n throw new Error(`Unrecognized extension notification type ${type}`);\n }\n }\n\n createSecretKeyTag(keyName: string): string {\n const errorMessage = this.verifyLookerVersion('>=7.11');\n if (errorMessage) {\n throw new Error(errorMessage);\n }\n if (!keyName.match(/^[A-Za-z0-9_.]+$/)) {\n throw new Error('Unsupported characters in key name');\n }\n return `{{${(this._lookerHostData as LookerHostData).extensionId.replace(\n /::|-/g,\n '_'\n )}_${keyName}}}`;\n }\n\n async verifyHostConnection() {\n return this.sendAndReceive(ExtensionRequestType.VERIFY_HOST);\n }\n\n async invokeCoreSdk(\n httpMethod: string,\n path: string,\n params?: any,\n body?: any,\n authenticator?: any,\n options?: any,\n apiVersion?: ApiVersion\n ): Promise<any> {\n return this.sendAndReceive(ExtensionRequestType.INVOKE_CORE_SDK, {\n httpMethod,\n path,\n params,\n body,\n authenticator,\n options,\n apiVersion,\n });\n }\n\n async invokeCoreSdkRaw(\n httpMethod: string,\n path: string,\n params?: any,\n body?: any,\n apiVersion?: ApiVersion\n ): Promise<any> {\n return this.sendAndReceive(ExtensionRequestType.RAW_INVOKE_CORE_SDK, {\n httpMethod,\n path,\n params,\n body,\n apiVersion,\n });\n }\n\n updateTitle(title: string) {\n this.send(ExtensionRequestType.UPDATE_TITLE, { title });\n }\n\n updateLocation(url: string, state?: any, target?: string) {\n this.send(ExtensionRequestType.UPDATE_LOCATION, { url, state, target });\n }\n\n spartanLogout() {\n this.send(ExtensionRequestType.SPARTAN_LOGOUT);\n }\n\n openBrowserWindow(url: string, target?: string) {\n this.send(ExtensionRequestType.UPDATE_LOCATION, {\n url,\n undefined,\n target: target || '_blank',\n });\n }\n\n closeHostPopovers() {\n this.send(ExtensionRequestType.CLOSE_HOST_POPOVERS);\n }\n\n clientRouteChanged(route: string, routeState?: any) {\n this.send(ExtensionRequestType.ROUTE_CHANGED, {\n route,\n routeState,\n });\n }\n\n async localStorageSetItem(name: string, value = ''): Promise<boolean> {\n if (this._lookerHostData && !this._lookerHostData.lookerVersion) {\n return Promise.reject(\n new Error(\n 'localStorageSetItem not supported by the current Looker host'\n )\n );\n }\n return this.sendAndReceive(ExtensionRequestType.LOCAL_STORAGE, {\n type: 'set',\n name,\n value,\n });\n }\n\n async localStorageGetItem(name: string): Promise<string | null> {\n if (this._lookerHostData && !this._lookerHostData.lookerVersion) {\n return Promise.reject(\n new Error(\n 'localStorageGetItem not supported by the current Looker host'\n )\n );\n }\n return this.sendAndReceive(ExtensionRequestType.LOCAL_STORAGE, {\n type: 'get',\n name,\n });\n }\n\n async localStorageRemoveItem(name: string): Promise<boolean> {\n if (this._lookerHostData && !this._lookerHostData.lookerVersion) {\n return Promise.reject(\n new Error(\n 'localStorageRemoveItem not supported by the current Looker host'\n )\n );\n }\n return this.sendAndReceive(ExtensionRequestType.LOCAL_STORAGE, {\n type: 'remove',\n name,\n });\n }\n\n async clipboardWrite(value: string): Promise<void> {\n const errorMessage = this.verifyLookerVersion('>=21.7');\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage));\n }\n return this.sendAndReceive(ExtensionRequestType.CLIPBOARD, {\n type: 'write',\n value,\n });\n }\n\n async userAttributeSetItem(name: string, value = ''): Promise<boolean> {\n // User attributes added in Looker version 7.13, updated in 7.15\n const errorMessage = this.verifyLookerVersion('>=7.15');\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage));\n }\n return this.sendAndReceive(ExtensionRequestType.USER_ATTRIBUTE, {\n type: 'set',\n name,\n value,\n });\n }\n\n async userAttributeGetItem(name: string): Promise<string | null> {\n // User attributes added in Looker version 7.13, updated in 7.15\n const errorMessage = this.verifyLookerVersion('>=7.15');\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage));\n }\n return this.sendAndReceive(ExtensionRequestType.USER_ATTRIBUTE, {\n type: 'get',\n name,\n });\n }\n\n async userAttributeResetItem(name: string): Promise<void> {\n // User attributes added in Looker version 7.13, updated in 7.15\n const errorMessage = this.verifyLookerVersion('>=7.15');\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage));\n }\n return this.sendAndReceive(ExtensionRequestType.USER_ATTRIBUTE, {\n type: 'reset',\n name,\n });\n }\n\n getContextData() {\n const errorMessage = this.verifyLookerVersion('>=7.13');\n if (errorMessage) {\n throw new Error(errorMessage);\n }\n if (this.contextData) {\n return JSON.parse(this.contextData);\n } else {\n return undefined;\n }\n }\n\n async saveContextData(context: any): Promise<any> {\n const errorMessage = this.verifyLookerVersion('>=7.13');\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage));\n }\n let contextData: string | undefined;\n if (context) {\n try {\n contextData = JSON.stringify(context);\n } catch (err) {\n return Promise.reject(new Error('context cannot be serialized'));\n }\n } else {\n contextData = undefined;\n }\n await this.sendAndReceive(ExtensionRequestType.CONTEXT_DATA, {\n type: 'save',\n contextData,\n });\n return this.getContextData();\n }\n\n async refreshContextData(): Promise<any> {\n const errorMessage = this.verifyLookerVersion('>=7.13');\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage));\n }\n this.contextData = await this.sendAndReceive(\n ExtensionRequestType.CONTEXT_DATA,\n {\n type: 'refresh',\n }\n );\n return this.getContextData();\n }\n\n track(name: string, trackAction: string, attributes?: Record<string, any>) {\n this.send(ExtensionRequestType.TRACK_ACTION, {\n name,\n trackAction,\n attributes,\n });\n }\n\n error(errorEvent: ErrorEvent) {\n if (this._lookerHostData) {\n const { message, filename, lineno, colno, error } = errorEvent || {};\n this.send(ExtensionRequestType.ERROR_EVENT, {\n message,\n filename,\n lineno,\n colno,\n error: error && error.toString ? error.toString() : error,\n });\n } else {\n logError(\n 'Unhandled error but Looker host connection not established',\n errorEvent\n );\n }\n }\n\n unloaded() {\n this.send(ExtensionRequestType.EXTENSION_UNLOADED, {});\n }\n\n createFetchProxy(\n baseUrl?: string,\n init?: FetchCustomParameters,\n responseBodyType?: FetchResponseBodyType\n ) {\n return new FetchProxyImpl(this, baseUrl, init, responseBodyType);\n }\n\n async fetchProxy(\n resource: string,\n init?: FetchCustomParameters,\n responseBodyType?: FetchResponseBodyType\n ) {\n // Fetch proxy support added to Looker 7.9\n const errorMessage = this.verifyLookerVersion('>=7.9');\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage));\n }\n return this.sendAndReceive(ExtensionRequestType.INVOKE_EXTERNAL_API, {\n type: 'fetch',\n payload: {\n resource,\n init,\n responseBodyType,\n },\n });\n }\n\n async serverProxy(\n resource: string,\n init?: FetchCustomParameters,\n responseBodyType?: FetchResponseBodyType\n ) {\n // Server proxy support added to Looker 7.11\n const errorMessage = this.verifyLookerVersion('>=7.11');\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage));\n }\n return this.sendAndReceive(ExtensionRequestType.INVOKE_EXTERNAL_API, {\n type: 'server-proxy',\n payload: {\n resource,\n init,\n responseBodyType,\n },\n });\n }\n\n async oauth2Authenticate(\n authEndpoint: string,\n authParameters: Record<string, string>,\n httpMethod = 'POST'\n ) {\n // oauth2Authenticate proxy support added to Looker 7.9\n let errorMessage = this.verifyLookerVersion('>=7.9');\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage));\n }\n errorMessage = this.validateAuthParameters(authParameters);\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage));\n }\n return this.sendAndReceive(\n ExtensionRequestType.INVOKE_EXTERNAL_API,\n {\n type: 'oauth2_authenticate',\n payload: {\n authEndpoint,\n authParameters,\n httpMethod,\n },\n },\n // Adding the signal disables the default timeout\n { signal: new AbortController().signal }\n );\n }\n\n async oauth2ExchangeCodeForToken(\n authEndpoint: string,\n authParameters: Record<string, string>\n ) {\n const errorMessage = this.verifyLookerVersion('>=7.11');\n if (errorMessage) {\n return Promise.reject(new Error(errorMessage));\n }\n return this.sendAndReceive(ExtensionRequestType.INVOKE_EXTERNAL_API, {\n type: 'oauth2_exchange_code',\n payload: {\n authEndpoint,\n authParameters,\n },\n });\n }\n\n rendered(failureMessage?: string) {\n this.send(ExtensionRequestType.RENDERED, { failureMessage });\n }\n\n async sendAndReceive(\n type: string,\n payload?: any,\n options?: Options\n ): Promise<any> {\n if (!this._lookerHostData) {\n return Promise.reject(\n new Error('Looker host connection not established')\n );\n }\n const messagePayload = {\n type,\n payload,\n };\n const chattyPayload = options\n ? [messagePayload, options]\n : [messagePayload];\n return this.chattyHost\n .sendAndReceive(ExtensionEvent.EXTENSION_API_REQUEST, ...chattyPayload)\n .then((values) => values[0]);\n }\n\n send(type: string, payload?: any) {\n if (!this._lookerHostData) {\n throw new Error('Looker host connection not established');\n }\n this.chattyHost.send(ExtensionEvent.EXTENSION_API_REQUEST, {\n type,\n payload,\n });\n }\n\n private verifyLookerVersion(version: string): string | undefined {\n // Default version to 7.0 as that's the first Looker version that officially\n // supported extensions. Version 6.24 has some support for extensions but most\n // likely will fail before reaching this point\n const lookerVersion = this._lookerHostData\n ? this._lookerHostData.lookerVersion || '7.0'\n : '7.0';\n if (!this._lookerHostData || !intersects(version, lookerVersion, true)) {\n return `Extension requires Looker version ${version}, got ${lookerVersion}`;\n }\n return undefined;\n }\n\n private validateAuthParameters(authParameters: Record<string, string>) {\n if (!authParameters.client_id) {\n return 'client_id missing';\n }\n if (authParameters.redirect_uri) {\n return 'redirect_uri must NOT be included';\n }\n if (\n authParameters.response_type !== 'token' &&\n authParameters.response_type !== 'id_token' &&\n authParameters.response_type !== 'code'\n ) {\n return `invalid response_type, must be token, id_token or code, ${authParameters.response_type}`;\n }\n return undefined;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch_proxy.js","names":["deepmerge","FetchProxyImpl","constructor","extensionHost","baseUrl","init","responseBodyType","fetchProxy","resource","_this","_asyncToGenerator","getResource","getInit","getResponseBodyType","undefined"],"sources":["../../../src/connect/fetch_proxy.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\nimport deepmerge from 'deepmerge'\nimport type {\n FetchProxy,\n FetchCustomParameters,\n FetchResponseBodyType,\n FetchProxyDataResponse,\n} from './types'\nimport type { ExtensionHostApiImpl } from './extension_host_api'\n\nexport class FetchProxyImpl implements FetchProxy {\n constructor(\n private extensionHost: ExtensionHostApiImpl,\n private baseUrl?: string,\n private init?: FetchCustomParameters,\n private responseBodyType?: FetchResponseBodyType\n ) {}\n\n async fetchProxy(\n resource: string,\n init?: FetchCustomParameters,\n responseBodyType?: FetchResponseBodyType\n ): Promise<FetchProxyDataResponse> {\n return this.extensionHost.fetchProxy(\n this.getResource(resource),\n this.getInit(init),\n this.getResponseBodyType(responseBodyType)\n )\n }\n\n private getResource(resource: string) {\n return this.baseUrl ? this.baseUrl + resource : resource\n }\n\n private getInit(init?: FetchCustomParameters) {\n if (init || this.init) {\n return deepmerge(this.init || {}, init || {})\n }\n return undefined\n }\n\n private getResponseBodyType(responseBodyType?: FetchResponseBodyType) {\n return responseBodyType || this.responseBodyType\n }\n}\n"],"mappings":";;AAyBA,OAAOA,SAAS,MAAM,WAAW;AASjC,OAAO,MAAMC,cAAc,CAAuB;EAChDC,WAAWA,CACDC,aAAmC,EACnCC,OAAgB,EAChBC,IAA4B,EAC5BC,gBAAwC,EAChD;IAAA,KAJQH,aAAmC,GAAnCA,aAAmC;IAAA,KACnCC,OAAgB,GAAhBA,OAAgB;IAAA,KAChBC,IAA4B,GAA5BA,IAA4B;IAAA,KAC5BC,gBAAwC,GAAxCA,gBAAwC;EAC/C;EAEGC,UAAUA,CACdC,QAAgB,EAChBH,IAA4B,EAC5BC,gBAAwC,EACP;IAAA,IAAAG,KAAA;IAAA,OAAAC,iBAAA;MACjC,OAAOD,KAAI,CAACN,aAAa,CAACI,UAAU,CAClCE,KAAI,CAACE,WAAW,CAACH,QAAQ,CAAC,EAC1BC,KAAI,CAACG,OAAO,CAACP,IAAI,CAAC,EAClBI,KAAI,CAACI,mBAAmB,CAACP,gBAAgB,CAC3C,CAAC;IAAA;EACH;EAEQK,WAAWA,CAACH,QAAgB,EAAE;IACpC,OAAO,IAAI,CAACJ,OAAO,GAAG,IAAI,CAACA,OAAO,GAAGI,QAAQ,GAAGA,QAAQ;EAC1D;EAEQI,OAAOA,CAACP,IAA4B,EAAE;IAC5C,IAAIA,IAAI,IAAI,IAAI,CAACA,IAAI,EAAE;MACrB,OAAOL,SAAS,CAAC,IAAI,CAACK,IAAI,IAAI,CAAC,CAAC,EAAEA,IAAI,IAAI,CAAC,CAAC,CAAC;IAC/C;IACA,OAAOS,SAAS;EAClB;EAEQD,mBAAmBA,CAACP,gBAAwC,EAAE;IACpE,OAAOA,gBAAgB,IAAI,IAAI,CAACA,gBAAgB;EAClD;AACF"}
1
+ {"version":3,"file":"fetch_proxy.js","names":["deepmerge","FetchProxyImpl","constructor","extensionHost","baseUrl","init","responseBodyType","fetchProxy","resource","_this","_asyncToGenerator","getResource","getInit","getResponseBodyType","undefined"],"sources":["../../../src/connect/fetch_proxy.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\nimport deepmerge from 'deepmerge';\nimport type {\n FetchCustomParameters,\n FetchProxy,\n FetchProxyDataResponse,\n FetchResponseBodyType,\n} from './types';\nimport type { ExtensionHostApiImpl } from './extension_host_api';\n\nexport class FetchProxyImpl implements FetchProxy {\n constructor(\n private extensionHost: ExtensionHostApiImpl,\n private baseUrl?: string,\n private init?: FetchCustomParameters,\n private responseBodyType?: FetchResponseBodyType\n ) {}\n\n async fetchProxy(\n resource: string,\n init?: FetchCustomParameters,\n responseBodyType?: FetchResponseBodyType\n ): Promise<FetchProxyDataResponse> {\n return this.extensionHost.fetchProxy(\n this.getResource(resource),\n this.getInit(init),\n this.getResponseBodyType(responseBodyType)\n );\n }\n\n private getResource(resource: string) {\n return this.baseUrl ? this.baseUrl + resource : resource;\n }\n\n private getInit(init?: FetchCustomParameters) {\n if (init || this.init) {\n return deepmerge(this.init || {}, init || {});\n }\n return undefined;\n }\n\n private getResponseBodyType(responseBodyType?: FetchResponseBodyType) {\n return responseBodyType || this.responseBodyType;\n }\n}\n"],"mappings":";;AAyBA,OAAOA,SAAS,MAAM,WAAW;AASjC,OAAO,MAAMC,cAAc,CAAuB;EAChDC,WAAWA,CACDC,aAAmC,EACnCC,OAAgB,EAChBC,IAA4B,EAC5BC,gBAAwC,EAChD;IAAA,KAJQH,aAAmC,GAAnCA,aAAmC;IAAA,KACnCC,OAAgB,GAAhBA,OAAgB;IAAA,KAChBC,IAA4B,GAA5BA,IAA4B;IAAA,KAC5BC,gBAAwC,GAAxCA,gBAAwC;EAC/C;EAEGC,UAAUA,CACdC,QAAgB,EAChBH,IAA4B,EAC5BC,gBAAwC,EACP;IAAA,IAAAG,KAAA;IAAA,OAAAC,iBAAA;MACjC,OAAOD,KAAI,CAACN,aAAa,CAACI,UAAU,CAClCE,KAAI,CAACE,WAAW,CAACH,QAAQ,CAAC,EAC1BC,KAAI,CAACG,OAAO,CAACP,IAAI,CAAC,EAClBI,KAAI,CAACI,mBAAmB,CAACP,gBAAgB,CAC3C,CAAC;IAAC;EACJ;EAEQK,WAAWA,CAACH,QAAgB,EAAE;IACpC,OAAO,IAAI,CAACJ,OAAO,GAAG,IAAI,CAACA,OAAO,GAAGI,QAAQ,GAAGA,QAAQ;EAC1D;EAEQI,OAAOA,CAACP,IAA4B,EAAE;IAC5C,IAAIA,IAAI,IAAI,IAAI,CAACA,IAAI,EAAE;MACrB,OAAOL,SAAS,CAAC,IAAI,CAACK,IAAI,IAAI,CAAC,CAAC,EAAEA,IAAI,IAAI,CAAC,CAAC,CAAC;IAC/C;IACA,OAAOS,SAAS;EAClB;EAEQD,mBAAmBA,CAACP,gBAAwC,EAAE;IACpE,OAAOA,gBAAgB,IAAI,IAAI,CAACA,gBAAgB;EAClD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"global_listener.js","names":["logError","logWarn","_hostApi","errorListener","event","error","_looker_reported","beforeUnloadListener","unloaded","setupGlobalListeners","window","addEventListener","registerHostApi","hostApi","getExtensionSDK","lookerHostData","Error"],"sources":["../../../src/connect/global_listener.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport { logError, logWarn } from '../util'\nimport type { ExtensionHostApi, ExtensionSDK } from './types'\n\nlet _hostApi: ExtensionHostApi | undefined\n\nconst errorListener = (event: ErrorEvent) => {\n if (_hostApi) {\n // in development mode errors get reported twice. Suspect react\n // development code re-reporting the error. Before error reporting\n // was working correctly in sandboxed iframe there were two distinct\n // errors on two separate events. After the fix the same error is\n // reported twice on two events. A \"looker\" property is set on the\n // error object. The second time the listener is called, the error\n // is ignored as it has already been reported.\n if (event.error) {\n if (!event.error._looker_reported) {\n _hostApi.error(event)\n event.error._looker_reported = true\n }\n } else {\n _hostApi.error(event)\n }\n } else {\n logError(\n 'Extension has unhandled error. Reporting on console as Looker host api not initialized',\n event\n )\n }\n}\n\n/**\n * Listen for unload events and send message to host.\n * Host will reload the extension. Stops new pages being\n * loaded using form submission.\n */\nconst beforeUnloadListener = () => {\n if (_hostApi) {\n _hostApi.unloaded()\n logWarn('Extension is being unloaded')\n }\n}\n\nconst setupGlobalListeners = () => {\n window.addEventListener('error', errorListener)\n window.addEventListener('beforeunload', beforeUnloadListener)\n}\n\nsetupGlobalListeners()\n\n/**\n * Register the api with the error listener.\n */\nexport const registerHostApi = (hostApi: ExtensionHostApi) => {\n _hostApi = hostApi\n}\n\n/**\n * Static reference to extension SDK.\n * Will throw an error if the extensionSDK has not been initialized\n */\nexport const getExtensionSDK = (): ExtensionSDK => {\n if (_hostApi && _hostApi.lookerHostData) {\n return _hostApi\n }\n throw new Error('ExtensionSDK not initialized')\n}\n"],"mappings":"AA0BA,SAASA,QAAQ,EAAEC,OAAO,QAAQ,SAAS;AAG3C,IAAIC,QAAsC;AAE1C,IAAMC,aAAa,GAAIC,KAAiB,IAAK;EAC3C,IAAIF,QAAQ,EAAE;IAQZ,IAAIE,KAAK,CAACC,KAAK,EAAE;MACf,IAAI,CAACD,KAAK,CAACC,KAAK,CAACC,gBAAgB,EAAE;QACjCJ,QAAQ,CAACG,KAAK,CAACD,KAAK,CAAC;QACrBA,KAAK,CAACC,KAAK,CAACC,gBAAgB,GAAG,IAAI;MACrC;IACF,CAAC,MAAM;MACLJ,QAAQ,CAACG,KAAK,CAACD,KAAK,CAAC;IACvB;EACF,CAAC,MAAM;IACLJ,QAAQ,CACN,wFAAwF,EACxFI,KACF,CAAC;EACH;AACF,CAAC;AAOD,IAAMG,oBAAoB,GAAGA,CAAA,KAAM;EACjC,IAAIL,QAAQ,EAAE;IACZA,QAAQ,CAACM,QAAQ,CAAC,CAAC;IACnBP,OAAO,CAAC,6BAA6B,CAAC;EACxC;AACF,CAAC;AAED,IAAMQ,oBAAoB,GAAGA,CAAA,KAAM;EACjCC,MAAM,CAACC,gBAAgB,CAAC,OAAO,EAAER,aAAa,CAAC;EAC/CO,MAAM,CAACC,gBAAgB,CAAC,cAAc,EAAEJ,oBAAoB,CAAC;AAC/D,CAAC;AAEDE,oBAAoB,CAAC,CAAC;AAKtB,OAAO,IAAMG,eAAe,GAAIC,OAAyB,IAAK;EAC5DX,QAAQ,GAAGW,OAAO;AACpB,CAAC;AAMD,OAAO,IAAMC,eAAe,GAAGA,CAAA,KAAoB;EACjD,IAAIZ,QAAQ,IAAIA,QAAQ,CAACa,cAAc,EAAE;IACvC,OAAOb,QAAQ;EACjB;EACA,MAAM,IAAIc,KAAK,CAAC,8BAA8B,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"global_listener.js","names":["logError","logWarn","_hostApi","errorListener","event","error","_looker_reported","beforeUnloadListener","unloaded","setupGlobalListeners","window","addEventListener","registerHostApi","hostApi","getExtensionSDK","lookerHostData","Error"],"sources":["../../../src/connect/global_listener.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport { logError, logWarn } from '../util';\nimport type { ExtensionHostApi, ExtensionSDK } from './types';\n\nlet _hostApi: ExtensionHostApi | undefined;\n\nconst errorListener = (event: ErrorEvent) => {\n if (_hostApi) {\n // in development mode errors get reported twice. Suspect react\n // development code re-reporting the error. Before error reporting\n // was working correctly in sandboxed iframe there were two distinct\n // errors on two separate events. After the fix the same error is\n // reported twice on two events. A \"looker\" property is set on the\n // error object. The second time the listener is called, the error\n // is ignored as it has already been reported.\n if (event.error) {\n if (!event.error._looker_reported) {\n _hostApi.error(event);\n event.error._looker_reported = true;\n }\n } else {\n _hostApi.error(event);\n }\n } else {\n logError(\n 'Extension has unhandled error. Reporting on console as Looker host api not initialized',\n event\n );\n }\n};\n\n/**\n * Listen for unload events and send message to host.\n * Host will reload the extension. Stops new pages being\n * loaded using form submission.\n */\nconst beforeUnloadListener = () => {\n if (_hostApi) {\n _hostApi.unloaded();\n logWarn('Extension is being unloaded');\n }\n};\n\nconst setupGlobalListeners = () => {\n window.addEventListener('error', errorListener);\n window.addEventListener('beforeunload', beforeUnloadListener);\n};\n\nsetupGlobalListeners();\n\n/**\n * Register the api with the error listener.\n */\nexport const registerHostApi = (hostApi: ExtensionHostApi) => {\n _hostApi = hostApi;\n};\n\n/**\n * Static reference to extension SDK.\n * Will throw an error if the extensionSDK has not been initialized\n */\nexport const getExtensionSDK = (): ExtensionSDK => {\n if (_hostApi && _hostApi.lookerHostData) {\n return _hostApi;\n }\n throw new Error('ExtensionSDK not initialized');\n};\n"],"mappings":"AA0BA,SAASA,QAAQ,EAAEC,OAAO,QAAQ,SAAS;AAG3C,IAAIC,QAAsC;AAE1C,IAAMC,aAAa,GAAIC,KAAiB,IAAK;EAC3C,IAAIF,QAAQ,EAAE;IAQZ,IAAIE,KAAK,CAACC,KAAK,EAAE;MACf,IAAI,CAACD,KAAK,CAACC,KAAK,CAACC,gBAAgB,EAAE;QACjCJ,QAAQ,CAACG,KAAK,CAACD,KAAK,CAAC;QACrBA,KAAK,CAACC,KAAK,CAACC,gBAAgB,GAAG,IAAI;MACrC;IACF,CAAC,MAAM;MACLJ,QAAQ,CAACG,KAAK,CAACD,KAAK,CAAC;IACvB;EACF,CAAC,MAAM;IACLJ,QAAQ,CACN,wFAAwF,EACxFI,KACF,CAAC;EACH;AACF,CAAC;AAOD,IAAMG,oBAAoB,GAAGA,CAAA,KAAM;EACjC,IAAIL,QAAQ,EAAE;IACZA,QAAQ,CAACM,QAAQ,CAAC,CAAC;IACnBP,OAAO,CAAC,6BAA6B,CAAC;EACxC;AACF,CAAC;AAED,IAAMQ,oBAAoB,GAAGA,CAAA,KAAM;EACjCC,MAAM,CAACC,gBAAgB,CAAC,OAAO,EAAER,aAAa,CAAC;EAC/CO,MAAM,CAACC,gBAAgB,CAAC,cAAc,EAAEJ,oBAAoB,CAAC;AAC/D,CAAC;AAEDE,oBAAoB,CAAC,CAAC;AAKtB,OAAO,IAAMG,eAAe,GAAIC,OAAyB,IAAK;EAC5DX,QAAQ,GAAGW,OAAO;AACpB,CAAC;AAMD,OAAO,IAAMC,eAAe,GAAGA,CAAA,KAAoB;EACjD,IAAIZ,QAAQ,IAAIA,QAAQ,CAACa,cAAc,EAAE;IACvC,OAAOb,QAAQ;EACjB;EACA,MAAM,IAAIc,KAAK,CAAC,8BAA8B,CAAC;AACjD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getExtensionSDK"],"sources":["../../../src/connect/index.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nexport * from './visualization/types'\nexport * from './tile/types'\nexport * from './types'\nexport * from './connect_extension_host'\nexport { getExtensionSDK } from './global_listener'\n"],"mappings":"AA0BA,cAAc,uBAAuB;AACrC,cAAc,cAAc;AAC5B,cAAc,SAAS;AACvB,cAAc,0BAA0B;AACxC,SAASA,eAAe,QAAQ,mBAAmB"}
1
+ {"version":3,"file":"index.js","names":["getExtensionSDK"],"sources":["../../../src/connect/index.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2021 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nexport * from './visualization/types';\nexport * from './tile/types';\nexport * from './types';\nexport * from './connect_extension_host';\nexport { getExtensionSDK } from './global_listener';\n"],"mappings":"AA0BA,cAAc,uBAAuB;AACrC,cAAc,cAAc;AAC5B,cAAc,SAAS;AACvB,cAAc,0BAA0B;AACxC,SAASA,eAAe,QAAQ,mBAAmB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/connect/tile/index.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2022 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\nexport * from './types'\n"],"mappings":"AAyBA,cAAc,SAAS"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/connect/tile/index.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2022 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\nexport * from './types';\n"],"mappings":"AAyBA,cAAc,SAAS"}
@@ -1,8 +1,8 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
3
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
5
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
6
  import { NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR } from '../../util/errors';
7
7
  import { ExtensionRequestType } from '../types';
8
8
  import { DashboardRunState } from './types';
@@ -23,6 +23,24 @@ export class TileSDKImpl {
23
23
  this.tileHostData = _objectSpread(_objectSpread({}, this.tileHostData), partialHostData);
24
24
  }
25
25
  }
26
+ addError(error) {
27
+ if (this.hostApi.isDashboardMountSupported) {
28
+ this.hostApi.send(ExtensionRequestType.TILE_ADD_ERRORS, {
29
+ errors: [error]
30
+ });
31
+ } else {
32
+ throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;
33
+ }
34
+ }
35
+ clearError() {
36
+ if (this.hostApi.isDashboardMountSupported) {
37
+ this.hostApi.send(ExtensionRequestType.TILE_CLEAR_ERRORS, {
38
+ group: undefined
39
+ });
40
+ } else {
41
+ throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;
42
+ }
43
+ }
26
44
  addErrors() {
27
45
  if (this.hostApi.isDashboardMountSupported) {
28
46
  for (var _len = arguments.length, errors = new Array(_len), _key = 0; _key < _len; _key++) {
@@ -1 +1 @@
1
- {"version":3,"file":"tile_sdk.js","names":["NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR","ExtensionRequestType","DashboardRunState","defaultHostData","isDashboardEditing","dashboardRunState","UNKNOWN","dashboardFilters","TileSDKImpl","constructor","hostApi","_defineProperty","tileHostData","_objectSpread","tileHostDataChanged","partialHostData","isDashboardMountSupported","addErrors","_len","arguments","length","errors","Array","_key","send","TILE_ADD_ERRORS","clearErrors","group","TILE_CLEAR_ERRORS","openDrillMenu","options","event","TILE_OPEN_DRILL_MENU","sanitizeEvent","toggleCrossFilter","TILE_TOGGLE_CROSS_FILTER","runDashboard","TILE_RUN_DASHBOARD","stopDashboard","TILE_STOP_DASHBOARD","updateFilters","filters","run","undefined","TILE_UPDATE_FILTERS","openScheduleDialog","sendAndReceive","TILE_OPEN_SCHEDULE_DIALOG","metaKey","pageX","pageY","type"],"sources":["../../../../src/connect/tile/tile_sdk.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2022 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { MouseEvent } from 'react'\nimport { NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR } from '../../util/errors'\nimport { ExtensionRequestType } from '../types'\nimport type { ExtensionHostApiImpl } from '../extension_host_api'\nimport type {\n TileSDK,\n TileError,\n DrillMenuOptions,\n CrossFilterOptions,\n Filters,\n TileHostData,\n} from './types'\nimport { DashboardRunState } from './types'\n\nconst defaultHostData: TileHostData = {\n isDashboardEditing: false,\n dashboardRunState: DashboardRunState.UNKNOWN,\n dashboardFilters: {},\n}\nexport class TileSDKImpl implements TileSDK {\n hostApi: ExtensionHostApiImpl\n tileHostData: TileHostData\n\n constructor(hostApi: ExtensionHostApiImpl) {\n this.hostApi = hostApi\n this.tileHostData = { ...defaultHostData }\n }\n\n tileHostDataChanged(partialHostData: Partial<TileHostData>) {\n // Ignore update messages if dashboard mounts not supported.\n // Should never happen.\n if (this.hostApi.isDashboardMountSupported) {\n this.tileHostData = { ...this.tileHostData, ...partialHostData }\n }\n }\n\n addErrors(...errors: TileError[]) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_ADD_ERRORS, { errors })\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR\n }\n }\n\n clearErrors(group?: string) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_CLEAR_ERRORS, { group })\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR\n }\n }\n\n openDrillMenu(options: DrillMenuOptions, event?: MouseEvent) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_OPEN_DRILL_MENU, {\n options,\n event: this.sanitizeEvent(event),\n })\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR\n }\n }\n\n toggleCrossFilter(options: CrossFilterOptions, event?: MouseEvent) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_TOGGLE_CROSS_FILTER, {\n options,\n event: this.sanitizeEvent(event),\n })\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR\n }\n }\n\n runDashboard() {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_RUN_DASHBOARD, {})\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR\n }\n }\n\n stopDashboard() {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_STOP_DASHBOARD, {})\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR\n }\n }\n\n updateFilters(filters: Filters, run = false) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_UPDATE_FILTERS, {\n filters,\n run,\n })\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR\n }\n }\n\n openScheduleDialog() {\n if (this.hostApi.isDashboardMountSupported) {\n return this.hostApi.sendAndReceive(\n ExtensionRequestType.TILE_OPEN_SCHEDULE_DIALOG,\n {}\n )\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR\n }\n }\n\n sanitizeEvent(event?: MouseEvent) {\n if (event) {\n return {\n metaKey: event.metaKey,\n pageX: event.pageX,\n pageY: event.pageY,\n type: event.type,\n }\n }\n return undefined\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tile_sdk.js","names":["NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR","ExtensionRequestType","DashboardRunState","defaultHostData","isDashboardEditing","dashboardRunState","UNKNOWN","dashboardFilters","TileSDKImpl","constructor","hostApi","_defineProperty","tileHostData","_objectSpread","tileHostDataChanged","partialHostData","isDashboardMountSupported","addError","error","send","TILE_ADD_ERRORS","errors","clearError","TILE_CLEAR_ERRORS","group","undefined","addErrors","_len","arguments","length","Array","_key","clearErrors","openDrillMenu","options","event","TILE_OPEN_DRILL_MENU","sanitizeEvent","toggleCrossFilter","TILE_TOGGLE_CROSS_FILTER","runDashboard","TILE_RUN_DASHBOARD","stopDashboard","TILE_STOP_DASHBOARD","updateFilters","filters","run","TILE_UPDATE_FILTERS","openScheduleDialog","sendAndReceive","TILE_OPEN_SCHEDULE_DIALOG","metaKey","pageX","pageY","type"],"sources":["../../../../src/connect/tile/tile_sdk.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2022 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { MouseEvent } from 'react';\nimport { NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR } from '../../util/errors';\nimport { ExtensionRequestType } from '../types';\nimport type { ExtensionHostApiImpl } from '../extension_host_api';\nimport type {\n CrossFilterOptions,\n DrillMenuOptions,\n Filters,\n TileError,\n TileHostData,\n TileSDKInternal,\n} from './types';\nimport { DashboardRunState } from './types';\n\nconst defaultHostData: TileHostData = {\n isDashboardEditing: false,\n dashboardRunState: DashboardRunState.UNKNOWN,\n dashboardFilters: {},\n};\nexport class TileSDKImpl implements TileSDKInternal {\n hostApi: ExtensionHostApiImpl;\n tileHostData: TileHostData;\n\n constructor(hostApi: ExtensionHostApiImpl) {\n this.hostApi = hostApi;\n this.tileHostData = { ...defaultHostData };\n }\n\n tileHostDataChanged(partialHostData: Partial<TileHostData>) {\n // Ignore update messages if dashboard mounts not supported.\n // Should never happen.\n if (this.hostApi.isDashboardMountSupported) {\n this.tileHostData = { ...this.tileHostData, ...partialHostData };\n }\n }\n\n addError(error: TileError) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_ADD_ERRORS, {\n errors: [error],\n });\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n clearError() {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_CLEAR_ERRORS, {\n group: undefined,\n });\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n addErrors(...errors: TileError[]) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_ADD_ERRORS, { errors });\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n clearErrors(group?: string) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_CLEAR_ERRORS, { group });\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n openDrillMenu(options: DrillMenuOptions, event?: MouseEvent) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_OPEN_DRILL_MENU, {\n options,\n event: this.sanitizeEvent(event),\n });\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n toggleCrossFilter(options: CrossFilterOptions, event?: MouseEvent) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_TOGGLE_CROSS_FILTER, {\n options,\n event: this.sanitizeEvent(event),\n });\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n runDashboard() {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_RUN_DASHBOARD, {});\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n stopDashboard() {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_STOP_DASHBOARD, {});\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n updateFilters(filters: Filters, run = false) {\n if (this.hostApi.isDashboardMountSupported) {\n this.hostApi.send(ExtensionRequestType.TILE_UPDATE_FILTERS, {\n filters,\n run,\n });\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n openScheduleDialog() {\n if (this.hostApi.isDashboardMountSupported) {\n return this.hostApi.sendAndReceive(\n ExtensionRequestType.TILE_OPEN_SCHEDULE_DIALOG,\n {}\n );\n } else {\n throw NOT_DASHBOARD_MOUNT_NOT_SUPPORTED_ERROR;\n }\n }\n\n sanitizeEvent(event?: MouseEvent) {\n if (event) {\n return {\n metaKey: event.metaKey,\n pageX: event.pageX,\n pageY: event.pageY,\n type: event.type,\n };\n }\n return undefined;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["DashboardRunState"],"sources":["../../../../src/connect/tile/types.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2022 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { MouseEvent } from 'react'\nimport type { IQuery } from '@looker/sdk'\n\n/**\n * Callback that is invoked when a change in the host happens\n * <code>Looker >=22.8</code>\n */\nexport type TileHostDataChangedCallback = (\n tileHostData: Partial<TileHostData>\n) => void\n\n/**\n * Defines the current run state of the dashboard\n */\nexport enum DashboardRunState {\n UNKNOWN = 'UNKNOWN',\n RUNNING = 'RUNNING',\n NOT_RUNNING = 'NOT_RUNNING',\n}\n\nexport interface TileHostData {\n /**\n * When true indicates that the tile is being configured as\n * a visualization inside of an explore.\n */\n isExploring?: boolean\n /**\n * The dashboard id the tile is being rendered in. If the tile\n * is being configured as an explore this will not be populated.\n */\n dashboardId?: string\n /**\n * The element id of the tile being rendered. If the tile\n * is being configured as an explore this will not be populated.\n */\n elementId?: string\n /**\n * The query id of the tile being rendered if it is associated with\n * a visualization. If the tile is being configured as an explore\n * this will not be populated.\n *\n * Note that queryId is that of the query created when the visualization\n * is built in the Looker explore. It does not contain any filters or\n * cross filtering applied to the dashboard. Filters and cross filters\n * will need to be applied and a new query generated in order to reflect\n * the data shown in the QueryResponse. As such the queryId may not be\n * that useful. See filteredQuery for query object with filters applied.\n */\n queryId?: string\n /**\n * The query slug of the tile being rendered if it is associated with\n * a visualization. If the tile is being configured as an explore\n * this will not be populated.\n *\n * Note that querySlug is that of the query created when the visualization\n * is built in the Looker explore. It does not contain any filters or\n * cross filtering applied to the dashboard. Filters and cross filters\n * will need to be applied and a new query generated in order to reflect\n * the data shown in the QueryResponse. As such the queryId may not be\n * that useful. See filteredQuery for query object with filters applied.\n */\n querySlug?: string\n /**\n * The filters being applied to the dashboard. If the tile\n * is being configured as an explore this will not be populated.\n */\n dashboardFilters?: Filters\n /**\n * Indicates whether the dashboard is running. If the tile\n * is being configured as an explore the state will be UNKNOWN.\n * Note that for dashboard performance reasons, the runstate\n * may NEVER be shown as running. This generally will happen\n * if there are no other tiles associated with a query (including\n * the one the extension is associated with).\n * If the extension needs to know for certain that a dashboard\n * has been run, detecting differences in the lastRunStartTime\n * is the reliable way.\n */\n dashboardRunState?: DashboardRunState\n /**\n * When true, the dashboard is being edited. If the tile\n * is being configured as an explore this will not be populated.\n */\n isDashboardEditing?: boolean\n /**\n * When true, cross filtering. If the tile\n * is being configured as an explore this will not be populated.\n */\n isDashboardCrossFilteringEnabled?: boolean\n /**\n * A query object that matches the query ID associated with the\n * underlying dashboard element with any dashboard filters and\n * timezone changes made at the dashboard level applied.\n */\n filteredQuery?: IQuery\n /**\n * The id of the tile extension element that triggered the last\n * dashboard run. The id will be undefined if the dashboard run\n * was triggered by the dashboard run button or auto run or if\n * the run was triggered using the embed SDK. If the tile\n * is being configured as an explore this will not be populated.\n * Note that the lastRunSourceElementId CAN be the same as the\n * element id of the current extension instance, in other words,\n * if the extension triggers a dashboard run, it will be notified\n * when the dashboard run starts and finishes.\n */\n lastRunSourceElementId?: string\n /**\n * Indicates the last dashboard run start time. If the tile\n * is being configured as an explore this will not be populated.\n * Note that the start and end times reported should not\n * used for capturing performance metrics.\n */\n lastRunStartTime?: number\n /**\n * Indicates the last dashboard run end time. If the tile\n * is being configured as an explore this will not be populated.\n * If the tile is running, this will not be populated.\n * Note that the start and end times reported should not\n * used for capturing performance metrics.\n */\n lastRunEndTime?: number\n /**\n * Indicates whether the last dashboard run was succesful or not.\n * If the tile is being configured as an explore this will not be\n * populated.\n * If the tile is running, this will not be populated.\n */\n lastRunSuccess?: boolean\n}\n\nexport interface Pivot {\n key: string\n is_total: boolean\n data: { [key: string]: string }\n metadata: { [key: string]: { [key: string]: string | Link[] } }\n labels: { [key: string]: string }\n sort_values?: { [key: string]: string }\n}\n\nexport interface Cell {\n [key: string]: any\n value: any\n rendered?: string\n html?: string\n links?: Link[]\n}\n\nexport interface Link {\n label: string\n type: string\n type_label: string\n url: string\n}\n\nexport interface PivotCell {\n [pivotKey: string]: Cell\n}\n\nexport interface Row {\n [fieldName: string]: PivotCell | Cell\n}\n\nexport interface TileError {\n title: string\n message: string\n group: string\n}\n\nexport interface CrossFilterOptions {\n pivot: Pivot\n row: Row\n}\n\nexport type DrillMenuOptions = any\n\nexport interface Filters {\n [key: string]: string\n}\n\n/**\n * Extension tile SDK\n */\nexport interface TileSDK {\n tileHostData: TileHostData\n tileHostDataChanged: (hostData: Partial<TileHostData>) => void\n addErrors: (...errors: TileError[]) => void\n clearErrors: (group?: string) => void\n openDrillMenu: (options: DrillMenuOptions, event?: MouseEvent) => void\n toggleCrossFilter: (options: CrossFilterOptions, event?: MouseEvent) => void\n runDashboard: () => void\n stopDashboard: () => void\n updateFilters: (filters: Filters, runDashboard?: boolean) => void\n openScheduleDialog: () => Promise<void>\n}\n"],"mappings":"AAwCA,WAAYA,iBAAiB,aAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA"}
1
+ {"version":3,"file":"types.js","names":["DashboardRunState"],"sources":["../../../../src/connect/tile/types.ts"],"sourcesContent":["/*\n\n MIT License\n\n Copyright (c) 2022 Looker Data Sciences, Inc.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n */\n\nimport type { MouseEvent } from 'react';\nimport type { IQuery } from '@looker/sdk';\n\n/**\n * Callback that is invoked when a change in the host happens\n * <code>Looker >=22.8</code>\n */\nexport type TileHostDataChangedCallback = (\n tileHostData: Partial<TileHostData>\n) => void;\n\n/**\n * Defines the current run state of the dashboard\n */\nexport enum DashboardRunState {\n UNKNOWN = 'UNKNOWN',\n RUNNING = 'RUNNING',\n NOT_RUNNING = 'NOT_RUNNING',\n}\n\nexport interface TileHostData {\n /**\n * When true indicates that the tile is being configured as\n * a visualization inside of an explore.\n */\n isExploring?: boolean;\n /**\n * The dashboard id the tile is being rendered in. If the tile\n * is being configured as an explore this will not be populated.\n */\n dashboardId?: string;\n /**\n * The element id of the tile being rendered. If the tile\n * is being configured as an explore this will not be populated.\n */\n elementId?: string;\n /**\n * The query id of the tile being rendered if it is associated with\n * a visualization. If the tile is being configured as an explore\n * this will not be populated.\n *\n * Note that queryId is that of the query created when the visualization\n * is built in the Looker explore. It does not contain any filters or\n * cross filtering applied to the dashboard. Filters and cross filters\n * will need to be applied and a new query generated in order to reflect\n * the data shown in the QueryResponse. As such the queryId may not be\n * that useful. See filteredQuery for query object with filters applied.\n */\n queryId?: string;\n /**\n * The query slug of the tile being rendered if it is associated with\n * a visualization. If the tile is being configured as an explore\n * this will not be populated.\n *\n * Note that querySlug is that of the query created when the visualization\n * is built in the Looker explore. It does not contain any filters or\n * cross filtering applied to the dashboard. Filters and cross filters\n * will need to be applied and a new query generated in order to reflect\n * the data shown in the QueryResponse. As such the queryId may not be\n * that useful. See filteredQuery for query object with filters applied.\n */\n querySlug?: string;\n /**\n * The filters being applied to the dashboard. If the tile\n * is being configured as an explore this will not be populated.\n */\n dashboardFilters?: Filters;\n /**\n * Indicates whether the dashboard is running. If the tile\n * is being configured as an explore the state will be UNKNOWN.\n * Note that for dashboard performance reasons, the runstate\n * may NEVER be shown as running. This generally will happen\n * if there are no other tiles associated with a query (including\n * the one the extension is associated with).\n * If the extension needs to know for certain that a dashboard\n * has been run, detecting differences in the lastRunStartTime\n * is the reliable way.\n */\n dashboardRunState?: DashboardRunState;\n /**\n * When true, the dashboard is being edited. If the tile\n * is being configured as an explore this will not be populated.\n */\n isDashboardEditing?: boolean;\n /**\n * When true, cross filtering. If the tile\n * is being configured as an explore this will not be populated.\n */\n isDashboardCrossFilteringEnabled?: boolean;\n /**\n * A query object that matches the query ID associated with the\n * underlying dashboard element with any dashboard filters and\n * timezone changes made at the dashboard level applied.\n */\n filteredQuery?: IQuery;\n /**\n * The id of the tile extension element that triggered the last\n * dashboard run. The id will be undefined if the dashboard run\n * was triggered by the dashboard run button or auto run or if\n * the run was triggered using the embed SDK. If the tile\n * is being configured as an explore this will not be populated.\n * Note that the lastRunSourceElementId CAN be the same as the\n * element id of the current extension instance, in other words,\n * if the extension triggers a dashboard run, it will be notified\n * when the dashboard run starts and finishes.\n */\n lastRunSourceElementId?: string;\n /**\n * Indicates the last dashboard run start time. If the tile\n * is being configured as an explore this will not be populated.\n * Note that the start and end times reported should not\n * used for capturing performance metrics.\n */\n lastRunStartTime?: number;\n /**\n * Indicates the last dashboard run end time. If the tile\n * is being configured as an explore this will not be populated.\n * If the tile is running, this will not be populated.\n * Note that the start and end times reported should not\n * used for capturing performance metrics.\n */\n lastRunEndTime?: number;\n /**\n * Indicates whether the last dashboard run was succesful or not.\n * If the tile is being configured as an explore this will not be\n * populated.\n * If the tile is running, this will not be populated.\n */\n lastRunSuccess?: boolean;\n}\n\nexport interface Pivot {\n key: string;\n is_total: boolean;\n data: { [key: string]: string };\n metadata: { [key: string]: { [key: string]: string | Link[] } };\n labels: { [key: string]: string };\n sort_values?: { [key: string]: string };\n}\n\nexport interface Cell {\n [key: string]: any;\n value: any;\n rendered?: string;\n html?: string;\n links?: Link[];\n}\n\nexport interface Link {\n label: string;\n type: string;\n type_label: string;\n url: string;\n}\n\nexport interface PivotCell {\n [pivotKey: string]: Cell;\n}\n\nexport interface Row {\n [fieldName: string]: PivotCell | Cell;\n}\n\nexport interface TileError {\n title: string;\n message: string;\n group: string;\n}\n\nexport interface CrossFilterOptions {\n pivot: Pivot;\n row: Row;\n}\n\nexport type DrillMenuOptions = any;\n\nexport interface Filters {\n [key: string]: string;\n}\n\n/**\n * For internal use only\n */\nexport interface TileSDKInternal extends TileSDK {\n tileHostDataChanged: (hostData: Partial<TileHostData>) => void;\n}\n\n/**\n * Extension tile SDK\n */\nexport interface TileSDK {\n /**\n * Tile host data.\n */\n tileHostData: TileHostData;\n /**\n * Display an error beneath the tile extension.\n */\n addError: (error: TileError) => void;\n /**\n * Clear an error beneath the tile extension.\n */\n clearError: () => void;\n /**\n * Display an error beneath the tile extension.\n * @deprecated\n */\n addErrors: (...errors: TileError[]) => void;\n /**\n * Clear an error beneath the tile extension.\n * @deprecated\n */\n clearErrors: (group?: string) => void;\n /**\n * Open a drill menu. The event controls positioning of the drill menu.\n * Set the pageX and pageY properties on the event to control the\n * positioning (all other properties are ignored).\n */\n openDrillMenu: (options: DrillMenuOptions, event?: MouseEvent) => void;\n /**\n * Toggle cross filters. This is ignored when running in an explore.\n */\n toggleCrossFilter: (options: CrossFilterOptions, event?: MouseEvent) => void;\n /**\n * Run the current dashboard. This is ignored when running in an explore.\n */\n runDashboard: () => void;\n /**\n * Stop the current dashboard. This is ignored when running in an explore.\n */\n stopDashboard: () => void;\n /**\n * Update the current filters.\n */\n updateFilters: (filters: Filters, run?: boolean) => void;\n /**\n * Open the schedule dialog. This is ignored when running in an explore.\n */\n openScheduleDialog: () => Promise<void>;\n}\n"],"mappings":"AAwCA,WAAYA,iBAAiB,aAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA"}