@veltdev/sdk-staging 6.0.0-beta.12 → 6.0.0-beta.14
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/app/models/data/comment-events.data.model.d.ts +10 -0
- package/app/models/data/config.data.model.d.ts +38 -5
- package/app/utils/enums.d.ts +2 -1
- package/{chunk-FLGROJQW.js → chunk-3SSYKYWZ.js} +1 -1
- package/{chunk-S4SWAWDX.js → chunk-4GMUG663.js} +1 -1
- package/{chunk-BCSVTVMJ.js → chunk-4OWPT3CE.js} +23 -23
- package/{chunk-45CK3G4S.js → chunk-6CVOFFRP.js} +1 -1
- package/{chunk-HEIW3Q3Z.js → chunk-6UPUS5OH.js} +1 -1
- package/{chunk-DEGPUOWQ.js → chunk-7DAUQBJ5.js} +1 -1
- package/{chunk-ZZK5UGYN.js → chunk-7FDZMGEA.js} +1 -1
- package/{chunk-TJFCTUCM.js → chunk-ASE5VHUA.js} +1 -1
- package/{chunk-6RA26UDR.js → chunk-CJ4GB6K2.js} +1 -1
- package/{chunk-TNSFEAOB.js → chunk-CYULFUBJ.js} +1 -1
- package/{chunk-6WCUWRDH.js → chunk-D5P67MVN.js} +1 -1
- package/{chunk-KBKI4VKD.js → chunk-FBCDPZAU.js} +1 -1
- package/{chunk-NVZIS23N.js → chunk-GKWFN6D4.js} +1 -1
- package/{chunk-2JYR3ESH.js → chunk-H4H3WXRC.js} +1 -1
- package/{chunk-G4N6XTDS.js → chunk-H5KWWNVS.js} +1 -1
- package/{chunk-ATB2ZI7G.js → chunk-HA7COVSE.js} +1 -1
- package/{chunk-6LUTL3DR.js → chunk-I7VZK22N.js} +1 -1
- package/{chunk-NBO7Z72Y.js → chunk-JCMXKZW2.js} +1 -1
- package/{chunk-63NMA3AQ.js → chunk-JPNC3VTW.js} +1 -1
- package/{chunk-BSYABMZE.js → chunk-JR3HU63M.js} +1 -1
- package/{chunk-UQ2QOHQZ.js → chunk-KALDBMMX.js} +1 -1
- package/{chunk-6ILQARGU.js → chunk-PCZIAYDG.js} +1 -1
- package/{chunk-SLIE6W2D.js → chunk-Q5RVBH6T.js} +1 -1
- package/{chunk-A6QXRF3G.js → chunk-Q77U3H4H.js} +1 -1
- package/{chunk-GW63A52V.js → chunk-QDOMVL7R.js} +1 -1
- package/{chunk-KAYQA4GH.js → chunk-TDONHVGM.js} +1 -1
- package/{chunk-HZBOX5Z7.js → chunk-VQVPY4M7.js} +1 -1
- package/{chunk-CECXGS4N.js → chunk-VTBZSSY7.js} +1 -1
- package/{chunk-IE6GR57U.js → chunk-YPBICSKH.js} +1 -1
- package/{chunk-WXTTF7HW.js → chunk-YQBCEVVX.js} +1 -1
- package/{chunk-HRHOJT33.js → chunk-Z4DHUMQC.js} +1 -1
- package/{chunk-DAHES7KJ.js → chunk-ZBW2QK42.js} +1 -1
- package/{chunk-Z54SH2OU.js → chunk-ZWHBB6OO.js} +1 -1
- package/package.json +1 -1
- package/velt-activity-log.js +1 -1
- package/velt-area.js +1 -1
- package/velt-arrow.js +1 -1
- package/velt-comment.js +6 -6
- package/velt-crdt.js +1 -1
- package/velt-cursor.js +1 -1
- package/velt-huddle.js +1 -1
- package/velt-live-state-sync.js +1 -1
- package/velt-notification.js +1 -1
- package/velt-presence.js +1 -1
- package/velt-reaction.js +1 -1
- package/velt-recorder.js +1 -1
- package/velt-rewriter.js +1 -1
- package/velt-selection.js +1 -1
- package/velt-tag.js +1 -1
- package/velt-user-invite.js +1 -1
- package/velt-user-request.js +1 -1
- package/velt-video-player.js +1 -1
- package/velt-views.js +1 -1
- package/velt.js +2 -2
|
@@ -91,6 +91,7 @@ export type CommentEventTypesMap = {
|
|
|
91
91
|
[CommentEventTypes.SIDEBAR_BUTTON_CLICKED]: SidebarButtonClickedEvent;
|
|
92
92
|
[CommentEventTypes.SIDEBAR_OPEN]: SidebarOpenEvent;
|
|
93
93
|
[CommentEventTypes.SIDEBAR_CLOSE]: SidebarCloseEvent;
|
|
94
|
+
[CommentEventTypes.FULLSCREEN_CLICK]: FullscreenClickEvent;
|
|
94
95
|
[CommentEventTypes.COMMENT_CLICK]: CommentClickEvent;
|
|
95
96
|
[CommentEventTypes.COMMENT_NAVIGATION_BUTTON_CLICK]: CommentNavigationButtonClickEvent;
|
|
96
97
|
[CommentEventTypes.ATTACHMENT_DOWNLOAD_CLICKED]: AttachmentDownloadClickedEvent;
|
|
@@ -359,6 +360,15 @@ export interface SidebarOpenEvent {
|
|
|
359
360
|
export interface SidebarCloseEvent {
|
|
360
361
|
metadata?: VeltEventMetadata;
|
|
361
362
|
}
|
|
363
|
+
/**
|
|
364
|
+
* Fired when the sidebar fullscreen toggle is clicked. Subscribe via
|
|
365
|
+
* `commentElement.on('fullscreenClick')`. `fullScreen` is the NEW state after the toggle.
|
|
366
|
+
* (Also surfaced as the `onFullscreenClick` @Output on the sidebar component.)
|
|
367
|
+
*/
|
|
368
|
+
export interface FullscreenClickEvent {
|
|
369
|
+
fullScreen: boolean;
|
|
370
|
+
metadata?: VeltEventMetadata;
|
|
371
|
+
}
|
|
362
372
|
/** Fired when a comment is clicked in the sidebar list. Subscribe via `commentElement.on('commentClick')`. */
|
|
363
373
|
export interface CommentClickEvent {
|
|
364
374
|
documentId?: string | null;
|
|
@@ -80,12 +80,21 @@ export declare class Config {
|
|
|
80
80
|
/**
|
|
81
81
|
* VENDORED from the backend deployment-profile manifest — source of truth:
|
|
82
82
|
* `shared-firebase-function` repo, `functions/src/deployment-profiles/modules.manifest.ts`
|
|
83
|
-
* (`DeploymentModuleId`,
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
83
|
+
* (`DeploymentModuleId`, 12 modules; backend plan §8.3; restructured 2026-07-10 in backend
|
|
84
|
+
* iteration-10, owner-directed). Do NOT add, remove, or rename ids here without a matching
|
|
85
|
+
* manifest change — the endpoint→module map in `endpoints.service.ts` and its cross-repo
|
|
86
|
+
* drift-fence test key off this list.
|
|
87
|
+
*
|
|
88
|
+
* 2026-07-10 restructure summary:
|
|
89
|
+
* - DELETED (absorbed into `core`): `notifications`, `analytics-telemetry`, `console`.
|
|
90
|
+
* The agents RUNTIME also moved to `core` (`agents` keeps only the approval engine).
|
|
91
|
+
* - NEW `rest-api`: the customer-facing REST CFs (`commentsapibe`, `documentsapibe`, …),
|
|
92
|
+
* now opt-in (hardDep `core`). None of the SDK's own runtime endpoints live there.
|
|
93
|
+
* - NEW `legacy-v1`: the ~55 standalone V1 REST CFs — EXCLUDED, never provisioned on any
|
|
94
|
+
* self-hosted profile, so this id never appears in a valid `deploymentProfile`.
|
|
95
|
+
* - `core` is the SOLE mandatory module.
|
|
87
96
|
*/
|
|
88
|
-
export declare const DEPLOYMENT_MODULE_IDS: readonly ["core", "
|
|
97
|
+
export declare const DEPLOYMENT_MODULE_IDS: readonly ["core", "rest-api", "recorder-media", "ai", "agents", "huddle-webrtc", "integrations-workflow", "superflow", "billing-stripe", "migrations", "legacy-v1", "velt-internal"];
|
|
89
98
|
/** A backend feature-module id (see {@link DEPLOYMENT_MODULE_IDS} for provenance). */
|
|
90
99
|
export type DeploymentModuleId = typeof DEPLOYMENT_MODULE_IDS[number];
|
|
91
100
|
/**
|
|
@@ -187,6 +196,30 @@ export interface SelfHostedConfig {
|
|
|
187
196
|
* — they are excluded from the strict-mode core-misconfiguration report).
|
|
188
197
|
*/
|
|
189
198
|
deploymentProfile?: DeploymentModuleId[];
|
|
199
|
+
/**
|
|
200
|
+
* The `dataRegions` field of the `velt-deployment-profile.json` v1 document (additive
|
|
201
|
+
* 2026-07-10, GTK-005-safe): which regional `setencrypteddata*` variants the deployment
|
|
202
|
+
* provisioned. Inlined by the customer's tooling alongside {@link deploymentProfile}.
|
|
203
|
+
*
|
|
204
|
+
* - `undefined` / `null` — no region filter (all regional variants provisioned; the
|
|
205
|
+
* SaaS shape). `null` and `[]` are DIFFERENT fleets — never coalesce them.
|
|
206
|
+
* - `[]` — ONLY the base `setencrypteddata` (in the deployment's own region) exists.
|
|
207
|
+
* - `['europe-west1', …]` — the base plus the variants for exactly those GCP regions
|
|
208
|
+
* (known: `europe-west1`, `asia-southeast1`, `australia-southeast1`,
|
|
209
|
+
* `asia-northeast1`).
|
|
210
|
+
*
|
|
211
|
+
* The SDK uses this as a pre-call provisioning check in
|
|
212
|
+
* `EndpointsService.getSetEncryptedDataUrl`: a tenant routed to an UNPROVISIONED
|
|
213
|
+
* regional variant degrades to the base `setEncryptedData` resolution instead of
|
|
214
|
+
* calling a URL that would 404.
|
|
215
|
+
*
|
|
216
|
+
* The filter is AUTHORITATIVE over injected per-region URLs (mirroring how a
|
|
217
|
+
* `deploymentProfile` opt-out wins over an injected endpoint URL): an injected
|
|
218
|
+
* `cloudFunction.regions[X]` override for a region excluded by `dataRegions` is
|
|
219
|
+
* never consulted — the write resolves through the base slot. Don't inject overrides
|
|
220
|
+
* for regions the deployment did not provision.
|
|
221
|
+
*/
|
|
222
|
+
dataRegions?: string[] | null;
|
|
190
223
|
}
|
|
191
224
|
export interface ProxyConfig {
|
|
192
225
|
/** Custom host for the Velt CDN (e.g., 'cdn-proxy.customer.com') */
|
package/app/utils/enums.d.ts
CHANGED
|
@@ -100,6 +100,7 @@ export declare const CommentEventTypes: {
|
|
|
100
100
|
readonly SIDEBAR_BUTTON_CLICKED: "sidebarButtonClicked";
|
|
101
101
|
readonly SIDEBAR_OPEN: "sidebarOpen";
|
|
102
102
|
readonly SIDEBAR_CLOSE: "sidebarClose";
|
|
103
|
+
readonly FULLSCREEN_CLICK: "fullscreenClick";
|
|
103
104
|
readonly COMMENT_CLICK: "commentClick";
|
|
104
105
|
readonly COMMENT_NAVIGATION_BUTTON_CLICK: "commentNavigationButtonClick";
|
|
105
106
|
readonly ATTACHMENT_DOWNLOAD_CLICKED: "attachmentDownloadClicked";
|
|
@@ -332,7 +333,7 @@ export type RecorderType = 'audio' | 'video' | 'screen';
|
|
|
332
333
|
export type RecorderFileFormat = 'mp3' | 'mp4' | 'webm';
|
|
333
334
|
export type RecorderLayoutMode = 'floating' | 'thread';
|
|
334
335
|
export type SupportedMimeType = 'audio' | 'video';
|
|
335
|
-
export type FirebaseRegion = 'usCentral1' | 'asiaSouthEast1' | 'europeWest1' | 'australiaSouthEast1';
|
|
336
|
+
export type FirebaseRegion = 'usCentral1' | 'asiaSouthEast1' | 'europeWest1' | 'australiaSouthEast1' | 'asiaNorthEast1';
|
|
336
337
|
export type VideoEventType = 'play' | 'pause' | 'ratechange' | 'seeked' | 'timeupdate' | 'volumechange';
|
|
337
338
|
export type RewriterType = 'copywriter' | 'generic';
|
|
338
339
|
export type RecorderStatusType = 'started' | 'paused' | 'resumed' | 'stopped' | 'error' | null;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as F,R as b,S as f,T as H,U as j,V as N,u as R,v as E,w as O,x as I}from"./chunk-
|
|
1
|
+
import{C as F,R as b,S as f,T as H,U as j,V as N,u as R,v as E,w as O,x as I}from"./chunk-GKWFN6D4.js";import{$ as y,D as v,E as l,Ga as k,J as h,Kb as A,Sd as L,Td as s,Ua as C,Va as B,Ya as w,_a as M,a as c,aa as S,b as _,ba as p,da as r,db as D,k as g,la as x,xb as T}from"./chunk-4OWPT3CE.js";function X(i,m){}var z="_mat-bottom-sheet-enter",P="_mat-bottom-sheet-exit",G=(()=>{class i extends H{_breakpointSubscription;_animationsDisabled=b();_animationState="void";_animationStateChanged=new k;_destroyed;constructor(){super();let e=r(L);this._breakpointSubscription=e.observe([s.Medium,s.Large,s.XLarge]).subscribe(()=>{let o=this._elementRef.nativeElement.classList;o.toggle("mat-bottom-sheet-container-medium",e.isMatched(s.Medium)),o.toggle("mat-bottom-sheet-container-large",e.isMatched(s.Large)),o.toggle("mat-bottom-sheet-container-xlarge",e.isMatched(s.XLarge))})}enter(){this._destroyed||(this._animationState="visible",this._changeDetectorRef.markForCheck(),this._changeDetectorRef.detectChanges(),this._animationsDisabled&&this._simulateAnimation(z))}exit(){this._destroyed||(this._elementRef.nativeElement.setAttribute("mat-exit",""),this._animationState="hidden",this._changeDetectorRef.markForCheck(),this._animationsDisabled&&this._simulateAnimation(P))}ngOnDestroy(){super.ngOnDestroy(),this._breakpointSubscription.unsubscribe(),this._destroyed=!0}_simulateAnimation(e){this._ngZone.run(()=>{this._handleAnimationEvent(!0,e),setTimeout(()=>this._handleAnimationEvent(!1,e))})}_trapFocus(){super._trapFocus({preventScroll:!0})}_handleAnimationEvent(e,o){let t=o===z;(t||o===P)&&this._animationStateChanged.emit({toState:t?"visible":"hidden",phase:e?"start":"done"})}static \u0275fac=function(o){return new(o||i)};static \u0275cmp=C({type:i,selectors:[["mat-bottom-sheet-container"]],hostAttrs:["tabindex","-1",1,"mat-bottom-sheet-container"],hostVars:9,hostBindings:function(o,t){o&1&&T("animationstart",function(a){return t._handleAnimationEvent(!0,a.animationName)})("animationend",function(a){return t._handleAnimationEvent(!1,a.animationName)})("animationcancel",function(a){return t._handleAnimationEvent(!1,a.animationName)}),o&2&&(D("role",t._config.role)("aria-modal",t._config.ariaModal)("aria-label",t._config.ariaLabel),A("mat-bottom-sheet-container-animations-enabled",!t._animationsDisabled)("mat-bottom-sheet-container-enter",t._animationState==="visible")("mat-bottom-sheet-container-exit",t._animationState==="hidden"))},features:[w],decls:1,vars:0,consts:[["cdkPortalOutlet",""]],template:function(o,t){o&1&&M(0,X,0,0,"ng-template",0)},dependencies:[R],styles:[`@keyframes _mat-bottom-sheet-enter{from{transform:translateY(100%)}to{transform:none}}@keyframes _mat-bottom-sheet-exit{from{transform:none}to{transform:translateY(100%)}}.mat-bottom-sheet-container{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);padding:8px 16px;min-width:100vw;box-sizing:border-box;display:block;outline:0;max-height:80vh;overflow:auto;position:relative;background:var(--mat-bottom-sheet-container-background-color, var(--mat-sys-surface-container-low));color:var(--mat-bottom-sheet-container-text-color, var(--mat-sys-on-surface));font-family:var(--mat-bottom-sheet-container-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-bottom-sheet-container-text-size, var(--mat-sys-body-large-size));line-height:var(--mat-bottom-sheet-container-text-line-height, var(--mat-sys-body-large-line-height));font-weight:var(--mat-bottom-sheet-container-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-bottom-sheet-container-text-tracking, var(--mat-sys-body-large-tracking))}@media(forced-colors: active){.mat-bottom-sheet-container{outline:1px solid}}.mat-bottom-sheet-container-animations-enabled{transform:translateY(100%)}.mat-bottom-sheet-container-animations-enabled.mat-bottom-sheet-container-enter{animation:_mat-bottom-sheet-enter 195ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-bottom-sheet-container-animations-enabled.mat-bottom-sheet-container-exit{animation:_mat-bottom-sheet-exit 375ms cubic-bezier(0.4, 0, 1, 1) backwards}.mat-bottom-sheet-container-xlarge,.mat-bottom-sheet-container-large,.mat-bottom-sheet-container-medium{border-top-left-radius:var(--mat-bottom-sheet-container-shape, 28px);border-top-right-radius:var(--mat-bottom-sheet-container-shape, 28px)}.mat-bottom-sheet-container-medium{min-width:384px;max-width:calc(100vw - 128px)}.mat-bottom-sheet-container-large{min-width:512px;max-width:calc(100vw - 256px)}.mat-bottom-sheet-container-xlarge{min-width:576px;max-width:calc(100vw - 384px)}
|
|
2
2
|
`],encapsulation:2})}return i})(),K=new p("MatBottomSheetData"),u=class{viewContainerRef;panelClass;direction;data=null;hasBackdrop=!0;backdropClass;disableClose=!1;ariaLabel=null;ariaModal=!1;closeOnNavigation=!0;autoFocus="first-tabbable";restoreFocus=!0;scrollStrategy;height="";minHeight;maxHeight},d=class{_ref;get instance(){return this._ref.componentInstance}get componentRef(){return this._ref.componentRef}containerInstance;disableClose;_afterOpened=new g;_result;_closeFallbackTimeout;constructor(m,e,o){this._ref=m,this.containerInstance=o,this.disableClose=e.disableClose,o._animationStateChanged.pipe(l(t=>t.phase==="done"&&t.toState==="visible"),h(1)).subscribe(()=>{this._afterOpened.next(),this._afterOpened.complete()}),o._animationStateChanged.pipe(l(t=>t.phase==="done"&&t.toState==="hidden"),h(1)).subscribe(()=>{clearTimeout(this._closeFallbackTimeout),this._ref.close(this._result)}),m.overlayRef.detachments().subscribe(()=>{this._ref.close(this._result)}),v(this.backdropClick(),this.keydownEvents().pipe(l(t=>t.keyCode===27))).subscribe(t=>{!this.disableClose&&(t.type!=="keydown"||!O(t))&&(t.preventDefault(),this.dismiss())})}dismiss(m){this.containerInstance&&(this.containerInstance._animationStateChanged.pipe(l(e=>e.phase==="start"),h(1)).subscribe(()=>{this._closeFallbackTimeout=setTimeout(()=>this._ref.close(this._result),500),this._ref.overlayRef.detachBackdrop()}),this._result=m,this.containerInstance.exit(),this.containerInstance=null)}afterDismissed(){return this._ref.closed}afterOpened(){return this._afterOpened}backdropClick(){return this._ref.backdropClick}keydownEvents(){return this._ref.keydownEvents}},U=new p("mat-bottom-sheet-default-options"),W=(()=>{class i{_injector=r(x);_parentBottomSheet=r(i,{optional:!0,skipSelf:!0});_animationsDisabled=b();_defaultOptions=r(U,{optional:!0});_bottomSheetRefAtThisLevel=null;_dialog=r(j);get _openedBottomSheetRef(){let e=this._parentBottomSheet;return e?e._openedBottomSheetRef:this._bottomSheetRefAtThisLevel}set _openedBottomSheetRef(e){this._parentBottomSheet?this._parentBottomSheet._openedBottomSheetRef=e:this._bottomSheetRefAtThisLevel=e}constructor(){}open(e,o){let t=c(c({},this._defaultOptions||new u),o),n;return this._dialog.open(e,_(c({},t),{disableClose:!0,closeOnOverlayDetachments:!1,maxWidth:"100%",container:G,scrollStrategy:t.scrollStrategy||I(this._injector),positionStrategy:F(this._injector).centerHorizontally().bottom("0"),disableAnimations:this._animationsDisabled,templateContext:()=>({bottomSheetRef:n}),providers:(a,Z,Y)=>(n=new d(a,t,Y),[{provide:d,useValue:n},{provide:K,useValue:t.data}])})),n.afterDismissed().subscribe(()=>{this._openedBottomSheetRef===n&&(this._openedBottomSheetRef=null)}),this._openedBottomSheetRef?(this._openedBottomSheetRef.afterDismissed().subscribe(()=>n.containerInstance?.enter()),this._openedBottomSheetRef.dismiss()):n.containerInstance.enter(),this._openedBottomSheetRef=n,n}dismiss(e){this._openedBottomSheetRef&&this._openedBottomSheetRef.dismiss(e)}ngOnDestroy(){this._bottomSheetRefAtThisLevel&&this._bottomSheetRefAtThisLevel.dismiss()}static \u0275fac=function(o){return new(o||i)};static \u0275prov=y({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})(),dt=(()=>{class i{static \u0275fac=function(o){return new(o||i)};static \u0275mod=B({type:i});static \u0275inj=S({providers:[W],imports:[N,f,E,f]})}return i})();export{K as a,d as b,W as c,dt as d};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as Y}from"./chunk-
|
|
1
|
+
import{b as Y}from"./chunk-H5KWWNVS.js";import{$ as j,Bf as D,C as A,E as g,Fi as _,Gi as x,Hi as Q,Id as w,Kd as y,L as S,Ld as U,M as B,Md as O,S as F,T as H,W as E,ca as b,ci as W,di as L,g as $,ih as P,ki as R,l as C,li as M,p as k,r as u,si as N,v as m,w as z,xi as K}from"./chunk-4OWPT3CE.js";var he=(()=>{let p=class p{constructor(e,t,r,a,s,c,n,i,d,o){this.authService=e,this.commonDbService=t,this.databaseService=r,this.docService=a,this.domService=s,this.loggingService=c,this.metadataService=n,this.commonDbUtils=i,this.configService=d,this.realtimeAdapter=o,this.HEARTBEAT_DURATION=5*1e3,this.heartbeatEnabled$=new C(!1),this.subscriptions=[],this.heartbeatCreatedTimestamps=new Map,this.initializedHeartbeatIds=new Set;try{this.loggingService.log("%c[WB] Creating CLASS: HeartbeatService","color: blue;"),this.heartbeatEnabled$.pipe(S()).subscribe(h=>{h?this.setupHeartbeat():this.teardownHeartbeat()}),this.docService.addPreDocumentIdChangeFunction("heartbeat-service",h=>h?.documentId?this.removeDocumentHeartbeat(h):Promise.resolve())}catch(h){this.loggingService.catch("Error in HeartbeatService constructor: ",h)}}setupWebWorker(e){try{let t=`
|
|
2
2
|
let intervalId;
|
|
3
3
|
self.addEventListener('message', (event) => {
|
|
4
4
|
if (event.data === 'start') {
|