Files
core/packages/api-client/controllers/activity.ts
Innei 267632be94 feat: support socket room and add activity presence (#1445)
* feat: room init

Signed-off-by: Innei <i@innei.in>

* feat: web gateway hooks

Signed-off-by: Innei <i@innei.in>

* perf: debounce update event

Signed-off-by: Innei <i@innei.in>

* fix: socket online more accurate

* fix: singleton

* feat: add more hooks

* fix: set metadata on socket

* feat: api-client update

Signed-off-by: Innei <i@innei.in>

* update

Signed-off-by: Innei <i@innei.in>

* feat: add ip

Signed-off-by: Innei <i@innei.in>

* refactor: event

Signed-off-by: Innei <i@innei.in>

* fix: test

Signed-off-by: Innei <i@innei.in>

---------

Signed-off-by: Innei <i@innei.in>
2024-02-11 19:01:08 +08:00

86 lines
1.6 KiB
TypeScript

import type { IRequestAdapter } from '~/interfaces/adapter'
import type { IController } from '~/interfaces/controller'
import type { IRequestHandler } from '~/interfaces/request'
import type { ActivityPresence } from '~/models/activity'
import type { HTTPClient } from '../core'
import { autoBind } from '~/utils/auto-bind'
declare module '../core/client' {
interface HTTPClient<
T extends IRequestAdapter = IRequestAdapter,
ResponseWrapper = unknown,
> {
activity: ActivityController<ResponseWrapper>
}
}
/**
* @support core >= 4.3.0
*/
export class ActivityController<ResponseWrapper> implements IController {
base = 'activity'
name = 'activity'
constructor(private client: HTTPClient) {
autoBind(this)
}
public get proxy(): IRequestHandler<ResponseWrapper> {
return this.client.proxy(this.base)
}
likeIt(type: 'Post' | 'Note', id: string) {
return this.proxy.like.post<never>({
data: {
type,
id,
},
})
}
/**
*
* @support core >= 5.0.0
*/
getPresence(roomName: string) {
return this.proxy.presence.get<Record<string, ActivityPresence>>({
params: {
room_name: roomName,
},
})
}
/**
*
* @support core >= 5.0.0
*/
updatePresence({
identity,
position,
roomName,
sid,
displayName,
}: {
roomName: string
position: number
identity: string
sid: string
displayName?: string
}) {
return this.proxy.presence.update.post({
data: {
identity,
position,
ts: Date.now(),
roomName,
sid,
displayName,
},
})
}
}