import { LogLevels, PowerSyncLogger } from '@powersync/common'; import { AbstractRemote, FetchOptions, RemoteConnector } from '@powersync/shared-internals'; import { getUserAgentInfo } from './userAgent.js'; import type { WebSocketSyncStreamPlatform, WebSocketSupport } from '@powersync/shared-internals/websockets'; export class WebRemote extends AbstractRemote { constructor( protected connector: RemoteConnector, logger: PowerSyncLogger ) { super(connector, logger); } protected fetch({ resource, request }: FetchOptions): Promise { return fetch(resource, request); } protected async loadWebSocketSupport(platform: WebSocketSyncStreamPlatform): Promise { if (!websockets) { // loadWebSocketSupport being called concurrently is safe, the import resolves to the same module in that case. const module = await import('@powersync/shared-internals/websockets'); websockets = new module.WebSocketSupport(platform); } return websockets; } getUserAgent(): string { let ua = [super.getUserAgent(), `powersync-web`]; try { ua.push(...getUserAgentInfo()); } catch (error) { this.logger.log({ level: LogLevels.warn, message: 'Failed to get user agent info', error }); } return ua.join(' '); } } let websockets: WebSocketSupport | undefined;