Fork of official Bluesky PDS (Personal Data Server).

Merge branch 'main' into main

authored by bnewbold.net and committed by

GitHub 0ab453e2 e0a579f7

+196 -172
+2 -1
Dockerfile
··· 1 FROM node:20.11-alpine3.18 as build 2 3 - RUN npm install -g pnpm 4 5 # Move files into the image and install 6 WORKDIR /app 7 COPY ./service ./ 8 RUN pnpm install --production --frozen-lockfile > /dev/null 9 10 # Uses assets from build stage to reduce build size
··· 1 FROM node:20.11-alpine3.18 as build 2 3 + RUN corepack enable 4 5 # Move files into the image and install 6 WORKDIR /app 7 COPY ./service ./ 8 + RUN corepack prepare --activate 9 RUN pnpm install --production --frozen-lockfile > /dev/null 10 11 # Uses assets from build stage to reduce build size
+41 -1
README.md
··· 214 PDS_EMAIL_FROM_ADDRESS=admin@your.domain 215 ``` 216 217 - 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`. 218 219 _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._ 220 221 ### Updating your PDS 222
··· 214 PDS_EMAIL_FROM_ADDRESS=admin@your.domain 215 ``` 216 217 + If you prefer to use a standard SMTP server (a local one or from your email provider), put your account's username and password in the URL: 218 + 219 + ``` 220 + PDS_EMAIL_SMTP_URL=smtps://username:password@smtp.example.com/ 221 + ``` 222 + 223 + Alternatively, if you're running a local sendmail-compatible mail service like Postfix or Exim on the same host, you can configure the PDS to use the sendmail transport by using such URL: 224 + 225 + ``` 226 + PDS_EMAIL_SMTP_URL=smtp:///?sendmail=true 227 + ``` 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: 242 + 243 + ``` 244 + [sudo] docker logs pds 245 + ``` 246 + 247 + Note: these logs are not persisted, so they will be lost after server reboot. 248 + 249 + Alternatively, you can configure the logs to be printed to a file by setting `LOG_DESTINATION`: 250 + 251 + ``` 252 + LOG_DESTINATION=/pds/pds.log 253 + ``` 254 + 255 + You can also change the minimum level of logs to be printed (default: `info`): 256 + 257 + ``` 258 + LOG_LEVEL=debug 259 + ``` 260 261 ### Updating your PDS 262
+1 -7
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
··· 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
+2 -1
service/package.json
··· 3 "private": true, 4 "version": "0.0.0", 5 "description": "Service entrypoint for atproto personal data server", 6 "main": "index.js", 7 "license": "MIT", 8 "dependencies": { 9 - "@atproto/pds": "0.4.74" 10 } 11 }
··· 3 "private": true, 4 "version": "0.0.0", 5 "description": "Service entrypoint for atproto personal data server", 6 + "packageManager": "pnpm@8.15.9", 7 "main": "index.js", 8 "license": "MIT", 9 "dependencies": { 10 + "@atproto/pds": "0.4.135" 11 } 12 }
+150 -162
service/pnpm-lock.yaml
··· 6 7 dependencies: 8 '@atproto/pds': 9 - specifier: 0.4.74 10 - version: 0.4.74 11 12 packages: 13 14 - /@atproto-labs/fetch-node@0.1.3: 15 - resolution: {integrity: sha512-KX3ogPJt6dXNppWImQ9omfhrc8t73WrJaxHMphRAqQL8jXxKW5NBCTjSuwroBkJ1pj1aValBrc5NpdYu+H/9Qg==} 16 dependencies: 17 - '@atproto-labs/fetch': 0.1.1 18 '@atproto-labs/pipe': 0.1.0 19 ipaddr.js: 2.2.0 20 psl: 1.9.0 21 undici: 6.20.1 22 dev: false 23 24 - /@atproto-labs/fetch@0.1.1: 25 - resolution: {integrity: sha512-X1zO1MDoJzEurbWXMAe1H8EZ995Xam/aXdxhGVrXmOMyPDuvBa1oxwh/kQNZRCKcMQUbiwkk+Jfq6ZkTuvGbww==} 26 dependencies: 27 '@atproto-labs/pipe': 0.1.0 28 - optionalDependencies: 29 - zod: 3.23.8 30 dev: false 31 32 /@atproto-labs/pipe@0.1.0: 33 resolution: {integrity: sha512-ghOqHFyJlQVFPESzlVHjKroP0tPzbmG5Jms0dNI9yLDEfL8xp4OFPWLX4f6T8mRq69wWs4nIDM3sSsFbFqLa1w==} 34 dev: false 35 36 - /@atproto-labs/simple-store-memory@0.1.1: 37 - resolution: {integrity: sha512-PCRqhnZ8NBNBvLku53O56T0lsVOtclfIrQU/rwLCc4+p45/SBPrRYNBi6YFq5rxZbK6Njos9MCmILV/KLQxrWA==} 38 dependencies: 39 - '@atproto-labs/simple-store': 0.1.1 40 lru-cache: 10.2.0 41 dev: false 42 43 - /@atproto-labs/simple-store@0.1.1: 44 - resolution: {integrity: sha512-WKILW2b3QbAYKh+w5U2x6p5FqqLl0nAeLwGeDY+KjX01K4Dq3vQTR9b/qNp0jZm48CabPQVrqCv0PPU9LgRRRg==} 45 dev: false 46 47 - /@atproto/api@0.13.18: 48 - resolution: {integrity: sha512-rrl5HhzGYWZ7fiC965TPBUOVItq9M4dxMb6qz8IvAVQliSkrJrKc7UD0QWL89QiiXaOBuX8w+4i5r4wrfBGddg==} 49 dependencies: 50 - '@atproto/common-web': 0.3.1 51 - '@atproto/lexicon': 0.4.3 52 - '@atproto/syntax': 0.3.1 53 - '@atproto/xrpc': 0.6.4 54 await-lock: 2.2.2 55 multiformats: 9.9.0 56 tlds: 1.250.0 57 zod: 3.23.8 58 dev: false 59 60 - /@atproto/aws@0.2.9: 61 - resolution: {integrity: sha512-sc9aXUePcqItkJSOJJnGNVthVfAKjhn3zMDG+RRLzKUBye6Yutrlhpt1yxNZLHQiqIK5fy2Cuc4EX3p3jeWUYw==} 62 dependencies: 63 - '@atproto/common': 0.4.4 64 - '@atproto/crypto': 0.4.2 65 - '@atproto/repo': 0.5.5 66 '@aws-sdk/client-cloudfront': 3.515.0 67 '@aws-sdk/client-kms': 3.515.0 68 '@aws-sdk/client-s3': 3.515.0 69 '@aws-sdk/lib-storage': 3.515.0(@aws-sdk/client-s3@3.515.0) 70 - '@noble/curves': 1.3.0 71 key-encoder: 2.0.3 72 multiformats: 9.9.0 73 uint8arrays: 3.0.0 ··· 75 - aws-crt 76 dev: false 77 78 - /@atproto/common-web@0.3.1: 79 - resolution: {integrity: sha512-N7wiTnus5vAr+lT//0y8m/FaHHLJ9LpGuEwkwDAeV3LCiPif4m/FS8x/QOYrx1PdZQwKso95RAPzCGWQBH5j6Q==} 80 dependencies: 81 graphemer: 1.4.0 82 multiformats: 9.9.0 ··· 93 zod: 3.23.8 94 dev: false 95 96 - /@atproto/common@0.4.4: 97 - resolution: {integrity: sha512-58tMbn6A1Zu296s/l3uIj8z9d7IRHpZvLOfsFRikaQaYrzhJpL2aPY4uFQ8GJcxnsxeUnxBCrQz9we5jVVJI5Q==} 98 dependencies: 99 - '@atproto/common-web': 0.3.1 100 '@ipld/dag-cbor': 7.0.3 101 cbor-x: 1.5.8 102 iso-datestring-validator: 2.2.2 ··· 114 uint8arrays: 3.0.0 115 dev: false 116 117 - /@atproto/crypto@0.4.2: 118 - resolution: {integrity: sha512-aeOfPQYCDbhn2hV06oBF2KXrWjf/BK4yL8lfANJKSmKl3tKWCkiW/moi643rUXXxSE72KtWtQeqvNFYnnFJ0ig==} 119 dependencies: 120 - '@noble/curves': 1.3.0 121 - '@noble/hashes': 1.3.3 122 uint8arrays: 3.0.0 123 dev: false 124 125 - /@atproto/identity@0.4.3: 126 - resolution: {integrity: sha512-DLXMWh57dHvIeBl+IvC+q20z0IdDZT1awOn84vDyxacL9DfhbiTy/zCUPFEzHyvfrilNG1tDA4zQzURubdFqNg==} 127 dependencies: 128 - '@atproto/common-web': 0.3.1 129 - '@atproto/crypto': 0.4.2 130 - axios: 0.27.2 131 - transitivePeerDependencies: 132 - - debug 133 dev: false 134 135 - /@atproto/jwk-jose@0.1.2: 136 - resolution: {integrity: sha512-lDwc/6lLn2aZ/JpyyggyjLFsJPMntrVzryyGUx5aNpuTS8SIuc4Ky0REhxqfLopQXJJZCuRRjagHG3uP05/moQ==} 137 dependencies: 138 - '@atproto/jwk': 0.1.1 139 jose: 5.2.2 140 dev: false 141 142 - /@atproto/jwk@0.1.1: 143 - resolution: {integrity: sha512-6h/bj1APUk7QcV9t/oA6+9DB5NZx9SZru9x+/pV5oHFI9Xz4ZuM5+dq1PfsJV54pZyqdnZ6W6M717cxoC7q7og==} 144 dependencies: 145 multiformats: 9.9.0 146 zod: 3.23.8 147 dev: false 148 149 - /@atproto/lexicon@0.4.3: 150 - resolution: {integrity: sha512-lFVZXe1S1pJP0dcxvJuHP3r/a+EAIBwwU7jUK+r8iLhIja+ml6NmYv8KeFHmIJATh03spEQ9s02duDmFVdCoXg==} 151 dependencies: 152 - '@atproto/common-web': 0.3.1 153 - '@atproto/syntax': 0.3.1 154 iso-datestring-validator: 2.2.2 155 multiformats: 9.9.0 156 zod: 3.23.8 157 dev: false 158 159 - /@atproto/oauth-provider@0.2.8: 160 - resolution: {integrity: sha512-BgnlnKvPsIfDHRxnZbcOFjtLBfA+M3iWRhzv/t+m15bjmYTRUPwIEhrWg7pYV/mU7u/Q4RqT9l08b+xz6K/uiQ==} 161 dependencies: 162 - '@atproto-labs/fetch': 0.1.1 163 - '@atproto-labs/fetch-node': 0.1.3 164 '@atproto-labs/pipe': 0.1.0 165 - '@atproto-labs/simple-store': 0.1.1 166 - '@atproto-labs/simple-store-memory': 0.1.1 167 - '@atproto/common': 0.4.4 168 - '@atproto/jwk': 0.1.1 169 - '@atproto/jwk-jose': 0.1.2 170 - '@atproto/oauth-types': 0.2.1 171 '@hapi/accept': 6.0.3 172 '@hapi/bourne': 3.0.0 173 '@hapi/content': 6.0.0 174 cookie: 0.6.0 175 http-errors: 2.0.0 176 ioredis: 5.3.2 177 jose: 5.2.2 178 - keygrip: 1.1.0 179 psl: 1.9.0 180 zod: 3.23.8 181 transitivePeerDependencies: 182 - supports-color 183 dev: false 184 185 - /@atproto/oauth-types@0.2.1: 186 - resolution: {integrity: sha512-hDisUXzcq5KU1HMuCYZ8Kcz7BePl7V11bFjjgZvND3mdSphiyBpJ8MCNn3QzAa6cXpFo0w9PDcYMAlCCRZHdVw==} 187 dependencies: 188 - '@atproto/jwk': 0.1.1 189 zod: 3.23.8 190 dev: false 191 192 - /@atproto/pds@0.4.74: 193 - resolution: {integrity: sha512-/TTZvhNQVX42g9Ms8txGGaOEpU3Ko2m7/iZfJlUIcPcntBr3lIZvQA5xzbkhdgS0/h1WmHUdQ37//YFK9w22ew==} 194 - hasBin: true 195 dependencies: 196 - '@atproto-labs/fetch-node': 0.1.3 197 - '@atproto/api': 0.13.18 198 - '@atproto/aws': 0.2.9 199 - '@atproto/common': 0.4.4 200 - '@atproto/crypto': 0.4.2 201 - '@atproto/identity': 0.4.3 202 - '@atproto/lexicon': 0.4.3 203 - '@atproto/oauth-provider': 0.2.8 204 - '@atproto/repo': 0.5.5 205 - '@atproto/syntax': 0.3.1 206 - '@atproto/xrpc': 0.6.4 207 - '@atproto/xrpc-server': 0.7.3 208 '@did-plc/lib': 0.0.4 209 '@hapi/address': 5.1.1 210 better-sqlite3: 10.1.0 ··· 241 - utf-8-validate 242 dev: false 243 244 - /@atproto/repo@0.5.5: 245 - resolution: {integrity: sha512-Zu1tw42KBVyFzIh1XYSIvm8V+V9oEKWJR7NnHBgeSMwCc9QwM32jO7uqgvEjZYEXgdYKanGhv/YHLyxtZa5Ckg==} 246 dependencies: 247 - '@atproto/common': 0.4.4 248 - '@atproto/common-web': 0.3.1 249 - '@atproto/crypto': 0.4.2 250 - '@atproto/lexicon': 0.4.3 251 - '@ipld/car': 3.2.4 252 '@ipld/dag-cbor': 7.0.3 253 multiformats: 9.9.0 254 uint8arrays: 3.0.0 255 zod: 3.23.8 256 dev: false 257 258 - /@atproto/syntax@0.3.1: 259 - resolution: {integrity: sha512-fzW0Mg1QUOVCWUD3RgEsDt6d1OZ6DdFmbKcDdbzUfh0t4rhtRAC05KbZYmxuMPWDAiJ4BbbQ5dkAc/mNypMXkw==} 260 dev: false 261 262 - /@atproto/xrpc-server@0.7.3: 263 - resolution: {integrity: sha512-x0qegkN6snrbXJO3v9h2kuh9e90g6ZZkDXv3COiraGS3yRTzIm6i4bMvDSfCI50+0xCNtPKOkpn8taRoRgkyiw==} 264 dependencies: 265 - '@atproto/common': 0.4.4 266 - '@atproto/crypto': 0.4.2 267 - '@atproto/lexicon': 0.4.3 268 - '@atproto/xrpc': 0.6.4 269 cbor-x: 1.5.8 270 express: 4.18.2 271 http-errors: 2.0.0 ··· 280 - utf-8-validate 281 dev: false 282 283 - /@atproto/xrpc@0.6.4: 284 - resolution: {integrity: sha512-9ZAJ8nsXTqC4XFyS0E1Wlg7bAvonhXQNQ3Ocs1L1LIwFLXvsw/4fNpIHXxvXvqTCVeyHLbImOnE9UiO1c/qIYA==} 285 dependencies: 286 - '@atproto/lexicon': 0.4.3 287 zod: 3.23.8 288 dev: false 289 ··· 1322 resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} 1323 dev: false 1324 1325 - /@ipld/car@3.2.4: 1326 - resolution: {integrity: sha512-rezKd+jk8AsTGOoJKqzfjLJ3WVft7NZNH95f0pfPbicROvzTyvHCNy567HzSUd6gRXZ9im29z5ZEv9Hw49jSYw==} 1327 - dependencies: 1328 - '@ipld/dag-cbor': 7.0.3 1329 - multiformats: 9.9.0 1330 - varint: 6.0.0 1331 - dev: false 1332 - 1333 /@ipld/dag-cbor@7.0.3: 1334 resolution: {integrity: sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==} 1335 dependencies: ··· 1349 wrap-ansi-cjs: /wrap-ansi@7.0.0 1350 dev: false 1351 1352 - /@noble/curves@1.3.0: 1353 - resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} 1354 dependencies: 1355 - '@noble/hashes': 1.3.3 1356 dev: false 1357 1358 - /@noble/hashes@1.3.3: 1359 - resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} 1360 - engines: {node: '>= 16'} 1361 dev: false 1362 1363 /@noble/secp256k1@1.7.1: ··· 1911 resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} 1912 dev: false 1913 1914 - /axios@0.27.2: 1915 - resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} 1916 - dependencies: 1917 - follow-redirects: 1.15.5 1918 - form-data: 4.0.0 1919 - transitivePeerDependencies: 1920 - - debug 1921 - dev: false 1922 - 1923 /axios@1.6.7: 1924 resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} 1925 dependencies: ··· 2256 /destroy@1.2.0: 2257 resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 2258 engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 2259 - dev: false 2260 - 2261 - /detect-libc@2.0.2: 2262 - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} 2263 - engines: {node: '>=8'} 2264 dev: false 2265 2266 /detect-libc@2.0.3: ··· 2745 elliptic: 6.5.4 2746 dev: false 2747 2748 - /keygrip@1.1.0: 2749 - resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} 2750 - engines: {node: '>= 0.6'} 2751 - requiresBuild: true 2752 - dependencies: 2753 - tsscmp: 1.0.6 2754 - dev: false 2755 - 2756 /kysely@0.22.0: 2757 resolution: {integrity: sha512-ZE3qWtnqLOalodzfK5QUEcm7AEulhxsPNuKaGFsC3XiqO92vMLm+mAHk/NnbSIOtC4RmGm0nsv700i8KDp1gfQ==} 2758 engines: {node: '>=14.0.0'} ··· 2769 /lru-cache@10.2.0: 2770 resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} 2771 engines: {node: 14 || >=16.14} 2772 - dev: false 2773 - 2774 - /lru-cache@6.0.0: 2775 - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2776 - engines: {node: '>=10'} 2777 - dependencies: 2778 - yallist: 4.0.0 2779 dev: false 2780 2781 /media-typer@0.3.0: ··· 2876 resolution: {integrity: sha512-uPEjtyh2tFEvWYt4Jw7McOD5FPcHkcxm/tHZc5PWaDB3JYq0rGFUbgaAK+CT5pYpQddBfsZVWI08OwoRfdfbcQ==} 2877 engines: {node: '>=10'} 2878 dependencies: 2879 - semver: 7.6.0 2880 dev: false 2881 2882 /node-gyp-build-optional-packages@5.1.1: ··· 2884 hasBin: true 2885 requiresBuild: true 2886 dependencies: 2887 - detect-libc: 2.0.2 2888 dev: false 2889 optional: true 2890 ··· 3032 engines: {node: '>=10'} 3033 hasBin: true 3034 dependencies: 3035 - detect-libc: 2.0.2 3036 expand-template: 2.0.3 3037 github-from-package: 0.0.0 3038 minimist: 1.2.8 ··· 3198 3199 /semver-compare@1.0.0: 3200 resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} 3201 - dev: false 3202 - 3203 - /semver@7.6.0: 3204 - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 3205 - engines: {node: '>=10'} 3206 - hasBin: true 3207 - dependencies: 3208 - lru-cache: 6.0.0 3209 dev: false 3210 3211 /semver@7.6.3: ··· 3477 resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 3478 dev: false 3479 3480 - /tsscmp@1.0.6: 3481 - resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} 3482 - engines: {node: '>=0.6.x'} 3483 - requiresBuild: true 3484 - dev: false 3485 - 3486 /tunnel-agent@0.6.0: 3487 resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 3488 dependencies: ··· 3604 optional: true 3605 utf-8-validate: 3606 optional: true 3607 - dev: false 3608 - 3609 - /yallist@4.0.0: 3610 - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3611 dev: false 3612 3613 /zod@3.23.8:
··· 6 7 dependencies: 8 '@atproto/pds': 9 + specifier: 0.4.135 10 + version: 0.4.135 11 12 packages: 13 14 + /@atproto-labs/fetch-node@0.1.8: 15 + resolution: {integrity: sha512-OOTIhZNPEDDm7kaYU8iYRgzM+D5n3mP2iiBSyKuLakKTaZBL5WwYlUsJVsqX26SnUXtGEroOJEVJ6f66OcG80w==} 16 + engines: {node: '>=18.7.0'} 17 dependencies: 18 + '@atproto-labs/fetch': 0.2.2 19 '@atproto-labs/pipe': 0.1.0 20 ipaddr.js: 2.2.0 21 psl: 1.9.0 22 undici: 6.20.1 23 dev: false 24 25 + /@atproto-labs/fetch@0.2.2: 26 + resolution: {integrity: sha512-QyafkedbFeVaN20DYUpnY2hcArYxjdThPXbYMqOSoZhcvkrUqaw4xDND4wZB5TBD9cq2yqe9V6mcw9P4XQKQuQ==} 27 dependencies: 28 '@atproto-labs/pipe': 0.1.0 29 dev: false 30 31 /@atproto-labs/pipe@0.1.0: 32 resolution: {integrity: sha512-ghOqHFyJlQVFPESzlVHjKroP0tPzbmG5Jms0dNI9yLDEfL8xp4OFPWLX4f6T8mRq69wWs4nIDM3sSsFbFqLa1w==} 33 dev: false 34 35 + /@atproto-labs/simple-store-memory@0.1.3: 36 + resolution: {integrity: sha512-jkitT9+AtU+0b28DoN92iURLaCt/q/q4yX8q6V+9LSwYlUTqKoj/5NFKvF7x6EBuG+gpUdlcycbH7e60gjOhRQ==} 37 dependencies: 38 + '@atproto-labs/simple-store': 0.2.0 39 lru-cache: 10.2.0 40 dev: false 41 42 + /@atproto-labs/simple-store@0.2.0: 43 + resolution: {integrity: sha512-0bRbAlI8Ayh03wRwncAMEAyUKtZ+AuTS1jgPrfym1WVOAOiottI/ZmgccqLl6w5MbxVcClNQF7WYGKvGwGoIhA==} 44 dev: false 45 46 + /@atproto-labs/xrpc-utils@0.0.14: 47 + resolution: {integrity: sha512-/f0Dhzi08w3Oqv38wdwQ5bw238GbxhYIcxg08kVReEMTlkyRDC6H5RuqHf8Ff9J3FKqjKHGdxaOdrPNM1hCgeQ==} 48 dependencies: 49 + '@atproto/xrpc': 0.7.0 50 + '@atproto/xrpc-server': 0.7.18 51 + transitivePeerDependencies: 52 + - bufferutil 53 + - supports-color 54 + - utf-8-validate 55 + dev: false 56 + 57 + /@atproto/api@0.15.6: 58 + resolution: {integrity: sha512-hKwrBf60LcI4BqArWyrhWJWIpjwAWUJpW3PVvNzUB1q2W/ByC0JAuwq/F8tZpCEiiVBzHjHVRx4QNA2TA1cG3g==} 59 + dependencies: 60 + '@atproto/common-web': 0.4.2 61 + '@atproto/lexicon': 0.4.11 62 + '@atproto/syntax': 0.4.0 63 + '@atproto/xrpc': 0.7.0 64 await-lock: 2.2.2 65 multiformats: 9.9.0 66 tlds: 1.250.0 67 zod: 3.23.8 68 dev: false 69 70 + /@atproto/aws@0.2.21: 71 + resolution: {integrity: sha512-bosExZ3YdFjOehNBcNWsC2mZBrAVLO8Ut/JquypXSahFeeXZP/9rd9F1VGf+vAmjFEKagHXQCb6CRFfJyN+I7A==} 72 + engines: {node: '>=18.7.0'} 73 dependencies: 74 + '@atproto/common': 0.4.11 75 + '@atproto/crypto': 0.4.4 76 + '@atproto/repo': 0.8.1 77 '@aws-sdk/client-cloudfront': 3.515.0 78 '@aws-sdk/client-kms': 3.515.0 79 '@aws-sdk/client-s3': 3.515.0 80 '@aws-sdk/lib-storage': 3.515.0(@aws-sdk/client-s3@3.515.0) 81 + '@noble/curves': 1.8.1 82 key-encoder: 2.0.3 83 multiformats: 9.9.0 84 uint8arrays: 3.0.0 ··· 86 - aws-crt 87 dev: false 88 89 + /@atproto/common-web@0.4.2: 90 + resolution: {integrity: sha512-vrXwGNoFGogodjQvJDxAeP3QbGtawgZute2ed1XdRO0wMixLk3qewtikZm06H259QDJVu6voKC5mubml+WgQUw==} 91 dependencies: 92 graphemer: 1.4.0 93 multiformats: 9.9.0 ··· 104 zod: 3.23.8 105 dev: false 106 107 + /@atproto/common@0.4.11: 108 + resolution: {integrity: sha512-Knv0viYXNMfCdIE7jLUiWJKnnMfEwg+vz2epJQi8WOjqtqCFb3W/3Jn72ZiuovIfpdm13MaOiny6w2NErUQC6g==} 109 + engines: {node: '>=18.7.0'} 110 dependencies: 111 + '@atproto/common-web': 0.4.2 112 '@ipld/dag-cbor': 7.0.3 113 cbor-x: 1.5.8 114 iso-datestring-validator: 2.2.2 ··· 126 uint8arrays: 3.0.0 127 dev: false 128 129 + /@atproto/crypto@0.4.4: 130 + resolution: {integrity: sha512-Yq9+crJ7WQl7sxStVpHgie5Z51R05etaK9DLWYG/7bR5T4bhdcIgF6IfklLShtZwLYdVVj+K15s0BqW9a8PSDA==} 131 + engines: {node: '>=18.7.0'} 132 dependencies: 133 + '@noble/curves': 1.8.1 134 + '@noble/hashes': 1.7.1 135 uint8arrays: 3.0.0 136 dev: false 137 138 + /@atproto/identity@0.4.8: 139 + resolution: {integrity: sha512-Z0sLnJ87SeNdAifT+rqpgE1Rc3layMMW25gfWNo4u40RGuRODbdfAZlTwBSU2r+Vk45hU+iE+xeQspfednCEnA==} 140 + engines: {node: '>=18.7.0'} 141 dependencies: 142 + '@atproto/common-web': 0.4.2 143 + '@atproto/crypto': 0.4.4 144 dev: false 145 146 + /@atproto/jwk-jose@0.1.6: 147 + resolution: {integrity: sha512-r4DGMvvmazy6CxqAcnplpUxvp6Vd8UwKxQBZRpmm1aNsVonf5qj1yeDkECTiwoe/FPbvtdamlzClB3UZc7Yb5w==} 148 dependencies: 149 + '@atproto/jwk': 0.1.5 150 jose: 5.2.2 151 dev: false 152 153 + /@atproto/jwk@0.1.5: 154 + resolution: {integrity: sha512-OzZFLhX41TOcMeanP3aZlL5bLeaUIZT15MI4aU5cwflNq/rwpGOpz3uwDjZc8ytgUjuTQ8LabSz5jMmwoTSWFg==} 155 dependencies: 156 multiformats: 9.9.0 157 zod: 3.23.8 158 dev: false 159 160 + /@atproto/lexicon@0.4.11: 161 + resolution: {integrity: sha512-btefdnvNz2Ao2I+qbmj0F06HC8IlrM/IBz6qOBS50r0S6uDf5tOO+Mv2tSVdimFkdzyDdLtBI1sV36ONxz2cOw==} 162 dependencies: 163 + '@atproto/common-web': 0.4.2 164 + '@atproto/syntax': 0.4.0 165 iso-datestring-validator: 2.2.2 166 multiformats: 9.9.0 167 zod: 3.23.8 168 dev: false 169 170 + /@atproto/oauth-provider-api@0.1.2: 171 + resolution: {integrity: sha512-tNAuMrE6D3696euavxo1+Jh7Re0PPwJstbyY8SrdVPXgKJh/LrbpKUKiPNW/p5KyVfRs2tWeAxy+ReESu6SmXA==} 172 dependencies: 173 + '@atproto/jwk': 0.1.5 174 + '@atproto/oauth-types': 0.2.7 175 + dev: false 176 + 177 + /@atproto/oauth-provider-frontend@0.1.4: 178 + resolution: {integrity: sha512-TLKL5lTmSieHx7+3RVIx7rIxRPP1SNCwzzdTvYB46yd1XrGHdPU//M6CP5OZ1BvcxF6H4JXIkOSWvFseol+gOw==} 179 + engines: {node: '>=18.7.0'} 180 + optionalDependencies: 181 + '@atproto/oauth-provider-api': 0.1.2 182 + dev: false 183 + 184 + /@atproto/oauth-provider-ui@0.1.4: 185 + resolution: {integrity: sha512-GTQnB7OUBFSeXcdRseAGYzKe9UUFB/kGjRcIA8+pO5pCMD7JdXI+WliUhsbdmQ2I+OK78aAlCrmygNWpLtpZgg==} 186 + engines: {node: '>=18.7.0'} 187 + optionalDependencies: 188 + '@atproto/oauth-provider-api': 0.1.2 189 + dev: false 190 + 191 + /@atproto/oauth-provider@0.7.6: 192 + resolution: {integrity: sha512-4YcnddACznmpuRmHlt9G+kccdv2Gct5qQOF9Yyjse8cl2Td+Rg1gkchpRdWUnyr9fgZzmCsSBYzEfVXge3eUiQ==} 193 + engines: {node: '>=18.7.0'} 194 + dependencies: 195 + '@atproto-labs/fetch': 0.2.2 196 + '@atproto-labs/fetch-node': 0.1.8 197 '@atproto-labs/pipe': 0.1.0 198 + '@atproto-labs/simple-store': 0.2.0 199 + '@atproto-labs/simple-store-memory': 0.1.3 200 + '@atproto/common': 0.4.11 201 + '@atproto/jwk': 0.1.5 202 + '@atproto/jwk-jose': 0.1.6 203 + '@atproto/oauth-provider-api': 0.1.2 204 + '@atproto/oauth-provider-frontend': 0.1.4 205 + '@atproto/oauth-provider-ui': 0.1.4 206 + '@atproto/oauth-types': 0.2.7 207 + '@atproto/syntax': 0.4.0 208 '@hapi/accept': 6.0.3 209 + '@hapi/address': 5.1.1 210 '@hapi/bourne': 3.0.0 211 '@hapi/content': 6.0.0 212 cookie: 0.6.0 213 + disposable-email-domains-js: 1.5.0 214 + forwarded: 0.2.0 215 http-errors: 2.0.0 216 ioredis: 5.3.2 217 jose: 5.2.2 218 psl: 1.9.0 219 zod: 3.23.8 220 transitivePeerDependencies: 221 - supports-color 222 dev: false 223 224 + /@atproto/oauth-types@0.2.7: 225 + resolution: {integrity: sha512-2SlDveiSI0oowC+sfuNd/npV8jw/FhokSS26qyUyldTg1g9ZlhxXUfMP4IZOPeZcVn9EszzQRHs1H9ZJqVQIew==} 226 dependencies: 227 + '@atproto/jwk': 0.1.5 228 zod: 3.23.8 229 dev: false 230 231 + /@atproto/pds@0.4.135: 232 + resolution: {integrity: sha512-QH5Txh46OFwyLnd5DDukbnVs2Cxs5zdycwwqtdQZVcSnAbsOjFSu0TEprIevfmCvmeUjhOEwh/+IQKpPFSFsGQ==} 233 + engines: {node: '>=18.7.0'} 234 dependencies: 235 + '@atproto-labs/fetch-node': 0.1.8 236 + '@atproto-labs/xrpc-utils': 0.0.14 237 + '@atproto/api': 0.15.6 238 + '@atproto/aws': 0.2.21 239 + '@atproto/common': 0.4.11 240 + '@atproto/crypto': 0.4.4 241 + '@atproto/identity': 0.4.8 242 + '@atproto/lexicon': 0.4.11 243 + '@atproto/oauth-provider': 0.7.6 244 + '@atproto/repo': 0.8.1 245 + '@atproto/syntax': 0.4.0 246 + '@atproto/xrpc': 0.7.0 247 + '@atproto/xrpc-server': 0.7.18 248 '@did-plc/lib': 0.0.4 249 '@hapi/address': 5.1.1 250 better-sqlite3: 10.1.0 ··· 281 - utf-8-validate 282 dev: false 283 284 + /@atproto/repo@0.8.1: 285 + resolution: {integrity: sha512-d1NtHhXYJVJlFVI6mbVOUnpB0rnhqxPnZcALkJoYJjaDPVr4NNqRFAtrwb+GHzxT6DhijoXYQf24pKGfEFDd4g==} 286 + engines: {node: '>=18.7.0'} 287 dependencies: 288 + '@atproto/common': 0.4.11 289 + '@atproto/common-web': 0.4.2 290 + '@atproto/crypto': 0.4.4 291 + '@atproto/lexicon': 0.4.11 292 '@ipld/dag-cbor': 7.0.3 293 multiformats: 9.9.0 294 uint8arrays: 3.0.0 295 + varint: 6.0.0 296 zod: 3.23.8 297 dev: false 298 299 + /@atproto/syntax@0.4.0: 300 + resolution: {integrity: sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==} 301 dev: false 302 303 + /@atproto/xrpc-server@0.7.18: 304 + resolution: {integrity: sha512-kjlAsI+UNbbm6AK3Y5Hb4BJ7VQHNKiYYu2kX5vhZJZHO8qfO40GPYYb/2TknZV8IG6fDPBQhUpcDRolI86sgag==} 305 + engines: {node: '>=18.7.0'} 306 dependencies: 307 + '@atproto/common': 0.4.11 308 + '@atproto/crypto': 0.4.4 309 + '@atproto/lexicon': 0.4.11 310 + '@atproto/xrpc': 0.7.0 311 cbor-x: 1.5.8 312 express: 4.18.2 313 http-errors: 2.0.0 ··· 322 - utf-8-validate 323 dev: false 324 325 + /@atproto/xrpc@0.7.0: 326 + resolution: {integrity: sha512-SfhP9dGx2qclaScFDb58Jnrmim5nk4geZXCqg6sB0I/KZhZEkr9iIx1hLCp+sxkIfEsmEJjeWO4B0rjUIJW5cw==} 327 dependencies: 328 + '@atproto/lexicon': 0.4.11 329 zod: 3.23.8 330 dev: false 331 ··· 1364 resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} 1365 dev: false 1366 1367 /@ipld/dag-cbor@7.0.3: 1368 resolution: {integrity: sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==} 1369 dependencies: ··· 1383 wrap-ansi-cjs: /wrap-ansi@7.0.0 1384 dev: false 1385 1386 + /@noble/curves@1.8.1: 1387 + resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==} 1388 + engines: {node: ^14.21.3 || >=16} 1389 dependencies: 1390 + '@noble/hashes': 1.7.1 1391 dev: false 1392 1393 + /@noble/hashes@1.7.1: 1394 + resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} 1395 + engines: {node: ^14.21.3 || >=16} 1396 dev: false 1397 1398 /@noble/secp256k1@1.7.1: ··· 1946 resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} 1947 dev: false 1948 1949 /axios@1.6.7: 1950 resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} 1951 dependencies: ··· 2282 /destroy@1.2.0: 2283 resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 2284 engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 2285 dev: false 2286 2287 /detect-libc@2.0.3: ··· 2766 elliptic: 6.5.4 2767 dev: false 2768 2769 /kysely@0.22.0: 2770 resolution: {integrity: sha512-ZE3qWtnqLOalodzfK5QUEcm7AEulhxsPNuKaGFsC3XiqO92vMLm+mAHk/NnbSIOtC4RmGm0nsv700i8KDp1gfQ==} 2771 engines: {node: '>=14.0.0'} ··· 2782 /lru-cache@10.2.0: 2783 resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} 2784 engines: {node: 14 || >=16.14} 2785 dev: false 2786 2787 /media-typer@0.3.0: ··· 2882 resolution: {integrity: sha512-uPEjtyh2tFEvWYt4Jw7McOD5FPcHkcxm/tHZc5PWaDB3JYq0rGFUbgaAK+CT5pYpQddBfsZVWI08OwoRfdfbcQ==} 2883 engines: {node: '>=10'} 2884 dependencies: 2885 + semver: 7.6.3 2886 dev: false 2887 2888 /node-gyp-build-optional-packages@5.1.1: ··· 2890 hasBin: true 2891 requiresBuild: true 2892 dependencies: 2893 + detect-libc: 2.0.3 2894 dev: false 2895 optional: true 2896 ··· 3038 engines: {node: '>=10'} 3039 hasBin: true 3040 dependencies: 3041 + detect-libc: 2.0.3 3042 expand-template: 2.0.3 3043 github-from-package: 0.0.0 3044 minimist: 1.2.8 ··· 3204 3205 /semver-compare@1.0.0: 3206 resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} 3207 dev: false 3208 3209 /semver@7.6.3: ··· 3475 resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 3476 dev: false 3477 3478 /tunnel-agent@0.6.0: 3479 resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 3480 dependencies: ··· 3596 optional: true 3597 utf-8-validate: 3598 optional: true 3599 dev: false 3600 3601 /zod@3.23.8: