tangled
alpha
login
or
join now
socialde.pt
/
atp-resolver
Resolve AT Protocol DIDs, handles, and schemas with intelligent caching for Laravel
1
fork
atom
overview
issues
pulls
pipelines
Compare changes
Choose any two refs to compare.
base:
main
dev
v1.1.0
v1.0.0
v0.1.2
v0.1.1
v0.1.0
compare:
main
dev
v1.1.0
v1.0.0
v0.1.2
v0.1.1
v0.1.0
go
+93
-96
30 changed files
expand all
collapse all
unified
split
.github
workflows
code-style.yml
tests.yml
.gitignore
README.md
composer.json
src
Cache
LaravelCacheStore.php
Contracts
CacheStore.php
DidResolver.php
HandleResolver.php
Data
DidDocument.php
Exceptions
DidResolutionException.php
HandleResolutionException.php
ResolverException.php
Facades
Resolver.php
Resolver.php
ResolverServiceProvider.php
Resolvers
AtProtoHandleResolver.php
DidResolverManager.php
PlcDidResolver.php
WebDidResolver.php
Support
Concerns
HasConfig.php
ParsesDid.php
Identity.php
tests
Unit
DidDocumentTest.php
DidResolverManagerTest.php
IdentityTest.php
PlcDidResolverTest.php
ResolverIdentityTest.php
ResolverTest.php
WebDidResolverTest.php
-2
.github/workflows/code-style.yml
···
1
1
name: Code Style
2
2
3
3
on:
4
4
-
push:
5
5
-
branches: [ main, dev ]
6
4
pull_request:
7
5
branches: [ main, dev ]
8
6
-2
.github/workflows/tests.yml
···
1
1
name: Tests
2
2
3
3
on:
4
4
-
push:
5
5
-
branches: [ main, dev ]
6
4
pull_request:
7
5
branches: [ main, dev ]
8
6
+1
.gitignore
···
1
1
.DS_Store
2
2
+
.phpunit.cache
2
3
.phpunit.result.cache
3
4
.php-cs-fixer.cache
4
5
composer.lock
+7
-7
README.md
···
32
32
## Quick Example
33
33
34
34
```php
35
35
-
use SocialDept\Resolver\Facades\Resolver;
35
35
+
use SocialDept\AtpResolver\Facades\Resolver;
36
36
37
37
// Resolve a DID to its document
38
38
$document = Resolver::resolveDid('did:plc:ewvi7nxzyoun6zhxrhs64oiz');
···
70
70
Resolver supports both `did:plc` and `did:web` methods:
71
71
72
72
```php
73
73
-
use SocialDept\Resolver\Facades\Resolver;
73
73
+
use SocialDept\AtpResolver\Facades\Resolver;
74
74
75
75
// PLC directory resolution
76
76
$document = Resolver::resolveDid('did:plc:ewvi7nxzyoun6zhxrhs64oiz');
···
165
165
Beacon includes static helper methods to validate DIDs and handles:
166
166
167
167
```php
168
168
-
use SocialDept\Resolver\Support\Identity;
168
168
+
use SocialDept\AtpResolver\Support\Identity;
169
169
170
170
// Validate handles
171
171
Identity::isHandle('alice.bsky.social'); // true
···
270
270
Beacon throws descriptive exceptions when resolution fails:
271
271
272
272
```php
273
273
-
use SocialDept\Resolver\Exceptions\DidResolutionException;
274
274
-
use SocialDept\Resolver\Exceptions\HandleResolutionException;
273
273
+
use SocialDept\AtpResolver\Exceptions\DidResolutionException;
274
274
+
use SocialDept\AtpResolver\Exceptions\HandleResolutionException;
275
275
276
276
try {
277
277
$document = Resolver::resolveDid('did:invalid:format');
···
328
328
### Input Validation
329
329
330
330
```php
331
331
-
use SocialDept\Resolver\Support\Identity;
332
332
-
use SocialDept\Resolver\Facades\Resolver;
331
331
+
use SocialDept\AtpResolver\Support\Identity;
332
332
+
use SocialDept\AtpResolver\Facades\Resolver;
333
333
334
334
// Validate user input before resolving
335
335
$actor = request()->input('actor');
+4
-4
composer.json
···
18
18
},
19
19
"autoload": {
20
20
"psr-4": {
21
21
-
"SocialDept\\Resolver\\": "src/"
21
21
+
"SocialDept\\AtpResolver\\": "src/"
22
22
}
23
23
},
24
24
"autoload-dev": {
25
25
"psr-4": {
26
26
-
"SocialDept\\Resolver\\Tests\\": "tests/"
26
26
+
"SocialDept\\AtpResolver\\Tests\\": "tests/"
27
27
}
28
28
},
29
29
"extra": {
30
30
"laravel": {
31
31
"providers": [
32
32
-
"SocialDept\\Resolver\\ResolverServiceProvider"
32
32
+
"SocialDept\\AtpResolver\\ResolverServiceProvider"
33
33
],
34
34
"aliases": {
35
35
-
"Resolver": "SocialDept\\Resolver\\Facades\\Resolver"
35
35
+
"Resolver": "SocialDept\\AtpResolver\\Facades\\Resolver"
36
36
}
37
37
}
38
38
}
+2
-2
src/Cache/LaravelCacheStore.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Cache;
3
3
+
namespace SocialDept\AtpResolver\Cache;
4
4
5
5
use Illuminate\Contracts\Cache\Repository;
6
6
-
use SocialDept\Resolver\Contracts\CacheStore;
6
6
+
use SocialDept\AtpResolver\Contracts\CacheStore;
7
7
8
8
class LaravelCacheStore implements CacheStore
9
9
{
+1
-1
src/Contracts/CacheStore.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Contracts;
3
3
+
namespace SocialDept\AtpResolver\Contracts;
4
4
5
5
interface CacheStore
6
6
{
+3
-3
src/Contracts/DidResolver.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Contracts;
3
3
+
namespace SocialDept\AtpResolver\Contracts;
4
4
5
5
-
use SocialDept\Resolver\Data\DidDocument;
5
5
+
use SocialDept\AtpResolver\Data\DidDocument;
6
6
7
7
interface DidResolver
8
8
{
···
12
12
* @param string $did The DID to resolve (e.g., "did:plc:abc123" or "did:web:example.com")
13
13
* @return DidDocument
14
14
*
15
15
-
* @throws \SocialDept\Resolver\Exceptions\DidResolutionException
15
15
+
* @throws \SocialDept\AtpResolver\Exceptions\DidResolutionException
16
16
*/
17
17
public function resolve(string $did): DidDocument;
18
18
+2
-2
src/Contracts/HandleResolver.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Contracts;
3
3
+
namespace SocialDept\AtpResolver\Contracts;
4
4
5
5
interface HandleResolver
6
6
{
···
10
10
* @param string $handle The handle to resolve (e.g., "user.bsky.social")
11
11
* @return string The resolved DID
12
12
*
13
13
-
* @throws \SocialDept\Resolver\Exceptions\HandleResolutionException
13
13
+
* @throws \SocialDept\AtpResolver\Exceptions\HandleResolutionException
14
14
*/
15
15
public function resolve(string $handle): string;
16
16
}
+1
-1
src/Data/DidDocument.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Data;
3
3
+
namespace SocialDept\AtpResolver\Data;
4
4
5
5
class DidDocument
6
6
{
+1
-1
src/Exceptions/DidResolutionException.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Exceptions;
3
3
+
namespace SocialDept\AtpResolver\Exceptions;
4
4
5
5
class DidResolutionException extends ResolverException
6
6
{
+1
-1
src/Exceptions/HandleResolutionException.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Exceptions;
3
3
+
namespace SocialDept\AtpResolver\Exceptions;
4
4
5
5
class HandleResolutionException extends ResolverException
6
6
{
+1
-1
src/Exceptions/ResolverException.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Exceptions;
3
3
+
namespace SocialDept\AtpResolver\Exceptions;
4
4
5
5
use Exception;
6
6
+1
-1
src/Facades/Resolver.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Facades;
3
3
+
namespace SocialDept\AtpResolver\Facades;
4
4
5
5
use Illuminate\Support\Facades\Facade;
6
6
+9
-9
src/Resolver.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver;
3
3
+
namespace SocialDept\AtpResolver;
4
4
5
5
-
use SocialDept\Resolver\Contracts\CacheStore;
6
6
-
use SocialDept\Resolver\Contracts\DidResolver;
7
7
-
use SocialDept\Resolver\Contracts\HandleResolver;
8
8
-
use SocialDept\Resolver\Data\DidDocument;
9
9
-
use SocialDept\Resolver\Exceptions\DidResolutionException;
10
10
-
use SocialDept\Resolver\Exceptions\HandleResolutionException;
11
11
-
use SocialDept\Resolver\Support\Concerns\HasConfig;
12
12
-
use SocialDept\Resolver\Support\Identity;
5
5
+
use SocialDept\AtpResolver\Contracts\CacheStore;
6
6
+
use SocialDept\AtpResolver\Contracts\DidResolver;
7
7
+
use SocialDept\AtpResolver\Contracts\HandleResolver;
8
8
+
use SocialDept\AtpResolver\Data\DidDocument;
9
9
+
use SocialDept\AtpResolver\Exceptions\DidResolutionException;
10
10
+
use SocialDept\AtpResolver\Exceptions\HandleResolutionException;
11
11
+
use SocialDept\AtpResolver\Support\Concerns\HasConfig;
12
12
+
use SocialDept\AtpResolver\Support\Identity;
13
13
14
14
class Resolver
15
15
{
+7
-7
src/ResolverServiceProvider.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver;
3
3
+
namespace SocialDept\AtpResolver;
4
4
5
5
use Illuminate\Support\ServiceProvider;
6
6
-
use SocialDept\Resolver\Cache\LaravelCacheStore;
7
7
-
use SocialDept\Resolver\Contracts\CacheStore;
8
8
-
use SocialDept\Resolver\Contracts\DidResolver;
9
9
-
use SocialDept\Resolver\Contracts\HandleResolver;
10
10
-
use SocialDept\Resolver\Resolvers\AtProtoHandleResolver;
11
11
-
use SocialDept\Resolver\Resolvers\DidResolverManager;
6
6
+
use SocialDept\AtpResolver\Cache\LaravelCacheStore;
7
7
+
use SocialDept\AtpResolver\Contracts\CacheStore;
8
8
+
use SocialDept\AtpResolver\Contracts\DidResolver;
9
9
+
use SocialDept\AtpResolver\Contracts\HandleResolver;
10
10
+
use SocialDept\AtpResolver\Resolvers\AtProtoHandleResolver;
11
11
+
use SocialDept\AtpResolver\Resolvers\DidResolverManager;
12
12
13
13
class ResolverServiceProvider extends ServiceProvider
14
14
{
+4
-4
src/Resolvers/AtProtoHandleResolver.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Resolvers;
3
3
+
namespace SocialDept\AtpResolver\Resolvers;
4
4
5
5
use GuzzleHttp\Client;
6
6
use GuzzleHttp\Exception\GuzzleException;
7
7
-
use SocialDept\Resolver\Contracts\HandleResolver;
8
8
-
use SocialDept\Resolver\Exceptions\HandleResolutionException;
9
9
-
use SocialDept\Resolver\Support\Concerns\HasConfig;
7
7
+
use SocialDept\AtpResolver\Contracts\HandleResolver;
8
8
+
use SocialDept\AtpResolver\Exceptions\HandleResolutionException;
9
9
+
use SocialDept\AtpResolver\Support\Concerns\HasConfig;
10
10
11
11
class AtProtoHandleResolver implements HandleResolver
12
12
{
+5
-5
src/Resolvers/DidResolverManager.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Resolvers;
3
3
+
namespace SocialDept\AtpResolver\Resolvers;
4
4
5
5
-
use SocialDept\Resolver\Contracts\DidResolver;
6
6
-
use SocialDept\Resolver\Data\DidDocument;
7
7
-
use SocialDept\Resolver\Exceptions\DidResolutionException;
8
8
-
use SocialDept\Resolver\Support\Concerns\ParsesDid;
5
5
+
use SocialDept\AtpResolver\Contracts\DidResolver;
6
6
+
use SocialDept\AtpResolver\Data\DidDocument;
7
7
+
use SocialDept\AtpResolver\Exceptions\DidResolutionException;
8
8
+
use SocialDept\AtpResolver\Support\Concerns\ParsesDid;
9
9
10
10
class DidResolverManager implements DidResolver
11
11
{
+6
-6
src/Resolvers/PlcDidResolver.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Resolvers;
3
3
+
namespace SocialDept\AtpResolver\Resolvers;
4
4
5
5
use GuzzleHttp\Client;
6
6
use GuzzleHttp\Exception\GuzzleException;
7
7
-
use SocialDept\Resolver\Contracts\DidResolver;
8
8
-
use SocialDept\Resolver\Data\DidDocument;
9
9
-
use SocialDept\Resolver\Exceptions\DidResolutionException;
10
10
-
use SocialDept\Resolver\Support\Concerns\HasConfig;
11
11
-
use SocialDept\Resolver\Support\Concerns\ParsesDid;
7
7
+
use SocialDept\AtpResolver\Contracts\DidResolver;
8
8
+
use SocialDept\AtpResolver\Data\DidDocument;
9
9
+
use SocialDept\AtpResolver\Exceptions\DidResolutionException;
10
10
+
use SocialDept\AtpResolver\Support\Concerns\HasConfig;
11
11
+
use SocialDept\AtpResolver\Support\Concerns\ParsesDid;
12
12
13
13
class PlcDidResolver implements DidResolver
14
14
{
+6
-6
src/Resolvers/WebDidResolver.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Resolvers;
3
3
+
namespace SocialDept\AtpResolver\Resolvers;
4
4
5
5
use GuzzleHttp\Client;
6
6
use GuzzleHttp\Exception\GuzzleException;
7
7
-
use SocialDept\Resolver\Contracts\DidResolver;
8
8
-
use SocialDept\Resolver\Data\DidDocument;
9
9
-
use SocialDept\Resolver\Exceptions\DidResolutionException;
10
10
-
use SocialDept\Resolver\Support\Concerns\HasConfig;
11
11
-
use SocialDept\Resolver\Support\Concerns\ParsesDid;
7
7
+
use SocialDept\AtpResolver\Contracts\DidResolver;
8
8
+
use SocialDept\AtpResolver\Data\DidDocument;
9
9
+
use SocialDept\AtpResolver\Exceptions\DidResolutionException;
10
10
+
use SocialDept\AtpResolver\Support\Concerns\HasConfig;
11
11
+
use SocialDept\AtpResolver\Support\Concerns\ParsesDid;
12
12
13
13
class WebDidResolver implements DidResolver
14
14
{
+1
-1
src/Support/Concerns/HasConfig.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Support\Concerns;
3
3
+
namespace SocialDept\AtpResolver\Support\Concerns;
4
4
5
5
trait HasConfig
6
6
{
+2
-2
src/Support/Concerns/ParsesDid.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Support\Concerns;
3
3
+
namespace SocialDept\AtpResolver\Support\Concerns;
4
4
5
5
-
use SocialDept\Resolver\Exceptions\DidResolutionException;
5
5
+
use SocialDept\AtpResolver\Exceptions\DidResolutionException;
6
6
7
7
trait ParsesDid
8
8
{
+1
-1
src/Support/Identity.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Support;
3
3
+
namespace SocialDept\AtpResolver\Support;
4
4
5
5
class Identity
6
6
{
+2
-2
tests/Unit/DidDocumentTest.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Tests\Unit;
3
3
+
namespace SocialDept\AtpResolver\Tests\Unit;
4
4
5
5
use PHPUnit\Framework\TestCase;
6
6
-
use SocialDept\Resolver\Data\DidDocument;
6
6
+
use SocialDept\AtpResolver\Data\DidDocument;
7
7
8
8
class DidDocumentTest extends TestCase
9
9
{
+5
-5
tests/Unit/DidResolverManagerTest.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Tests\Unit;
3
3
+
namespace SocialDept\AtpResolver\Tests\Unit;
4
4
5
5
use PHPUnit\Framework\TestCase;
6
6
-
use SocialDept\Resolver\Contracts\DidResolver;
7
7
-
use SocialDept\Resolver\Data\DidDocument;
8
8
-
use SocialDept\Resolver\Exceptions\DidResolutionException;
9
9
-
use SocialDept\Resolver\Resolvers\DidResolverManager;
6
6
+
use SocialDept\AtpResolver\Contracts\DidResolver;
7
7
+
use SocialDept\AtpResolver\Data\DidDocument;
8
8
+
use SocialDept\AtpResolver\Exceptions\DidResolutionException;
9
9
+
use SocialDept\AtpResolver\Resolvers\DidResolverManager;
10
10
11
11
class DidResolverManagerTest extends TestCase
12
12
{
+2
-2
tests/Unit/IdentityTest.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Tests\Unit;
3
3
+
namespace SocialDept\AtpResolver\Tests\Unit;
4
4
5
5
use PHPUnit\Framework\TestCase;
6
6
-
use SocialDept\Resolver\Support\Identity;
6
6
+
use SocialDept\AtpResolver\Support\Identity;
7
7
8
8
class IdentityTest extends TestCase
9
9
{
+3
-3
tests/Unit/PlcDidResolverTest.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Tests\Unit;
3
3
+
namespace SocialDept\AtpResolver\Tests\Unit;
4
4
5
5
use PHPUnit\Framework\TestCase;
6
6
-
use SocialDept\Resolver\Exceptions\DidResolutionException;
7
7
-
use SocialDept\Resolver\Resolvers\PlcDidResolver;
6
6
+
use SocialDept\AtpResolver\Exceptions\DidResolutionException;
7
7
+
use SocialDept\AtpResolver\Resolvers\PlcDidResolver;
8
8
9
9
class PlcDidResolverTest extends TestCase
10
10
{
+6
-6
tests/Unit/ResolverIdentityTest.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Tests\Unit;
3
3
+
namespace SocialDept\AtpResolver\Tests\Unit;
4
4
5
5
use PHPUnit\Framework\TestCase;
6
6
-
use SocialDept\Resolver\Contracts\CacheStore;
7
7
-
use SocialDept\Resolver\Contracts\DidResolver;
8
8
-
use SocialDept\Resolver\Contracts\HandleResolver;
9
9
-
use SocialDept\Resolver\Data\DidDocument;
10
10
-
use SocialDept\Resolver\Resolver;
6
6
+
use SocialDept\AtpResolver\Contracts\CacheStore;
7
7
+
use SocialDept\AtpResolver\Contracts\DidResolver;
8
8
+
use SocialDept\AtpResolver\Contracts\HandleResolver;
9
9
+
use SocialDept\AtpResolver\Data\DidDocument;
10
10
+
use SocialDept\AtpResolver\Resolver;
11
11
12
12
class ResolverIdentityTest extends TestCase
13
13
{
+6
-6
tests/Unit/ResolverTest.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Tests\Unit;
3
3
+
namespace SocialDept\AtpResolver\Tests\Unit;
4
4
5
5
use PHPUnit\Framework\TestCase;
6
6
-
use SocialDept\Resolver\Contracts\CacheStore;
7
7
-
use SocialDept\Resolver\Contracts\DidResolver;
8
8
-
use SocialDept\Resolver\Contracts\HandleResolver;
9
9
-
use SocialDept\Resolver\Data\DidDocument;
10
10
-
use SocialDept\Resolver\Resolver;
6
6
+
use SocialDept\AtpResolver\Contracts\CacheStore;
7
7
+
use SocialDept\AtpResolver\Contracts\DidResolver;
8
8
+
use SocialDept\AtpResolver\Contracts\HandleResolver;
9
9
+
use SocialDept\AtpResolver\Data\DidDocument;
10
10
+
use SocialDept\AtpResolver\Resolver;
11
11
12
12
class ResolverTest extends TestCase
13
13
{
+3
-3
tests/Unit/WebDidResolverTest.php
···
1
1
<?php
2
2
3
3
-
namespace SocialDept\Resolver\Tests\Unit;
3
3
+
namespace SocialDept\AtpResolver\Tests\Unit;
4
4
5
5
use PHPUnit\Framework\TestCase;
6
6
-
use SocialDept\Resolver\Exceptions\DidResolutionException;
7
7
-
use SocialDept\Resolver\Resolvers\WebDidResolver;
6
6
+
use SocialDept\AtpResolver\Exceptions\DidResolutionException;
7
7
+
use SocialDept\AtpResolver\Resolvers\WebDidResolver;
8
8
9
9
class WebDidResolverTest extends TestCase
10
10
{