mattermost-mobile-upstream/app/client/rest/ephemeral_mode.ts
Carlos Garcia ad6b834d34
Mm 68296 audit ephemeral mode events (#10139)
* consider all error paths when wiping server artifacts

* log events related to ephemeral mode to keep an audit log server side

* adds playbook run delete count to cleanup audit events

* sends signature as proof for auditing wipe events

* fixes some missed data in audit events

* throw and log errors while enqueuing audit events

* report exact deleted count on audit event

* test terminate session prunes audit event queue in all cases

* assert on queue lenght in tests

* fetch count inside write transaction to return accurate value

* remove delete count expectations from tests since unsafe where clauses are not supported by loki
2026-09-23 13:48:14 +02:00

36 lines
1.7 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import type ClientBase from './base';
export interface ClientEphemeralModeMix {
logOfflinePurge: (offlineTimeMinutes: number, purgeAt: number, errorReason?: string) => Promise<{status: string}>;
logCleanup: (postsDeleted: number, playbookRunsDeleted: number, cleanupAt: number, errorReason?: string) => Promise<{status: string}>;
logSessionWipe: (signature: string, wipeAt: number, errorReason?: string) => Promise<{status: string}>;
}
const ClientEphemeralMode = <TBase extends Constructor<ClientBase>>(superclass: TBase) => class extends superclass {
logOfflinePurge = async (offlineTimeMinutes: number, purgeAt: number, errorReason?: string) => {
return this.doFetch(
`${this.urlVersion}/ephemeral_mode/purge`,
{method: 'post', body: {offline_time_minutes: offlineTimeMinutes, purge_at: purgeAt, error_reason: errorReason}},
);
};
logCleanup = async (postsDeleted: number, playbookRunsDeleted: number, cleanupAt: number, errorReason?: string) => {
return this.doFetch(
`${this.urlVersion}/ephemeral_mode/cleanup`,
{method: 'post', body: {posts_deleted: postsDeleted, playbook_runs_deleted: playbookRunsDeleted, cleanup_at: cleanupAt, error_reason: errorReason}},
);
};
logSessionWipe = async (signature: string, wipeAt: number, errorReason?: string) => {
return this.doFetch(
`${this.urlVersion}/ephemeral_mode/wipe`,
{method: 'post', body: {signature, wipe_at: wipeAt, error_reason: errorReason}},
);
};
};
export default ClientEphemeralMode;