You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
| import { Data } from '../data/data';
 | |
| 
 | |
| // TODO update to agreed value between platforms
 | |
| const featureReleaseTimestamp = 1676851200000; // unix 13/02/2023
 | |
| // const featureReleaseTimestamp = 1676608378; // test value
 | |
| let isFeatureReleased: boolean | undefined;
 | |
| 
 | |
| /**
 | |
|  * this is only intended for testing. Do not call this in production.
 | |
|  */
 | |
| export function resetFeatureReleasedCachedValue() {
 | |
|   isFeatureReleased = undefined;
 | |
| }
 | |
| 
 | |
| export async function getIsFeatureReleased(): Promise<boolean> {
 | |
|   if (isFeatureReleased === undefined) {
 | |
|     // read values from db and cache them as it looks like we did not
 | |
|     const oldIsFeatureReleased = (await Data.getItemById('featureReleased'))?.value;
 | |
|     // values do not exist in the db yet. Let's store false for now in the db and update our cached value.
 | |
|     if (oldIsFeatureReleased === undefined) {
 | |
|       await Data.createOrUpdateItem({ id: 'featureReleased', value: false });
 | |
|       isFeatureReleased = false;
 | |
|     } else {
 | |
|       isFeatureReleased = oldIsFeatureReleased;
 | |
|     }
 | |
|   }
 | |
|   return Boolean(isFeatureReleased);
 | |
| }
 | |
| 
 | |
| export async function checkIsFeatureReleased(featureName: string): Promise<boolean> {
 | |
|   if (isFeatureReleased === undefined) {
 | |
|     const featureAlreadyReleased = await getIsFeatureReleased();
 | |
| 
 | |
|     // Is it time to release the feature?
 | |
|     if (Date.now() >= featureReleaseTimestamp) {
 | |
|       if (featureAlreadyReleased) {
 | |
|         // Feature is already released and we don't need to update the db
 | |
|         window.log.info(`WIP: [releaseFeature]: ${featureName} is released`);
 | |
|       } else {
 | |
|         window.log.info(
 | |
|           `WIP: [releaseFeature]: It is time to release ${featureName}. Releasing it now`
 | |
|         );
 | |
|         await Data.createOrUpdateItem({
 | |
|           id: 'featureReleased',
 | |
|           value: true,
 | |
|         });
 | |
|       }
 | |
|       return true;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   window.log.info(`WIP: [releaseFeature]: ${featureName} has not been released yet`);
 | |
|   return false;
 | |
| }
 |