+1
-1
.github/workflows/build-and-push-ghcr.yaml
+1
-1
.github/workflows/build-and-push-ghcr.yaml
-2
ACCOUNT_MIGRATION.md
-2
ACCOUNT_MIGRATION.md
···
1
1
# Account Migration
2
2
3
-
**Update May 2025:** An updated guide to account migration is now [part of the atproto specifications](https://atproto.com/guides/account-migration). There is also [a blog post available](https://whtwnd.com/bnewbold.net/3l5ii332pf32u) which describes how to do an account migration using a command-line tool (`goat`).
4
-
5
3
### ⚠️ Warning ⚠️ ️
6
4
Account migration is a potentially destructive operation. Part of the operation involves signing away your old PDS's ability to make updates to your DID. If something goes wrong, you could be permanently locked out of your account, and Bluesky will not be able to help you recover it.
7
5
-8
README.md
-8
README.md
···
228
228
229
229
_Note: Your PDS will need to be restarted with those variables. This varies depending on your setup. If you followed this installation guide, run `systemctl restart pds`. You might need to restart the server or recreate the container, depending on what you are using._
230
230
231
-
#### Common SMTP issues
232
-
233
-
If you find that your test messages using cURL or other sources go out correctly, but you are not receiving emails from your PDS, you may need to URL encode your username and password on `/pds/pds.env` and restart the PDS service.
234
-
235
-
If the username and/or password contain special characters, the special characters will need to be [percent encoded](https://en.wikipedia.org/wiki/Percent-encoding). For some email services, the username will contain an extra `@` symbol that will also need to be percent encoded. For example, the URL `user&name@oci:p@ssword@smtphost:465` after percent encoding for the username and password fields would become `user%26name%40oci:p%40ssword@smtphost:465`.
236
-
237
-
If you are migrating an account, Bluesky's UI will ask you to confirm your email address. The confirmation code email is meant to come from your PDS. If you are encountering issues with SMTP and want to confirm the address before solving it, you can find the confirmation code on the `email_token` table on `accounts.sqlite`.
238
-
239
231
### Logging
240
232
241
233
By default, logs from the PDS are printed to `stdout` and end up in Docker's log. You can browse them by running:
+7
-1
installer.sh
+7
-1
installer.sh
···
31
31
openssl
32
32
sqlite3
33
33
xxd
34
-
jq
35
34
"
36
35
# Docker packages.
37
36
REQUIRED_DOCKER_PACKAGES="
···
215
214
fi
216
215
217
216
# Admin email
217
+
if [[ -z "${PDS_ADMIN_EMAIL}" ]]; then
218
+
read -p "Enter an admin email address (e.g. you@example.com): " PDS_ADMIN_EMAIL
219
+
fi
220
+
if [[ -z "${PDS_ADMIN_EMAIL}" ]]; then
221
+
usage "No admin email specified"
222
+
fi
223
+
218
224
if [[ -z "${PDS_ADMIN_EMAIL}" ]]; then
219
225
read -p "Enter an admin email address (e.g. you@example.com): " PDS_ADMIN_EMAIL
220
226
fi
+1
-1
service/package.json
+1
-1
service/package.json
+77
-64
service/pnpm-lock.yaml
+77
-64
service/pnpm-lock.yaml
···
6
6
7
7
dependencies:
8
8
'@atproto/pds':
9
-
specifier: 0.4.138
10
-
version: 0.4.138
9
+
specifier: 0.4.166
10
+
version: 0.4.166
11
11
12
12
packages:
13
13
···
42
42
resolution: {integrity: sha512-0bRbAlI8Ayh03wRwncAMEAyUKtZ+AuTS1jgPrfym1WVOAOiottI/ZmgccqLl6w5MbxVcClNQF7WYGKvGwGoIhA==}
43
43
dev: false
44
44
45
-
/@atproto-labs/xrpc-utils@0.0.14:
46
-
resolution: {integrity: sha512-/f0Dhzi08w3Oqv38wdwQ5bw238GbxhYIcxg08kVReEMTlkyRDC6H5RuqHf8Ff9J3FKqjKHGdxaOdrPNM1hCgeQ==}
45
+
/@atproto-labs/xrpc-utils@0.0.18:
46
+
resolution: {integrity: sha512-Cwrlx2JcLe0jxCK8b3GCT3HRGaH3yPhyyt+3n4JykJapCaGBKqa6FHGs9hK2Fx6lOyPF7TnV5qUPUsJ1qGEUVA==}
47
47
dependencies:
48
-
'@atproto/xrpc': 0.7.0
49
-
'@atproto/xrpc-server': 0.7.18
48
+
'@atproto/xrpc': 0.7.1
49
+
'@atproto/xrpc-server': 0.9.1
50
50
transitivePeerDependencies:
51
51
- bufferutil
52
52
- supports-color
53
53
- utf-8-validate
54
54
dev: false
55
55
56
-
/@atproto/api@0.15.8:
57
-
resolution: {integrity: sha512-PsCgmV4zPjN8VuJMruxqauhn88PuS0b8t2Xsjl4617+bCPpY513jVlxgNH/XExxO7TSVvJM7EzdLY4o3fqh/xQ==}
56
+
/@atproto/api@0.16.2:
57
+
resolution: {integrity: sha512-sSTg31J8ws8DNaoiizp+/uJideRxRaJsq+Nyl8rnSxGw0w3oCvoeRU19iRWh2t0jZEmiRJAGkveGu23NKmPYEQ==}
58
58
dependencies:
59
59
'@atproto/common-web': 0.4.2
60
-
'@atproto/lexicon': 0.4.11
60
+
'@atproto/lexicon': 0.4.12
61
61
'@atproto/syntax': 0.4.0
62
-
'@atproto/xrpc': 0.7.0
62
+
'@atproto/xrpc': 0.7.1
63
63
await-lock: 2.2.2
64
64
multiformats: 9.9.0
65
65
tlds: 1.250.0
66
66
zod: 3.23.8
67
67
dev: false
68
68
69
-
/@atproto/aws@0.2.21:
70
-
resolution: {integrity: sha512-bosExZ3YdFjOehNBcNWsC2mZBrAVLO8Ut/JquypXSahFeeXZP/9rd9F1VGf+vAmjFEKagHXQCb6CRFfJyN+I7A==}
69
+
/@atproto/aws@0.2.25:
70
+
resolution: {integrity: sha512-LT4uuda2mjXz2WT4xo7g2aWmWKl+JWusGzscqQpOlD/RFGFXKDmUcVWLVPKY+9Pys2F7X6tyDlm2aUx+/dYdYA==}
71
71
engines: {node: '>=18.7.0'}
72
72
dependencies:
73
73
'@atproto/common': 0.4.11
74
74
'@atproto/crypto': 0.4.4
75
-
'@atproto/repo': 0.8.1
75
+
'@atproto/repo': 0.8.5
76
76
'@aws-sdk/client-cloudfront': 3.515.0
77
77
'@aws-sdk/client-kms': 3.515.0
78
78
'@aws-sdk/client-s3': 3.515.0
···
134
134
uint8arrays: 3.0.0
135
135
dev: false
136
136
137
+
/@atproto/did@0.1.5:
138
+
resolution: {integrity: sha512-8+1D08QdGE5TF0bB0vV8HLVrVZJeLNITpRTUVEoABNMRaUS7CoYSVb0+JNQDeJIVmqMjOL8dOjvCUDkp3gEaGQ==}
139
+
dependencies:
140
+
zod: 3.23.8
141
+
dev: false
142
+
137
143
/@atproto/identity@0.4.8:
138
144
resolution: {integrity: sha512-Z0sLnJ87SeNdAifT+rqpgE1Rc3layMMW25gfWNo4u40RGuRODbdfAZlTwBSU2r+Vk45hU+iE+xeQspfednCEnA==}
139
145
engines: {node: '>=18.7.0'}
···
142
148
'@atproto/crypto': 0.4.4
143
149
dev: false
144
150
145
-
/@atproto/jwk-jose@0.1.6:
146
-
resolution: {integrity: sha512-r4DGMvvmazy6CxqAcnplpUxvp6Vd8UwKxQBZRpmm1aNsVonf5qj1yeDkECTiwoe/FPbvtdamlzClB3UZc7Yb5w==}
151
+
/@atproto/jwk-jose@0.1.9:
152
+
resolution: {integrity: sha512-HT9GcUe6htDxI5OSYXWdeS6QZ9lpuDDvJk508ppi8a48E/1f8eumoM0QhgbFRF9IKAnnFrtnZDOAvljQzFKwwQ==}
147
153
dependencies:
148
-
'@atproto/jwk': 0.1.5
154
+
'@atproto/jwk': 0.4.0
149
155
jose: 5.2.2
150
156
dev: false
151
157
152
-
/@atproto/jwk@0.1.5:
153
-
resolution: {integrity: sha512-OzZFLhX41TOcMeanP3aZlL5bLeaUIZT15MI4aU5cwflNq/rwpGOpz3uwDjZc8ytgUjuTQ8LabSz5jMmwoTSWFg==}
158
+
/@atproto/jwk@0.4.0:
159
+
resolution: {integrity: sha512-tvp4iZrzqEzKCeTOKz50/o6WdsZzOuWmWjF6On5QAp04fLwLpsFu2Hixgx/lA1KBO0O4sns7YSGcAqSSX6Rdog==}
154
160
dependencies:
155
161
multiformats: 9.9.0
156
162
zod: 3.23.8
157
163
dev: false
158
164
159
-
/@atproto/lexicon@0.4.11:
160
-
resolution: {integrity: sha512-btefdnvNz2Ao2I+qbmj0F06HC8IlrM/IBz6qOBS50r0S6uDf5tOO+Mv2tSVdimFkdzyDdLtBI1sV36ONxz2cOw==}
165
+
/@atproto/lexicon@0.4.12:
166
+
resolution: {integrity: sha512-fcEvEQ1GpQYF5igZ4IZjPWEoWVpsEF22L9RexxLS3ptfySXLflEyH384e7HITzO/73McDeaJx3lqHIuqn9ulnw==}
161
167
dependencies:
162
168
'@atproto/common-web': 0.4.2
163
169
'@atproto/syntax': 0.4.0
···
166
172
zod: 3.23.8
167
173
dev: false
168
174
169
-
/@atproto/oauth-provider-api@0.1.2:
170
-
resolution: {integrity: sha512-tNAuMrE6D3696euavxo1+Jh7Re0PPwJstbyY8SrdVPXgKJh/LrbpKUKiPNW/p5KyVfRs2tWeAxy+ReESu6SmXA==}
175
+
/@atproto/oauth-provider-api@0.2.0:
176
+
resolution: {integrity: sha512-u18VRCDuz5BloUQKbvTISjQk7CgpDI1hf3leoJ7ADOAo8oW71QZD0tsWDX81R2uB66mKZHptjGSSVxxqpZFipQ==}
171
177
dependencies:
172
-
'@atproto/jwk': 0.1.5
173
-
'@atproto/oauth-types': 0.2.7
178
+
'@atproto/jwk': 0.4.0
179
+
'@atproto/oauth-types': 0.4.0
174
180
dev: false
175
181
176
-
/@atproto/oauth-provider-frontend@0.1.4:
177
-
resolution: {integrity: sha512-TLKL5lTmSieHx7+3RVIx7rIxRPP1SNCwzzdTvYB46yd1XrGHdPU//M6CP5OZ1BvcxF6H4JXIkOSWvFseol+gOw==}
182
+
/@atproto/oauth-provider-frontend@0.1.11:
183
+
resolution: {integrity: sha512-MvPUI+vh8a8UWmpAV8VS2qrdJ/B6l75qDQX1z6vF1YkPR1d9SLEdOYx/O26g5ZyuN+Mk00OBdOSfjvON/UOxQA==}
178
184
engines: {node: '>=18.7.0'}
179
185
optionalDependencies:
180
-
'@atproto/oauth-provider-api': 0.1.2
186
+
'@atproto/oauth-provider-api': 0.2.0
181
187
dev: false
182
188
183
-
/@atproto/oauth-provider-ui@0.1.5:
184
-
resolution: {integrity: sha512-pW0Vx3kvIWH1Mu3SOImNHP9JbmhSj2e3ChDvtfXCWI1oC03fiaMlJfdxrx9Plq5Z+DajnCzPzrf1Lvbopjf94Q==}
189
+
/@atproto/oauth-provider-ui@0.2.0:
190
+
resolution: {integrity: sha512-v4rzz3C8i2NBqxycWWDTeosHtv6B9+EW4ZCq9Il6thmHdtT2CmB07R5Ia7zQ1n7lylxI6mC9JqA9CLis0uLz+Q==}
185
191
engines: {node: '>=18.7.0'}
186
192
optionalDependencies:
187
-
'@atproto/oauth-provider-api': 0.1.2
193
+
'@atproto/oauth-provider-api': 0.2.0
188
194
dev: false
189
195
190
-
/@atproto/oauth-provider@0.7.7:
191
-
resolution: {integrity: sha512-ElphzmOjw1hr42HN4dD6sMAQFtpTkaJ8bBDAsbL9YBVJDEGhmHsF3Ye8mDUO4nhEdg7PUTWiCzXyqnaorAjiTA==}
196
+
/@atproto/oauth-provider@0.10.0:
197
+
resolution: {integrity: sha512-WbDaMC/9Zd4oslA4pPvf7ozum0YAQRxNspYpEauXtJ/bjVxqViKgV158jnPhDbYfo62NkxSuSaUkTV116U/VBg==}
192
198
engines: {node: '>=18.7.0'}
193
199
dependencies:
194
200
'@atproto-labs/fetch': 0.2.3
···
197
203
'@atproto-labs/simple-store': 0.2.0
198
204
'@atproto-labs/simple-store-memory': 0.1.3
199
205
'@atproto/common': 0.4.11
200
-
'@atproto/jwk': 0.1.5
201
-
'@atproto/jwk-jose': 0.1.6
202
-
'@atproto/oauth-provider-api': 0.1.2
203
-
'@atproto/oauth-provider-frontend': 0.1.4
204
-
'@atproto/oauth-provider-ui': 0.1.5
205
-
'@atproto/oauth-types': 0.2.7
206
+
'@atproto/did': 0.1.5
207
+
'@atproto/jwk': 0.4.0
208
+
'@atproto/jwk-jose': 0.1.9
209
+
'@atproto/oauth-provider-api': 0.2.0
210
+
'@atproto/oauth-provider-frontend': 0.1.11
211
+
'@atproto/oauth-provider-ui': 0.2.0
212
+
'@atproto/oauth-scopes': 0.0.1
213
+
'@atproto/oauth-types': 0.4.0
206
214
'@atproto/syntax': 0.4.0
207
215
'@hapi/accept': 6.0.3
208
216
'@hapi/address': 5.1.1
209
217
'@hapi/bourne': 3.0.0
210
218
'@hapi/content': 6.0.0
211
-
cookie: 0.6.0
219
+
cookie: 0.7.2
212
220
disposable-email-domains-js: 1.5.0
213
221
forwarded: 0.2.0
214
222
http-errors: 2.0.0
···
219
227
- supports-color
220
228
dev: false
221
229
222
-
/@atproto/oauth-types@0.2.7:
223
-
resolution: {integrity: sha512-2SlDveiSI0oowC+sfuNd/npV8jw/FhokSS26qyUyldTg1g9ZlhxXUfMP4IZOPeZcVn9EszzQRHs1H9ZJqVQIew==}
230
+
/@atproto/oauth-scopes@0.0.1:
231
+
resolution: {integrity: sha512-9IGgwM0KrWUwRTg02o4GKZaoKJLOkFwtkq2i39pYQxqJm18jvEvadxW/sR1A5f9f2vbTZtECgIziU5hdd01U5Q==}
232
+
dev: false
233
+
234
+
/@atproto/oauth-types@0.4.0:
235
+
resolution: {integrity: sha512-FrRH9JsPw9H4JxfPDrbrI+pB102tbHTygajfHay7xwz78HPOjSbWPRgWW2hYS4w8vDYdB3PYbBj1jPoKetW7LA==}
224
236
dependencies:
225
-
'@atproto/jwk': 0.1.5
237
+
'@atproto/jwk': 0.4.0
226
238
zod: 3.23.8
227
239
dev: false
228
240
229
-
/@atproto/pds@0.4.138:
230
-
resolution: {integrity: sha512-WLzDhmguTgs2wQNKoGxCbpKNegDnRiemSslenMbPrB7kSiXYj+XZobLyoIXHv1EnAd2pbThwNEL8z8EfkM0mDg==}
241
+
/@atproto/pds@0.4.166:
242
+
resolution: {integrity: sha512-LwLiLQNOZsZ4LgD4qmtWf3W5FJEaTA3Bi3Y1x79TXrBfcvcmIoNYBUE0WOLmDFfLyp44caODqS6HCLvqc11T7g==}
231
243
engines: {node: '>=18.7.0'}
232
244
dependencies:
233
245
'@atproto-labs/fetch-node': 0.1.9
234
-
'@atproto-labs/xrpc-utils': 0.0.14
235
-
'@atproto/api': 0.15.8
236
-
'@atproto/aws': 0.2.21
246
+
'@atproto-labs/xrpc-utils': 0.0.18
247
+
'@atproto/api': 0.16.2
248
+
'@atproto/aws': 0.2.25
237
249
'@atproto/common': 0.4.11
238
250
'@atproto/crypto': 0.4.4
239
251
'@atproto/identity': 0.4.8
240
-
'@atproto/lexicon': 0.4.11
241
-
'@atproto/oauth-provider': 0.7.7
242
-
'@atproto/repo': 0.8.1
252
+
'@atproto/lexicon': 0.4.12
253
+
'@atproto/oauth-provider': 0.10.0
254
+
'@atproto/oauth-scopes': 0.0.1
255
+
'@atproto/repo': 0.8.5
243
256
'@atproto/syntax': 0.4.0
244
-
'@atproto/xrpc': 0.7.0
245
-
'@atproto/xrpc-server': 0.7.18
257
+
'@atproto/xrpc': 0.7.1
258
+
'@atproto/xrpc-server': 0.9.1
246
259
'@did-plc/lib': 0.0.4
247
260
'@hapi/address': 5.1.1
248
261
better-sqlite3: 10.1.0
···
279
292
- utf-8-validate
280
293
dev: false
281
294
282
-
/@atproto/repo@0.8.1:
283
-
resolution: {integrity: sha512-d1NtHhXYJVJlFVI6mbVOUnpB0rnhqxPnZcALkJoYJjaDPVr4NNqRFAtrwb+GHzxT6DhijoXYQf24pKGfEFDd4g==}
295
+
/@atproto/repo@0.8.5:
296
+
resolution: {integrity: sha512-QZ4UWBWDyPMXgPhktmaRYRyCXIw7lIEAyGtaFy7UmCPpJ5TtFKw3GhGrEiNz/fY3/6lrkdDj44/Tzkud/eP/VQ==}
284
297
engines: {node: '>=18.7.0'}
285
298
dependencies:
286
299
'@atproto/common': 0.4.11
287
300
'@atproto/common-web': 0.4.2
288
301
'@atproto/crypto': 0.4.4
289
-
'@atproto/lexicon': 0.4.11
302
+
'@atproto/lexicon': 0.4.12
290
303
'@ipld/dag-cbor': 7.0.3
291
304
multiformats: 9.9.0
292
305
uint8arrays: 3.0.0
···
298
311
resolution: {integrity: sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==}
299
312
dev: false
300
313
301
-
/@atproto/xrpc-server@0.7.18:
302
-
resolution: {integrity: sha512-kjlAsI+UNbbm6AK3Y5Hb4BJ7VQHNKiYYu2kX5vhZJZHO8qfO40GPYYb/2TknZV8IG6fDPBQhUpcDRolI86sgag==}
314
+
/@atproto/xrpc-server@0.9.1:
315
+
resolution: {integrity: sha512-AJfxsKrZgKL/5362Rc0oUEjlgpDCmY/soeyLHHjid8J6clbErAdJVCuFwW4T40aHGFY1J13a29ucwbSfOROx6w==}
303
316
engines: {node: '>=18.7.0'}
304
317
dependencies:
305
318
'@atproto/common': 0.4.11
306
319
'@atproto/crypto': 0.4.4
307
-
'@atproto/lexicon': 0.4.11
308
-
'@atproto/xrpc': 0.7.0
320
+
'@atproto/lexicon': 0.4.12
321
+
'@atproto/xrpc': 0.7.1
309
322
cbor-x: 1.5.8
310
323
express: 4.18.2
311
324
http-errors: 2.0.0
···
320
333
- utf-8-validate
321
334
dev: false
322
335
323
-
/@atproto/xrpc@0.7.0:
324
-
resolution: {integrity: sha512-SfhP9dGx2qclaScFDb58Jnrmim5nk4geZXCqg6sB0I/KZhZEkr9iIx1hLCp+sxkIfEsmEJjeWO4B0rjUIJW5cw==}
336
+
/@atproto/xrpc@0.7.1:
337
+
resolution: {integrity: sha512-ANHEzlskYlMEdH18m+Itp3a8d0pEJao2qoDybDoMupTnoeNkya4VKIaOgAi6ERQnqatBBZyn9asW+7rJmSt/8g==}
325
338
dependencies:
326
-
'@atproto/lexicon': 0.4.11
339
+
'@atproto/lexicon': 0.4.12
327
340
zod: 3.23.8
328
341
dev: false
329
342
···
2186
2199
engines: {node: '>= 0.6'}
2187
2200
dev: false
2188
2201
2189
-
/cookie@0.6.0:
2190
-
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
2202
+
/cookie@0.7.2:
2203
+
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
2191
2204
engines: {node: '>= 0.6'}
2192
2205
dev: false
2193
2206