diff --git a/package.json b/package.json index 72808753d..b9a7ca152 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "build:snjs": "yarn workspaces foreach -p --topological-dev --verbose -R --from @standardnotes/snjs run build", "build:services": "yarn workspaces foreach -pt --topological-dev --verbose -R --from @standardnotes/services run build", "build:api": "yarn workspaces foreach -pt --topological-dev --verbose -R --from @standardnotes/api run build", + "start:web": "yarn workspace @standardnotes/web start", "e2e": "lerna run start:test-server --scope=@standardnotes/snjs", "e2e:test": "yarn dlx mocha-headless-chrome --timeout 3600000 -f http://localhost:9001/mocha/test.html", "reset": "find . -type dir -name node_modules | xargs rm -rf && rm -rf yarn.lock && yarn install", diff --git a/packages/services/src/Domain/Feature/FeaturesClientInterface.ts b/packages/services/src/Domain/Feature/FeaturesClientInterface.ts index 362ec6cbd..d13f29e9c 100644 --- a/packages/services/src/Domain/Feature/FeaturesClientInterface.ts +++ b/packages/services/src/Domain/Feature/FeaturesClientInterface.ts @@ -3,7 +3,7 @@ import { ComponentInterface, DecryptedItemInterface } from '@standardnotes/model import { FeatureStatus } from './FeatureStatus' import { SetOfflineFeaturesFunctionResponse } from './SetOfflineFeaturesFunctionResponse' import { NativeFeatureIdentifier } from '@standardnotes/features' -import { Uuid } from '@standardnotes/domain-core' +import { RoleName, Uuid } from '@standardnotes/domain-core' export interface FeaturesClientInterface { getFeatureStatus( @@ -11,7 +11,7 @@ export interface FeaturesClientInterface { options?: { inContextOfItem?: DecryptedItemInterface }, ): FeatureStatus hasMinimumRole(role: string): boolean - + hasRole(roleName: RoleName): boolean hasFirstPartyOfflineSubscription(): boolean setOfflineFeaturesCode(code: string): Promise hasOfflineRepo(): boolean diff --git a/packages/snjs/lib/Services/Features/FeaturesService.ts b/packages/snjs/lib/Services/Features/FeaturesService.ts index 64dcfe2ad..697adef30 100644 --- a/packages/snjs/lib/Services/Features/FeaturesService.ts +++ b/packages/snjs/lib/Services/Features/FeaturesService.ts @@ -412,6 +412,10 @@ export class FeaturesService return Object.values(RoleName.NAMES).filter((role) => roles.includes(role)) } + hasRole(roleName: RoleName): boolean { + return this.onlineRoles.includes(roleName.value) || this.offlineRoles.includes(roleName.value) + } + public hasMinimumRole(role: string): boolean { const sortedAllRoles = Object.values(RoleName.NAMES) diff --git a/packages/web/src/javascripts/Controllers/FeaturesController.ts b/packages/web/src/javascripts/Controllers/FeaturesController.ts index 729d6f3e8..29d47fe7c 100644 --- a/packages/web/src/javascripts/Controllers/FeaturesController.ts +++ b/packages/web/src/javascripts/Controllers/FeaturesController.ts @@ -133,7 +133,11 @@ export class FeaturesController extends AbstractViewController implements Intern isVaultsEnabled(): boolean { const enabled = this.features.isExperimentalFeatureEnabled(NativeFeatureIdentifier.TYPES.Vaults) - return featureTrunkVaultsEnabled() || enabled || this.features.hasMinimumRole(RoleName.NAMES.InternalTeamUser) + return ( + featureTrunkVaultsEnabled() || + enabled || + this.features.hasRole(RoleName.create(RoleName.NAMES.InternalTeamUser).getValue()) + ) } isEntitledToSharedVaults(): boolean {