@thoughtspot/visual-embed-sdk 1.43.0 → 1.43.1
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/cjs/package.json +1 -1
- package/cjs/src/api-intercept.d.ts +51 -0
- package/cjs/src/api-intercept.d.ts.map +1 -0
- package/cjs/src/api-intercept.js +180 -0
- package/cjs/src/api-intercept.js.map +1 -0
- package/cjs/src/api-intercept.spec.d.ts +2 -0
- package/cjs/src/api-intercept.spec.d.ts.map +1 -0
- package/cjs/src/api-intercept.spec.js +672 -0
- package/cjs/src/api-intercept.spec.js.map +1 -0
- package/cjs/src/css-variables.d.ts +4 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +0 -5
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +4 -5
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +10 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +2 -2
- package/cjs/src/embed/conversation.js +1 -1
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +17 -0
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.d.ts +11 -1
- package/cjs/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.js +1 -0
- package/cjs/src/embed/hostEventClient/contracts.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +4 -2
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +11 -0
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/search.d.ts +0 -7
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js +1 -4
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +10 -0
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +56 -15
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +412 -238
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +2 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +2 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/react/all-types-export.d.ts +1 -1
- package/cjs/src/react/all-types-export.d.ts.map +1 -1
- package/cjs/src/react/all-types-export.js +2 -1
- package/cjs/src/react/all-types-export.js.map +1 -1
- package/cjs/src/types.d.ts +244 -88
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +181 -70
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/logger.d.ts.map +1 -1
- package/cjs/src/utils/logger.js +1 -2
- package/cjs/src/utils/logger.js.map +1 -1
- package/cjs/src/utils/processData.d.ts +1 -1
- package/cjs/src/utils/processData.d.ts.map +1 -1
- package/cjs/src/utils/processData.js +8 -8
- package/cjs/src/utils/processData.js.map +1 -1
- package/cjs/src/utils/processData.spec.js.map +1 -1
- package/dist/{index-HZ94j9Ey.js → index-CpkMygsc.js} +1 -1
- package/dist/src/api-intercept.d.ts +51 -0
- package/dist/src/api-intercept.d.ts.map +1 -0
- package/dist/src/api-intercept.spec.d.ts +2 -0
- package/dist/src/api-intercept.spec.d.ts.map +1 -0
- package/dist/src/css-variables.d.ts +4 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +0 -5
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +2 -2
- package/dist/src/embed/hostEventClient/contracts.d.ts +11 -1
- package/dist/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +0 -7
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +10 -0
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/react/all-types-export.d.ts +1 -1
- package/dist/src/react/all-types-export.d.ts.map +1 -1
- package/dist/src/types.d.ts +244 -88
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/logger.d.ts.map +1 -1
- package/dist/src/utils/processData.d.ts +1 -1
- package/dist/src/utils/processData.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +435 -118
- package/dist/tsembed-react.js +434 -117
- package/dist/tsembed.es.js +3577 -3260
- package/dist/tsembed.js +3575 -3258
- package/dist/visual-embed-sdk-react-full.d.ts +271 -103
- package/dist/visual-embed-sdk-react.d.ts +268 -103
- package/dist/visual-embed-sdk.d.ts +271 -103
- package/lib/package.json +1 -1
- package/lib/src/api-intercept.d.ts +51 -0
- package/lib/src/api-intercept.d.ts.map +1 -0
- package/lib/src/api-intercept.js +173 -0
- package/lib/src/api-intercept.js.map +1 -0
- package/lib/src/api-intercept.spec.d.ts +2 -0
- package/lib/src/api-intercept.spec.d.ts.map +1 -0
- package/lib/src/api-intercept.spec.js +669 -0
- package/lib/src/api-intercept.spec.js.map +1 -0
- package/lib/src/css-variables.d.ts +4 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +0 -5
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +4 -5
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +10 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +2 -2
- package/lib/src/embed/conversation.js +1 -1
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +17 -0
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.d.ts +11 -1
- package/lib/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.js +1 -0
- package/lib/src/embed/hostEventClient/contracts.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +4 -2
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +11 -0
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/search.d.ts +0 -7
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +1 -4
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +10 -0
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +56 -15
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +412 -238
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +2 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -2
- package/lib/src/index.js.map +1 -1
- package/lib/src/react/all-types-export.d.ts +1 -1
- package/lib/src/react/all-types-export.d.ts.map +1 -1
- package/lib/src/react/all-types-export.js +1 -1
- package/lib/src/react/all-types-export.js.map +1 -1
- package/lib/src/types.d.ts +244 -88
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +180 -69
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/logger.d.ts.map +1 -1
- package/lib/src/utils/logger.js +1 -2
- package/lib/src/utils/logger.js.map +1 -1
- package/lib/src/utils/processData.d.ts +1 -1
- package/lib/src/utils/processData.d.ts.map +1 -1
- package/lib/src/utils/processData.js +8 -8
- package/lib/src/utils/processData.js.map +1 -1
- package/lib/src/utils/processData.spec.js.map +1 -1
- package/package.json +1 -1
- package/src/api-intercept.spec.ts +856 -0
- package/src/api-intercept.ts +204 -0
- package/src/css-variables.ts +5 -0
- package/src/embed/app.spec.ts +11 -0
- package/src/embed/app.ts +5 -16
- package/src/embed/conversation.spec.ts +22 -0
- package/src/embed/conversation.ts +3 -3
- package/src/embed/hostEventClient/contracts.ts +10 -0
- package/src/embed/liveboard.spec.ts +12 -0
- package/src/embed/liveboard.ts +6 -2
- package/src/embed/search.ts +1 -14
- package/src/embed/ts-embed.spec.ts +498 -250
- package/src/embed/ts-embed.ts +80 -32
- package/src/index.ts +2 -0
- package/src/react/all-types-export.ts +1 -0
- package/src/types.ts +327 -165
- package/src/utils/logger.ts +1 -2
- package/src/utils/processData.spec.ts +0 -1
- package/src/utils/processData.ts +10 -11
|
@@ -697,6 +697,10 @@ export interface CustomCssVariables {
|
|
|
697
697
|
* Background color of the summary header in the CCA modal.
|
|
698
698
|
*/
|
|
699
699
|
"--ts-var-cca-modal-summary-header-background"?: string;
|
|
700
|
+
/**
|
|
701
|
+
* Width of the Spotter chat window.
|
|
702
|
+
*/
|
|
703
|
+
"--ts-var-spotter-chat-width"?: string;
|
|
700
704
|
}
|
|
701
705
|
export interface SessionInterface {
|
|
702
706
|
sessionId: string;
|
|
@@ -1592,7 +1596,7 @@ export interface FrameParams {
|
|
|
1592
1596
|
/**
|
|
1593
1597
|
* The common configuration object for an embedded view.
|
|
1594
1598
|
*/
|
|
1595
|
-
export interface BaseViewConfig {
|
|
1599
|
+
export interface BaseViewConfig extends ApiInterceptFlags {
|
|
1596
1600
|
/**
|
|
1597
1601
|
* @hidden
|
|
1598
1602
|
*/
|
|
@@ -2145,7 +2149,7 @@ export interface SearchLiveboardCommonViewConfig {
|
|
|
2145
2149
|
*
|
|
2146
2150
|
* Supported embed types: `SageEmbed`, `AppEmbed`, `SearchBarEmbed`, `LiveboardEmbed`, `SearchEmbed`
|
|
2147
2151
|
* @default true
|
|
2148
|
-
* @version SDK: 1.
|
|
2152
|
+
* @version SDK: 1.41.1 | ThoughtSpot Cloud: 10.14.0.cl
|
|
2149
2153
|
* @example
|
|
2150
2154
|
* ```js
|
|
2151
2155
|
* // Replace <EmbedComponent> with embed component name. For example, SageEmbed, AppEmbed, or SearchBarEmbed
|
|
@@ -2344,26 +2348,27 @@ export interface LiveboardAppEmbedViewConfig {
|
|
|
2344
2348
|
*/
|
|
2345
2349
|
enableAskSage?: boolean;
|
|
2346
2350
|
/**
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2351
|
+
* This flag is used to show or hide checkboxes for including or excluding
|
|
2352
|
+
* the cover and filters pages in the Liveboard PDF.
|
|
2353
|
+
*
|
|
2354
|
+
* Supported embed types: `AppEmbed`, `LiveboardEmbed`
|
|
2355
|
+
* @version SDK: 1.40.0 | ThoughtSpot:10.8.0.cl
|
|
2356
|
+
* @example
|
|
2357
|
+
* ```js
|
|
2358
|
+
* // Replace <EmbedComponent> with embed component name. For example, AppEmbed or LiveboardEmbed
|
|
2359
|
+
* const embed = new <EmbedComponent>('#tsEmbed', {
|
|
2360
|
+
* ... // other embed view config
|
|
2361
|
+
* coverAndFilterOptionInPDF: false,
|
|
2362
|
+
* })
|
|
2363
|
+
* ```
|
|
2364
|
+
*/
|
|
2361
2365
|
coverAndFilterOptionInPDF?: boolean;
|
|
2362
2366
|
/**
|
|
2363
2367
|
* This flag is used to enable or disable the XLSX/CSV download option for Liveboards.
|
|
2368
|
+
* To enable this feature on your instance, contact ThoughtSpot Support.
|
|
2364
2369
|
*
|
|
2365
2370
|
* Supported embed types: `AppEmbed`, `LiveboardEmbed`
|
|
2366
|
-
* @version SDK: 1.41.0 | ThoughtSpot:
|
|
2371
|
+
* @version SDK: 1.41.0 | ThoughtSpot: 26.3.0.cl
|
|
2367
2372
|
* @example
|
|
2368
2373
|
* ```js
|
|
2369
2374
|
* // Replace <EmbedComponent> with embed component name. For example, AppEmbed or LiveboardEmbed
|
|
@@ -3555,21 +3560,24 @@ export declare enum EmbedEvent {
|
|
|
3555
3560
|
|
|
3556
3561
|
* Prerequisite: Set `isOnBeforeGetVizDataInterceptEnabled` to `true`
|
|
3557
3562
|
* for this embed event to get emitted.
|
|
3558
|
-
* @param: payload
|
|
3559
|
-
* @param:
|
|
3563
|
+
* @param:payload The payload received from the embed related to the Data API call.
|
|
3564
|
+
* @param:responder
|
|
3560
3565
|
* Contains elements that lets developers define whether ThoughtSpot
|
|
3561
3566
|
* should run the search, and if not, what error message
|
|
3562
3567
|
* should be shown to the user.
|
|
3563
3568
|
*
|
|
3564
|
-
* execute
|
|
3569
|
+
* `execute` - When execute returns `true`, the search will be run.
|
|
3565
3570
|
* When execute returns `false`, the search will not be executed.
|
|
3566
3571
|
*
|
|
3567
|
-
* error
|
|
3568
|
-
*
|
|
3572
|
+
* `error` - Developers can customize the error message text when `execute`
|
|
3573
|
+
* is `false` using the `errorText` and `errorDescription` parameters in responder.
|
|
3574
|
+
*
|
|
3575
|
+
* `errorText` - The error message text to be shown to the user.
|
|
3576
|
+
* `errorDescription (ThoughtSpot: 10.15.0.cl and above)` - The error description to be shown to the user.
|
|
3569
3577
|
* @version SDK : 1.29.0 | ThoughtSpot: 10.3.0.cl
|
|
3570
3578
|
* @example
|
|
3571
3579
|
*```js
|
|
3572
|
-
* .on(EmbedEvent.OnBeforeGetVizDataIntercept,
|
|
3580
|
+
* embed.on(EmbedEvent.OnBeforeGetVizDataIntercept,
|
|
3573
3581
|
* (payload, responder) => {
|
|
3574
3582
|
* responder({
|
|
3575
3583
|
* data: {
|
|
@@ -3585,7 +3593,7 @@ export declare enum EmbedEvent {
|
|
|
3585
3593
|
* ```
|
|
3586
3594
|
*
|
|
3587
3595
|
*```js
|
|
3588
|
-
* .on(EmbedEvent.OnBeforeGetVizDataIntercept,
|
|
3596
|
+
* embed.on(EmbedEvent.OnBeforeGetVizDataIntercept,
|
|
3589
3597
|
* (payload, responder) => {
|
|
3590
3598
|
* const query = payload.data.data.answer.search_query
|
|
3591
3599
|
* responder({
|
|
@@ -3596,7 +3604,8 @@ export declare enum EmbedEvent {
|
|
|
3596
3604
|
* error: {
|
|
3597
3605
|
* //Provide a custom error message to explain to your end user
|
|
3598
3606
|
* // why their search did not run, and which searches are accepted by your custom logic.
|
|
3599
|
-
* errorText: "
|
|
3607
|
+
* errorText: "Error Occurred",
|
|
3608
|
+
* errorDescription: "You can't use this query :" + query + ".
|
|
3600
3609
|
* The 'sales' measures can never be used at the 'county' level.
|
|
3601
3610
|
* Please try another measure, or remove 'county' from your search."
|
|
3602
3611
|
* }
|
|
@@ -3660,17 +3669,17 @@ export declare enum EmbedEvent {
|
|
|
3660
3669
|
*/
|
|
3661
3670
|
TableVizRendered = "TableVizRendered",
|
|
3662
3671
|
/**
|
|
3663
|
-
|
|
3664
|
-
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
|
|
3668
|
-
|
|
3669
|
-
|
|
3670
|
-
|
|
3671
|
-
|
|
3672
|
-
|
|
3673
|
-
|
|
3672
|
+
* Emitted when the liveboard is created from pin modal or Liveboard list page.
|
|
3673
|
+
* You can use this event as a hook to trigger
|
|
3674
|
+
* other events on liveboard creation.
|
|
3675
|
+
*
|
|
3676
|
+
* ```js
|
|
3677
|
+
* liveboardEmbed.on(EmbedEvent.CreateLiveboard, (payload) => {
|
|
3678
|
+
* console.log('payload', payload);
|
|
3679
|
+
* })
|
|
3680
|
+
*```
|
|
3681
|
+
* @version SDK : 1.37.0 | ThoughtSpot: 10.8.0.cl
|
|
3682
|
+
*/
|
|
3674
3683
|
CreateLiveboard = "createLiveboard",
|
|
3675
3684
|
/**
|
|
3676
3685
|
* Emitted when a user creates a Model.
|
|
@@ -3766,6 +3775,17 @@ export declare enum EmbedEvent {
|
|
|
3766
3775
|
* @version SDK: 1.41.0 | ThoughtSpot: 10.12.0.cl
|
|
3767
3776
|
*/
|
|
3768
3777
|
SpotterInit = "spotterInit",
|
|
3778
|
+
/**
|
|
3779
|
+
* Emitted when a *Spotter* conversation has been successfully created.
|
|
3780
|
+
* @example
|
|
3781
|
+
* ```js
|
|
3782
|
+
* spotterEmbed.on(EmbedEvent.SpotterLoadComplete, (payload) => {
|
|
3783
|
+
* console.log('payload', payload);
|
|
3784
|
+
* })
|
|
3785
|
+
*```
|
|
3786
|
+
* @version SDK: 1.44.0 | ThoughtSpot: 26.2.0.cl
|
|
3787
|
+
*/
|
|
3788
|
+
SpotterLoadComplete = "spotterLoadComplete",
|
|
3769
3789
|
/**
|
|
3770
3790
|
* @hidden
|
|
3771
3791
|
* Triggers when the embed listener is ready to receive events.
|
|
@@ -3788,7 +3808,73 @@ export declare enum EmbedEvent {
|
|
|
3788
3808
|
* ```
|
|
3789
3809
|
* @version SDK: 1.41.0 | ThoughtSpot: 10.12.0.cl
|
|
3790
3810
|
*/
|
|
3791
|
-
OrgSwitched = "orgSwitched"
|
|
3811
|
+
OrgSwitched = "orgSwitched",
|
|
3812
|
+
/**
|
|
3813
|
+
* Emitted when the user intercepts a URL.
|
|
3814
|
+
*
|
|
3815
|
+
* Supported on all embed types.
|
|
3816
|
+
*
|
|
3817
|
+
* @example
|
|
3818
|
+
*
|
|
3819
|
+
* ```js
|
|
3820
|
+
* embed.on(EmbedEvent.ApiIntercept, (payload, responder) => {
|
|
3821
|
+
* console.log('payload', payload);
|
|
3822
|
+
* responder({
|
|
3823
|
+
* data: {
|
|
3824
|
+
* execute: false,
|
|
3825
|
+
* error: {
|
|
3826
|
+
* errorText: 'Error Occurred',
|
|
3827
|
+
* }
|
|
3828
|
+
* }
|
|
3829
|
+
* })
|
|
3830
|
+
* })
|
|
3831
|
+
* ```
|
|
3832
|
+
*
|
|
3833
|
+
* ```js
|
|
3834
|
+
* // We can also send a response for the intercepted api
|
|
3835
|
+
* embed.on(EmbedEvent.ApiIntercept, (payload, responder) => {
|
|
3836
|
+
* console.log('payload', payload);
|
|
3837
|
+
* responder({
|
|
3838
|
+
* data: {
|
|
3839
|
+
* execute: false,
|
|
3840
|
+
* response: {
|
|
3841
|
+
* body: {
|
|
3842
|
+
* data: {
|
|
3843
|
+
* // Some api response
|
|
3844
|
+
* },
|
|
3845
|
+
* }
|
|
3846
|
+
* }
|
|
3847
|
+
* }
|
|
3848
|
+
* })
|
|
3849
|
+
* })
|
|
3850
|
+
*
|
|
3851
|
+
* // here embed will use the response from the responder as the response for the api
|
|
3852
|
+
* ```
|
|
3853
|
+
*
|
|
3854
|
+
* ```js
|
|
3855
|
+
* // We can also send error in response for the intercepted api
|
|
3856
|
+
* embed.on(EmbedEvent.ApiIntercept, (payload, responder) => {
|
|
3857
|
+
* console.log('payload', payload);
|
|
3858
|
+
* responder({
|
|
3859
|
+
* data: {
|
|
3860
|
+
* execute: false,
|
|
3861
|
+
* response: {
|
|
3862
|
+
* body: {
|
|
3863
|
+
* errors: [{
|
|
3864
|
+
* title: 'Error Occurred',
|
|
3865
|
+
* description: 'Error Description',
|
|
3866
|
+
* isUserError: true,
|
|
3867
|
+
* }],
|
|
3868
|
+
* data: {},
|
|
3869
|
+
* },
|
|
3870
|
+
* }
|
|
3871
|
+
* }
|
|
3872
|
+
* })
|
|
3873
|
+
* })
|
|
3874
|
+
* ```
|
|
3875
|
+
* @version SDK: 1.43.0 | ThoughtSpot: 10.15.0.cl
|
|
3876
|
+
*/
|
|
3877
|
+
ApiIntercept = "ApiIntercept"
|
|
3792
3878
|
}
|
|
3793
3879
|
/**
|
|
3794
3880
|
* Event types that can be triggered by the host application
|
|
@@ -4255,14 +4341,14 @@ export declare enum HostEvent {
|
|
|
4255
4341
|
* ```
|
|
4256
4342
|
* @example
|
|
4257
4343
|
* ```js
|
|
4258
|
-
|
|
4259
|
-
|
|
4260
|
-
|
|
4261
|
-
|
|
4262
|
-
|
|
4263
|
-
|
|
4264
|
-
|
|
4265
|
-
|
|
4344
|
+
* // You can use the Data event dispatched on each answer creation to get the vizId and use in MakeACopy host event.
|
|
4345
|
+
* let latestSpotterVizId = '';
|
|
4346
|
+
* spotterEmbed.on(EmbedEvent.Data, (payload) => {
|
|
4347
|
+
* latestSpotterVizId = payload.data.id;
|
|
4348
|
+
* });
|
|
4349
|
+
*
|
|
4350
|
+
* spotterEmbed.trigger(HostEvent.MakeACopy, { vizId: latestSpotterVizId });
|
|
4351
|
+
* ```
|
|
4266
4352
|
* @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw
|
|
4267
4353
|
*/
|
|
4268
4354
|
MakeACopy = "makeACopy",
|
|
@@ -4486,14 +4572,14 @@ export declare enum HostEvent {
|
|
|
4486
4572
|
* embed.trigger(HostEvent.Download)
|
|
4487
4573
|
* ```
|
|
4488
4574
|
* ```js
|
|
4489
|
-
|
|
4490
|
-
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
4495
|
-
|
|
4496
|
-
|
|
4575
|
+
* // You can use the Data event dispatched on each answer creation to get the vizId and use in Download host event.
|
|
4576
|
+
* let latestSpotterVizId = '';
|
|
4577
|
+
* spotterEmbed.on(EmbedEvent.Data, (payload) => {
|
|
4578
|
+
* latestSpotterVizId = payload.data.id;
|
|
4579
|
+
* });
|
|
4580
|
+
*
|
|
4581
|
+
* spotterEmbed.trigger(HostEvent.Download, { vizId: latestSpotterVizId });
|
|
4582
|
+
* ```
|
|
4497
4583
|
* @deprecated from SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl ,9.4.1.sw
|
|
4498
4584
|
* Use {@link DownloadAsPng}
|
|
4499
4585
|
* @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw
|
|
@@ -4511,13 +4597,13 @@ export declare enum HostEvent {
|
|
|
4511
4597
|
*
|
|
4512
4598
|
* searchEmbed.trigger(HostEvent.DownloadAsPng)
|
|
4513
4599
|
*
|
|
4514
|
-
|
|
4515
|
-
|
|
4516
|
-
|
|
4517
|
-
|
|
4518
|
-
|
|
4519
|
-
|
|
4520
|
-
|
|
4600
|
+
* // You can use the Data event dispatched on each answer creation to get the vizId and use in DownloadAsPng host event.
|
|
4601
|
+
* let latestSpotterVizId = '';
|
|
4602
|
+
* spotterEmbed.on(EmbedEvent.Data, (payload) => {
|
|
4603
|
+
* latestSpotterVizId = payload.data.id;
|
|
4604
|
+
* });
|
|
4605
|
+
*
|
|
4606
|
+
* spotterEmbed.trigger(HostEvent.DownloadAsPng, { vizId: latestSpotterVizId });
|
|
4521
4607
|
* ```
|
|
4522
4608
|
*
|
|
4523
4609
|
* @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.4.1.sw
|
|
@@ -4539,13 +4625,13 @@ export declare enum HostEvent {
|
|
|
4539
4625
|
* searchEmbed.trigger(HostEvent.DownloadAsCsv)
|
|
4540
4626
|
* ```
|
|
4541
4627
|
* ```js
|
|
4542
|
-
|
|
4543
|
-
|
|
4544
|
-
|
|
4545
|
-
|
|
4546
|
-
|
|
4547
|
-
|
|
4548
|
-
|
|
4628
|
+
* // You can use the Data event dispatched on each answer creation to get the vizId and use in DownloadAsCsv host event.
|
|
4629
|
+
* let latestSpotterVizId = '';
|
|
4630
|
+
* spotterEmbed.on(EmbedEvent.Data, (payload) => {
|
|
4631
|
+
* latestSpotterVizId = payload.data.id;
|
|
4632
|
+
* });
|
|
4633
|
+
*
|
|
4634
|
+
* spotterEmbed.trigger(HostEvent.DownloadAsCsv, { vizId: latestSpotterVizId });
|
|
4549
4635
|
* ```
|
|
4550
4636
|
* @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw
|
|
4551
4637
|
*/
|
|
@@ -4566,13 +4652,13 @@ export declare enum HostEvent {
|
|
|
4566
4652
|
* searchEmbed.trigger(HostEvent.DownloadAsXlsx)
|
|
4567
4653
|
* ```
|
|
4568
4654
|
* ```js
|
|
4569
|
-
|
|
4570
|
-
|
|
4571
|
-
|
|
4572
|
-
|
|
4573
|
-
|
|
4574
|
-
|
|
4575
|
-
|
|
4655
|
+
* // You can use the Data event dispatched on each answer creation to get the vizId and use in DownloadAsXlsx host event.
|
|
4656
|
+
* let latestSpotterVizId = '';
|
|
4657
|
+
* spotterEmbed.on(EmbedEvent.Data, (payload) => {
|
|
4658
|
+
* latestSpotterVizId = payload.data.id;
|
|
4659
|
+
* });
|
|
4660
|
+
*
|
|
4661
|
+
* spotterEmbed.trigger(HostEvent.DownloadAsXlsx, { vizId: latestSpotterVizId });
|
|
4576
4662
|
* ```
|
|
4577
4663
|
* @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw
|
|
4578
4664
|
*/
|
|
@@ -4937,13 +5023,13 @@ export declare enum HostEvent {
|
|
|
4937
5023
|
* });
|
|
4938
5024
|
*```
|
|
4939
5025
|
*```js
|
|
4940
|
-
|
|
4941
|
-
|
|
4942
|
-
|
|
4943
|
-
|
|
4944
|
-
|
|
4945
|
-
|
|
4946
|
-
|
|
5026
|
+
* // You can use the Data event dispatched on each answer creation to get the vizId and use in GetParameters host event.
|
|
5027
|
+
* let latestSpotterVizId = '';
|
|
5028
|
+
* spotterEmbed.on(EmbedEvent.Data, (payload) => {
|
|
5029
|
+
* latestSpotterVizId = payload.data.id;
|
|
5030
|
+
* });
|
|
5031
|
+
*
|
|
5032
|
+
* spotterEmbed.trigger(HostEvent.GetParameters, { vizId: latestSpotterVizId });
|
|
4947
5033
|
*```
|
|
4948
5034
|
* @version SDK: 1.29.0 | ThoughtSpot: 10.1.0.cl, 10.1.0.sw
|
|
4949
5035
|
*/
|
|
@@ -4992,8 +5078,8 @@ export declare enum HostEvent {
|
|
|
4992
5078
|
* spotterEmbed.on(EmbedEvent.Data, (payload) => {
|
|
4993
5079
|
* latestSpotterVizId = payload.data.id;
|
|
4994
5080
|
* });
|
|
4995
|
-
|
|
4996
|
-
|
|
5081
|
+
*
|
|
5082
|
+
* spotterEmbed.trigger(HostEvent.SaveAnswer, { vizId: latestSpotterVizId });
|
|
4997
5083
|
* ```
|
|
4998
5084
|
* @version SDK: 1.36.0 | ThoughtSpot: 10.6.0.cl
|
|
4999
5085
|
*/
|
|
@@ -5084,8 +5170,8 @@ export declare enum HostEvent {
|
|
|
5084
5170
|
* spotterEmbed.on(EmbedEvent.Data, (payload) => {
|
|
5085
5171
|
* latestSpotterVizId = payload.data.id;
|
|
5086
5172
|
* });
|
|
5087
|
-
|
|
5088
|
-
|
|
5173
|
+
*
|
|
5174
|
+
* spotterEmbed.trigger(HostEvent.AnswerChartSwitcher, { vizId: latestSpotterVizId });
|
|
5089
5175
|
*```
|
|
5090
5176
|
* @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl
|
|
5091
5177
|
*/
|
|
@@ -5122,8 +5208,8 @@ export declare enum HostEvent {
|
|
|
5122
5208
|
* spotterEmbed.on(EmbedEvent.Data, (payload) => {
|
|
5123
5209
|
* latestSpotterVizId = payload.data.id;
|
|
5124
5210
|
* });
|
|
5125
|
-
|
|
5126
|
-
|
|
5211
|
+
*
|
|
5212
|
+
* spotterEmbed.trigger(HostEvent.AskSpotter, { vizId: latestSpotterVizId });
|
|
5127
5213
|
* ```
|
|
5128
5214
|
* @version SDK: 1.41.0 | ThoughtSpot: 10.12.0.cl
|
|
5129
5215
|
*/
|
|
@@ -5146,7 +5232,19 @@ export declare enum HostEvent {
|
|
|
5146
5232
|
* ```
|
|
5147
5233
|
* @version SDK: 1.41.0 | ThoughtSpot: 10.12.0.cl
|
|
5148
5234
|
*/
|
|
5149
|
-
DestroyEmbed = "EmbedDestroyed"
|
|
5235
|
+
DestroyEmbed = "EmbedDestroyed",
|
|
5236
|
+
/** Triggers a create new conversation operation in spotter embed.
|
|
5237
|
+
* @example
|
|
5238
|
+
* ```js
|
|
5239
|
+
* This feature is available only when chat history is enabled on your ThoughtSpot instance.
|
|
5240
|
+
* Contact your admin or ThoughtSpot Support to enable chat history on your instance.
|
|
5241
|
+
* @example
|
|
5242
|
+
* ```js
|
|
5243
|
+
* spotterEmbed.trigger(HostEvent.StartNewSpotterConversation);
|
|
5244
|
+
* ```
|
|
5245
|
+
* @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl
|
|
5246
|
+
*/
|
|
5247
|
+
StartNewSpotterConversation = "StartNewSpotterConversation"
|
|
5150
5248
|
}
|
|
5151
5249
|
/**
|
|
5152
5250
|
* The different visual modes that the data sources panel within
|
|
@@ -6665,14 +6763,77 @@ export interface DefaultAppInitData {
|
|
|
6665
6763
|
customVariablesForThirdPartyTools: Record<string, any>;
|
|
6666
6764
|
hiddenListColumns: ListPageColumns[];
|
|
6667
6765
|
customActions: CustomAction[];
|
|
6766
|
+
interceptTimeout: number | undefined;
|
|
6767
|
+
interceptUrls: (string | InterceptedApiType)[];
|
|
6768
|
+
}
|
|
6769
|
+
/**
|
|
6770
|
+
* Enum for the type of API intercepted
|
|
6771
|
+
*/
|
|
6772
|
+
export declare enum InterceptedApiType {
|
|
6773
|
+
/**
|
|
6774
|
+
* The apis that are use to get the data for the embed
|
|
6775
|
+
*/
|
|
6776
|
+
AnswerData = "AnswerData",
|
|
6777
|
+
/**
|
|
6778
|
+
* This will intercept all the apis
|
|
6779
|
+
*/
|
|
6780
|
+
ALL = "ALL",
|
|
6781
|
+
/**
|
|
6782
|
+
* The apis that are use to get the data for the liveboard
|
|
6783
|
+
*/
|
|
6784
|
+
LiveboardData = "LiveboardData"
|
|
6668
6785
|
}
|
|
6786
|
+
export type ApiInterceptFlags = {
|
|
6787
|
+
/**
|
|
6788
|
+
* Flag that allows using `EmbedEvent.OnBeforeGetVizDataIntercept`.
|
|
6789
|
+
*
|
|
6790
|
+
* Can be used for Serach and App Embed from SDK 1.29.0
|
|
6791
|
+
*
|
|
6792
|
+
* @version SDK : 1.43.0 | ThoughtSpot: 10.15.0.cl
|
|
6793
|
+
*/
|
|
6794
|
+
isOnBeforeGetVizDataInterceptEnabled?: boolean;
|
|
6795
|
+
/**
|
|
6796
|
+
* This allows to intercept the urls passed, once intercepted the api will only
|
|
6797
|
+
* run based on the reponse from the responder of ApiIntercept event.
|
|
6798
|
+
*
|
|
6799
|
+
* @example
|
|
6800
|
+
* ```js
|
|
6801
|
+
* const embed = new LiveboardEmbed('#embed', {
|
|
6802
|
+
* ...viewConfig,
|
|
6803
|
+
* enableApiIntercept: true,
|
|
6804
|
+
* interceptUrls: [InterceptedApiType.DATA],
|
|
6805
|
+
* })
|
|
6806
|
+
* ```
|
|
6807
|
+
*
|
|
6808
|
+
* @version SDK : 1.43.0 | ThoughtSpot: 10.15.0.cl
|
|
6809
|
+
*/
|
|
6810
|
+
interceptUrls?: (string | InterceptedApiType)[];
|
|
6811
|
+
/**
|
|
6812
|
+
* The timeout for the intercept, default is 30000ms
|
|
6813
|
+
* the api will error out if the timeout is reached
|
|
6814
|
+
*
|
|
6815
|
+
* @example
|
|
6816
|
+
* ```js
|
|
6817
|
+
* const embed = new LiveboardEmbed('#embed', {
|
|
6818
|
+
* ...viewConfig,
|
|
6819
|
+
* enableApiIntercept: true,
|
|
6820
|
+
* interceptUrls: [InterceptedApiType.ALL],
|
|
6821
|
+
* interceptTimeout: 1000,
|
|
6822
|
+
* })
|
|
6823
|
+
* ```
|
|
6824
|
+
*
|
|
6825
|
+
* @version SDK : 1.43.0 | ThoughtSpot: 10.15.0.cl
|
|
6826
|
+
*/
|
|
6827
|
+
interceptTimeout?: number;
|
|
6828
|
+
};
|
|
6669
6829
|
export declare enum UIPassthroughEvent {
|
|
6670
6830
|
PinAnswerToLiveboard = "addVizToPinboard",
|
|
6671
6831
|
SaveAnswer = "saveAnswer",
|
|
6672
6832
|
GetDiscoverabilityStatus = "getDiscoverabilityStatus",
|
|
6673
6833
|
GetAvailableUIPassthroughs = "getAvailableUiPassthroughs",
|
|
6674
6834
|
GetAnswerConfig = "getAnswerPageConfig",
|
|
6675
|
-
GetLiveboardConfig = "getPinboardPageConfig"
|
|
6835
|
+
GetLiveboardConfig = "getPinboardPageConfig",
|
|
6836
|
+
GetUnsavedAnswerTML = "getUnsavedAnswerTML"
|
|
6676
6837
|
}
|
|
6677
6838
|
export type UIPassthroughContractBase = {
|
|
6678
6839
|
[UIPassthroughEvent.PinAnswerToLiveboard]: {
|
|
@@ -6727,6 +6888,15 @@ export type UIPassthroughContractBase = {
|
|
|
6727
6888
|
request: any;
|
|
6728
6889
|
response: any;
|
|
6729
6890
|
};
|
|
6891
|
+
[UIPassthroughEvent.GetUnsavedAnswerTML]: {
|
|
6892
|
+
request: {
|
|
6893
|
+
sessionId?: string;
|
|
6894
|
+
vizId?: string;
|
|
6895
|
+
};
|
|
6896
|
+
response: {
|
|
6897
|
+
tml: string;
|
|
6898
|
+
};
|
|
6899
|
+
};
|
|
6730
6900
|
};
|
|
6731
6901
|
export type UIPassthroughRequest<T extends keyof UIPassthroughContractBase> = UIPassthroughContractBase[T]["request"];
|
|
6732
6902
|
export type UIPassthroughResponse<T extends keyof UIPassthroughContractBase> = UIPassthroughContractBase[T]["response"];
|
|
@@ -6882,6 +7052,8 @@ declare class TsEmbed {
|
|
|
6882
7052
|
* work regardless of auth status
|
|
6883
7053
|
*/
|
|
6884
7054
|
private subscribeToNetworkEvents;
|
|
7055
|
+
private handleApiInterceptEvent;
|
|
7056
|
+
private messageEventListener;
|
|
6885
7057
|
/**
|
|
6886
7058
|
* Subscribe to message events that depend on successful iframe setup
|
|
6887
7059
|
*/
|
|
@@ -6968,6 +7140,14 @@ declare class TsEmbed {
|
|
|
6968
7140
|
* @param height The height in pixels
|
|
6969
7141
|
*/
|
|
6970
7142
|
protected setIFrameHeight(height: number | string): void;
|
|
7143
|
+
/**
|
|
7144
|
+
* We can process the customer given payload before sending it to the embed port
|
|
7145
|
+
* Embed event handler -> responder -> createEmbedEventResponder -> send response
|
|
7146
|
+
* @param eventPort The event port for a specific MessageChannel
|
|
7147
|
+
* @param eventType The event type
|
|
7148
|
+
* @returns
|
|
7149
|
+
*/
|
|
7150
|
+
protected createEmbedEventResponder: (eventPort: MessagePort | void, eventType: EmbedEvent) => (payload: any) => void;
|
|
6971
7151
|
/**
|
|
6972
7152
|
* Executes all registered event handlers for a particular event type
|
|
6973
7153
|
* @param eventType The event type
|
|
@@ -7688,11 +7868,6 @@ export interface AppViewConfig extends AllEmbedViewConfig {
|
|
|
7688
7868
|
* ```
|
|
7689
7869
|
*/
|
|
7690
7870
|
dataPanelCustomGroupsAccordionInitialState?: DataPanelCustomColumnGroupsAccordionState;
|
|
7691
|
-
/**
|
|
7692
|
-
* Flag that allows using `EmbedEvent.OnBeforeGetVizDataIntercept`.
|
|
7693
|
-
* @version SDK : 1.29.0 | ThoughtSpot: 10.1.0.cl
|
|
7694
|
-
*/
|
|
7695
|
-
isOnBeforeGetVizDataInterceptEnabled?: boolean;
|
|
7696
7871
|
/**
|
|
7697
7872
|
* Flag to use home page search bar mode
|
|
7698
7873
|
*
|
|
@@ -8781,13 +8956,6 @@ export interface SearchViewConfig extends SearchLiveboardCommonViewConfig, Omit<
|
|
|
8781
8956
|
* @deprecated Use {@link collapseSearchBar} instead
|
|
8782
8957
|
*/
|
|
8783
8958
|
collapseSearchBarInitially?: boolean;
|
|
8784
|
-
/**
|
|
8785
|
-
* Flag to enable onBeforeSearchExecute Embed Event
|
|
8786
|
-
*
|
|
8787
|
-
* Supported embed types: `SearchEmbed`
|
|
8788
|
-
* @version: SDK: 1.29.0 | ThoughtSpot: 10.1.0.cl
|
|
8789
|
-
*/
|
|
8790
|
-
isOnBeforeGetVizDataInterceptEnabled?: boolean;
|
|
8791
8959
|
/**
|
|
8792
8960
|
* This controls the initial behaviour of custom column groups accordion.
|
|
8793
8961
|
* It takes DataPanelCustomColumnGroupsAccordionState enum values as input.
|
|
@@ -9149,7 +9317,7 @@ export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, "primaryAct
|
|
|
9149
9317
|
*
|
|
9150
9318
|
* Supported embed types: `SageEmbed`, `AppEmbed`, `SearchBarEmbed`, `LiveboardEmbed`, `SearchEmbed`
|
|
9151
9319
|
* @default true
|
|
9152
|
-
* @version SDK: 1.
|
|
9320
|
+
* @version SDK: 1.41.1 | ThoughtSpot Cloud: 10.14.0.cl
|
|
9153
9321
|
* @example
|
|
9154
9322
|
* ```js
|
|
9155
9323
|
* // Replace <EmbedComponent> with embed component name. For example, SageEmbed, AppEmbed, or SearchBarEmbed
|
|
@@ -9264,7 +9432,7 @@ export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, "primaryAct
|
|
|
9264
9432
|
* enablePastConversationsSidebar : true,
|
|
9265
9433
|
* })
|
|
9266
9434
|
* ```
|
|
9267
|
-
* @version SDK: 1.
|
|
9435
|
+
* @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl
|
|
9268
9436
|
*/
|
|
9269
9437
|
enablePastConversationsSidebar?: boolean;
|
|
9270
9438
|
}
|
package/lib/package.json
CHANGED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { BaseViewConfig, ApiInterceptFlags, EmbedEvent } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Returns the data to be sent to embed to setup intercepts
|
|
4
|
+
* the urls to intercept, timeout etc
|
|
5
|
+
* @param viewConfig
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
export declare const getInterceptInitData: (viewConfig: BaseViewConfig) => Required<Omit<ApiInterceptFlags, 'isOnBeforeGetVizDataInterceptEnabled'>>;
|
|
9
|
+
/**
|
|
10
|
+
* Handle Api intercept event and simulate legacy onBeforeGetVizDataIntercept event
|
|
11
|
+
*
|
|
12
|
+
* embed sends -> ApiIntercept -> we send
|
|
13
|
+
* ApiIntercept
|
|
14
|
+
* OnBeforeGetVizDataIntercept (if url is part of DefaultUrlMap.AnswerData)
|
|
15
|
+
*
|
|
16
|
+
* @param params
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
export declare const handleInterceptEvent: (params: {
|
|
20
|
+
eventData: any;
|
|
21
|
+
executeEvent: (eventType: EmbedEvent, data: any) => void;
|
|
22
|
+
viewConfig: BaseViewConfig;
|
|
23
|
+
getUnsavedAnswerTml: (props: {
|
|
24
|
+
sessionId?: string;
|
|
25
|
+
vizId?: string;
|
|
26
|
+
}) => Promise<{
|
|
27
|
+
tml: string;
|
|
28
|
+
}>;
|
|
29
|
+
}) => Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Support both the legacy and new format of the api intercept response
|
|
32
|
+
* @param payload
|
|
33
|
+
* @returns
|
|
34
|
+
*/
|
|
35
|
+
export declare const processApiInterceptResponse: (payload: any) => any;
|
|
36
|
+
export declare const processLegacyInterceptResponse: (payload: any) => {
|
|
37
|
+
data: {
|
|
38
|
+
execute: any;
|
|
39
|
+
response: {
|
|
40
|
+
body: {
|
|
41
|
+
errors: {
|
|
42
|
+
title: any;
|
|
43
|
+
description: any;
|
|
44
|
+
isUserError: boolean;
|
|
45
|
+
}[];
|
|
46
|
+
data: {};
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=api-intercept.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-intercept.d.ts","sourceRoot":"","sources":["../../src/api-intercept.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,cAAc,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAwC5F;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,eAAgB,cAAc,KAAG,SAAS,KAAK,iBAAiB,EAAE,sCAAsC,CAAC,CAgBzI,CAAA;AA6CD;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB;eAClB,GAAG;8BACY,UAAU,QAAQ,GAAG,KAAK,IAAI;gBAC5C,cAAc;iCACG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,QAAQ;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;mBAwCnG,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,YAAa,GAAG,QAQvD,CAAA;AAED,eAAO,MAAM,8BAA8B,YAAa,GAAG;;;;;;;;;;;;;;CAuB1D,CAAA"}
|