+function bluesky_get_user_pds(int $uid): string
+{
+ $pds = DI::pConfig()->get($uid, 'bluesky', 'pds');
+ if (!empty($pds)) {
+ return $pds;
+ }
+ $pds = bluesky_get_pds(DI::pConfig()->get($uid, 'bluesky', 'did'));
+ DI::pConfig()->set($uid, 'bluesky', 'pds', $pds);
+ return $pds;
+}
+
+function bluesky_get_pds(string $did): ?string
+{
+ $data = bluesky_get(BLUESKY_DIRECTORY . '/' . $did);
+ if (empty($data) || empty($data->service)) {
+ return null;
+ }
+
+ foreach ($data->service as $service) {
+ if (($service->id == '#atproto_pds') && ($service->type == 'AtprotoPersonalDataServer') && !empty($service->serviceEndpoint)) {
+ return $service->serviceEndpoint;
+ }
+ }
+
+ return null;
+}
+