@looker/extension-sdk 22.4.3-alpha.1523 → 22.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/lib/connect/extension_host_api.d.ts +3 -13
- package/lib/connect/extension_host_api.js +20 -104
- package/lib/connect/extension_host_api.js.map +1 -1
- package/lib/connect/global_listener.js +2 -4
- package/lib/connect/global_listener.js.map +1 -1
- package/lib/connect/index.d.ts +0 -2
- package/lib/connect/index.js +1 -29
- package/lib/connect/index.js.map +1 -1
- package/lib/connect/types.d.ts +7 -47
- package/lib/connect/types.js +1 -23
- package/lib/connect/types.js.map +1 -1
- package/lib/esm/connect/extension_host_api.js +21 -102
- package/lib/esm/connect/extension_host_api.js.map +1 -1
- package/lib/esm/connect/global_listener.js +2 -4
- package/lib/esm/connect/global_listener.js.map +1 -1
- package/lib/esm/connect/index.js +0 -2
- package/lib/esm/connect/index.js.map +1 -1
- package/lib/esm/connect/types.js +0 -21
- package/lib/esm/connect/types.js.map +1 -1
- package/lib/esm/index.js +0 -3
- package/lib/esm/index.js.map +1 -1
- package/lib/index.d.ts +0 -3
- package/lib/index.js +1 -40
- package/lib/index.js.map +1 -1
- package/package.json +4 -4
- package/lib/connect/tile/index.d.ts +0 -1
- package/lib/connect/tile/index.js +0 -19
- package/lib/connect/tile/index.js.map +0 -1
- package/lib/connect/tile/tile_sdk.d.ts +0 -24
- package/lib/connect/tile/tile_sdk.js +0 -150
- package/lib/connect/tile/tile_sdk.js.map +0 -1
- package/lib/connect/tile/types.d.ts +0 -78
- package/lib/connect/tile/types.js +0 -16
- package/lib/connect/tile/types.js.map +0 -1
- package/lib/connect/visualization/index.d.ts +0 -2
- package/lib/connect/visualization/index.js +0 -32
- package/lib/connect/visualization/index.js.map +0 -1
- package/lib/connect/visualization/types.d.ts +0 -62
- package/lib/connect/visualization/types.js +0 -2
- package/lib/connect/visualization/types.js.map +0 -1
- package/lib/connect/visualization/visualization_sdk.d.ts +0 -36
- package/lib/connect/visualization/visualization_sdk.js +0 -166
- package/lib/connect/visualization/visualization_sdk.js.map +0 -1
- package/lib/esm/connect/tile/index.js +0 -2
- package/lib/esm/connect/tile/index.js.map +0 -1
- package/lib/esm/connect/tile/tile_sdk.js +0 -137
- package/lib/esm/connect/tile/tile_sdk.js.map +0 -1
- package/lib/esm/connect/tile/types.js +0 -9
- package/lib/esm/connect/tile/types.js.map +0 -1
- package/lib/esm/connect/visualization/index.js +0 -3
- package/lib/esm/connect/visualization/index.js.map +0 -1
- package/lib/esm/connect/visualization/types.js +0 -2
- package/lib/esm/connect/visualization/types.js.map +0 -1
- package/lib/esm/connect/visualization/visualization_sdk.js +0 -156
- package/lib/esm/connect/visualization/visualization_sdk.js.map +0 -1
- package/lib/esm/util/errors.js +0 -2
- package/lib/esm/util/errors.js.map +0 -1
- package/lib/esm/util/index.js +0 -2
- package/lib/esm/util/index.js.map +0 -1
- package/lib/esm/util/logger.js +0 -15
- package/lib/esm/util/logger.js.map +0 -1
- package/lib/util/errors.d.ts +0 -1
- package/lib/util/errors.js +0 -9
- package/lib/util/errors.js.map +0 -1
- package/lib/util/index.d.ts +0 -1
- package/lib/util/index.js +0 -19
- package/lib/util/index.js.map +0 -1
- package/lib/util/logger.d.ts +0 -3
- package/lib/util/logger.js +0 -33
- package/lib/util/logger.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,25 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [22.8.0](https://www.github.com/looker-open-source/sdk-codegen/compare/extension-sdk-v22.6.0...extension-sdk-v22.8.0) (2022-07-13)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @looker/sdk bumped from ^22.6.0 to ^22.8.0
|
|
16
|
+
|
|
17
|
+
## [22.6.0](https://www.github.com/looker-open-source/sdk-codegen/compare/extension-sdk-v22.4.2...extension-sdk-v22.6.0) (2022-07-07)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Dependencies
|
|
21
|
+
|
|
22
|
+
* The following workspace dependencies were updated
|
|
23
|
+
* dependencies
|
|
24
|
+
* @looker/sdk bumped from ^22.4.2 to ^22.6.0
|
|
25
|
+
* @looker/sdk-rtl bumped from ^21.3.3 to ^21.3.4
|
|
26
|
+
|
|
8
27
|
### [22.4.2](https://www.github.com/looker-open-source/sdk-codegen/compare/extension-sdk-v22.4.1...extension-sdk-v22.4.2) (2022-04-07)
|
|
9
28
|
|
|
10
29
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import type { VisualizationSDK } from './visualization';
|
|
2
|
-
import type { TileSDK } from './tile';
|
|
3
1
|
import { FetchProxyImpl } from './fetch_proxy';
|
|
4
2
|
import type { ExtensionInitializationResponse, ExtensionHostApi, ExtensionHostApiConfiguration, ExtensionNotification, FetchCustomParameters, FetchResponseBodyType, LookerHostData, ApiVersion } from './types';
|
|
5
3
|
export declare const EXTENSION_SDK_VERSION = "0.10.5";
|
|
@@ -9,17 +7,10 @@ export declare class ExtensionHostApiImpl implements ExtensionHostApi {
|
|
|
9
7
|
private chattyHost;
|
|
10
8
|
private setInitialRoute?;
|
|
11
9
|
private hostChangedRoute?;
|
|
12
|
-
private visualizationDataReceivedCallback?;
|
|
13
|
-
private tileHostDataChangedCallback?;
|
|
14
|
-
private _visualizationSDK?;
|
|
15
|
-
private _tileSDK?;
|
|
16
10
|
private contextData?;
|
|
17
11
|
constructor(configuration: ExtensionHostApiConfiguration);
|
|
18
|
-
get isDashboardMountSupported(): boolean;
|
|
19
|
-
get visualizationSDK(): VisualizationSDK;
|
|
20
|
-
get tileSDK(): TileSDK;
|
|
21
12
|
get lookerHostData(): Readonly<LookerHostData> | undefined;
|
|
22
|
-
handleNotification(message
|
|
13
|
+
handleNotification(message?: ExtensionNotification): ExtensionInitializationResponse | undefined;
|
|
23
14
|
createSecretKeyTag(keyName: string): string;
|
|
24
15
|
verifyHostConnection(): Promise<any>;
|
|
25
16
|
invokeCoreSdk(httpMethod: string, path: string, params?: any, body?: any, authenticator?: any, options?: any, apiVersion?: ApiVersion): Promise<any>;
|
|
@@ -48,9 +39,8 @@ export declare class ExtensionHostApiImpl implements ExtensionHostApi {
|
|
|
48
39
|
serverProxy(resource: string, init?: FetchCustomParameters, responseBodyType?: FetchResponseBodyType): Promise<any>;
|
|
49
40
|
oauth2Authenticate(authEndpoint: string, authParameters: Record<string, string>, httpMethod?: string): Promise<any>;
|
|
50
41
|
oauth2ExchangeCodeForToken(authEndpoint: string, authParameters: Record<string, string>): Promise<any>;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
send(type: string, payload?: any): void;
|
|
42
|
+
private sendAndReceive;
|
|
43
|
+
private send;
|
|
54
44
|
private verifyLookerVersion;
|
|
55
45
|
private validateAuthParameters;
|
|
56
46
|
}
|
|
@@ -7,12 +7,6 @@ exports.ExtensionHostApiImpl = exports.EXTENSION_SDK_VERSION = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _intersects = _interopRequireDefault(require("semver/ranges/intersects"));
|
|
9
9
|
|
|
10
|
-
var _util = require("../util");
|
|
11
|
-
|
|
12
|
-
var _visualization_sdk = require("./visualization/visualization_sdk");
|
|
13
|
-
|
|
14
|
-
var _tile_sdk = require("./tile/tile_sdk");
|
|
15
|
-
|
|
16
10
|
var _fetch_proxy = require("./fetch_proxy");
|
|
17
11
|
|
|
18
12
|
var _types = require("./types");
|
|
@@ -40,51 +34,17 @@ class ExtensionHostApiImpl {
|
|
|
40
34
|
|
|
41
35
|
_defineProperty(this, "hostChangedRoute", void 0);
|
|
42
36
|
|
|
43
|
-
_defineProperty(this, "visualizationDataReceivedCallback", void 0);
|
|
44
|
-
|
|
45
|
-
_defineProperty(this, "tileHostDataChangedCallback", void 0);
|
|
46
|
-
|
|
47
|
-
_defineProperty(this, "_visualizationSDK", void 0);
|
|
48
|
-
|
|
49
|
-
_defineProperty(this, "_tileSDK", void 0);
|
|
50
|
-
|
|
51
37
|
_defineProperty(this, "contextData", void 0);
|
|
52
38
|
|
|
53
39
|
this._configuration = configuration;
|
|
54
40
|
var {
|
|
55
41
|
chattyHost,
|
|
56
42
|
setInitialRoute,
|
|
57
|
-
hostChangedRoute
|
|
58
|
-
visualizationDataReceivedCallback,
|
|
59
|
-
tileHostDataChangedCallback
|
|
43
|
+
hostChangedRoute
|
|
60
44
|
} = this._configuration;
|
|
61
45
|
this.chattyHost = chattyHost;
|
|
62
46
|
this.setInitialRoute = setInitialRoute;
|
|
63
47
|
this.hostChangedRoute = hostChangedRoute;
|
|
64
|
-
this.visualizationDataReceivedCallback = visualizationDataReceivedCallback;
|
|
65
|
-
this.tileHostDataChangedCallback = tileHostDataChangedCallback;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
get isDashboardMountSupported() {
|
|
69
|
-
var _this$lookerHostData, _this$lookerHostData2;
|
|
70
|
-
|
|
71
|
-
return ((_this$lookerHostData = this.lookerHostData) === null || _this$lookerHostData === void 0 ? void 0 : _this$lookerHostData.mountPoint) === _types.MountPoint.dashboardTile || ((_this$lookerHostData2 = this.lookerHostData) === null || _this$lookerHostData2 === void 0 ? void 0 : _this$lookerHostData2.mountPoint) === _types.MountPoint.dashboardVisualization;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
get visualizationSDK() {
|
|
75
|
-
if (!this._visualizationSDK) {
|
|
76
|
-
this._visualizationSDK = new _visualization_sdk.VisualizationSDKImpl(this);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return this._visualizationSDK;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
get tileSDK() {
|
|
83
|
-
if (!this._tileSDK) {
|
|
84
|
-
this._tileSDK = new _tile_sdk.TileSDKImpl(this);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return this._tileSDK;
|
|
88
48
|
}
|
|
89
49
|
|
|
90
50
|
get lookerHostData() {
|
|
@@ -93,86 +53,48 @@ class ExtensionHostApiImpl {
|
|
|
93
53
|
|
|
94
54
|
handleNotification(message) {
|
|
95
55
|
var {
|
|
96
|
-
type
|
|
97
|
-
|
|
56
|
+
type,
|
|
57
|
+
payload
|
|
58
|
+
} = message || {};
|
|
98
59
|
|
|
99
60
|
switch (type) {
|
|
100
61
|
case _types.ExtensionNotificationType.ROUTE_CHANGED:
|
|
101
|
-
{
|
|
102
|
-
var {
|
|
103
|
-
payload
|
|
104
|
-
} = message;
|
|
105
|
-
|
|
106
|
-
if (this.hostChangedRoute && payload) {
|
|
107
|
-
var {
|
|
108
|
-
route: _route,
|
|
109
|
-
routeState: _routeState
|
|
110
|
-
} = payload;
|
|
111
|
-
|
|
112
|
-
if (_route) {
|
|
113
|
-
this.hostChangedRoute(_route, _routeState);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return undefined;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
case _types.ExtensionNotificationType.VISUALIZATION_DATA:
|
|
121
|
-
{
|
|
62
|
+
if (this.hostChangedRoute && payload) {
|
|
122
63
|
var {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
64
|
+
route: _route,
|
|
65
|
+
routeState: _routeState
|
|
66
|
+
} = payload;
|
|
126
67
|
|
|
127
|
-
if (
|
|
128
|
-
this.
|
|
68
|
+
if (_route) {
|
|
69
|
+
this.hostChangedRoute(_route, _routeState);
|
|
129
70
|
}
|
|
130
|
-
|
|
131
|
-
return undefined;
|
|
132
71
|
}
|
|
133
72
|
|
|
134
|
-
|
|
135
|
-
{
|
|
136
|
-
var {
|
|
137
|
-
payload: _payload2
|
|
138
|
-
} = message;
|
|
139
|
-
this.tileSDK.tileHostDataChanged(_payload2);
|
|
140
|
-
|
|
141
|
-
if (this.tileHostDataChangedCallback) {
|
|
142
|
-
this.tileHostDataChangedCallback(_payload2);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
return undefined;
|
|
146
|
-
}
|
|
73
|
+
return undefined;
|
|
147
74
|
|
|
148
75
|
case _types.ExtensionNotificationType.INITIALIZE:
|
|
149
76
|
{
|
|
150
|
-
|
|
151
|
-
payload: _payload3
|
|
152
|
-
} = message;
|
|
153
|
-
var lookerHostData = _payload3 || {};
|
|
77
|
+
this._lookerHostData = payload;
|
|
154
78
|
|
|
155
|
-
if (
|
|
156
|
-
|
|
79
|
+
if (this._lookerHostData) {
|
|
80
|
+
this.contextData = this._lookerHostData.contextData;
|
|
157
81
|
}
|
|
158
82
|
|
|
159
|
-
this._lookerHostData = lookerHostData;
|
|
160
|
-
this.contextData = lookerHostData.contextData;
|
|
161
83
|
var errorMessage;
|
|
162
84
|
|
|
163
|
-
if (this._configuration.requiredLookerVersion &&
|
|
85
|
+
if (this._configuration.requiredLookerVersion && this._lookerHostData && this._lookerHostData.lookerVersion) {
|
|
164
86
|
errorMessage = this.verifyLookerVersion(this._configuration.requiredLookerVersion);
|
|
165
87
|
|
|
166
88
|
if (errorMessage) {
|
|
167
|
-
|
|
89
|
+
console.error(errorMessage);
|
|
168
90
|
}
|
|
169
91
|
}
|
|
170
92
|
|
|
171
|
-
if (this.setInitialRoute &&
|
|
93
|
+
if (this.setInitialRoute && payload) {
|
|
172
94
|
var {
|
|
173
95
|
route: _route2,
|
|
174
96
|
routeState: _routeState2
|
|
175
|
-
} =
|
|
97
|
+
} = payload;
|
|
176
98
|
|
|
177
99
|
if (_route2) {
|
|
178
100
|
this.setInitialRoute(_route2, _routeState2);
|
|
@@ -186,7 +108,7 @@ class ExtensionHostApiImpl {
|
|
|
186
108
|
}
|
|
187
109
|
|
|
188
110
|
default:
|
|
189
|
-
|
|
111
|
+
console.error('Unrecognized extension notification', message);
|
|
190
112
|
throw new Error("Unrecognized extension notification type ".concat(type));
|
|
191
113
|
}
|
|
192
114
|
}
|
|
@@ -487,7 +409,7 @@ class ExtensionHostApiImpl {
|
|
|
487
409
|
error: error && error.toString ? error.toString() : error
|
|
488
410
|
});
|
|
489
411
|
} else {
|
|
490
|
-
|
|
412
|
+
console.error('Unhandled error but Looker host connection not established', errorEvent);
|
|
491
413
|
}
|
|
492
414
|
}
|
|
493
415
|
|
|
@@ -591,12 +513,6 @@ class ExtensionHostApiImpl {
|
|
|
591
513
|
})();
|
|
592
514
|
}
|
|
593
515
|
|
|
594
|
-
rendered(failureMessage) {
|
|
595
|
-
this.send(_types.ExtensionRequestType.RENDERED, {
|
|
596
|
-
failureMessage
|
|
597
|
-
});
|
|
598
|
-
}
|
|
599
|
-
|
|
600
516
|
sendAndReceive(type, payload) {
|
|
601
517
|
var _this17 = this;
|
|
602
518
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/connect/extension_host_api.ts"],"names":["EXTENSION_SDK_VERSION","ExtensionHostApiImpl","constructor","configuration","_configuration","chattyHost","setInitialRoute","hostChangedRoute","visualizationDataReceivedCallback","tileHostDataChangedCallback","isDashboardMountSupported","lookerHostData","mountPoint","MountPoint","dashboardTile","dashboardVisualization","visualizationSDK","_visualizationSDK","VisualizationSDKImpl","tileSDK","_tileSDK","TileSDKImpl","_lookerHostData","handleNotification","message","type","ExtensionNotificationType","ROUTE_CHANGED","payload","route","routeState","undefined","VISUALIZATION_DATA","updateVisData","TILE_HOST_DATA","tileHostDataChanged","INITIALIZE","standalone","contextData","errorMessage","requiredLookerVersion","lookerVersion","verifyLookerVersion","extensionSdkVersion","Error","createSecretKeyTag","keyName","match","extensionId","replace","verifyHostConnection","sendAndReceive","ExtensionRequestType","VERIFY_HOST","invokeCoreSdk","httpMethod","path","params","body","authenticator","options","apiVersion","INVOKE_CORE_SDK","invokeCoreSdkRaw","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","value","Promise","reject","LOCAL_STORAGE","localStorageGetItem","localStorageRemoveItem","clipboardWrite","CLIPBOARD","userAttributeSetItem","USER_ATTRIBUTE","userAttributeGetItem","userAttributeResetItem","getContextData","JSON","parse","saveContextData","context","stringify","err","CONTEXT_DATA","refreshContextData","track","trackAction","attributes","TRACK_ACTION","error","errorEvent","filename","lineno","colno","ERROR_EVENT","toString","unloaded","EXTENSION_UNLOADED","createFetchProxy","baseUrl","init","responseBodyType","FetchProxyImpl","fetchProxy","resource","INVOKE_EXTERNAL_API","serverProxy","oauth2Authenticate","authEndpoint","authParameters","validateAuthParameters","oauth2ExchangeCodeForToken","rendered","failureMessage","RENDERED","ExtensionEvent","EXTENSION_API_REQUEST","then","values","version","client_id","redirect_uri","response_type"],"mappings":"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","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 } 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?.mountPoint === MountPoint.dashboardTile ||\n this.lookerHostData?.mountPoint === MountPoint.dashboardVisualization\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(ExtensionRequestType.INVOKE_EXTERNAL_API, {\n type: 'oauth2_authenticate',\n payload: {\n authEndpoint,\n authParameters,\n httpMethod,\n },\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(type: string, payload?: any): Promise<any> {\n if (!this._lookerHostData) {\n return Promise.reject(new Error('Looker host connection not established'))\n }\n return this.chattyHost\n .sendAndReceive(ExtensionEvent.EXTENSION_API_REQUEST, {\n type,\n payload,\n })\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"],"file":"extension_host_api.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/connect/extension_host_api.ts"],"names":["EXTENSION_SDK_VERSION","ExtensionHostApiImpl","constructor","configuration","_configuration","chattyHost","setInitialRoute","hostChangedRoute","lookerHostData","_lookerHostData","handleNotification","message","type","payload","ExtensionNotificationType","ROUTE_CHANGED","route","routeState","undefined","INITIALIZE","contextData","errorMessage","requiredLookerVersion","lookerVersion","verifyLookerVersion","console","error","extensionSdkVersion","Error","createSecretKeyTag","keyName","match","extensionId","replace","verifyHostConnection","sendAndReceive","ExtensionRequestType","VERIFY_HOST","invokeCoreSdk","httpMethod","path","params","body","authenticator","options","apiVersion","INVOKE_CORE_SDK","invokeCoreSdkRaw","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","value","Promise","reject","LOCAL_STORAGE","localStorageGetItem","localStorageRemoveItem","clipboardWrite","CLIPBOARD","userAttributeSetItem","USER_ATTRIBUTE","userAttributeGetItem","userAttributeResetItem","getContextData","JSON","parse","saveContextData","context","stringify","err","CONTEXT_DATA","refreshContextData","track","trackAction","attributes","TRACK_ACTION","errorEvent","filename","lineno","colno","ERROR_EVENT","toString","unloaded","EXTENSION_UNLOADED","createFetchProxy","baseUrl","init","responseBodyType","FetchProxyImpl","fetchProxy","resource","INVOKE_EXTERNAL_API","serverProxy","oauth2Authenticate","authEndpoint","authParameters","validateAuthParameters","oauth2ExchangeCodeForToken","ExtensionEvent","EXTENSION_API_REQUEST","then","values","version","client_id","redirect_uri","response_type"],"mappings":"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","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 } from '@looker/chatty'\nimport intersects from 'semver/ranges/intersects'\nimport { FetchProxyImpl } from './fetch_proxy'\nimport type {\n ExtensionInitializationResponse,\n ExtensionHostApi,\n ExtensionHostApiConfiguration,\n ExtensionNotification,\n FetchCustomParameters,\n FetchResponseBodyType,\n LookerHostData,\n ApiVersion,\n RouteChangeData,\n} from './types'\nimport {\n ExtensionEvent,\n ExtensionNotificationType,\n ExtensionRequestType,\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 contextData?: string\n\n constructor(configuration: ExtensionHostApiConfiguration) {\n this._configuration = configuration\n const { chattyHost, setInitialRoute, hostChangedRoute } =\n this._configuration\n this.chattyHost = chattyHost\n this.setInitialRoute = setInitialRoute\n this.hostChangedRoute = hostChangedRoute\n }\n\n get lookerHostData() {\n return this._lookerHostData\n }\n\n handleNotification(\n message?: ExtensionNotification\n ): ExtensionInitializationResponse | undefined {\n const { type, payload } = message || {}\n switch (type) {\n case ExtensionNotificationType.ROUTE_CHANGED:\n if (this.hostChangedRoute && payload) {\n const { route, routeState } = payload as RouteChangeData\n if (route) {\n this.hostChangedRoute(route, routeState)\n }\n }\n return undefined\n case ExtensionNotificationType.INITIALIZE: {\n this._lookerHostData = payload as LookerHostData\n if (this._lookerHostData) {\n this.contextData = this._lookerHostData.contextData\n }\n let errorMessage\n if (\n this._configuration.requiredLookerVersion &&\n this._lookerHostData &&\n this._lookerHostData.lookerVersion\n ) {\n errorMessage = this.verifyLookerVersion(\n this._configuration.requiredLookerVersion\n )\n if (errorMessage) {\n console.error(errorMessage)\n }\n }\n if (this.setInitialRoute && payload) {\n const { route, routeState } = payload as LookerHostData\n if (route) {\n this.setInitialRoute(route, routeState)\n }\n }\n return {\n extensionSdkVersion: EXTENSION_SDK_VERSION,\n errorMessage,\n }\n }\n default:\n console.error('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!.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 console.error(\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(ExtensionRequestType.INVOKE_EXTERNAL_API, {\n type: 'oauth2_authenticate',\n payload: {\n authEndpoint,\n authParameters,\n httpMethod,\n },\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 private async sendAndReceive(type: string, payload?: any): Promise<any> {\n if (!this._lookerHostData) {\n return Promise.reject(new Error('Looker host connection not established'))\n }\n return this.chattyHost\n .sendAndReceive(ExtensionEvent.EXTENSION_API_REQUEST, {\n type,\n payload,\n })\n .then((values) => values[0])\n }\n\n private 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"],"file":"extension_host_api.js"}
|
|
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.getExtensionSDK = exports.registerHostApi = void 0;
|
|
7
7
|
|
|
8
|
-
var _util = require("../util");
|
|
9
|
-
|
|
10
8
|
var _hostApi;
|
|
11
9
|
|
|
12
10
|
var errorListener = event => {
|
|
@@ -21,7 +19,7 @@ var errorListener = event => {
|
|
|
21
19
|
_hostApi.error(event);
|
|
22
20
|
}
|
|
23
21
|
} else {
|
|
24
|
-
|
|
22
|
+
console.error('Extension has unhandled error. Reporting on console as Looker host api not initialized', event);
|
|
25
23
|
}
|
|
26
24
|
};
|
|
27
25
|
|
|
@@ -29,7 +27,7 @@ var beforeUnloadListener = () => {
|
|
|
29
27
|
if (_hostApi) {
|
|
30
28
|
_hostApi.unloaded();
|
|
31
29
|
|
|
32
|
-
|
|
30
|
+
console.warn('Extension is being unloaded');
|
|
33
31
|
}
|
|
34
32
|
};
|
|
35
33
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/connect/global_listener.ts"],"names":["_hostApi","errorListener","event","error","_looker_reported","beforeUnloadListener","unloaded","setupGlobalListeners","window","addEventListener","registerHostApi","hostApi","getExtensionSDK","lookerHostData","Error"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../src/connect/global_listener.ts"],"names":["_hostApi","errorListener","event","error","_looker_reported","console","beforeUnloadListener","unloaded","warn","setupGlobalListeners","window","addEventListener","registerHostApi","hostApi","getExtensionSDK","lookerHostData","Error"],"mappings":";;;;;;;AA4BA,IAAIA,QAAJ;;AAEA,IAAMC,aAAa,GAAIC,KAAD,IAAuB;AAC3C,MAAIF,QAAJ,EAAc;AAQZ,QAAIE,KAAK,CAACC,KAAV,EAAiB;AACf,UAAI,CAACD,KAAK,CAACC,KAAN,CAAYC,gBAAjB,EAAmC;AACjCJ,QAAAA,QAAQ,CAACG,KAAT,CAAeD,KAAf;;AACAA,QAAAA,KAAK,CAACC,KAAN,CAAYC,gBAAZ,GAA+B,IAA/B;AACD;AACF,KALD,MAKO;AACLJ,MAAAA,QAAQ,CAACG,KAAT,CAAeD,KAAf;AACD;AACF,GAhBD,MAgBO;AACLG,IAAAA,OAAO,CAACF,KAAR,CACE,wFADF,EAEED,KAFF;AAID;AACF,CAvBD;;AA8BA,IAAMI,oBAAoB,GAAG,MAAM;AACjC,MAAIN,QAAJ,EAAc;AACZA,IAAAA,QAAQ,CAACO,QAAT;;AACAF,IAAAA,OAAO,CAACG,IAAR,CAAa,6BAAb;AACD;AACF,CALD;;AAOA,IAAMC,oBAAoB,GAAG,MAAM;AACjCC,EAAAA,MAAM,CAACC,gBAAP,CAAwB,OAAxB,EAAiCV,aAAjC;AACAS,EAAAA,MAAM,CAACC,gBAAP,CAAwB,cAAxB,EAAwCL,oBAAxC;AACD,CAHD;;AAKAG,oBAAoB;;AAKb,IAAMG,eAAe,GAAIC,OAAD,IAA+B;AAC5Db,EAAAA,QAAQ,GAAGa,OAAX;AACD,CAFM;;;;AAQA,IAAMC,eAAe,GAAG,MAAoB;AACjD,MAAId,QAAQ,IAAIA,QAAQ,CAACe,cAAzB,EAAyC;AACvC,WAAOf,QAAP;AACD;;AACD,QAAM,IAAIgB,KAAJ,CAAU,8BAAV,CAAN;AACD,CALM","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 { 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 console.error(\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 console.warn('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"],"file":"global_listener.js"}
|
package/lib/connect/index.d.ts
CHANGED
package/lib/connect/index.js
CHANGED
|
@@ -13,7 +13,7 @@ Object.defineProperty(exports, "getExtensionSDK", {
|
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
15
|
|
|
16
|
-
var _types = require("./
|
|
16
|
+
var _types = require("./types");
|
|
17
17
|
|
|
18
18
|
Object.keys(_types).forEach(function (key) {
|
|
19
19
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -27,34 +27,6 @@ Object.keys(_types).forEach(function (key) {
|
|
|
27
27
|
});
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
-
var _types2 = require("./tile/types");
|
|
31
|
-
|
|
32
|
-
Object.keys(_types2).forEach(function (key) {
|
|
33
|
-
if (key === "default" || key === "__esModule") return;
|
|
34
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
35
|
-
if (key in exports && exports[key] === _types2[key]) return;
|
|
36
|
-
Object.defineProperty(exports, key, {
|
|
37
|
-
enumerable: true,
|
|
38
|
-
get: function get() {
|
|
39
|
-
return _types2[key];
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
var _types3 = require("./types");
|
|
45
|
-
|
|
46
|
-
Object.keys(_types3).forEach(function (key) {
|
|
47
|
-
if (key === "default" || key === "__esModule") return;
|
|
48
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
49
|
-
if (key in exports && exports[key] === _types3[key]) return;
|
|
50
|
-
Object.defineProperty(exports, key, {
|
|
51
|
-
enumerable: true,
|
|
52
|
-
get: function get() {
|
|
53
|
-
return _types3[key];
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
|
|
58
30
|
var _connect_extension_host = require("./connect_extension_host");
|
|
59
31
|
|
|
60
32
|
Object.keys(_connect_extension_host).forEach(function (key) {
|
package/lib/connect/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/connect/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AA0BA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA
|
|
1
|
+
{"version":3,"sources":["../../src/connect/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AA0BA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA","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 './types'\nexport * from './connect_extension_host'\nexport { getExtensionSDK } from './global_listener'\n"],"file":"index.js"}
|
package/lib/connect/types.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import type { ChattyHostConnection } from '@looker/chatty';
|
|
2
|
-
import type { VisualizationDataReceivedCallback, RawVisualizationData, VisualizationSDK } from './visualization';
|
|
3
|
-
import type { TileHostDataChangedCallback, TileSDK, TileHostData } from './tile';
|
|
4
2
|
export declare enum ExtensionEvent {
|
|
5
3
|
EXTENSION_HOST_NOTIFICATION = "EXTENSION_NOTIFICATION",
|
|
6
4
|
EXTENSION_API_REQUEST = "EXTENSION_API_REQUEST"
|
|
@@ -21,18 +19,7 @@ export declare enum ExtensionRequestType {
|
|
|
21
19
|
ERROR_EVENT = "ERROR_EVENT",
|
|
22
20
|
INVOKE_EXTERNAL_API = "INVOKE_EXTERNAL_API",
|
|
23
21
|
EXTENSION_UNLOADED = "EXTENSION_UNLOADED",
|
|
24
|
-
SPARTAN_LOGOUT = "SPARTAN_LOGOUT"
|
|
25
|
-
RENDERED = "RENDERED",
|
|
26
|
-
VIS_DEFAULT_CONFIG = "VIS_DEFAULT_CONFIG",
|
|
27
|
-
TILE_ADD_ERRORS = "TILE_ADD_ERRORS",
|
|
28
|
-
TILE_CLEAR_ERRORS = "TILE_CLEAR_ERRORS",
|
|
29
|
-
TILE_TRIGGER = "TILE_TRIGGER",
|
|
30
|
-
TILE_OPEN_DRILL_MENU = "TILE_OPEN_DRILL_MENU",
|
|
31
|
-
TILE_TOGGLE_CROSS_FILTER = "TILE_TOGGLE_CROSS_FILTER",
|
|
32
|
-
TILE_RUN_DASHBOARD = "TILE_RUN_DASHBOARD",
|
|
33
|
-
TILE_STOP_DASHBOARD = "TILE_STOP_DASHBOARD",
|
|
34
|
-
TILE_UPDATE_FILTERS = "TILE_UPDATE_FILTERS",
|
|
35
|
-
TILE_OPEN_SCHEDULE_DIALOG = "TILE_OPEN_SCHEDULE_DIALOG"
|
|
22
|
+
SPARTAN_LOGOUT = "SPARTAN_LOGOUT"
|
|
36
23
|
}
|
|
37
24
|
export interface ExtensionRequest {
|
|
38
25
|
type: ExtensionRequestType;
|
|
@@ -102,38 +89,14 @@ export interface FetchDataRequest {
|
|
|
102
89
|
}
|
|
103
90
|
export declare enum ExtensionNotificationType {
|
|
104
91
|
ROUTE_CHANGED = "ROUTE_CHANGED",
|
|
105
|
-
INITIALIZE = "INITIALIZE"
|
|
106
|
-
VISUALIZATION_DATA = "VISUALIZATION_DATA",
|
|
107
|
-
TILE_HOST_DATA = "TILE_HOST_DATA"
|
|
92
|
+
INITIALIZE = "INITIALIZE"
|
|
108
93
|
}
|
|
109
|
-
export interface ExtensionInitializeMessage {
|
|
110
|
-
type: ExtensionNotificationType.INITIALIZE;
|
|
111
|
-
payload: LookerHostData;
|
|
112
|
-
}
|
|
113
|
-
export interface ExtensionRouteChangedMessage {
|
|
114
|
-
type: ExtensionNotificationType.ROUTE_CHANGED;
|
|
115
|
-
payload: RouteChangeData;
|
|
116
|
-
}
|
|
117
|
-
export interface ExtensionVisualizationDataMessage {
|
|
118
|
-
type: ExtensionNotificationType.VISUALIZATION_DATA;
|
|
119
|
-
payload: RawVisualizationData;
|
|
120
|
-
}
|
|
121
|
-
export interface TileHostDataChangedMessage {
|
|
122
|
-
type: ExtensionNotificationType.TILE_HOST_DATA;
|
|
123
|
-
payload: Partial<TileHostData>;
|
|
124
|
-
}
|
|
125
|
-
export declare type ExtensionNotification = ExtensionInitializeMessage | ExtensionRouteChangedMessage | ExtensionVisualizationDataMessage | TileHostDataChangedMessage;
|
|
126
94
|
export interface RouteChangeData {
|
|
127
95
|
route?: string;
|
|
128
96
|
routeState?: any;
|
|
129
97
|
}
|
|
130
98
|
export declare type HostType = 'standard' | 'embed' | 'spartan';
|
|
131
|
-
export declare type MountType = 'fullscreen'
|
|
132
|
-
export declare enum MountPoint {
|
|
133
|
-
standalone = "standalone",
|
|
134
|
-
dashboardVisualization = "dashboard-visualization",
|
|
135
|
-
dashboardTile = "dashboard-tile"
|
|
136
|
-
}
|
|
99
|
+
export declare type MountType = 'fullscreen';
|
|
137
100
|
export interface LookerHostData {
|
|
138
101
|
extensionId: string;
|
|
139
102
|
lookerVersion: string;
|
|
@@ -143,9 +106,11 @@ export interface LookerHostData {
|
|
|
143
106
|
hostOrigin?: string;
|
|
144
107
|
hostType?: HostType;
|
|
145
108
|
mountType?: MountType;
|
|
146
|
-
mountPoint: MountPoint;
|
|
147
109
|
contextData?: string;
|
|
148
|
-
|
|
110
|
+
}
|
|
111
|
+
export interface ExtensionNotification {
|
|
112
|
+
type: ExtensionNotificationType;
|
|
113
|
+
payload?: LookerHostData | RouteChangeData | undefined;
|
|
149
114
|
}
|
|
150
115
|
export interface ExtensionInitializationResponse {
|
|
151
116
|
extensionSdkVersion: string;
|
|
@@ -157,8 +122,6 @@ export interface ExtensionHostConfiguration {
|
|
|
157
122
|
requiredLookerVersion?: string;
|
|
158
123
|
hostChangedRoute?: (route: string, routeState?: any) => void;
|
|
159
124
|
chattyTimeout?: number;
|
|
160
|
-
visualizationDataReceivedCallback?: VisualizationDataReceivedCallback;
|
|
161
|
-
tileHostDataChangedCallback?: TileHostDataChangedCallback;
|
|
162
125
|
}
|
|
163
126
|
export interface ExtensionHostApiConfiguration extends ExtensionHostConfiguration {
|
|
164
127
|
chattyHost: ChattyHostConnection;
|
|
@@ -206,7 +169,4 @@ export interface ExtensionSDK {
|
|
|
206
169
|
oauth2Authenticate(authEndpoint: string, authParameters: Record<string, string>, httpMethod?: string): Promise<any>;
|
|
207
170
|
oauth2ExchangeCodeForToken(authEndpoint: string, authParameters: Record<string, string>): Promise<any>;
|
|
208
171
|
spartanLogout(): void;
|
|
209
|
-
rendered(failureMessage?: string): void;
|
|
210
|
-
visualizationSDK: VisualizationSDK;
|
|
211
|
-
tileSDK: TileSDK;
|
|
212
172
|
}
|