Skip to content

Commit

Permalink
Merge pull request #204 from SuperViz/feat/new-room-oackage-params
Browse files Browse the repository at this point in the history
feat: remote flags
  • Loading branch information
carlossantos74 authored Jan 9, 2025
2 parents 0799600 + 7c8290a commit bfb0f74
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 5 deletions.
12 changes: 12 additions & 0 deletions packages/room/__mocks__/config.mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,16 @@ export const MOCK_CONFIG: Configuration = {
},
},
waterMark: true,
features: {
realtime: true,
presence: true,
videoConference: true,
comments: true,
whoIsOnline: true,
presence3dMatterport: true,
presence3dAutodesk: true,
presence3dThreejs: true,
formElements: true,
transcriptLangs: ['en-US'],
},
};
12 changes: 12 additions & 0 deletions packages/room/src/common/types/feature-flag.types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export interface FeatureFlags {
realtime: boolean;
presence: boolean;
videoConference: boolean;
comments: boolean;
whoIsOnline: boolean;
presence3dMatterport: boolean;
presence3dAutodesk: boolean;
presence3dThreejs: boolean;
formElements: boolean;
transcriptLangs: string[];
}
4 changes: 0 additions & 4 deletions packages/room/src/core/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,4 @@ export type GeneralEvent = ParticipantEvent | RoomEvent;
export type RoomEventPayload<T extends GeneralEvent> =
T extends keyof RoomEventPayloads ? RoomEventPayloads[T] : never;

export type RoomEventPair = {
[K in keyof RoomEventPayloads]: { event: K; payload: RoomEventPayloads[K] };
}[keyof RoomEventPayloads];

export type Callback<T extends GeneralEvent> = (event: RoomEventPayload<T>) => void;
12 changes: 12 additions & 0 deletions packages/room/src/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,18 @@ jest.mock('./services/api', () => ({
fetchLimits: jest.fn(() => Promise.resolve({})),
createParticipant: jest.fn(() => Promise.resolve()),
fetchParticipant: jest.fn(() => Promise.resolve(null)),
getFeatures: jest.fn(() => Promise.resolve({
realtime: true,
presence: true,
videoConference: true,
comments: true,
whoIsOnline: true,
presence3dMatterport: true,
presence3dAutodesk: true,
presence3dThreejs: true,
formElements: true,
transcriptLangs: ['en-US'],
})),
},
}));

Expand Down
4 changes: 3 additions & 1 deletion packages/room/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,11 @@ async function setUpEnvironment({
debug.disable();
}

const [canAccess, waterMark, limits] = await Promise.all([
const [canAccess, waterMark, limits, features] = await Promise.all([
ApiService.validateApiKey(developerToken),
ApiService.fetchWaterMark(developerToken),
ApiService.fetchLimits(developerToken),
ApiService.getFeatures(developerToken),
]).catch((error) => {
console.log(error);
throw new Error('[SuperViz | Room] Failed to load configuration from server');
Expand All @@ -55,6 +56,7 @@ async function setUpEnvironment({

config.set('limits', limits);
config.set('waterMark', waterMark);
config.set('features', features);
}

/**
Expand Down
9 changes: 9 additions & 0 deletions packages/room/src/services/api/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { FeatureFlags } from '../../common/types/feature-flag.types';
import config from '../config';
import { ComponentLimits } from '../config/types';

Expand Down Expand Up @@ -67,4 +68,12 @@ export class ApiService {
const url = this.createUrl(path);
return this.doRequest(url, 'GET', undefined, { apikey: config.get<string>('apiKey') });
}

static async getFeatures(apiKey: string): Promise<FeatureFlags> {
return this.doRequest(
`https://remote-config.superviz.com/features/${apiKey}`,
'GET',
undefined,
) as Promise<FeatureFlags>;
}
}
2 changes: 2 additions & 0 deletions packages/room/src/services/config/types.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { FeatureFlags } from '../../common/types/feature-flag.types';
import { Group } from '../../common/types/group.types';

export interface Configuration {
Expand All @@ -9,6 +10,7 @@ export interface Configuration {
limits: ComponentLimits;
waterMark: boolean;
group: Group
features: FeatureFlags;
}

type Paths<T> = T extends object
Expand Down

0 comments on commit bfb0f74

Please sign in to comment.