11import { type Cloud , type Serialized } from '@rocket.chat/core-typings' ;
22import { Settings } from '@rocket.chat/models' ;
33import { serverFetch as fetch } from '@rocket.chat/server-fetch' ;
4- import { v , compile } from 'suretype ' ;
4+ import { z } from 'zod ' ;
55
66import { CloudWorkspaceConnectionError } from '../../../../../lib/errors/CloudWorkspaceConnectionError' ;
77import { CloudWorkspaceRegistrationError } from '../../../../../lib/errors/CloudWorkspaceRegistrationError' ;
@@ -14,76 +14,72 @@ import { getWorkspaceLicense } from '../getWorkspaceLicense';
1414import { retrieveRegistrationStatus } from '../retrieveRegistrationStatus' ;
1515import { handleBannerOnWorkspaceSync , handleNpsOnWorkspaceSync } from './handleCommsSync' ;
1616
17- const workspaceClientPayloadSchema = v . object ( {
18- workspaceId : v . string ( ) . required ( ) ,
19- publicKey : v . string ( ) ,
20- trial : v . object ( {
21- trialing : v . boolean ( ) . required ( ) ,
22- trialID : v . string ( ) . required ( ) ,
23- endDate : v . string ( ) . format ( 'date-time' ) . required ( ) ,
24- marketing : v
25- . object ( {
26- utmContent : v . string ( ) . required ( ) ,
27- utmMedium : v . string ( ) . required ( ) ,
28- utmSource : v . string ( ) . required ( ) ,
29- utmCampaign : v . string ( ) . required ( ) ,
30- } )
31- . required ( ) ,
32- DowngradesToPlan : v
33- . object ( {
34- id : v . string ( ) . required ( ) ,
35- } )
36- . required ( ) ,
37- trialRequested : v . boolean ( ) . required ( ) ,
38- } ) ,
39- nps : v . object ( {
40- id : v . string ( ) . required ( ) ,
41- startAt : v . string ( ) . format ( 'date-time' ) . required ( ) ,
42- expireAt : v . string ( ) . format ( 'date-time' ) . required ( ) ,
17+ const workspaceClientPayloadSchema = z . object ( {
18+ workspaceId : z . string ( ) ,
19+ publicKey : z . string ( ) . optional ( ) ,
20+ trial : z
21+ . object ( {
22+ trialing : z . boolean ( ) ,
23+ trialID : z . string ( ) ,
24+ endDate : z . string ( ) . datetime ( ) ,
25+ marketing : z . object ( {
26+ utmContent : z . string ( ) ,
27+ utmMedium : z . string ( ) ,
28+ utmSource : z . string ( ) ,
29+ utmCampaign : z . string ( ) ,
30+ } ) ,
31+ DowngradesToPlan : z . object ( {
32+ id : z . string ( ) ,
33+ } ) ,
34+ trialRequested : z . boolean ( ) ,
35+ } )
36+ . optional ( ) ,
37+ nps : z . object ( {
38+ id : z . string ( ) ,
39+ startAt : z . string ( ) . datetime ( ) ,
40+ expireAt : z . string ( ) . datetime ( ) ,
4341 } ) ,
44- banners : v . array (
45- v . object ( {
46- _id : v . string ( ) . required ( ) ,
47- _updatedAt : v . string ( ) . format ( 'date-time' ) . required ( ) ,
48- platform : v . array ( v . string ( ) ) . required ( ) ,
49- expireAt : v . string ( ) . format ( 'date-time' ) . required ( ) ,
50- startAt : v . string ( ) . format ( 'date-time' ) . required ( ) ,
51- roles : v . array ( v . string ( ) ) ,
52- createdBy : v . object ( {
53- _id : v . string ( ) . required ( ) ,
54- username : v . string ( ) ,
42+ banners : z . array (
43+ z . object ( {
44+ _id : z . string ( ) ,
45+ _updatedAt : z . string ( ) . datetime ( ) ,
46+ platform : z . array ( z . string ( ) ) ,
47+ expireAt : z . string ( ) . datetime ( ) ,
48+ startAt : z . string ( ) . datetime ( ) ,
49+ roles : z . array ( z . string ( ) ) . optional ( ) ,
50+ createdBy : z . object ( {
51+ _id : z . string ( ) ,
52+ username : z . string ( ) . optional ( ) ,
5553 } ) ,
56- createdAt : v . string ( ) . format ( 'date-time' ) . required ( ) ,
57- view : v . any ( ) ,
58- active : v . boolean ( ) ,
59- inactivedAt : v . string ( ) . format ( 'date-time' ) ,
60- snapshot : v . string ( ) ,
54+ createdAt : z . string ( ) . datetime ( ) ,
55+ view : z . any ( ) ,
56+ active : z . boolean ( ) . optional ( ) ,
57+ inactivedAt : z . string ( ) . datetime ( ) . optional ( ) ,
58+ snapshot : z . string ( ) . optional ( ) ,
6159 } ) ,
6260 ) ,
63- announcements : v . object ( {
64- create : v . array (
65- v . object ( {
66- _id : v . string ( ) . required ( ) ,
67- _updatedAt : v . string ( ) . format ( 'date-time' ) . required ( ) ,
68- selector : v . object ( {
69- roles : v . array ( v . string ( ) ) ,
61+ announcements : z . object ( {
62+ create : z . array (
63+ z . object ( {
64+ _id : z . string ( ) ,
65+ _updatedAt : z . string ( ) . datetime ( ) ,
66+ selector : z . object ( {
67+ roles : z . array ( z . string ( ) ) ,
7068 } ) ,
71- platform : v . array ( v . string ( ) . enum ( 'web' , 'mobile' ) ) . required ( ) ,
72- expireAt : v . string ( ) . format ( 'date-time' ) . required ( ) ,
73- startAt : v . string ( ) . format ( 'date-time' ) . required ( ) ,
74- createdBy : v . string ( ) . enum ( 'cloud' , 'system' ) . required ( ) ,
75- createdAt : v . string ( ) . format ( 'date-time' ) . required ( ) ,
76- dictionary : v . object ( { } ) . additional ( v . object ( { } ) . additional ( v . string ( ) ) ) ,
77- view : v . any ( ) ,
78- surface : v . string ( ) . enum ( 'banner' , 'modal' ) . required ( ) ,
69+ platform : z . array ( z . enum ( [ 'web' , 'mobile' ] ) ) ,
70+ expireAt : z . string ( ) . datetime ( ) ,
71+ startAt : z . string ( ) . datetime ( ) ,
72+ createdBy : z . enum ( [ 'cloud' , 'system' ] ) ,
73+ createdAt : z . string ( ) . datetime ( ) ,
74+ dictionary : z . record ( z . record ( z . string ( ) ) ) ,
75+ view : z . any ( ) ,
76+ surface : z . enum ( [ 'banner' , 'modal' ] ) ,
7977 } ) ,
8078 ) ,
81- delete : v . array ( v . string ( ) ) ,
79+ delete : z . array ( z . string ( ) ) ,
8280 } ) ,
8381} ) ;
8482
85- const assertWorkspaceClientPayload = compile ( workspaceClientPayloadSchema ) ;
86-
8783/** @deprecated */
8884const fetchWorkspaceClientPayload = async ( {
8985 token,
@@ -117,7 +113,9 @@ const fetchWorkspaceClientPayload = async ({
117113 return undefined ;
118114 }
119115
120- if ( ! assertWorkspaceClientPayload ( payload ) ) {
116+ const assertWorkspaceClientPayload = workspaceClientPayloadSchema . safeParse ( payload ) ;
117+
118+ if ( ! assertWorkspaceClientPayload . success ) {
121119 throw new CloudWorkspaceConnectionError ( 'Invalid response from Rocket.Chat Cloud' ) ;
122120 }
123121
0 commit comments