@@ -101,5 +101,127 @@ describe('normalizeContextMetadata', () => {
101101 expect ( result . sessionType ) . toBe ( 'local' ) ;
102102 expect ( result . collaboration ) . toBeUndefined ( ) ;
103103 } ) ;
104+
105+ test ( 'preserves Liveblocks collab profile with publicApiKey' , ( ) => {
106+ const metadata = makeMetadata ( {
107+ sessionType : 'collab' ,
108+ collaboration : {
109+ providerType : 'liveblocks' ,
110+ documentId : 'lb-room-123' ,
111+ publicApiKey : 'pk_test_xxx' ,
112+ } as any ,
113+ } ) ;
114+ const result = normalizeContextMetadata ( metadata ) ;
115+ expect ( result . sessionType ) . toBe ( 'collab' ) ;
116+ expect ( result . collaboration ) . toEqual ( {
117+ providerType : 'liveblocks' ,
118+ documentId : 'lb-room-123' ,
119+ publicApiKey : 'pk_test_xxx' ,
120+ } ) ;
121+ } ) ;
122+
123+ test ( 'preserves Liveblocks collab profile with authEndpoint' , ( ) => {
124+ const metadata = makeMetadata ( {
125+ sessionType : 'collab' ,
126+ collaboration : {
127+ providerType : 'liveblocks' ,
128+ documentId : 'lb-room-456' ,
129+ authEndpoint : 'https://example.com/auth' ,
130+ authHeadersEnv : 'LB_HEADERS' ,
131+ } as any ,
132+ } ) ;
133+ const result = normalizeContextMetadata ( metadata ) ;
134+ expect ( result . sessionType ) . toBe ( 'collab' ) ;
135+ expect ( result . collaboration ) . toEqual ( {
136+ providerType : 'liveblocks' ,
137+ documentId : 'lb-room-456' ,
138+ authEndpoint : 'https://example.com/auth' ,
139+ authHeadersEnv : 'LB_HEADERS' ,
140+ } ) ;
141+ } ) ;
142+
143+ test ( 'rejects Liveblocks profile with both auth modes' , ( ) => {
144+ const metadata = makeMetadata ( {
145+ sessionType : 'collab' ,
146+ collaboration : {
147+ providerType : 'liveblocks' ,
148+ documentId : 'lb-room' ,
149+ publicApiKey : 'pk_xxx' ,
150+ authEndpoint : 'https://x' ,
151+ } as any ,
152+ } ) ;
153+ const result = normalizeContextMetadata ( metadata ) ;
154+ expect ( result . sessionType ) . toBe ( 'local' ) ;
155+ expect ( result . collaboration ) . toBeUndefined ( ) ;
156+ } ) ;
157+
158+ test ( 'rejects Liveblocks profile with neither auth mode' , ( ) => {
159+ const metadata = makeMetadata ( {
160+ sessionType : 'collab' ,
161+ collaboration : {
162+ providerType : 'liveblocks' ,
163+ documentId : 'lb-room' ,
164+ } as any ,
165+ } ) ;
166+ const result = normalizeContextMetadata ( metadata ) ;
167+ expect ( result . sessionType ) . toBe ( 'local' ) ;
168+ expect ( result . collaboration ) . toBeUndefined ( ) ;
169+ } ) ;
170+
171+ test ( 'rejects malformed Liveblocks profile (missing documentId)' , ( ) => {
172+ const metadata = makeMetadata ( {
173+ sessionType : 'collab' ,
174+ collaboration : {
175+ providerType : 'liveblocks' ,
176+ publicApiKey : 'pk_xxx' ,
177+ } as any ,
178+ } ) ;
179+ const result = normalizeContextMetadata ( metadata ) ;
180+ expect ( result . sessionType ) . toBe ( 'local' ) ;
181+ } ) ;
182+
183+ test ( 'rejects Liveblocks profile with relative authEndpoint' , ( ) => {
184+ const metadata = makeMetadata ( {
185+ sessionType : 'collab' ,
186+ collaboration : {
187+ providerType : 'liveblocks' ,
188+ documentId : 'lb-room' ,
189+ authEndpoint : '/api/auth' ,
190+ } as any ,
191+ } ) ;
192+ const result = normalizeContextMetadata ( metadata ) ;
193+ expect ( result . sessionType ) . toBe ( 'local' ) ;
194+ expect ( result . collaboration ) . toBeUndefined ( ) ;
195+ } ) ;
196+
197+ test ( 'rejects Liveblocks profile with authHeadersEnv but no authEndpoint' , ( ) => {
198+ const metadata = makeMetadata ( {
199+ sessionType : 'collab' ,
200+ collaboration : {
201+ providerType : 'liveblocks' ,
202+ documentId : 'lb-room' ,
203+ publicApiKey : 'pk_xxx' ,
204+ authHeadersEnv : 'MY_HEADERS' ,
205+ } as any ,
206+ } ) ;
207+ const result = normalizeContextMetadata ( metadata ) ;
208+ expect ( result . sessionType ) . toBe ( 'local' ) ;
209+ expect ( result . collaboration ) . toBeUndefined ( ) ;
210+ } ) ;
211+
212+ test ( 'rejects Liveblocks profile with invalid authHeadersEnv name' , ( ) => {
213+ const metadata = makeMetadata ( {
214+ sessionType : 'collab' ,
215+ collaboration : {
216+ providerType : 'liveblocks' ,
217+ documentId : 'lb-room' ,
218+ authEndpoint : 'https://example.com/auth' ,
219+ authHeadersEnv : '123-invalid' ,
220+ } as any ,
221+ } ) ;
222+ const result = normalizeContextMetadata ( metadata ) ;
223+ expect ( result . sessionType ) . toBe ( 'local' ) ;
224+ expect ( result . collaboration ) . toBeUndefined ( ) ;
225+ } ) ;
104226 } ) ;
105227} ) ;
0 commit comments