@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.
Files changed (130) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/api/app/bsky/notification/listNotifications.d.ts +7 -0
  3. package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
  4. package/dist/api/app/bsky/notification/listNotifications.js +21 -5
  5. package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
  6. package/dist/config.d.ts +6 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +24 -15
  9. package/dist/config.js.map +1 -1
  10. package/dist/context.d.ts +6 -1
  11. package/dist/context.d.ts.map +1 -1
  12. package/dist/context.js +6 -0
  13. package/dist/context.js.map +1 -1
  14. package/dist/data-plane/client/hosts.d.ts +37 -0
  15. package/dist/data-plane/client/hosts.d.ts.map +1 -0
  16. package/dist/data-plane/client/hosts.js +106 -0
  17. package/dist/data-plane/client/hosts.js.map +1 -0
  18. package/dist/data-plane/client/index.d.ts +13 -0
  19. package/dist/data-plane/client/index.d.ts.map +1 -0
  20. package/dist/data-plane/client/index.js +133 -0
  21. package/dist/data-plane/client/index.js.map +1 -0
  22. package/dist/data-plane/{client.d.ts → client/util.d.ts} +3 -10
  23. package/dist/data-plane/client/util.d.ts.map +1 -0
  24. package/dist/data-plane/client/util.js +85 -0
  25. package/dist/data-plane/client/util.js.map +1 -0
  26. package/dist/data-plane/server/db/pagination.d.ts +69 -9
  27. package/dist/data-plane/server/db/pagination.d.ts.map +1 -1
  28. package/dist/data-plane/server/db/pagination.js +114 -14
  29. package/dist/data-plane/server/db/pagination.js.map +1 -1
  30. package/dist/data-plane/server/routes/notifs.d.ts.map +1 -1
  31. package/dist/data-plane/server/routes/notifs.js +3 -5
  32. package/dist/data-plane/server/routes/notifs.js.map +1 -1
  33. package/dist/etcd.d.ts +25 -0
  34. package/dist/etcd.d.ts.map +1 -0
  35. package/dist/etcd.js +109 -0
  36. package/dist/etcd.js.map +1 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +14 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/lexicon/index.d.ts +6 -0
  41. package/dist/lexicon/index.d.ts.map +1 -1
  42. package/dist/lexicon/index.js +12 -0
  43. package/dist/lexicon/index.js.map +1 -1
  44. package/dist/lexicon/lexicons.d.ts +412 -158
  45. package/dist/lexicon/lexicons.d.ts.map +1 -1
  46. package/dist/lexicon/lexicons.js +222 -81
  47. package/dist/lexicon/lexicons.js.map +1 -1
  48. package/dist/lexicon/types/app/bsky/embed/video.d.ts +1 -0
  49. package/dist/lexicon/types/app/bsky/embed/video.d.ts.map +1 -1
  50. package/dist/lexicon/types/app/bsky/embed/video.js.map +1 -1
  51. package/dist/lexicon/types/app/bsky/labeler/defs.d.ts +7 -0
  52. package/dist/lexicon/types/app/bsky/labeler/defs.d.ts.map +1 -1
  53. package/dist/lexicon/types/app/bsky/labeler/defs.js.map +1 -1
  54. package/dist/lexicon/types/app/bsky/labeler/service.d.ts +7 -0
  55. package/dist/lexicon/types/app/bsky/labeler/service.d.ts.map +1 -1
  56. package/dist/lexicon/types/app/bsky/labeler/service.js.map +1 -1
  57. package/dist/lexicon/types/com/atproto/identity/defs.d.ts +17 -0
  58. package/dist/lexicon/types/com/atproto/identity/defs.d.ts.map +1 -0
  59. package/dist/lexicon/types/com/atproto/identity/defs.js +16 -0
  60. package/dist/lexicon/types/com/atproto/identity/defs.js.map +1 -0
  61. package/dist/lexicon/types/com/atproto/identity/refreshIdentity.d.ts +39 -0
  62. package/dist/lexicon/types/com/atproto/identity/refreshIdentity.d.ts.map +1 -0
  63. package/dist/lexicon/types/com/atproto/identity/refreshIdentity.js +7 -0
  64. package/dist/lexicon/types/com/atproto/identity/refreshIdentity.js.map +1 -0
  65. package/dist/lexicon/types/com/atproto/identity/resolveDid.d.ts +40 -0
  66. package/dist/lexicon/types/com/atproto/identity/resolveDid.d.ts.map +1 -0
  67. package/dist/lexicon/types/com/atproto/identity/resolveDid.js +7 -0
  68. package/dist/lexicon/types/com/atproto/identity/resolveDid.js.map +1 -0
  69. package/dist/lexicon/types/com/atproto/identity/resolveHandle.d.ts +1 -0
  70. package/dist/lexicon/types/com/atproto/identity/resolveHandle.d.ts.map +1 -1
  71. package/dist/lexicon/types/com/atproto/identity/resolveIdentity.d.ts +36 -0
  72. package/dist/lexicon/types/com/atproto/identity/resolveIdentity.d.ts.map +1 -0
  73. package/dist/lexicon/types/com/atproto/identity/resolveIdentity.js +7 -0
  74. package/dist/lexicon/types/com/atproto/identity/resolveIdentity.js.map +1 -0
  75. package/dist/lexicon/types/com/atproto/moderation/defs.d.ts +2 -0
  76. package/dist/lexicon/types/com/atproto/moderation/defs.d.ts.map +1 -1
  77. package/dist/lexicon/types/com/atproto/repo/listRecords.d.ts +0 -4
  78. package/dist/lexicon/types/com/atproto/repo/listRecords.d.ts.map +1 -1
  79. package/dist/lexicon/types/com/atproto/repo/listRecords.js.map +1 -1
  80. package/dist/lexicon/types/com/atproto/sync/getRecord.d.ts +0 -2
  81. package/dist/lexicon/types/com/atproto/sync/getRecord.d.ts.map +1 -1
  82. package/dist/lexicon/types/com/atproto/sync/subscribeRepos.d.ts +1 -30
  83. package/dist/lexicon/types/com/atproto/sync/subscribeRepos.d.ts.map +1 -1
  84. package/dist/lexicon/types/com/atproto/sync/subscribeRepos.js +0 -27
  85. package/dist/lexicon/types/com/atproto/sync/subscribeRepos.js.map +1 -1
  86. package/dist/logger.d.ts +1 -0
  87. package/dist/logger.d.ts.map +1 -1
  88. package/dist/logger.js +2 -1
  89. package/dist/logger.js.map +1 -1
  90. package/dist/views/index.d.ts.map +1 -1
  91. package/dist/views/index.js +6 -3
  92. package/dist/views/index.js.map +1 -1
  93. package/package.json +14 -13
  94. package/src/api/app/bsky/notification/listNotifications.ts +28 -6
  95. package/src/config.ts +45 -15
  96. package/src/context.ts +12 -1
  97. package/src/data-plane/client/hosts.ts +103 -0
  98. package/src/data-plane/client/index.ts +123 -0
  99. package/src/data-plane/client/util.ts +66 -0
  100. package/src/data-plane/server/db/pagination.ts +158 -35
  101. package/src/data-plane/server/routes/notifs.ts +4 -9
  102. package/src/etcd.ts +90 -0
  103. package/src/index.ts +26 -2
  104. package/src/lexicon/index.ts +36 -0
  105. package/src/lexicon/lexicons.ts +243 -84
  106. package/src/lexicon/types/app/bsky/embed/video.ts +1 -0
  107. package/src/lexicon/types/app/bsky/labeler/defs.ts +7 -0
  108. package/src/lexicon/types/app/bsky/labeler/service.ts +7 -0
  109. package/src/lexicon/types/com/atproto/identity/defs.ts +30 -0
  110. package/src/lexicon/types/com/atproto/identity/refreshIdentity.ts +52 -0
  111. package/src/lexicon/types/com/atproto/identity/resolveDid.ts +52 -0
  112. package/src/lexicon/types/com/atproto/identity/resolveHandle.ts +1 -0
  113. package/src/lexicon/types/com/atproto/identity/resolveIdentity.ts +48 -0
  114. package/src/lexicon/types/com/atproto/moderation/defs.ts +3 -0
  115. package/src/lexicon/types/com/atproto/repo/listRecords.ts +0 -4
  116. package/src/lexicon/types/com/atproto/sync/getRecord.ts +0 -2
  117. package/src/lexicon/types/com/atproto/sync/subscribeRepos.ts +0 -59
  118. package/src/logger.ts +2 -0
  119. package/src/views/index.ts +6 -3
  120. package/tests/etcd.test.ts +301 -0
  121. package/tests/views/__snapshots__/labeler-service.test.ts.snap +46 -0
  122. package/tests/views/__snapshots__/notifications.test.ts.snap +3 -3
  123. package/tests/views/labeler-service.test.ts +50 -1
  124. package/tests/views/notifications.test.ts +190 -10
  125. package/tsconfig.build.tsbuildinfo +1 -1
  126. package/tsconfig.tests.tsbuildinfo +1 -1
  127. package/dist/data-plane/client.d.ts.map +0 -1
  128. package/dist/data-plane/client.js +0 -156
  129. package/dist/data-plane/client.js.map +0 -1
  130. package/src/data-plane/client.ts +0 -154
@@ -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
- }