forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {type AppBskyActorDefs, nuxSchema} from '@atproto/api'
2
3import {
4 type AppNux,
5 type Nux,
6 nuxNames,
7 NuxSchemas,
8} from '#/state/queries/nuxs/definitions'
9
10export function parseAppNux(nux: AppBskyActorDefs.Nux): AppNux | undefined {
11 if (!nuxNames.has(nux.id as Nux)) return
12 if (!nuxSchema.safeParse(nux).success) return
13
14 const {data, ...rest} = nux
15
16 const schema = NuxSchemas[nux.id as Nux]
17
18 if (schema && data) {
19 const parsedData = JSON.parse(data)
20
21 if (!schema.safeParse(parsedData).success) return
22
23 return {
24 ...rest,
25 data: parsedData,
26 } as AppNux
27 }
28
29 return {
30 ...rest,
31 data: undefined,
32 } as AppNux
33}
34
35export function serializeAppNux(nux: AppNux): AppBskyActorDefs.Nux {
36 const {data, ...rest} = nux
37 const schema = NuxSchemas[nux.id as Nux]
38
39 const result: AppBskyActorDefs.Nux = {
40 ...rest,
41 data: undefined,
42 }
43
44 if (schema) {
45 schema.parse(data)
46 result.data = JSON.stringify(data)
47 }
48
49 nuxSchema.parse(result)
50
51 return result
52}