Files
sendico/api/pkg/discovery/operations.go
2026-02-27 02:33:40 +01:00

105 lines
3.0 KiB
Go

package discovery
import "strings"
// Rail identifies a canonical payment rail token.
type Rail string
// RailOperation identifies a canonical payment-plan rail action token.
type RailOperation string
const (
OperationDiscoveryLookup = "discovery.lookup"
OperationDocumentsBatchResolve = "documents.batch_resolve"
OperationDocumentsGet = "documents.get"
OperationFeeCalc = "fee.calc"
OperationNotifySend = "notify.send"
OperationFXQuote = "fx.quote"
OperationFXIngest = "fx.ingest"
OperationPaymentInitiate = "payment.initiate"
OperationPaymentQuote = "payment.quote"
OperationPaymentMultiQuote = "payment.multiquote"
OperationPaymentMethodsManage = "payment_methods.manage"
OperationPaymentMethodsRead = "payment_methods.read"
OperationBalanceRead = "balance.read"
OperationLedgerDebit = "ledger.debit"
OperationLedgerCredit = "ledger.credit"
OperationLedgerTransfer = "ledger.transfer"
OperationLedgerFX = "ledger.fx"
OperationExternalDebit = "external.debit"
OperationExternalCredit = "external.credit"
OperationSend = "send"
OperationFee = "fee"
OperationObserveConfirm = "observe.confirm"
OperationFXConvert = "fx.convert"
)
// Canonical rail identifiers.
const (
RailUnspecified = "UNSPECIFIED"
RailCrypto = "CRYPTO"
RailProviderSettlement = "SETTLEMENT"
RailLedger = "LEDGER"
RailCardPayout = "CARD"
RailFiatOnRamp = "ONRAMP"
RailFiatOffRamp = "OFFRAMP"
)
// Canonical payment-plan rail operation identifiers.
const (
RailOperationUnspecified = "UNSPECIFIED"
RailOperationDebit = "DEBIT"
RailOperationCredit = "CREDIT"
RailOperationExternalDebit = "EXTERNAL_DEBIT"
RailOperationExternalCredit = "EXTERNAL_CREDIT"
RailOperationMove = "MOVE"
RailOperationSend = "SEND"
RailOperationFee = "FEE"
RailOperationObserveConfirm = "OBSERVE_CONFIRM"
RailOperationFXConvert = "FX_CONVERT"
RailOperationBlock = "BLOCK"
RailOperationRelease = "RELEASE"
)
// NormalizeOperation canonicalizes an operation string for comparisons.
func NormalizeOperation(value string) string {
return strings.ToLower(strings.TrimSpace(value))
}
// HasAnyOperation reports whether ops contains any of required operations.
func HasAnyOperation(ops []string, required []string) bool {
if len(required) == 0 {
return true
}
for _, op := range ops {
normalized := NormalizeOperation(op)
if normalized == "" {
continue
}
for _, target := range required {
if normalized == NormalizeOperation(target) {
return true
}
}
}
return false
}
// LedgerServiceOperations returns canonical operations announced by ledger.
func LedgerServiceOperations() []string {
return []string{
OperationBalanceRead,
OperationLedgerDebit,
OperationLedgerCredit,
OperationLedgerTransfer,
OperationLedgerFX,
OperationExternalCredit,
OperationExternalDebit,
}
}