+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
# Account Migration
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
### ⚠️ Warning ⚠️ ️
6
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
···
1
# Account Migration
2
3
### ⚠️ Warning ⚠️ ️
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.
5
-8
README.md
-8
README.md
···
228
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
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
### Logging
240
241
By default, logs from the PDS are printed to `stdout` and end up in Docker's log. You can browse them by running:
···
228
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
231
### Logging
232
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
openssl
32
sqlite3
33
xxd
34
"
35
# Docker packages.
36
REQUIRED_DOCKER_PACKAGES="
···
214
fi
215
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
+
224
if [[ -z "${PDS_ADMIN_EMAIL}" ]]; then
225
read -p "Enter an admin email address (e.g. you@example.com): " PDS_ADMIN_EMAIL
226
fi
+1
-1
service/package.json
+1
-1
service/package.json
+57
-51
service/pnpm-lock.yaml
+57
-51
service/pnpm-lock.yaml
···
6
7
dependencies:
8
'@atproto/pds':
9
-
specifier: 0.4.158
10
-
version: 0.4.158
11
12
packages:
13
···
42
resolution: {integrity: sha512-0bRbAlI8Ayh03wRwncAMEAyUKtZ+AuTS1jgPrfym1WVOAOiottI/ZmgccqLl6w5MbxVcClNQF7WYGKvGwGoIhA==}
43
dev: false
44
45
-
/@atproto-labs/xrpc-utils@0.0.16:
46
-
resolution: {integrity: sha512-WvTQhGjIhFrd/0pMGecE7Xn8BtvvKAgVlNs8UaE6CVRifiCOIvIBwlx1vnslJAavK3FtwL1kKkUdxNtxHciZSQ==}
47
dependencies:
48
-
'@atproto/xrpc': 0.7.0
49
-
'@atproto/xrpc-server': 0.8.0
50
transitivePeerDependencies:
51
- bufferutil
52
- supports-color
53
- utf-8-validate
54
dev: false
55
56
-
/@atproto/api@0.15.23:
57
-
resolution: {integrity: sha512-qrXMPDs8xUugQyNxU5jm5xlhfx60SzOIzmHkZkI7ExYQFjX6juCabR9t8LofIUSiZKRY1PcU4QUFyhQIsjFuVg==}
58
dependencies:
59
'@atproto/common-web': 0.4.2
60
-
'@atproto/lexicon': 0.4.11
61
'@atproto/syntax': 0.4.0
62
-
'@atproto/xrpc': 0.7.0
63
await-lock: 2.2.2
64
multiformats: 9.9.0
65
tlds: 1.250.0
66
zod: 3.23.8
67
dev: false
68
69
-
/@atproto/aws@0.2.24:
70
-
resolution: {integrity: sha512-4XZQGitPJR56tFt1bzPJKOqp3vTVcfVsEAFo9FGWp7Es+jj742aVgfWEe64O0VoZp3ZTiD7XhwsLJArz7NJTlQ==}
71
engines: {node: '>=18.7.0'}
72
dependencies:
73
'@atproto/common': 0.4.11
74
'@atproto/crypto': 0.4.4
75
-
'@atproto/repo': 0.8.4
76
'@aws-sdk/client-cloudfront': 3.515.0
77
'@aws-sdk/client-kms': 3.515.0
78
'@aws-sdk/client-s3': 3.515.0
···
162
zod: 3.23.8
163
dev: false
164
165
-
/@atproto/lexicon@0.4.11:
166
-
resolution: {integrity: sha512-btefdnvNz2Ao2I+qbmj0F06HC8IlrM/IBz6qOBS50r0S6uDf5tOO+Mv2tSVdimFkdzyDdLtBI1sV36ONxz2cOw==}
167
dependencies:
168
'@atproto/common-web': 0.4.2
169
'@atproto/syntax': 0.4.0
···
172
zod: 3.23.8
173
dev: false
174
175
-
/@atproto/oauth-provider-api@0.1.6:
176
-
resolution: {integrity: sha512-4Q6ZCnTmmdiWiA+KMrfbZmqjxTSgMe+YE68+3RccwOCIgPt171TiDHGKIayep9n1RDnuucVQoqvVXOT4kmAsjw==}
177
dependencies:
178
'@atproto/jwk': 0.4.0
179
'@atproto/oauth-types': 0.4.0
180
dev: false
181
182
-
/@atproto/oauth-provider-frontend@0.1.10:
183
-
resolution: {integrity: sha512-bOFpi5OIxWv4Q9ci1+PAXEzIZaiu5inepC7pRFYqgqgLoCO0MWH/5Qkn/f6jMpDwPdtBqAiPg9tjE7E3le6NJA==}
184
engines: {node: '>=18.7.0'}
185
optionalDependencies:
186
-
'@atproto/oauth-provider-api': 0.1.6
187
dev: false
188
189
-
/@atproto/oauth-provider-ui@0.1.11:
190
-
resolution: {integrity: sha512-9fflyDt4Y3RDJIfbonxVeMbQtLLQrkQSDhWhPXp9xbZ/uYBddaAw+svBfFoMY7dxdlJbQeUPobsUctEm3qAILg==}
191
engines: {node: '>=18.7.0'}
192
optionalDependencies:
193
-
'@atproto/oauth-provider-api': 0.1.6
194
dev: false
195
196
-
/@atproto/oauth-provider@0.9.3:
197
-
resolution: {integrity: sha512-TAhsCYDB/1twEA1vqjLAz7lxKI8W59eNs239MujE35Cc9l4lRHyMopoFv5JmgNnxDvloB5l6RxpTbXVC6wnKpQ==}
198
engines: {node: '>=18.7.0'}
199
dependencies:
200
'@atproto-labs/fetch': 0.2.3
···
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.1.6
210
-
'@atproto/oauth-provider-frontend': 0.1.10
211
-
'@atproto/oauth-provider-ui': 0.1.11
212
'@atproto/oauth-types': 0.4.0
213
'@atproto/syntax': 0.4.0
214
'@hapi/accept': 6.0.3
215
'@hapi/address': 5.1.1
216
'@hapi/bourne': 3.0.0
217
'@hapi/content': 6.0.0
218
-
cookie: 0.6.0
219
disposable-email-domains-js: 1.5.0
220
forwarded: 0.2.0
221
http-errors: 2.0.0
···
226
- supports-color
227
dev: false
228
229
/@atproto/oauth-types@0.4.0:
230
resolution: {integrity: sha512-FrRH9JsPw9H4JxfPDrbrI+pB102tbHTygajfHay7xwz78HPOjSbWPRgWW2hYS4w8vDYdB3PYbBj1jPoKetW7LA==}
231
dependencies:
···
233
zod: 3.23.8
234
dev: false
235
236
-
/@atproto/pds@0.4.158:
237
-
resolution: {integrity: sha512-xSnYmyXNavS5QiXJprdgma2HVc9mRjFDdNeIkLg9jLU9K7uGhGnlIHje1eTXY4xutER/Cn8mmR8JDKcbR614lQ==}
238
engines: {node: '>=18.7.0'}
239
dependencies:
240
'@atproto-labs/fetch-node': 0.1.9
241
-
'@atproto-labs/xrpc-utils': 0.0.16
242
-
'@atproto/api': 0.15.23
243
-
'@atproto/aws': 0.2.24
244
'@atproto/common': 0.4.11
245
'@atproto/crypto': 0.4.4
246
'@atproto/identity': 0.4.8
247
-
'@atproto/lexicon': 0.4.11
248
-
'@atproto/oauth-provider': 0.9.3
249
-
'@atproto/repo': 0.8.4
250
'@atproto/syntax': 0.4.0
251
-
'@atproto/xrpc': 0.7.0
252
-
'@atproto/xrpc-server': 0.8.0
253
'@did-plc/lib': 0.0.4
254
'@hapi/address': 5.1.1
255
better-sqlite3: 10.1.0
···
286
- utf-8-validate
287
dev: false
288
289
-
/@atproto/repo@0.8.4:
290
-
resolution: {integrity: sha512-WgyARo6UcOnhbRsRVuNjXOH5MPTTHVDsaIavPeQl5erq5foE/pQKC7B7FLTJmhpC6GPZHJ5M2doAyXRXv5UHGA==}
291
engines: {node: '>=18.7.0'}
292
dependencies:
293
'@atproto/common': 0.4.11
294
'@atproto/common-web': 0.4.2
295
'@atproto/crypto': 0.4.4
296
-
'@atproto/lexicon': 0.4.11
297
'@ipld/dag-cbor': 7.0.3
298
multiformats: 9.9.0
299
uint8arrays: 3.0.0
···
305
resolution: {integrity: sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==}
306
dev: false
307
308
-
/@atproto/xrpc-server@0.8.0:
309
-
resolution: {integrity: sha512-jDAEVHVhM4IvC0y491gXBuD4b1D9/XrM3HaEronRneAdNZ0qE0nsiJNqiHfQ6r4BvFdHnABM9KyHV9EQTvmxfg==}
310
engines: {node: '>=18.7.0'}
311
dependencies:
312
'@atproto/common': 0.4.11
313
'@atproto/crypto': 0.4.4
314
-
'@atproto/lexicon': 0.4.11
315
-
'@atproto/xrpc': 0.7.0
316
cbor-x: 1.5.8
317
express: 4.18.2
318
http-errors: 2.0.0
···
327
- utf-8-validate
328
dev: false
329
330
-
/@atproto/xrpc@0.7.0:
331
-
resolution: {integrity: sha512-SfhP9dGx2qclaScFDb58Jnrmim5nk4geZXCqg6sB0I/KZhZEkr9iIx1hLCp+sxkIfEsmEJjeWO4B0rjUIJW5cw==}
332
dependencies:
333
-
'@atproto/lexicon': 0.4.11
334
zod: 3.23.8
335
dev: false
336
···
2193
engines: {node: '>= 0.6'}
2194
dev: false
2195
2196
-
/cookie@0.6.0:
2197
-
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
2198
engines: {node: '>= 0.6'}
2199
dev: false
2200
···
6
7
dependencies:
8
'@atproto/pds':
9
+
specifier: 0.4.166
10
+
version: 0.4.166
11
12
packages:
13
···
42
resolution: {integrity: sha512-0bRbAlI8Ayh03wRwncAMEAyUKtZ+AuTS1jgPrfym1WVOAOiottI/ZmgccqLl6w5MbxVcClNQF7WYGKvGwGoIhA==}
43
dev: false
44
45
+
/@atproto-labs/xrpc-utils@0.0.18:
46
+
resolution: {integrity: sha512-Cwrlx2JcLe0jxCK8b3GCT3HRGaH3yPhyyt+3n4JykJapCaGBKqa6FHGs9hK2Fx6lOyPF7TnV5qUPUsJ1qGEUVA==}
47
dependencies:
48
+
'@atproto/xrpc': 0.7.1
49
+
'@atproto/xrpc-server': 0.9.1
50
transitivePeerDependencies:
51
- bufferutil
52
- supports-color
53
- utf-8-validate
54
dev: false
55
56
+
/@atproto/api@0.16.2:
57
+
resolution: {integrity: sha512-sSTg31J8ws8DNaoiizp+/uJideRxRaJsq+Nyl8rnSxGw0w3oCvoeRU19iRWh2t0jZEmiRJAGkveGu23NKmPYEQ==}
58
dependencies:
59
'@atproto/common-web': 0.4.2
60
+
'@atproto/lexicon': 0.4.12
61
'@atproto/syntax': 0.4.0
62
+
'@atproto/xrpc': 0.7.1
63
await-lock: 2.2.2
64
multiformats: 9.9.0
65
tlds: 1.250.0
66
zod: 3.23.8
67
dev: false
68
69
+
/@atproto/aws@0.2.25:
70
+
resolution: {integrity: sha512-LT4uuda2mjXz2WT4xo7g2aWmWKl+JWusGzscqQpOlD/RFGFXKDmUcVWLVPKY+9Pys2F7X6tyDlm2aUx+/dYdYA==}
71
engines: {node: '>=18.7.0'}
72
dependencies:
73
'@atproto/common': 0.4.11
74
'@atproto/crypto': 0.4.4
75
+
'@atproto/repo': 0.8.5
76
'@aws-sdk/client-cloudfront': 3.515.0
77
'@aws-sdk/client-kms': 3.515.0
78
'@aws-sdk/client-s3': 3.515.0
···
162
zod: 3.23.8
163
dev: false
164
165
+
/@atproto/lexicon@0.4.12:
166
+
resolution: {integrity: sha512-fcEvEQ1GpQYF5igZ4IZjPWEoWVpsEF22L9RexxLS3ptfySXLflEyH384e7HITzO/73McDeaJx3lqHIuqn9ulnw==}
167
dependencies:
168
'@atproto/common-web': 0.4.2
169
'@atproto/syntax': 0.4.0
···
172
zod: 3.23.8
173
dev: false
174
175
+
/@atproto/oauth-provider-api@0.2.0:
176
+
resolution: {integrity: sha512-u18VRCDuz5BloUQKbvTISjQk7CgpDI1hf3leoJ7ADOAo8oW71QZD0tsWDX81R2uB66mKZHptjGSSVxxqpZFipQ==}
177
dependencies:
178
'@atproto/jwk': 0.4.0
179
'@atproto/oauth-types': 0.4.0
180
dev: false
181
182
+
/@atproto/oauth-provider-frontend@0.1.11:
183
+
resolution: {integrity: sha512-MvPUI+vh8a8UWmpAV8VS2qrdJ/B6l75qDQX1z6vF1YkPR1d9SLEdOYx/O26g5ZyuN+Mk00OBdOSfjvON/UOxQA==}
184
engines: {node: '>=18.7.0'}
185
optionalDependencies:
186
+
'@atproto/oauth-provider-api': 0.2.0
187
dev: false
188
189
+
/@atproto/oauth-provider-ui@0.2.0:
190
+
resolution: {integrity: sha512-v4rzz3C8i2NBqxycWWDTeosHtv6B9+EW4ZCq9Il6thmHdtT2CmB07R5Ia7zQ1n7lylxI6mC9JqA9CLis0uLz+Q==}
191
engines: {node: '>=18.7.0'}
192
optionalDependencies:
193
+
'@atproto/oauth-provider-api': 0.2.0
194
dev: false
195
196
+
/@atproto/oauth-provider@0.10.0:
197
+
resolution: {integrity: sha512-WbDaMC/9Zd4oslA4pPvf7ozum0YAQRxNspYpEauXtJ/bjVxqViKgV158jnPhDbYfo62NkxSuSaUkTV116U/VBg==}
198
engines: {node: '>=18.7.0'}
199
dependencies:
200
'@atproto-labs/fetch': 0.2.3
···
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
214
'@atproto/syntax': 0.4.0
215
'@hapi/accept': 6.0.3
216
'@hapi/address': 5.1.1
217
'@hapi/bourne': 3.0.0
218
'@hapi/content': 6.0.0
219
+
cookie: 0.7.2
220
disposable-email-domains-js: 1.5.0
221
forwarded: 0.2.0
222
http-errors: 2.0.0
···
227
- supports-color
228
dev: false
229
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==}
236
dependencies:
···
238
zod: 3.23.8
239
dev: false
240
241
+
/@atproto/pds@0.4.166:
242
+
resolution: {integrity: sha512-LwLiLQNOZsZ4LgD4qmtWf3W5FJEaTA3Bi3Y1x79TXrBfcvcmIoNYBUE0WOLmDFfLyp44caODqS6HCLvqc11T7g==}
243
engines: {node: '>=18.7.0'}
244
dependencies:
245
'@atproto-labs/fetch-node': 0.1.9
246
+
'@atproto-labs/xrpc-utils': 0.0.18
247
+
'@atproto/api': 0.16.2
248
+
'@atproto/aws': 0.2.25
249
'@atproto/common': 0.4.11
250
'@atproto/crypto': 0.4.4
251
'@atproto/identity': 0.4.8
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
256
'@atproto/syntax': 0.4.0
257
+
'@atproto/xrpc': 0.7.1
258
+
'@atproto/xrpc-server': 0.9.1
259
'@did-plc/lib': 0.0.4
260
'@hapi/address': 5.1.1
261
better-sqlite3: 10.1.0
···
292
- utf-8-validate
293
dev: false
294
295
+
/@atproto/repo@0.8.5:
296
+
resolution: {integrity: sha512-QZ4UWBWDyPMXgPhktmaRYRyCXIw7lIEAyGtaFy7UmCPpJ5TtFKw3GhGrEiNz/fY3/6lrkdDj44/Tzkud/eP/VQ==}
297
engines: {node: '>=18.7.0'}
298
dependencies:
299
'@atproto/common': 0.4.11
300
'@atproto/common-web': 0.4.2
301
'@atproto/crypto': 0.4.4
302
+
'@atproto/lexicon': 0.4.12
303
'@ipld/dag-cbor': 7.0.3
304
multiformats: 9.9.0
305
uint8arrays: 3.0.0
···
311
resolution: {integrity: sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==}
312
dev: false
313
314
+
/@atproto/xrpc-server@0.9.1:
315
+
resolution: {integrity: sha512-AJfxsKrZgKL/5362Rc0oUEjlgpDCmY/soeyLHHjid8J6clbErAdJVCuFwW4T40aHGFY1J13a29ucwbSfOROx6w==}
316
engines: {node: '>=18.7.0'}
317
dependencies:
318
'@atproto/common': 0.4.11
319
'@atproto/crypto': 0.4.4
320
+
'@atproto/lexicon': 0.4.12
321
+
'@atproto/xrpc': 0.7.1
322
cbor-x: 1.5.8
323
express: 4.18.2
324
http-errors: 2.0.0
···
333
- utf-8-validate
334
dev: false
335
336
+
/@atproto/xrpc@0.7.1:
337
+
resolution: {integrity: sha512-ANHEzlskYlMEdH18m+Itp3a8d0pEJao2qoDybDoMupTnoeNkya4VKIaOgAi6ERQnqatBBZyn9asW+7rJmSt/8g==}
338
dependencies:
339
+
'@atproto/lexicon': 0.4.12
340
zod: 3.23.8
341
dev: false
342
···
2199
engines: {node: '>= 0.6'}
2200
dev: false
2201
2202
+
/cookie@0.7.2:
2203
+
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
2204
engines: {node: '>= 0.6'}
2205
dev: false
2206