mirror of
https://github.com/hcengineering/platform.git
synced 2026-08-21 20:02:22 +02:00
48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
//
|
|
// Copyright © 2023 Hardcore Engineering Inc.
|
|
//
|
|
//
|
|
|
|
import client, { ClientSocket } from '@hcengineering/client'
|
|
import clientResources from '@hcengineering/client-resources'
|
|
import { Client, ClientConnectEvent, systemAccountUuid, WorkspaceUuid, type MeasureContext } from '@hcengineering/core'
|
|
import { setMetadata } from '@hcengineering/platform'
|
|
import { getTransactorEndpoint } from '@hcengineering/server-client'
|
|
import { generateToken } from '@hcengineering/server-token'
|
|
import WebSocket from 'ws'
|
|
import config from './config'
|
|
|
|
/**
|
|
* @public
|
|
*/
|
|
export async function createPlatformClient (
|
|
ctx: MeasureContext,
|
|
workspace: WorkspaceUuid,
|
|
timeout: number,
|
|
reconnect?: (event: ClientConnectEvent, data: any) => Promise<void>
|
|
): Promise<{ client: Client, endpoint: string }> {
|
|
setMetadata(client.metadata.ClientSocketFactory, (url) => {
|
|
return new WebSocket(url, {
|
|
headers: {
|
|
'User-Agent': config.ServiceID
|
|
}
|
|
}) as never as ClientSocket
|
|
})
|
|
|
|
const token = generateToken(systemAccountUuid, workspace, { service: 'github', mode: 'github' })
|
|
setMetadata(client.metadata.UseBinaryProtocol, true)
|
|
setMetadata(client.metadata.UseProtocolCompression, true)
|
|
setMetadata(client.metadata.ConnectionTimeout, timeout)
|
|
setMetadata(client.metadata.FilterModel, 'client')
|
|
const endpoint = await getTransactorEndpoint(token)
|
|
const connection = await (
|
|
await clientResources()
|
|
).function.GetClient(token, endpoint, {
|
|
ctx,
|
|
onConnect: reconnect,
|
|
useGlobalRPCHandler: true
|
|
})
|
|
|
|
return { client: connection, endpoint }
|
|
}
|