Files
zeekay 7d727874d5 chore: rebrand Formance Payments -> Hanzo Payments (hanzo-fi)
- go.mod module path + all self-imports: github.com/formancehq/payments -> github.com/hanzo-fi/payments
  (1590 .go files / 3152 refs; 20 modules: root, pkg/client, pkg/domain, 18 ce/plugins).
  External dep kept: formancehq/go-libs.
- plugins: each ce/plugins/* consumed a *published* pkg/domain; added local
  'replace .../pkg/domain => ../../../pkg/domain' (consistent with root) so every
  standalone plugin module builds in-monorepo. compile-plugin.sh MOD var rebranded too.
- branding: README, LICENSE (dual MIT+EE; upstream copyright retained + Hanzo added),
  goreleaser (release images -> registry.hanzo.ai/hanzo-fi, OCI labels, homepage),
  proto go_package, renovate, speakeasy gen.yaml, connector-template *.gotpl.
- CI: removed Numary/Formance workflows + composite action; added canonical hanzo.yml +
  cicd.yml (hanzoai/ci, gated HANZO_CI_ENABLED) + secretless ci.yml (go build/vet).
- kept as data/compat keys: wire capability enums ALLOW_FORMANCE_*, generated SDK type
  client.Formance, domain field FormanceRedirectURL, OTEL_SERVICE_NAME, upstream base image.
- verified: go build ./... (default + -tags ee) + all 20 nested modules green.
2026-07-05 13:08:55 -07:00

80 lines
2.7 KiB
Go

package client
import (
"context"
"fmt"
"strings"
"github.com/hanzo-fi/payments/pkg/domain/httpwrapper"
"github.com/hanzo-fi/payments/pkg/domain/metrics"
"golang.org/x/oauth2/clientcredentials"
)
//go:generate mockgen -source client.go -destination client_generated.go -package client . Client
type Client interface {
CreateUser(ctx context.Context, userID string, market string, locale string) (CreateUserResponse, error)
CreateTemporaryAuthorizationCode(ctx context.Context, request CreateTemporaryCodeRequest) (CreateTemporaryCodeResponse, error)
CreateWebhook(ctx context.Context, eventType WebhookEventType, connectorID string, url string) (CreateWebhookResponse, error)
DeleteWebhook(ctx context.Context, webhookID string) error
GetAccountTransactionsModifiedWebhook(ctx context.Context, payload []byte) (AccountTransactionsModifiedWebhook, error)
GetAccountTransactionsDeletedWebhook(ctx context.Context, payload []byte) (AccountTransactionsDeletedWebhook, error)
GetRefreshFinishedWebhook(ctx context.Context, payload []byte) (RefreshFinishedWebhook, error)
GetAccountCreatedWebhook(ctx context.Context, payload []byte) (AccountCreatedWebhook, error)
DeleteUserConnection(ctx context.Context, req DeleteUserConnectionRequest) error
DeleteUser(ctx context.Context, req DeleteUserRequest) error
ListTransactions(ctx context.Context, req ListTransactionRequest) (ListTransactionResponse, error)
ListAccounts(ctx context.Context, userID string, nextPageToken string) (ListAccountsResponse, error)
GetAccount(ctx context.Context, userID string, accountID string) (Account, error)
}
type client struct {
httpClient httpwrapper.Client
userClient httpwrapper.Client
connectorName string
clientID string
clientSecret string
endpoint string
}
func New(connectorName, clientID, clientSecret, endpoint string) Client {
endpoint = strings.TrimSuffix(endpoint, "/")
config := &httpwrapper.Config{
Transport: metrics.NewTransport(connectorName, metrics.TransportOpts{}),
OAuthConfig: &clientcredentials.Config{
ClientID: clientID,
ClientSecret: clientSecret,
TokenURL: fmt.Sprintf("%s/api/v1/oauth/token", endpoint),
Scopes: func() []string {
out := make([]string, len(allScopes))
for i, s := range allScopes {
out[i] = string(s)
}
return out
}(),
},
}
c := &client{
httpClient: httpwrapper.NewClient(config),
connectorName: connectorName,
clientID: clientID,
clientSecret: clientSecret,
endpoint: endpoint,
}
c.userClient = c.createUserHTTPClient()
return c
}
func (c *client) createUserHTTPClient() httpwrapper.Client {
config := &httpwrapper.Config{
Transport: metrics.NewTransport(c.connectorName, metrics.TransportOpts{}),
}
return httpwrapper.NewClient(config)
}