Send device id to server
This commit is contained in:
parent
69438a78c6
commit
a25027bc90
4 changed files with 27 additions and 3 deletions
|
|
@ -24,6 +24,7 @@ export class SyncService {
|
||||||
private _fetchImplementation: typeof globalThis.fetch = globalThis.fetch;
|
private _fetchImplementation: typeof globalThis.fetch = globalThis.fetch;
|
||||||
|
|
||||||
public constructor(
|
public constructor(
|
||||||
|
private readonly deviceId: string,
|
||||||
private readonly connectionStatus: ConnectionStatus,
|
private readonly connectionStatus: ConnectionStatus,
|
||||||
private readonly settings: Settings,
|
private readonly settings: Settings,
|
||||||
private readonly logger: Logger
|
private readonly logger: Logger
|
||||||
|
|
@ -79,6 +80,7 @@ export class SyncService {
|
||||||
formData.append("document_id", documentId);
|
formData.append("document_id", documentId);
|
||||||
}
|
}
|
||||||
formData.append("relative_path", relativePath);
|
formData.append("relative_path", relativePath);
|
||||||
|
formData.append("device_id", this.deviceId);
|
||||||
formData.append("content", new Blob([contentBytes]));
|
formData.append("content", new Blob([contentBytes]));
|
||||||
|
|
||||||
const response = await this.client.POST(
|
const response = await this.client.POST(
|
||||||
|
|
@ -130,6 +132,7 @@ export class SyncService {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("parent_version_id", parentVersionId.toString());
|
formData.append("parent_version_id", parentVersionId.toString());
|
||||||
formData.append("relative_path", relativePath);
|
formData.append("relative_path", relativePath);
|
||||||
|
formData.append("device_id", this.deviceId);
|
||||||
formData.append("content", new Blob([contentBytes]));
|
formData.append("content", new Blob([contentBytes]));
|
||||||
|
|
||||||
const response = await this.client.PUT(
|
const response = await this.client.PUT(
|
||||||
|
|
@ -182,7 +185,8 @@ export class SyncService {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
body: {
|
body: {
|
||||||
relativePath
|
relativePath,
|
||||||
|
deviceId: this.deviceId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -439,6 +439,7 @@ export interface components {
|
||||||
};
|
};
|
||||||
CreateDocumentVersion: {
|
CreateDocumentVersion: {
|
||||||
contentBase64: string;
|
contentBase64: string;
|
||||||
|
deviceId?: string | null;
|
||||||
/**
|
/**
|
||||||
* Format: uuid
|
* 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.
|
* @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: {
|
CreateDocumentVersionMultipart: {
|
||||||
content: components["schemas"]["Array_of_uint8"];
|
content: components["schemas"]["Array_of_uint8"];
|
||||||
|
device_id?: string | null;
|
||||||
/** Format: uuid */
|
/** Format: uuid */
|
||||||
document_id?: string | null;
|
document_id?: string | null;
|
||||||
relative_path: string;
|
relative_path: string;
|
||||||
|
|
@ -458,6 +460,7 @@ export interface components {
|
||||||
vault_id: string;
|
vault_id: string;
|
||||||
};
|
};
|
||||||
DeleteDocumentVersion: {
|
DeleteDocumentVersion: {
|
||||||
|
deviceId?: string | null;
|
||||||
relativePath: string;
|
relativePath: string;
|
||||||
};
|
};
|
||||||
/** @description Response to an update document request. */
|
/** @description Response to an update document request. */
|
||||||
|
|
@ -568,12 +571,14 @@ export interface components {
|
||||||
};
|
};
|
||||||
UpdateDocumentVersion: {
|
UpdateDocumentVersion: {
|
||||||
contentBase64: string;
|
contentBase64: string;
|
||||||
|
deviceId?: string | null;
|
||||||
/** Format: int64 */
|
/** Format: int64 */
|
||||||
parentVersionId: number;
|
parentVersionId: number;
|
||||||
relativePath: string;
|
relativePath: string;
|
||||||
};
|
};
|
||||||
UpdateDocumentVersionMultipart: {
|
UpdateDocumentVersionMultipart: {
|
||||||
content: components["schemas"]["Array_of_uint8"];
|
content: components["schemas"]["Array_of_uint8"];
|
||||||
|
deviceId?: string | null;
|
||||||
/** Format: int64 */
|
/** Format: int64 */
|
||||||
parentVersionId: number;
|
parentVersionId: number;
|
||||||
relativePath: string;
|
relativePath: string;
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import { FileOperations } from "./file-operations/file-operations";
|
||||||
import { ConnectionStatus } from "./services/connection-status";
|
import { ConnectionStatus } from "./services/connection-status";
|
||||||
import { UnrestrictedSyncer } from "./sync-operations/unrestricted-syncer";
|
import { UnrestrictedSyncer } from "./sync-operations/unrestricted-syncer";
|
||||||
import { rateLimit } from "./utils/rate-limit";
|
import { rateLimit } from "./utils/rate-limit";
|
||||||
|
import { v4 as uuidv4 } from "uuid";
|
||||||
|
|
||||||
export interface NetworkConnectionStatus {
|
export interface NetworkConnectionStatus {
|
||||||
isSuccessful: boolean;
|
isSuccessful: boolean;
|
||||||
|
|
@ -105,9 +106,15 @@ export class SyncClient {
|
||||||
await rateLimitedSave(state);
|
await rateLimitedSave(state);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
const deviceId = uuidv4();
|
||||||
|
|
||||||
const connectionStatus = new ConnectionStatus(settings, logger);
|
const connectionStatus = new ConnectionStatus(settings, logger);
|
||||||
const syncService = new SyncService(connectionStatus, settings, logger);
|
const syncService = new SyncService(
|
||||||
|
deviceId,
|
||||||
|
connectionStatus,
|
||||||
|
settings,
|
||||||
|
logger
|
||||||
|
);
|
||||||
syncService.fetchImplementation = fetch;
|
syncService.fetchImplementation = fetch;
|
||||||
const fileOperations = new FileOperations(
|
const fileOperations = new FileOperations(
|
||||||
logger,
|
logger,
|
||||||
|
|
@ -124,6 +131,7 @@ export class SyncClient {
|
||||||
history
|
history
|
||||||
);
|
);
|
||||||
const syncer = new Syncer(
|
const syncer = new Syncer(
|
||||||
|
deviceId,
|
||||||
logger,
|
logger,
|
||||||
database,
|
database,
|
||||||
settings,
|
settings,
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,9 @@ export class Syncer {
|
||||||
| undefined;
|
| undefined;
|
||||||
private applyRemoteChangesWebSocket: WebSocket | undefined;
|
private applyRemoteChangesWebSocket: WebSocket | undefined;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/max-params
|
||||||
public constructor(
|
public constructor(
|
||||||
|
private readonly deviceId: string,
|
||||||
private readonly logger: Logger,
|
private readonly logger: Logger,
|
||||||
private readonly database: Database,
|
private readonly database: Database,
|
||||||
private readonly settings: Settings,
|
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
|
// The JS WebSocket API doesn't support setting headers, so we have to send the token as a message
|
||||||
this.applyRemoteChangesWebSocket.onopen = (): void => {
|
this.applyRemoteChangesWebSocket.onopen = (): void => {
|
||||||
this.logger.info("WebSocket connection opened");
|
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) => {
|
this.webSocketStatusChangeListeners.forEach((listener) => {
|
||||||
listener();
|
listener();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue