Send device id to server

This commit is contained in:
Andras Schmelczer 2025-04-04 23:15:05 +01:00
parent 69438a78c6
commit a25027bc90
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
4 changed files with 27 additions and 3 deletions

View file

@ -24,6 +24,7 @@ export class SyncService {
private _fetchImplementation: typeof globalThis.fetch = globalThis.fetch;
public constructor(
private readonly deviceId: string,
private readonly connectionStatus: ConnectionStatus,
private readonly settings: Settings,
private readonly logger: Logger
@ -79,6 +80,7 @@ export class SyncService {
formData.append("document_id", documentId);
}
formData.append("relative_path", relativePath);
formData.append("device_id", this.deviceId);
formData.append("content", new Blob([contentBytes]));
const response = await this.client.POST(
@ -130,6 +132,7 @@ export class SyncService {
const formData = new FormData();
formData.append("parent_version_id", parentVersionId.toString());
formData.append("relative_path", relativePath);
formData.append("device_id", this.deviceId);
formData.append("content", new Blob([contentBytes]));
const response = await this.client.PUT(
@ -182,7 +185,8 @@ export class SyncService {
}
},
body: {
relativePath
relativePath,
deviceId: this.deviceId
}
}
);

View file

@ -439,6 +439,7 @@ export interface components {
};
CreateDocumentVersion: {
contentBase64: string;
deviceId?: string | null;
/**
* Format: uuid
* @description The client can decide the document id (if it wishes to) in order to help with syncing. If the client does not provide a document id, the server will generate one. If the client provides a document id it must not already exist in the database.
@ -448,6 +449,7 @@ export interface components {
};
CreateDocumentVersionMultipart: {
content: components["schemas"]["Array_of_uint8"];
device_id?: string | null;
/** Format: uuid */
document_id?: string | null;
relative_path: string;
@ -458,6 +460,7 @@ export interface components {
vault_id: string;
};
DeleteDocumentVersion: {
deviceId?: string | null;
relativePath: string;
};
/** @description Response to an update document request. */
@ -568,12 +571,14 @@ export interface components {
};
UpdateDocumentVersion: {
contentBase64: string;
deviceId?: string | null;
/** Format: int64 */
parentVersionId: number;
relativePath: string;
};
UpdateDocumentVersionMultipart: {
content: components["schemas"]["Array_of_uint8"];
deviceId?: string | null;
/** Format: int64 */
parentVersionId: number;
relativePath: string;

View file

@ -15,6 +15,7 @@ import { FileOperations } from "./file-operations/file-operations";
import { ConnectionStatus } from "./services/connection-status";
import { UnrestrictedSyncer } from "./sync-operations/unrestricted-syncer";
import { rateLimit } from "./utils/rate-limit";
import { v4 as uuidv4 } from "uuid";
export interface NetworkConnectionStatus {
isSuccessful: boolean;
@ -105,9 +106,15 @@ export class SyncClient {
await rateLimitedSave(state);
}
);
const deviceId = uuidv4();
const connectionStatus = new ConnectionStatus(settings, logger);
const syncService = new SyncService(connectionStatus, settings, logger);
const syncService = new SyncService(
deviceId,
connectionStatus,
settings,
logger
);
syncService.fetchImplementation = fetch;
const fileOperations = new FileOperations(
logger,
@ -124,6 +131,7 @@ export class SyncClient {
history
);
const syncer = new Syncer(
deviceId,
logger,
database,
settings,

View file

@ -31,7 +31,9 @@ export class Syncer {
| undefined;
private applyRemoteChangesWebSocket: WebSocket | undefined;
// eslint-disable-next-line @typescript-eslint/max-params
public constructor(
private readonly deviceId: string,
private readonly logger: Logger,
private readonly database: Database,
private readonly settings: Settings,
@ -291,7 +293,12 @@ export class Syncer {
// The JS WebSocket API doesn't support setting headers, so we have to send the token as a message
this.applyRemoteChangesWebSocket.onopen = (): void => {
this.logger.info("WebSocket connection opened");
this.applyRemoteChangesWebSocket?.send(settings.token);
this.applyRemoteChangesWebSocket?.send(
JSON.stringify({
deviceId: this.deviceId,
token: settings.token
})
);
this.webSocketStatusChangeListeners.forEach((listener) => {
listener();
});