@atproto/bsky 0.0.123 → 0.0.125
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/api/app/bsky/notification/listNotifications.d.ts +7 -0
- package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/listNotifications.js +21 -5
- package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -15
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +6 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +6 -0
- package/dist/context.js.map +1 -1
- package/dist/data-plane/client/hosts.d.ts +37 -0
- package/dist/data-plane/client/hosts.d.ts.map +1 -0
- package/dist/data-plane/client/hosts.js +106 -0
- package/dist/data-plane/client/hosts.js.map +1 -0
- package/dist/data-plane/client/index.d.ts +13 -0
- package/dist/data-plane/client/index.d.ts.map +1 -0
- package/dist/data-plane/client/index.js +133 -0
- package/dist/data-plane/client/index.js.map +1 -0
- package/dist/data-plane/{client.d.ts → client/util.d.ts} +3 -10
- package/dist/data-plane/client/util.d.ts.map +1 -0
- package/dist/data-plane/client/util.js +85 -0
- package/dist/data-plane/client/util.js.map +1 -0
- package/dist/data-plane/server/db/pagination.d.ts +69 -9
- package/dist/data-plane/server/db/pagination.d.ts.map +1 -1
- package/dist/data-plane/server/db/pagination.js +114 -14
- package/dist/data-plane/server/db/pagination.js.map +1 -1
- package/dist/data-plane/server/routes/notifs.d.ts.map +1 -1
- package/dist/data-plane/server/routes/notifs.js +3 -5
- package/dist/data-plane/server/routes/notifs.js.map +1 -1
- package/dist/etcd.d.ts +25 -0
- package/dist/etcd.d.ts.map +1 -0
- package/dist/etcd.js +109 -0
- package/dist/etcd.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/lexicon/index.d.ts +6 -0
- package/dist/lexicon/index.d.ts.map +1 -1
- package/dist/lexicon/index.js +12 -0
- package/dist/lexicon/index.js.map +1 -1
- package/dist/lexicon/lexicons.d.ts +412 -158
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +222 -81
- package/dist/lexicon/lexicons.js.map +1 -1
- package/dist/lexicon/types/app/bsky/embed/video.d.ts +1 -0
- package/dist/lexicon/types/app/bsky/embed/video.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/embed/video.js.map +1 -1
- package/dist/lexicon/types/app/bsky/labeler/defs.d.ts +7 -0
- package/dist/lexicon/types/app/bsky/labeler/defs.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/labeler/defs.js.map +1 -1
- package/dist/lexicon/types/app/bsky/labeler/service.d.ts +7 -0
- package/dist/lexicon/types/app/bsky/labeler/service.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/labeler/service.js.map +1 -1
- package/dist/lexicon/types/com/atproto/identity/defs.d.ts +17 -0
- package/dist/lexicon/types/com/atproto/identity/defs.d.ts.map +1 -0
- package/dist/lexicon/types/com/atproto/identity/defs.js +16 -0
- package/dist/lexicon/types/com/atproto/identity/defs.js.map +1 -0
- package/dist/lexicon/types/com/atproto/identity/refreshIdentity.d.ts +39 -0
- package/dist/lexicon/types/com/atproto/identity/refreshIdentity.d.ts.map +1 -0
- package/dist/lexicon/types/com/atproto/identity/refreshIdentity.js +7 -0
- package/dist/lexicon/types/com/atproto/identity/refreshIdentity.js.map +1 -0
- package/dist/lexicon/types/com/atproto/identity/resolveDid.d.ts +40 -0
- package/dist/lexicon/types/com/atproto/identity/resolveDid.d.ts.map +1 -0
- package/dist/lexicon/types/com/atproto/identity/resolveDid.js +7 -0
- package/dist/lexicon/types/com/atproto/identity/resolveDid.js.map +1 -0
- package/dist/lexicon/types/com/atproto/identity/resolveHandle.d.ts +1 -0
- package/dist/lexicon/types/com/atproto/identity/resolveHandle.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/identity/resolveIdentity.d.ts +36 -0
- package/dist/lexicon/types/com/atproto/identity/resolveIdentity.d.ts.map +1 -0
- package/dist/lexicon/types/com/atproto/identity/resolveIdentity.js +7 -0
- package/dist/lexicon/types/com/atproto/identity/resolveIdentity.js.map +1 -0
- package/dist/lexicon/types/com/atproto/moderation/defs.d.ts +2 -0
- package/dist/lexicon/types/com/atproto/moderation/defs.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/repo/listRecords.d.ts +0 -4
- package/dist/lexicon/types/com/atproto/repo/listRecords.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/repo/listRecords.js.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/getRecord.d.ts +0 -2
- package/dist/lexicon/types/com/atproto/sync/getRecord.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/subscribeRepos.d.ts +1 -30
- package/dist/lexicon/types/com/atproto/sync/subscribeRepos.d.ts.map +1 -1
- package/dist/lexicon/types/com/atproto/sync/subscribeRepos.js +0 -27
- package/dist/lexicon/types/com/atproto/sync/subscribeRepos.js.map +1 -1
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +2 -1
- package/dist/logger.js.map +1 -1
- package/dist/views/index.d.ts.map +1 -1
- package/dist/views/index.js +6 -3
- package/dist/views/index.js.map +1 -1
- package/package.json +14 -13
- package/src/api/app/bsky/notification/listNotifications.ts +28 -6
- package/src/config.ts +45 -15
- package/src/context.ts +12 -1
- package/src/data-plane/client/hosts.ts +103 -0
- package/src/data-plane/client/index.ts +123 -0
- package/src/data-plane/client/util.ts +66 -0
- package/src/data-plane/server/db/pagination.ts +158 -35
- package/src/data-plane/server/routes/notifs.ts +4 -9
- package/src/etcd.ts +90 -0
- package/src/index.ts +26 -2
- package/src/lexicon/index.ts +36 -0
- package/src/lexicon/lexicons.ts +243 -84
- package/src/lexicon/types/app/bsky/embed/video.ts +1 -0
- package/src/lexicon/types/app/bsky/labeler/defs.ts +7 -0
- package/src/lexicon/types/app/bsky/labeler/service.ts +7 -0
- package/src/lexicon/types/com/atproto/identity/defs.ts +30 -0
- package/src/lexicon/types/com/atproto/identity/refreshIdentity.ts +52 -0
- package/src/lexicon/types/com/atproto/identity/resolveDid.ts +52 -0
- package/src/lexicon/types/com/atproto/identity/resolveHandle.ts +1 -0
- package/src/lexicon/types/com/atproto/identity/resolveIdentity.ts +48 -0
- package/src/lexicon/types/com/atproto/moderation/defs.ts +3 -0
- package/src/lexicon/types/com/atproto/repo/listRecords.ts +0 -4
- package/src/lexicon/types/com/atproto/sync/getRecord.ts +0 -2
- package/src/lexicon/types/com/atproto/sync/subscribeRepos.ts +0 -59
- package/src/logger.ts +2 -0
- package/src/views/index.ts +6 -3
- package/tests/etcd.test.ts +301 -0
- package/tests/views/__snapshots__/labeler-service.test.ts.snap +46 -0
- package/tests/views/__snapshots__/notifications.test.ts.snap +3 -3
- package/tests/views/labeler-service.test.ts +50 -1
- package/tests/views/notifications.test.ts +190 -10
- package/tsconfig.build.tsbuildinfo +1 -1
- package/tsconfig.tests.tsbuildinfo +1 -1
- package/dist/data-plane/client.d.ts.map +0 -1
- package/dist/data-plane/client.js +0 -156
- package/dist/data-plane/client.js.map +0 -1
- package/src/data-plane/client.ts +0 -154
package/src/data-plane/client.ts
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert'
|
|
2
|
-
import { randomInt } from 'node:crypto'
|
|
3
|
-
import {
|
|
4
|
-
Code,
|
|
5
|
-
ConnectError,
|
|
6
|
-
PromiseClient,
|
|
7
|
-
createPromiseClient,
|
|
8
|
-
makeAnyClient,
|
|
9
|
-
} from '@connectrpc/connect'
|
|
10
|
-
import { createGrpcTransport } from '@connectrpc/connect-node'
|
|
11
|
-
import * as ui8 from 'uint8arrays'
|
|
12
|
-
import { getDidKeyFromMultibase } from '@atproto/identity'
|
|
13
|
-
import { Service } from '../proto/bsky_connect'
|
|
14
|
-
|
|
15
|
-
export type DataPlaneClient = PromiseClient<typeof Service>
|
|
16
|
-
type BaseClient = { lib: DataPlaneClient; url: URL }
|
|
17
|
-
type HttpVersion = '1.1' | '2'
|
|
18
|
-
const MAX_RETRIES = 3
|
|
19
|
-
|
|
20
|
-
export const createDataPlaneClient = (
|
|
21
|
-
baseUrls: string[],
|
|
22
|
-
opts: { httpVersion?: HttpVersion; rejectUnauthorized?: boolean },
|
|
23
|
-
) => {
|
|
24
|
-
const clients = baseUrls.map((baseUrl) => createBaseClient(baseUrl, opts))
|
|
25
|
-
assert(clients.length > 0, 'no clients available')
|
|
26
|
-
return makeAnyClient(Service, (method) => {
|
|
27
|
-
return async (...args) => {
|
|
28
|
-
let tries = 0
|
|
29
|
-
let error: unknown
|
|
30
|
-
let remainingClients = clients
|
|
31
|
-
while (tries < MAX_RETRIES) {
|
|
32
|
-
const client = randomElement(remainingClients)
|
|
33
|
-
assert(client, 'no clients available')
|
|
34
|
-
try {
|
|
35
|
-
return await client.lib[method.localName](...args)
|
|
36
|
-
} catch (err) {
|
|
37
|
-
if (
|
|
38
|
-
err instanceof ConnectError &&
|
|
39
|
-
(err.code === Code.Unavailable || err.code === Code.Aborted)
|
|
40
|
-
) {
|
|
41
|
-
tries++
|
|
42
|
-
error = err
|
|
43
|
-
remainingClients = getRemainingClients(remainingClients, client)
|
|
44
|
-
} else {
|
|
45
|
-
throw err
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
assert(error)
|
|
50
|
-
throw error
|
|
51
|
-
}
|
|
52
|
-
}) as DataPlaneClient
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export { Code }
|
|
56
|
-
|
|
57
|
-
export const isDataplaneError = (
|
|
58
|
-
err: unknown,
|
|
59
|
-
code?: Code,
|
|
60
|
-
): err is ConnectError => {
|
|
61
|
-
if (err instanceof ConnectError) {
|
|
62
|
-
return !code || err.code === code
|
|
63
|
-
}
|
|
64
|
-
return false
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const createBaseClient = (
|
|
68
|
-
baseUrl: string,
|
|
69
|
-
opts: { httpVersion?: HttpVersion; rejectUnauthorized?: boolean },
|
|
70
|
-
): BaseClient => {
|
|
71
|
-
const { httpVersion = '2', rejectUnauthorized = true } = opts
|
|
72
|
-
const transport = createGrpcTransport({
|
|
73
|
-
baseUrl,
|
|
74
|
-
httpVersion,
|
|
75
|
-
acceptCompression: [],
|
|
76
|
-
nodeOptions: { rejectUnauthorized },
|
|
77
|
-
})
|
|
78
|
-
return {
|
|
79
|
-
lib: createPromiseClient(Service, transport),
|
|
80
|
-
url: new URL(baseUrl),
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const getRemainingClients = (clients: BaseClient[], lastClient: BaseClient) => {
|
|
85
|
-
if (clients.length < 2) return clients // no clients to choose from
|
|
86
|
-
if (lastClient.url.port) {
|
|
87
|
-
// if the last client had a port, we attempt to exclude its whole host.
|
|
88
|
-
const maybeRemaining = clients.filter(
|
|
89
|
-
(c) => c.url.hostname !== lastClient.url.hostname,
|
|
90
|
-
)
|
|
91
|
-
if (maybeRemaining.length) {
|
|
92
|
-
return maybeRemaining
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return clients.filter((c) => c !== lastClient)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const randomElement = <T>(arr: T[]): T | undefined => {
|
|
99
|
-
if (arr.length === 0) return
|
|
100
|
-
return arr[randomInt(arr.length)]
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export const unpackIdentityServices = (servicesBytes: Uint8Array) => {
|
|
104
|
-
const servicesStr = ui8.toString(servicesBytes, 'utf8')
|
|
105
|
-
if (!servicesStr) return {}
|
|
106
|
-
return JSON.parse(servicesStr) as UnpackedServices
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export const unpackIdentityKeys = (keysBytes: Uint8Array) => {
|
|
110
|
-
const keysStr = ui8.toString(keysBytes, 'utf8')
|
|
111
|
-
if (!keysStr) return {}
|
|
112
|
-
return JSON.parse(keysStr) as UnpackedKeys
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export const getServiceEndpoint = (
|
|
116
|
-
services: UnpackedServices,
|
|
117
|
-
opts: { id: string; type: string },
|
|
118
|
-
) => {
|
|
119
|
-
const endpoint =
|
|
120
|
-
services[opts.id] &&
|
|
121
|
-
services[opts.id].Type === opts.type &&
|
|
122
|
-
validateUrl(services[opts.id].URL)
|
|
123
|
-
return endpoint || undefined
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export const getKeyAsDidKey = (keys: UnpackedKeys, opts: { id: string }) => {
|
|
127
|
-
const key =
|
|
128
|
-
keys[opts.id] &&
|
|
129
|
-
getDidKeyFromMultibase({
|
|
130
|
-
type: keys[opts.id].Type,
|
|
131
|
-
publicKeyMultibase: keys[opts.id].PublicKeyMultibase,
|
|
132
|
-
})
|
|
133
|
-
return key || undefined
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
type UnpackedServices = Record<string, { Type: string; URL: string }>
|
|
137
|
-
|
|
138
|
-
type UnpackedKeys = Record<string, { Type: string; PublicKeyMultibase: string }>
|
|
139
|
-
|
|
140
|
-
const validateUrl = (urlStr: string): string | undefined => {
|
|
141
|
-
let url
|
|
142
|
-
try {
|
|
143
|
-
url = new URL(urlStr)
|
|
144
|
-
} catch {
|
|
145
|
-
return undefined
|
|
146
|
-
}
|
|
147
|
-
if (!['http:', 'https:'].includes(url.protocol)) {
|
|
148
|
-
return undefined
|
|
149
|
-
} else if (!url.hostname) {
|
|
150
|
-
return undefined
|
|
151
|
-
} else {
|
|
152
|
-
return urlStr
|
|
153
|
-
}
|
|
154
|
-
}
|