 9bdcbe0447
			
		
	
	9bdcbe0447
	
	
	
		
			
			Major integrations and fixes: - Added BACKBEAT SDK integration for P2P operation timing - Implemented beat-aware status tracking for distributed operations - Added Docker secrets support for secure license management - Resolved KACHING license validation via HTTPS/TLS - Updated docker-compose configuration for clean stack deployment - Disabled rollback policies to prevent deployment failures - Added license credential storage (CHORUS-DEV-MULTI-001) Technical improvements: - BACKBEAT P2P operation tracking with phase management - Enhanced configuration system with file-based secrets - Improved error handling for license validation - Clean separation of KACHING and CHORUS deployment stacks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package multibase
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"unicode/utf8"
 | |
| )
 | |
| 
 | |
| // Encoder is a multibase encoding that is verified to be supported and
 | |
| // supports an Encode method that does not return an error
 | |
| type Encoder struct {
 | |
| 	enc Encoding
 | |
| }
 | |
| 
 | |
| // NewEncoder create a new Encoder from an Encoding
 | |
| func NewEncoder(base Encoding) (Encoder, error) {
 | |
| 	_, ok := EncodingToStr[base]
 | |
| 	if !ok {
 | |
| 		return Encoder{-1}, fmt.Errorf("unsupported multibase encoding: %d", base)
 | |
| 	}
 | |
| 	return Encoder{base}, nil
 | |
| }
 | |
| 
 | |
| // MustNewEncoder is like NewEncoder but will panic if the encoding is
 | |
| // invalid.
 | |
| func MustNewEncoder(base Encoding) Encoder {
 | |
| 	_, ok := EncodingToStr[base]
 | |
| 	if !ok {
 | |
| 		panic("Unsupported multibase encoding")
 | |
| 	}
 | |
| 	return Encoder{base}
 | |
| }
 | |
| 
 | |
| // EncoderByName creates an encoder from a string, the string can
 | |
| // either be the multibase name or single character multibase prefix
 | |
| func EncoderByName(str string) (Encoder, error) {
 | |
| 	var base Encoding
 | |
| 	var ok bool
 | |
| 	if len(str) == 0 {
 | |
| 		return Encoder{-1}, fmt.Errorf("empty multibase encoding")
 | |
| 	} else if utf8.RuneCountInString(str) == 1 {
 | |
| 		r, _ := utf8.DecodeRuneInString(str)
 | |
| 		base = Encoding(r)
 | |
| 		_, ok = EncodingToStr[base]
 | |
| 	} else {
 | |
| 		base, ok = Encodings[str]
 | |
| 	}
 | |
| 	if !ok {
 | |
| 		return Encoder{-1}, fmt.Errorf("unsupported multibase encoding: %s", str)
 | |
| 	}
 | |
| 	return Encoder{base}, nil
 | |
| }
 | |
| 
 | |
| func (p Encoder) Encoding() Encoding {
 | |
| 	return p.enc
 | |
| }
 | |
| 
 | |
| // Encode encodes the multibase using the given Encoder.
 | |
| func (p Encoder) Encode(data []byte) string {
 | |
| 	str, err := Encode(p.enc, data)
 | |
| 	if err != nil {
 | |
| 		// should not happen
 | |
| 		panic(err)
 | |
| 	}
 | |
| 	return str
 | |
| }
 |