diff --git a/packages/snjs/lib/Application/Application.ts b/packages/snjs/lib/Application/Application.ts index f44bc95bb62..500eae0f5cb 100644 --- a/packages/snjs/lib/Application/Application.ts +++ b/packages/snjs/lib/Application/Application.ts @@ -206,6 +206,7 @@ export class SNApplication implements ApplicationInterface, AppGroupManagedAppli 'identifier', 'defaultHost', 'appVersion', + 'apiVersion', ] for (const optionName of requiredOptions) { diff --git a/packages/snjs/lib/Services/Api/ApiService.ts b/packages/snjs/lib/Services/Api/ApiService.ts index 54848fac06e..2e2bd4dd489 100644 --- a/packages/snjs/lib/Services/Api/ApiService.ts +++ b/packages/snjs/lib/Services/Api/ApiService.ts @@ -588,6 +588,26 @@ export class LegacyApiService }) } + async updateSubscriptionSetting( + userUuid: UuidString, + settingName: string, + settingValue: string | null, + sensitive: boolean, + ): Promise> { + const params = { + name: settingName, + value: settingValue, + sensitive: sensitive, + } + return this.tokenRefreshableRequest({ + verb: HttpVerb.Put, + url: joinPaths(this.host, Paths.v1.subscriptionSettings(userUuid)), + authentication: this.getSessionAccessToken(), + fallbackErrorMessage: API_MESSAGE_FAILED_UPDATE_SETTINGS, + params, + }) + } + async deleteSetting(userUuid: UuidString, settingName: string): Promise> { return this.tokenRefreshableRequest({ verb: HttpVerb.Delete, diff --git a/packages/snjs/lib/Services/Api/Paths.ts b/packages/snjs/lib/Services/Api/Paths.ts index 7a78f916bd7..077b8ee9fc8 100644 --- a/packages/snjs/lib/Services/Api/Paths.ts +++ b/packages/snjs/lib/Services/Api/Paths.ts @@ -42,6 +42,7 @@ const SettingsPaths = { setting: (userUuid: string, settingName: string) => `/v1/users/${userUuid}/settings/${settingName}`, subscriptionSetting: (userUuid: string, settingName: string) => `/v1/users/${userUuid}/subscription-settings/${settingName}`, + subscriptionSettings: (userUuid: string) => `/v1/users/${userUuid}/subscription-settings`, } const SubscriptionPaths = { diff --git a/packages/snjs/lib/Services/Settings/SNSettingsService.ts b/packages/snjs/lib/Services/Settings/SNSettingsService.ts index 030e99ccbc9..80441ea3e39 100644 --- a/packages/snjs/lib/Services/Settings/SNSettingsService.ts +++ b/packages/snjs/lib/Services/Settings/SNSettingsService.ts @@ -38,6 +38,10 @@ export class SettingsService extends AbstractService implements SettingsClientIn return this.provider.getSubscriptionSetting(name) } + async updateSubscriptionSetting(name: SettingName, payload: string, sensitive = false) { + return this.provider.updateSetting(name, payload, sensitive) + } + async updateSetting(name: SettingName, payload: string, sensitive = false) { return this.provider.updateSetting(name, payload, sensitive) } diff --git a/packages/snjs/lib/Services/Settings/SettingsServerInterface.ts b/packages/snjs/lib/Services/Settings/SettingsServerInterface.ts index 3c05dde898f..db3a253dfb0 100644 --- a/packages/snjs/lib/Services/Settings/SettingsServerInterface.ts +++ b/packages/snjs/lib/Services/Settings/SettingsServerInterface.ts @@ -21,5 +21,12 @@ export interface SettingsServerInterface { getSubscriptionSetting(userUuid: UuidString, settingName: string): Promise> + updateSubscriptionSetting( + userUuid: UuidString, + settingName: string, + settingValue: string, + sensitive: boolean, + ): Promise> + deleteSetting(userUuid: UuidString, settingName: string): Promise> } diff --git a/packages/snjs/mocha/lib/Applications.js b/packages/snjs/mocha/lib/Applications.js index 958ed4a3246..000310131dd 100644 --- a/packages/snjs/mocha/lib/Applications.js +++ b/packages/snjs/mocha/lib/Applications.js @@ -22,7 +22,7 @@ export function createApplicationWithOptions({ identifier, environment, platform defaultHost: host || Defaults.getDefaultHost(), appVersion: Defaults.getAppVersion(), webSocketUrl: Defaults.getDefaultWebSocketUrl(), - apiVersion: ApiVersion.V1, + apiVersion: ApiVersion.v0, syncCallsThresholdPerMinute, }) } diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/Account/Email/Email.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/Account/Email/Email.tsx index 540aac9b970..c2c5a908367 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/Account/Email/Email.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/Account/Email/Email.tsx @@ -42,6 +42,16 @@ const Email: FunctionComponent = ({ application }: Props) => { } } + const updateSubscriptionSetting = async (settingName: SettingName, payload: string): Promise => { + try { + await application.settings.updateSubscriptionSetting(settingName, payload, false) + return true + } catch (e) { + application.alerts.alert(STRING_FAILED_TO_UPDATE_USER_SETTING).catch(console.error) + return false + } + } + const loadSettings = useCallback(async () => { if (!application.sessions.getUser()) { return @@ -79,7 +89,7 @@ const Email: FunctionComponent = ({ application }: Props) => { previousValue === MuteSignInEmailsOption.Muted ? MuteSignInEmailsOption.NotMuted : MuteSignInEmailsOption.Muted setSignInEmailsMutedValue(newValue) - const updateResult = await updateSetting( + const updateResult = await updateSubscriptionSetting( SettingName.create(SettingName.NAMES.MuteSignInEmails).getValue(), newValue, )