solana-studio 0.4.2 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eddaba3ed1477d676bec3f207d9d1fd41614853259b3fb1b6d8606708f461eef
4
- data.tar.gz: 3517d316ee585700c03b70c868bd5b3e1225e18f3dd03992e69d3e36d81a3e1e
3
+ metadata.gz: cae5d5807d954cbf5b077cb39c210fced82fa2e823c877c4897b2a796ff517ad
4
+ data.tar.gz: 78a66eaeb6a45f305b5f5cffaf2c884337921641b45b000f73db66b4bb755397
5
5
  SHA512:
6
- metadata.gz: 8fee45a8591c3c3a8b193aa3a3ab0b719aafedd79ae746e3c3d679c15f83113a3dcc52b1bac34216d4da3502ca3f53dfcc1f12fbc2f159e6df3ca1385d35287a
7
- data.tar.gz: a959122852472eb7a5c1172cfe7f6a719ef44ad3f985ed12d548127c798d976964916dba92a47627a43579e2116a0cdbfb5ed4095ccc25bf299db4434fc6c70a
6
+ metadata.gz: 79b1a41df100c355db139e9542d457cc2a093c88017ac1b26b3360da1eb45babc0706b5ccf8b27f1b59e3021516ea67dd8b2fb4fc0eaec6a156158f5c64c8630
7
+ data.tar.gz: d6fdb39c569d0e950dabd14680b85508d64ba396ef10fac8ccde8a20f10fd6b2511cff8b1e651accb6043e9a5102c61523b19e5c0782d6fcff39959a613b3155
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  The format is [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
4
 
5
+ ## v0.4.3 (2026-05-27)
6
+
7
+ ### Fixed
8
+ - **`Solana::Client#http_post` now preserves the query string when constructing the `Net::HTTP::Post` path** (was: dropped). RPC providers that carry their API key on the query — Helius (`https://devnet.helius-rpc.com/?api-key=…`), QuickNode, Triton — previously received an authless request and replied with their equivalent of `"missing api key"`, breaking every RPC call. `@uri.request_uri` is the correct accessor (path + "?" + query); `@uri.path` returns only the path portion. Surfaced when turf-monster moved off the public devnet endpoint to Helius.
9
+
10
+ ### Tests
11
+ - New `test/client_test.rb` (2 tests): asserts `http_post` builds the request with the full request-URI (path + query) when the RPC URL carries a query string, and falls back to `"/"` when path is empty.
12
+
5
13
  ## v0.4.2 (2026-05-19)
6
14
 
7
15
  Tier-3 fixes from the turf-monster pre-prod opsec audit (OPSEC-017/018/043).
data/lib/solana/client.rb CHANGED
@@ -152,7 +152,13 @@ module Solana
152
152
  http.open_timeout = 10
153
153
  http.read_timeout = 30
154
154
 
155
- request = Net::HTTP::Post.new(@uri.path.empty? ? "/" : @uri.path)
155
+ # `request_uri` preserves the query string (path + "?" + query).
156
+ # `path` alone drops it, which silently breaks RPC providers that
157
+ # carry credentials on the query — e.g. Helius:
158
+ # `https://devnet.helius-rpc.com/?api-key=…`. The server replies
159
+ # with `{"error":"missing api key"}` and the client retries.
160
+ request_path = @uri.request_uri
161
+ request = Net::HTTP::Post.new(request_path.empty? ? "/" : request_path)
156
162
  request["Content-Type"] = "application/json"
157
163
  request.body = body.to_json
158
164
 
@@ -110,7 +110,10 @@ module Solana
110
110
  # additional_signers: array of pubkey bytes (32-byte strings) that will sign later.
111
111
  def serialize_partial(additional_signers: [])
112
112
  raise "No blockhash set" unless @recent_blockhash
113
- raise "No signers" if @signers.empty?
113
+ # A fully KEYLESS build (zero local signers, all slots filled by external
114
+ # additional_signers) is legitimate for multi-party coordination where the
115
+ # server never holds a key — only require SOME signer is accounted for.
116
+ raise "No signers" if @signers.empty? && additional_signers.empty?
114
117
  raise "No instructions" if @instructions.empty?
115
118
 
116
119
  # OPSEC-043: keep additional signers in a local — never an instance ivar.
data/lib/solana_studio.rb CHANGED
@@ -6,5 +6,5 @@ require_relative "solana/spl_token"
6
6
  require_relative "solana/auth_verifier"
7
7
 
8
8
  module SolanaStudio
9
- VERSION = "0.4.1"
9
+ VERSION = "0.4.4"
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solana-studio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex McRitchie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-05-20 00:00:00.000000000 Z
11
+ date: 2026-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ed25519