Class: BSV::Wallet::Substrates::HTTPWalletJSON

Inherits:
Object
  • Object
show all
Includes:
Interface
Defined in:
lib/bsv/wallet_interface/substrates/http_wallet_json.rb

Overview

BRC-100 wallet substrate that delegates all Interface methods to a remote wallet server via JSON-over-HTTP (POST #base_url/#camelCaseMethodName).

Key conversion is handled by BSV::WireFormat: Ruby snake_case symbol keys in args are converted to camelCase strings before the request, and the camelCase JSON response is converted back to snake_case symbol keys.

Examples:

wallet = BSV::Wallet::Substrates::HTTPWalletJSON.new('http://localhost:3321',
                                                      originator: 'myapp.example.com')
result = wallet.get_public_key({ identity_key: true })
# => { public_key: '02abc...' }

Constant Summary collapse

METHOD_NAMES =

Maps the 28 BRC-100 Interface method symbols to their camelCase HTTP endpoint names. Derived from Wire::Serializer::CALL_CODES keys via BSV::WireFormat.snake_to_camel.

BSV::Wallet::Wire::Serializer::CALL_CODES.keys.to_h do |sym|
  [sym, BSV::WireFormat.snake_to_camel(sym.to_s)]
end.freeze

Instance Method Summary collapse

Constructor Details

#initialize(base_url, originator: nil, http_client: nil) ⇒ HTTPWalletJSON

Returns a new instance of HTTPWalletJSON.

Parameters:

  • base_url (String)

    base URL of the remote wallet server (e.g. ‘localhost:3321’)

  • originator (String, nil) (defaults to: nil)

    FQDN of the originating application (sent as Origin/Originator headers)

  • http_client (Object, nil) (defaults to: nil)

    injectable HTTP client for testing; must respond to ‘start(uri, &block)` returning a Net::HTTP-compatible response



35
36
37
38
39
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 35

def initialize(base_url, originator: nil, http_client: nil)
  @base_url = base_url
  @originator = originator
  @http_client = http_client
end

Instance Method Details

#abort_action(args, originator: nil) ⇒ Object



56
57
58
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 56

def abort_action(args, originator: nil)
  call(METHOD_NAMES[:abort_action], args)
end

#acquire_certificate(args, originator: nil) ⇒ Object



112
113
114
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 112

def acquire_certificate(args, originator: nil)
  call(METHOD_NAMES[:acquire_certificate], args)
end

#create_action(args, originator: nil) ⇒ Object

Per-call originator is accepted for Interface conformance but not forwarded. The Origin header uses the constructor-level @originator for the lifetime of the connection — matching the TS SDK’s HTTPWalletJSON, which also ignores per-call originator. WalletWireTransceiver supports per-call originator because the wire frame encodes it per-message; HTTP substrates identify by connection, not by call. rubocop:disable Lint/UnusedMethodArgument



48
49
50
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 48

def create_action(args, originator: nil)
  call(METHOD_NAMES[:create_action], args)
end

#create_hmac(args, originator: nil) ⇒ Object



96
97
98
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 96

def create_hmac(args, originator: nil)
  call(METHOD_NAMES[:create_hmac], args)
end

#create_signature(args, originator: nil) ⇒ Object



104
105
106
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 104

def create_signature(args, originator: nil)
  call(METHOD_NAMES[:create_signature], args)
end

#decrypt(args, originator: nil) ⇒ Object



92
93
94
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 92

def decrypt(args, originator: nil)
  call(METHOD_NAMES[:decrypt], args)
end

#discover_by_attributes(args, originator: nil) ⇒ Object



132
133
134
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 132

def discover_by_attributes(args, originator: nil)
  call(METHOD_NAMES[:discover_by_attributes], args)
end

#discover_by_identity_key(args, originator: nil) ⇒ Object



128
129
130
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 128

def discover_by_identity_key(args, originator: nil)
  call(METHOD_NAMES[:discover_by_identity_key], args)
end

#encrypt(args, originator: nil) ⇒ Object



88
89
90
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 88

def encrypt(args, originator: nil)
  call(METHOD_NAMES[:encrypt], args)
end

#get_header_for_height(args, originator: nil) ⇒ Object



148
149
150
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 148

def get_header_for_height(args, originator: nil)
  call(METHOD_NAMES[:get_header_for_height], args)
end

#get_height(args = {}, originator: nil) ⇒ Object



144
145
146
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 144

def get_height(args = {}, originator: nil)
  call(METHOD_NAMES[:get_height], args)
end

#get_network(args = {}, originator: nil) ⇒ Object



152
153
154
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 152

def get_network(args = {}, originator: nil)
  call(METHOD_NAMES[:get_network], args)
end

#get_public_key(args, originator: nil) ⇒ Object



76
77
78
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 76

def get_public_key(args, originator: nil)
  call(METHOD_NAMES[:get_public_key], args)
end

#get_version(args = {}, originator: nil) ⇒ Object



156
157
158
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 156

def get_version(args = {}, originator: nil)
  call(METHOD_NAMES[:get_version], args)
end

#internalize_action(args, originator: nil) ⇒ Object



64
65
66
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 64

def internalize_action(args, originator: nil)
  call(METHOD_NAMES[:internalize_action], args)
end

#is_authenticated(args = {}, originator: nil) ⇒ Object



136
137
138
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 136

def is_authenticated(args = {}, originator: nil)
  call(METHOD_NAMES[:is_authenticated], args)
end

#list_actions(args, originator: nil) ⇒ Object



60
61
62
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 60

def list_actions(args, originator: nil)
  call(METHOD_NAMES[:list_actions], args)
end

#list_certificates(args, originator: nil) ⇒ Object



116
117
118
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 116

def list_certificates(args, originator: nil)
  call(METHOD_NAMES[:list_certificates], args)
end

#list_outputs(args, originator: nil) ⇒ Object



68
69
70
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 68

def list_outputs(args, originator: nil)
  call(METHOD_NAMES[:list_outputs], args)
end

#prove_certificate(args, originator: nil) ⇒ Object



120
121
122
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 120

def prove_certificate(args, originator: nil)
  call(METHOD_NAMES[:prove_certificate], args)
end

#relinquish_certificate(args, originator: nil) ⇒ Object



124
125
126
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 124

def relinquish_certificate(args, originator: nil)
  call(METHOD_NAMES[:relinquish_certificate], args)
end

#relinquish_output(args, originator: nil) ⇒ Object



72
73
74
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 72

def relinquish_output(args, originator: nil)
  call(METHOD_NAMES[:relinquish_output], args)
end

#reveal_counterparty_key_linkage(args, originator: nil) ⇒ Object



80
81
82
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 80

def reveal_counterparty_key_linkage(args, originator: nil)
  call(METHOD_NAMES[:reveal_counterparty_key_linkage], args)
end

#reveal_specific_key_linkage(args, originator: nil) ⇒ Object



84
85
86
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 84

def reveal_specific_key_linkage(args, originator: nil)
  call(METHOD_NAMES[:reveal_specific_key_linkage], args)
end

#sign_action(args, originator: nil) ⇒ Object



52
53
54
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 52

def sign_action(args, originator: nil)
  call(METHOD_NAMES[:sign_action], args)
end

#verify_hmac(args, originator: nil) ⇒ Object



100
101
102
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 100

def verify_hmac(args, originator: nil)
  call(METHOD_NAMES[:verify_hmac], args)
end

#verify_signature(args, originator: nil) ⇒ Object



108
109
110
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 108

def verify_signature(args, originator: nil)
  call(METHOD_NAMES[:verify_signature], args)
end

#wait_for_authentication(args = {}, originator: nil) ⇒ Object



140
141
142
# File 'lib/bsv/wallet_interface/substrates/http_wallet_json.rb', line 140

def wait_for_authentication(args = {}, originator: nil)
  call(METHOD_NAMES[:wait_for_authentication], args)
end