Resolve AT Protocol DIDs, handles, and schemas with intelligent caching for Laravel
1<?php
2
3namespace SocialDept\AtpResolver;
4
5use Illuminate\Support\ServiceProvider;
6use SocialDept\AtpResolver\Cache\LaravelCacheStore;
7use SocialDept\AtpResolver\Contracts\CacheStore;
8use SocialDept\AtpResolver\Contracts\DidResolver;
9use SocialDept\AtpResolver\Contracts\HandleResolver;
10use SocialDept\AtpResolver\Resolvers\AtProtoHandleResolver;
11use SocialDept\AtpResolver\Resolvers\DidResolverManager;
12
13class ResolverServiceProvider extends ServiceProvider
14{
15 /**
16 * Register any package services.
17 */
18 public function register(): void
19 {
20 $this->mergeConfigFrom(__DIR__.'/../config/resolver.php', 'resolver');
21
22 // Register cache store
23 $this->app->singleton(CacheStore::class, function ($app) {
24 return new LaravelCacheStore($app->make('cache')->store());
25 });
26
27 // Register DID resolver
28 $this->app->singleton(DidResolver::class, function ($app) {
29 return new DidResolverManager();
30 });
31
32 // Register handle resolver
33 $this->app->singleton(HandleResolver::class, function ($app) {
34 return new AtProtoHandleResolver();
35 });
36
37 // Register Resolver service
38 $this->app->singleton('resolver', function ($app) {
39 return new Resolver(
40 $app->make(DidResolver::class),
41 $app->make(HandleResolver::class),
42 $app->make(CacheStore::class),
43 );
44 });
45
46 $this->app->alias('resolver', Resolver::class);
47 }
48
49 /**
50 * Bootstrap the application services.
51 */
52 public function boot(): void
53 {
54 if ($this->app->runningInConsole()) {
55 $this->bootForConsole();
56 }
57 }
58
59 /**
60 * Get the services provided by the provider.
61 *
62 * @return array<string>
63 */
64 public function provides(): array
65 {
66 return ['resolver', Resolver::class];
67 }
68
69 /**
70 * Console-specific booting.
71 */
72 protected function bootForConsole(): void
73 {
74 // Publish config
75 $this->publishes([
76 __DIR__.'/../config/resolver.php' => config_path('resolver.php'),
77 ], 'resolver-config');
78 }
79}