Files
Matthieu Sieben aaedafc6ba Replace tap's event validation from "zod" to "@atproto/lex" (#4532)
* Replace `tap`'s event validation from "zod" to "@atproto/lex"

* Expose `record` data as parsed atproto data (including CIDs and Uint8Arrays)

* Minor change to validation of integers in lex data

* tidy

* tidy

* test using vitest

* add missing `tap` from root `tsconfig.json`
2026-01-20 14:11:24 +01:00

64 lines
1.5 KiB
TypeScript

import { WebSocketServer } from 'ws'
import { HandlerOpts } from '../src/channel'
import { IdentityEvent, RecordEvent } from '../src/types'
export type MockOpts = HandlerOpts & { acked: boolean }
export const createMockOpts = (): MockOpts => {
const opts = {
signal: new AbortController().signal,
acked: false,
ack: async () => {
opts.acked = true
},
}
return opts
}
export const createRecordEvent = (
overrides: Partial<RecordEvent> = {},
): RecordEvent => ({
id: 1,
type: 'record',
did: 'did:example:alice',
rev: 'abc123',
collection: 'com.example.post',
rkey: 'abc123',
action: 'create',
record: { text: 'hello' },
cid: 'bafyreiclp443lavogvhj3d2ob2cxbfuscni2k5jk7bebjzg7khl3esabwq',
live: true,
...overrides,
})
export const createIdentityEvent = (): IdentityEvent => ({
id: 2,
type: 'identity',
did: 'did:example:alice',
handle: 'alice.test',
isActive: true,
status: 'active',
})
export async function createWebSocketServer() {
return new Promise<WebSocketServer & AsyncDisposable>((resolve, reject) => {
const server = new WebSocketServer({ port: 0 }, () => {
server.off('error', reject)
resolve(
Object.defineProperty(server, Symbol.asyncDispose, {
value: disposeWebSocketServer,
}) as WebSocketServer & AsyncDisposable,
)
}).once('error', reject)
})
}
async function disposeWebSocketServer(this: WebSocketServer) {
return new Promise<void>((resolve, reject) => {
this.close((err) => {
if (err) reject(err)
else resolve()
})
})
}