Remove core's local proto/ fork and pull the canonical block/proto repo in as a submodule at the same path. buf.yaml now sources from the submodule's orchestrator/v1 namespace; everything outside that (blockninja, helpdesk) is excluded from generation. This brings the orchestrator's local-only RPCs (PluginScopeService.ListMyPlugins, PluginRegistryService.SubmitForReview, the full PluginModerationService) into core's bindings — harmless surface area for the CLI, prerequisite for the orchestrator to also stop forking the proto. Side effect: the CLI's account picker now uses the canonical AccountService.ListMyAccounts in accounts.proto rather than the duplicate PluginAuthService.ListMyAccounts that lived only in core's fork. The existing Account message uses Name (no DisplayName / Role), so the picker output collapses to "slug — Name". Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
45 lines
1.5 KiB
Go
45 lines
1.5 KiB
Go
package orchclient
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"connectrpc.com/connect"
|
|
"git.dev.alexdunmow.com/block/core/internal/api/orchestrator/v1/orchestratorv1connect"
|
|
)
|
|
|
|
type Client struct {
|
|
Host string
|
|
Token string
|
|
Auth orchestratorv1connect.PluginAuthServiceClient
|
|
Scope orchestratorv1connect.PluginScopeServiceClient
|
|
Reg orchestratorv1connect.PluginRegistryServiceClient
|
|
Pub orchestratorv1connect.PluginPublishServiceClient
|
|
Account orchestratorv1connect.AccountServiceClient
|
|
}
|
|
|
|
func New(host, token string) *Client {
|
|
httpClient := &http.Client{}
|
|
opts := []connect.ClientOption{
|
|
connect.WithInterceptors(bearerInterceptor(token)),
|
|
}
|
|
c := &Client{Host: host, Token: token}
|
|
c.Auth = orchestratorv1connect.NewPluginAuthServiceClient(httpClient, host, opts...)
|
|
c.Scope = orchestratorv1connect.NewPluginScopeServiceClient(httpClient, host, opts...)
|
|
c.Reg = orchestratorv1connect.NewPluginRegistryServiceClient(httpClient, host, opts...)
|
|
c.Pub = orchestratorv1connect.NewPluginPublishServiceClient(httpClient, host, opts...)
|
|
c.Account = orchestratorv1connect.NewAccountServiceClient(httpClient, host, opts...)
|
|
return c
|
|
}
|
|
|
|
func bearerInterceptor(token string) connect.Interceptor {
|
|
return connect.UnaryInterceptorFunc(func(next connect.UnaryFunc) connect.UnaryFunc {
|
|
return func(ctx context.Context, req connect.AnyRequest) (connect.AnyResponse, error) {
|
|
if token != "" {
|
|
req.Header().Set("Authorization", "Bearer "+token)
|
|
}
|
|
return next(ctx, req)
|
|
}
|
|
})
|
|
}
|