Mirror from bluesky-social/pds

Compare changes

Choose any two refs to compare.

+1 -1
.github/workflows/build-and-push-ghcr.yaml
··· 3 push: 4 branches: 5 - main 6 - - pdsv2 7 tags: 8 - v* 9 env:
··· 3 push: 4 branches: 5 - main 6 + - next 7 tags: 8 - v* 9 env:
-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
··· 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
··· 31 openssl 32 sqlite3 33 xxd 34 - jq 35 " 36 # Docker packages. 37 REQUIRED_DOCKER_PACKAGES=" ··· 215 fi 216 217 # Admin email 218 if [[ -z "${PDS_ADMIN_EMAIL}" ]]; then 219 read -p "Enter an admin email address (e.g. you@example.com): " PDS_ADMIN_EMAIL 220 fi
··· 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
··· 7 "main": "index.js", 8 "license": "MIT", 9 "dependencies": { 10 - "@atproto/pds": "0.4.158" 11 } 12 }
··· 7 "main": "index.js", 8 "license": "MIT", 9 "dependencies": { 10 + "@atproto/pds": "0.4.166" 11 } 12 }
+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