weft-sdk 0.7.0 → 0.9.0

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.
Files changed (170) hide show
  1. checksums.yaml +4 -4
  2. data/docs/APIKeysApi.md +1 -2
  3. data/docs/AccountApi.md +6 -5
  4. data/docs/AccountDetails.md +2 -1
  5. data/docs/ApiKey.md +0 -1
  6. data/docs/ApiKeyCreated.md +0 -1
  7. data/docs/ApiKeyCreatedResponse.md +0 -1
  8. data/docs/ApiKeyListResponse.md +0 -1
  9. data/docs/AuthApi.md +6 -7
  10. data/docs/AuthResponse.md +0 -1
  11. data/docs/AuthResponseData.md +0 -1
  12. data/docs/BalanceApi.md +1 -2
  13. data/docs/BalanceResponse.md +3 -4
  14. data/docs/ConfirmRequest.md +0 -1
  15. data/docs/CreateApiKeyRequest.md +0 -1
  16. data/docs/DefaultApi.md +0 -1
  17. data/docs/EnrolledResource.md +0 -1
  18. data/docs/Error.md +0 -1
  19. data/docs/ErrorResponse.md +0 -1
  20. data/docs/Fetch403Response.md +0 -1
  21. data/docs/FetchApi.md +10 -7
  22. data/docs/FetchBalanceSnapshot.md +2 -3
  23. data/docs/FetchErrorResponse.md +0 -1
  24. data/docs/FetchRequest.md +0 -1
  25. data/docs/FetchRequestBody.md +0 -1
  26. data/docs/FetchResponse.md +5 -2
  27. data/docs/InsufficientScopeResponse.md +0 -1
  28. data/docs/MeApiKey.md +0 -1
  29. data/docs/MeApiKeyCreator.md +0 -1
  30. data/docs/MeResponse.md +1 -2
  31. data/docs/MeResponseData.md +78 -0
  32. data/docs/Merchant.md +0 -1
  33. data/docs/MessageResponse.md +0 -1
  34. data/docs/MessageResponseData.md +0 -1
  35. data/docs/Pagination.md +0 -1
  36. data/docs/PasswordResetRequest.md +0 -1
  37. data/docs/PasswordUpdateRequest.md +0 -1
  38. data/docs/Payment.md +0 -3
  39. data/docs/PaymentListResponse.md +0 -1
  40. data/docs/PaymentResponse.md +0 -1
  41. data/docs/PaymentsApi.md +0 -1
  42. data/docs/PrincipalWallet.md +19 -0
  43. data/docs/PromoBalance.md +0 -1
  44. data/docs/Purchase.md +43 -0
  45. data/docs/PurchaseArtifact.md +23 -0
  46. data/docs/PurchaseListResponse.md +19 -0
  47. data/docs/PurchaseResponse.md +17 -0
  48. data/docs/PurchasesApi.md +148 -0
  49. data/docs/ResendConfirmationRequest.md +0 -1
  50. data/docs/ResourceEnrollmentRequest.md +0 -1
  51. data/docs/ResourceEnrollmentResponse.md +0 -1
  52. data/docs/ResourceStats.md +0 -1
  53. data/docs/ResourcesApi.md +2 -3
  54. data/docs/SearchApi.md +2 -3
  55. data/docs/SearchCapabilityRef.md +19 -0
  56. data/docs/SearchEndpointCall.md +23 -0
  57. data/docs/SearchEndpointHit.md +41 -0
  58. data/docs/SearchEndpointPrice.md +25 -0
  59. data/docs/SearchErrorResponse.md +0 -1
  60. data/docs/SearchFilterSpec.md +23 -0
  61. data/docs/SearchPaymentOffer.md +31 -0
  62. data/docs/SearchPriceAtomicFilter.md +25 -0
  63. data/docs/SearchPriceUsdFilter.md +25 -0
  64. data/docs/SearchProtocolFilter.md +19 -0
  65. data/docs/SearchProviderRef.md +21 -0
  66. data/docs/SearchRequest.md +3 -4
  67. data/docs/SearchResourceTypeFilter.md +19 -0
  68. data/docs/SearchResponse.md +35 -8
  69. data/docs/SearchResponseWarningsInner.md +23 -0
  70. data/docs/SearchResult.md +8 -21
  71. data/docs/SignInRequest.md +0 -1
  72. data/docs/SignUpRequest.md +0 -1
  73. data/docs/SpendingPolicy.md +0 -1
  74. data/docs/User.md +0 -1
  75. data/docs/UserPrincipal.md +33 -0
  76. data/docs/Wallet.md +3 -4
  77. data/lib/weft/generated/api/account_api.rb +6 -4
  78. data/lib/weft/generated/api/api_keys_api.rb +4 -4
  79. data/lib/weft/generated/api/auth_api.rb +14 -14
  80. data/lib/weft/generated/api/balance_api.rb +4 -4
  81. data/lib/weft/generated/api/default_api.rb +2 -2
  82. data/lib/weft/generated/api/fetch_api.rb +22 -6
  83. data/lib/weft/generated/api/payments_api.rb +2 -2
  84. data/lib/weft/generated/api/purchases_api.rb +150 -0
  85. data/lib/weft/generated/api/resources_api.rb +6 -6
  86. data/lib/weft/generated/api/search_api.rb +6 -6
  87. data/lib/weft/generated/api_client.rb +2 -2
  88. data/lib/weft/generated/api_error.rb +2 -2
  89. data/lib/weft/generated/api_model_base.rb +2 -2
  90. data/lib/weft/generated/configuration.rb +2 -2
  91. data/lib/weft/generated/models/account_details.rb +54 -4
  92. data/lib/weft/generated/models/api_key.rb +2 -2
  93. data/lib/weft/generated/models/api_key_created.rb +2 -2
  94. data/lib/weft/generated/models/api_key_created_response.rb +2 -2
  95. data/lib/weft/generated/models/api_key_list_response.rb +2 -2
  96. data/lib/weft/generated/models/auth_response.rb +2 -2
  97. data/lib/weft/generated/models/auth_response_data.rb +2 -2
  98. data/lib/weft/generated/models/balance_response.rb +5 -5
  99. data/lib/weft/generated/models/confirm_request.rb +2 -2
  100. data/lib/weft/generated/models/create_api_key_request.rb +2 -2
  101. data/lib/weft/generated/models/enrolled_resource.rb +4 -4
  102. data/lib/weft/generated/models/error.rb +3 -3
  103. data/lib/weft/generated/models/error_response.rb +3 -3
  104. data/lib/weft/generated/models/fetch403_response.rb +2 -2
  105. data/lib/weft/generated/models/fetch_balance_snapshot.rb +5 -5
  106. data/lib/weft/generated/models/fetch_error_response.rb +5 -5
  107. data/lib/weft/generated/models/fetch_request.rb +5 -5
  108. data/lib/weft/generated/models/fetch_request_body.rb +2 -2
  109. data/lib/weft/generated/models/fetch_response.rb +83 -5
  110. data/lib/weft/generated/models/insufficient_scope_response.rb +3 -3
  111. data/lib/weft/generated/models/me_api_key.rb +2 -2
  112. data/lib/weft/generated/models/me_api_key_creator.rb +3 -3
  113. data/lib/weft/generated/models/me_response.rb +3 -3
  114. data/lib/weft/generated/models/me_response_data.rb +55 -0
  115. data/lib/weft/generated/models/merchant.rb +2 -2
  116. data/lib/weft/generated/models/message_response.rb +2 -2
  117. data/lib/weft/generated/models/message_response_data.rb +2 -2
  118. data/lib/weft/generated/models/pagination.rb +2 -2
  119. data/lib/weft/generated/models/password_reset_request.rb +2 -2
  120. data/lib/weft/generated/models/password_update_request.rb +2 -2
  121. data/lib/weft/generated/models/payment.rb +3 -12
  122. data/lib/weft/generated/models/payment_list_response.rb +2 -2
  123. data/lib/weft/generated/models/payment_response.rb +2 -2
  124. data/lib/weft/generated/models/principal_wallet.rb +190 -0
  125. data/lib/weft/generated/models/promo_balance.rb +3 -3
  126. data/lib/weft/generated/models/purchase.rb +427 -0
  127. data/lib/weft/generated/models/{search_agent_card.rb → purchase_artifact.rb} +91 -82
  128. data/lib/weft/generated/models/purchase_list_response.rb +192 -0
  129. data/lib/weft/generated/models/purchase_response.rb +164 -0
  130. data/lib/weft/generated/models/resend_confirmation_request.rb +2 -2
  131. data/lib/weft/generated/models/resource_enrollment_request.rb +5 -5
  132. data/lib/weft/generated/models/resource_enrollment_response.rb +2 -2
  133. data/lib/weft/generated/models/resource_stats.rb +2 -2
  134. data/lib/weft/generated/models/{search_skill_endpoint.rb → search_capability_ref.rb} +18 -19
  135. data/lib/weft/generated/models/search_endpoint_call.rb +179 -0
  136. data/lib/weft/generated/models/search_endpoint_hit.rb +296 -0
  137. data/lib/weft/generated/models/{search_skill.rb → search_endpoint_price.rb} +76 -112
  138. data/lib/weft/generated/models/search_error_response.rb +5 -5
  139. data/lib/weft/generated/models/search_filter_spec.rb +175 -0
  140. data/lib/weft/generated/models/{search_pricing.rb → search_payment_offer.rb} +64 -67
  141. data/lib/weft/generated/models/search_price_atomic_filter.rb +284 -0
  142. data/lib/weft/generated/models/search_price_usd_filter.rb +294 -0
  143. data/lib/weft/generated/models/search_protocol_filter.rb +200 -0
  144. data/lib/weft/generated/models/{search_endpoints.rb → search_provider_ref.rb} +26 -36
  145. data/lib/weft/generated/models/search_request.rb +36 -27
  146. data/lib/weft/generated/models/search_resource_type_filter.rb +200 -0
  147. data/lib/weft/generated/models/search_response.rb +367 -31
  148. data/lib/weft/generated/models/search_response_warnings_inner.rb +210 -0
  149. data/lib/weft/generated/models/search_result.rb +68 -220
  150. data/lib/weft/generated/models/sign_in_request.rb +2 -2
  151. data/lib/weft/generated/models/sign_up_request.rb +2 -2
  152. data/lib/weft/generated/models/spending_policy.rb +2 -2
  153. data/lib/weft/generated/models/user.rb +2 -2
  154. data/lib/weft/generated/models/user_principal.rb +370 -0
  155. data/lib/weft/generated/models/wallet.rb +5 -5
  156. data/lib/weft/generated/version.rb +3 -3
  157. data/lib/weft/generated.rb +10 -4
  158. data/lib/weft/sdk.rb +1 -1
  159. metadata +57 -19
  160. data/docs/SearchAgentCard.md +0 -34
  161. data/docs/SearchEndpoints.md +0 -24
  162. data/docs/SearchFilters.md +0 -26
  163. data/docs/SearchPricing.md +0 -24
  164. data/docs/SearchRanking.md +0 -26
  165. data/docs/SearchResponseResultsInner.md +0 -36
  166. data/docs/SearchSkill.md +0 -36
  167. data/docs/SearchSkillEndpoint.md +0 -20
  168. data/lib/weft/generated/models/search_filters.rb +0 -277
  169. data/lib/weft/generated/models/search_ranking.rb +0 -277
  170. data/lib/weft/generated/models/search_response_results_inner.rb +0 -103
@@ -0,0 +1,294 @@
1
+ =begin
2
+ #Weft API
3
+
4
+ #The Weft API is the buyer-runtime surface that powers the `weft` CLI, the hosted MCP server (`weft.network/mcp`), and any third-party agent that wants to discover and pay for paid resources on Weft. v1 covers five buyer concerns: 1. Account onboarding (`/api/v1/auth/*`, `/api/v1/me`) 2. CLI authentication (`/api/v1/api_keys`) 3. Wallet visibility (`/api/v1/balance`) 4. Discovery (`/api/v1/search`) 5. Paid execution (`/api/v1/fetch`) 6. Purchase history (`/api/v1/purchases`) Seller-side concerns (agent management, payout analytics, webhook delivery, the public storefront for `data_api` resources) live in the dashboard and are intentionally not documented here. They will be split out into a separate, dashboard-scoped spec when they need to be SDK-consumable. All errors share the envelope defined by `ErrorResponse`, except the buyer-runtime endpoints (`/search`, `/fetch`) which use bespoke envelopes carrying additional context — see `SearchErrorResponse` and `FetchErrorResponse`.
5
+
6
+ The version of the OpenAPI document: 0.9.0
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Weft
17
+ # Price constraint in USD, as decimal STRINGS (the reasoning form). Set exactly one operator: a scalar (`lte` / `gte` / `eq`) OR a range (`range_gte` + `range_lte` together, lower ≤ upper). Each value is a string matching `^\\d+(\\.\\d{1,6})?$` (≤ 6 decimals, ≥ 0); a JSON number is rejected. Mutually exclusive with `price_atomic`. An unpriced resource is excluded from any price-filtered query.
18
+ class SearchPriceUsdFilter < ApiModelBase
19
+ # Price ≤ this many USD (inclusive ceiling), e.g. \"0.009\".
20
+ attr_accessor :lte
21
+
22
+ # Price ≥ this many USD (inclusive floor), e.g. \"0.001\".
23
+ attr_accessor :gte
24
+
25
+ # Price exactly this many USD, e.g. \"1.5\".
26
+ attr_accessor :eq
27
+
28
+ # Range lower bound (inclusive), USD. Set with range_lte.
29
+ attr_accessor :range_gte
30
+
31
+ # Range upper bound (inclusive), USD. Set with range_gte.
32
+ attr_accessor :range_lte
33
+
34
+ # Attribute mapping from ruby-style variable name to JSON key.
35
+ def self.attribute_map
36
+ {
37
+ :'lte' => :'lte',
38
+ :'gte' => :'gte',
39
+ :'eq' => :'eq',
40
+ :'range_gte' => :'range_gte',
41
+ :'range_lte' => :'range_lte'
42
+ }
43
+ end
44
+
45
+ # Returns attribute mapping this model knows about
46
+ def self.acceptable_attribute_map
47
+ attribute_map
48
+ end
49
+
50
+ # Returns all the JSON keys this model knows about
51
+ def self.acceptable_attributes
52
+ acceptable_attribute_map.values
53
+ end
54
+
55
+ # Attribute type mapping.
56
+ def self.openapi_types
57
+ {
58
+ :'lte' => :'String',
59
+ :'gte' => :'String',
60
+ :'eq' => :'String',
61
+ :'range_gte' => :'String',
62
+ :'range_lte' => :'String'
63
+ }
64
+ end
65
+
66
+ # List of attributes with nullable: true
67
+ def self.openapi_nullable
68
+ Set.new([
69
+ ])
70
+ end
71
+
72
+ # Initializes the object
73
+ # @param [Hash] attributes Model attributes in the form of hash
74
+ def initialize(attributes = {})
75
+ if (!attributes.is_a?(Hash))
76
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Weft::SearchPriceUsdFilter` initialize method"
77
+ end
78
+
79
+ # check to see if the attribute exists and convert string to symbol for hash key
80
+ acceptable_attribute_map = self.class.acceptable_attribute_map
81
+ attributes = attributes.each_with_object({}) { |(k, v), h|
82
+ if (!acceptable_attribute_map.key?(k.to_sym))
83
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Weft::SearchPriceUsdFilter`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
84
+ end
85
+ h[k.to_sym] = v
86
+ }
87
+
88
+ if attributes.key?(:'lte')
89
+ self.lte = attributes[:'lte']
90
+ end
91
+
92
+ if attributes.key?(:'gte')
93
+ self.gte = attributes[:'gte']
94
+ end
95
+
96
+ if attributes.key?(:'eq')
97
+ self.eq = attributes[:'eq']
98
+ end
99
+
100
+ if attributes.key?(:'range_gte')
101
+ self.range_gte = attributes[:'range_gte']
102
+ end
103
+
104
+ if attributes.key?(:'range_lte')
105
+ self.range_lte = attributes[:'range_lte']
106
+ end
107
+ end
108
+
109
+ # Show invalid properties with the reasons. Usually used together with valid?
110
+ # @return Array for valid properties with the reasons
111
+ def list_invalid_properties
112
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
113
+ invalid_properties = Array.new
114
+ pattern = Regexp.new(/^\d+(\.\d{1,6})?$/)
115
+ if !@lte.nil? && @lte !~ pattern
116
+ invalid_properties.push("invalid value for \"lte\", must conform to the pattern #{pattern}.")
117
+ end
118
+
119
+ pattern = Regexp.new(/^\d+(\.\d{1,6})?$/)
120
+ if !@gte.nil? && @gte !~ pattern
121
+ invalid_properties.push("invalid value for \"gte\", must conform to the pattern #{pattern}.")
122
+ end
123
+
124
+ pattern = Regexp.new(/^\d+(\.\d{1,6})?$/)
125
+ if !@eq.nil? && @eq !~ pattern
126
+ invalid_properties.push("invalid value for \"eq\", must conform to the pattern #{pattern}.")
127
+ end
128
+
129
+ pattern = Regexp.new(/^\d+(\.\d{1,6})?$/)
130
+ if !@range_gte.nil? && @range_gte !~ pattern
131
+ invalid_properties.push("invalid value for \"range_gte\", must conform to the pattern #{pattern}.")
132
+ end
133
+
134
+ pattern = Regexp.new(/^\d+(\.\d{1,6})?$/)
135
+ if !@range_lte.nil? && @range_lte !~ pattern
136
+ invalid_properties.push("invalid value for \"range_lte\", must conform to the pattern #{pattern}.")
137
+ end
138
+
139
+ invalid_properties
140
+ end
141
+
142
+ # Check to see if the all the properties in the model are valid
143
+ # @return true if the model is valid
144
+ def valid?
145
+ warn '[DEPRECATED] the `valid?` method is obsolete'
146
+ return false if !@lte.nil? && @lte !~ Regexp.new(/^\d+(\.\d{1,6})?$/)
147
+ return false if !@gte.nil? && @gte !~ Regexp.new(/^\d+(\.\d{1,6})?$/)
148
+ return false if !@eq.nil? && @eq !~ Regexp.new(/^\d+(\.\d{1,6})?$/)
149
+ return false if !@range_gte.nil? && @range_gte !~ Regexp.new(/^\d+(\.\d{1,6})?$/)
150
+ return false if !@range_lte.nil? && @range_lte !~ Regexp.new(/^\d+(\.\d{1,6})?$/)
151
+ true
152
+ end
153
+
154
+ # Custom attribute writer method with validation
155
+ # @param [Object] lte Value to be assigned
156
+ def lte=(lte)
157
+ if lte.nil?
158
+ fail ArgumentError, 'lte cannot be nil'
159
+ end
160
+
161
+ pattern = Regexp.new(/^\d+(\.\d{1,6})?$/)
162
+ if lte !~ pattern
163
+ fail ArgumentError, "invalid value for \"lte\", must conform to the pattern #{pattern}."
164
+ end
165
+
166
+ @lte = lte
167
+ end
168
+
169
+ # Custom attribute writer method with validation
170
+ # @param [Object] gte Value to be assigned
171
+ def gte=(gte)
172
+ if gte.nil?
173
+ fail ArgumentError, 'gte cannot be nil'
174
+ end
175
+
176
+ pattern = Regexp.new(/^\d+(\.\d{1,6})?$/)
177
+ if gte !~ pattern
178
+ fail ArgumentError, "invalid value for \"gte\", must conform to the pattern #{pattern}."
179
+ end
180
+
181
+ @gte = gte
182
+ end
183
+
184
+ # Custom attribute writer method with validation
185
+ # @param [Object] eq Value to be assigned
186
+ def eq=(eq)
187
+ if eq.nil?
188
+ fail ArgumentError, 'eq cannot be nil'
189
+ end
190
+
191
+ pattern = Regexp.new(/^\d+(\.\d{1,6})?$/)
192
+ if eq !~ pattern
193
+ fail ArgumentError, "invalid value for \"eq\", must conform to the pattern #{pattern}."
194
+ end
195
+
196
+ @eq = eq
197
+ end
198
+
199
+ # Custom attribute writer method with validation
200
+ # @param [Object] range_gte Value to be assigned
201
+ def range_gte=(range_gte)
202
+ if range_gte.nil?
203
+ fail ArgumentError, 'range_gte cannot be nil'
204
+ end
205
+
206
+ pattern = Regexp.new(/^\d+(\.\d{1,6})?$/)
207
+ if range_gte !~ pattern
208
+ fail ArgumentError, "invalid value for \"range_gte\", must conform to the pattern #{pattern}."
209
+ end
210
+
211
+ @range_gte = range_gte
212
+ end
213
+
214
+ # Custom attribute writer method with validation
215
+ # @param [Object] range_lte Value to be assigned
216
+ def range_lte=(range_lte)
217
+ if range_lte.nil?
218
+ fail ArgumentError, 'range_lte cannot be nil'
219
+ end
220
+
221
+ pattern = Regexp.new(/^\d+(\.\d{1,6})?$/)
222
+ if range_lte !~ pattern
223
+ fail ArgumentError, "invalid value for \"range_lte\", must conform to the pattern #{pattern}."
224
+ end
225
+
226
+ @range_lte = range_lte
227
+ end
228
+
229
+ # Checks equality by comparing each attribute.
230
+ # @param [Object] Object to be compared
231
+ def ==(o)
232
+ return true if self.equal?(o)
233
+ self.class == o.class &&
234
+ lte == o.lte &&
235
+ gte == o.gte &&
236
+ eq == o.eq &&
237
+ range_gte == o.range_gte &&
238
+ range_lte == o.range_lte
239
+ end
240
+
241
+ # @see the `==` method
242
+ # @param [Object] Object to be compared
243
+ def eql?(o)
244
+ self == o
245
+ end
246
+
247
+ # Calculates hash code according to all attributes.
248
+ # @return [Integer] Hash code
249
+ def hash
250
+ [lte, gte, eq, range_gte, range_lte].hash
251
+ end
252
+
253
+ # Builds the object from hash
254
+ # @param [Hash] attributes Model attributes in the form of hash
255
+ # @return [Object] Returns the model itself
256
+ def self.build_from_hash(attributes)
257
+ return nil unless attributes.is_a?(Hash)
258
+ attributes = attributes.transform_keys(&:to_sym)
259
+ transformed_hash = {}
260
+ openapi_types.each_pair do |key, type|
261
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
262
+ transformed_hash["#{key}"] = nil
263
+ elsif type =~ /\AArray<(.*)>/i
264
+ # check to ensure the input is an array given that the attribute
265
+ # is documented as an array but the input is not
266
+ if attributes[attribute_map[key]].is_a?(Array)
267
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
268
+ end
269
+ elsif !attributes[attribute_map[key]].nil?
270
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
271
+ end
272
+ end
273
+ new(transformed_hash)
274
+ end
275
+
276
+ # Returns the object in the form of hash
277
+ # @return [Hash] Returns the object in the form of hash
278
+ def to_hash
279
+ hash = {}
280
+ self.class.attribute_map.each_pair do |attr, param|
281
+ value = self.send(attr)
282
+ if value.nil?
283
+ is_nullable = self.class.openapi_nullable.include?(attr)
284
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
285
+ end
286
+
287
+ hash[param] = _to_hash(value)
288
+ end
289
+ hash
290
+ end
291
+
292
+ end
293
+
294
+ end
@@ -0,0 +1,200 @@
1
+ =begin
2
+ #Weft API
3
+
4
+ #The Weft API is the buyer-runtime surface that powers the `weft` CLI, the hosted MCP server (`weft.network/mcp`), and any third-party agent that wants to discover and pay for paid resources on Weft. v1 covers five buyer concerns: 1. Account onboarding (`/api/v1/auth/*`, `/api/v1/me`) 2. CLI authentication (`/api/v1/api_keys`) 3. Wallet visibility (`/api/v1/balance`) 4. Discovery (`/api/v1/search`) 5. Paid execution (`/api/v1/fetch`) 6. Purchase history (`/api/v1/purchases`) Seller-side concerns (agent management, payout analytics, webhook delivery, the public storefront for `data_api` resources) live in the dashboard and are intentionally not documented here. They will be split out into a separate, dashboard-scoped spec when they need to be SDK-consumable. All errors share the envelope defined by `ErrorResponse`, except the buyer-runtime endpoints (`/search`, `/fetch`) which use bespoke envelopes carrying additional context — see `SearchErrorResponse` and `FetchErrorResponse`.
5
+
6
+ The version of the OpenAPI document: 0.9.0
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Weft
17
+ # Payment-protocol constraint. Set exactly one of `eq` / `in`.
18
+ class SearchProtocolFilter < ApiModelBase
19
+ # Primary protocol is exactly this value.
20
+ attr_accessor :eq
21
+
22
+ # Primary protocol is one of these values.
23
+ attr_accessor :_in
24
+
25
+ class EnumAttributeValidator
26
+ attr_reader :datatype
27
+ attr_reader :allowable_values
28
+
29
+ def initialize(datatype, allowable_values)
30
+ @allowable_values = allowable_values.map do |value|
31
+ case datatype.to_s
32
+ when /Integer/i
33
+ value.to_i
34
+ when /Float/i
35
+ value.to_f
36
+ else
37
+ value
38
+ end
39
+ end
40
+ end
41
+
42
+ def valid?(value)
43
+ !value || allowable_values.include?(value)
44
+ end
45
+ end
46
+
47
+ # Attribute mapping from ruby-style variable name to JSON key.
48
+ def self.attribute_map
49
+ {
50
+ :'eq' => :'eq',
51
+ :'_in' => :'in'
52
+ }
53
+ end
54
+
55
+ # Returns attribute mapping this model knows about
56
+ def self.acceptable_attribute_map
57
+ attribute_map
58
+ end
59
+
60
+ # Returns all the JSON keys this model knows about
61
+ def self.acceptable_attributes
62
+ acceptable_attribute_map.values
63
+ end
64
+
65
+ # Attribute type mapping.
66
+ def self.openapi_types
67
+ {
68
+ :'eq' => :'String',
69
+ :'_in' => :'Array<String>'
70
+ }
71
+ end
72
+
73
+ # List of attributes with nullable: true
74
+ def self.openapi_nullable
75
+ Set.new([
76
+ ])
77
+ end
78
+
79
+ # Initializes the object
80
+ # @param [Hash] attributes Model attributes in the form of hash
81
+ def initialize(attributes = {})
82
+ if (!attributes.is_a?(Hash))
83
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Weft::SearchProtocolFilter` initialize method"
84
+ end
85
+
86
+ # check to see if the attribute exists and convert string to symbol for hash key
87
+ acceptable_attribute_map = self.class.acceptable_attribute_map
88
+ attributes = attributes.each_with_object({}) { |(k, v), h|
89
+ if (!acceptable_attribute_map.key?(k.to_sym))
90
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Weft::SearchProtocolFilter`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
91
+ end
92
+ h[k.to_sym] = v
93
+ }
94
+
95
+ if attributes.key?(:'eq')
96
+ self.eq = attributes[:'eq']
97
+ end
98
+
99
+ if attributes.key?(:'_in')
100
+ if (value = attributes[:'_in']).is_a?(Array)
101
+ self._in = value
102
+ end
103
+ end
104
+ end
105
+
106
+ # Show invalid properties with the reasons. Usually used together with valid?
107
+ # @return Array for valid properties with the reasons
108
+ def list_invalid_properties
109
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
110
+ invalid_properties = Array.new
111
+ if !@_in.nil? && @_in.length < 1
112
+ invalid_properties.push('invalid value for "_in", number of items must be greater than or equal to 1.')
113
+ end
114
+
115
+ invalid_properties
116
+ end
117
+
118
+ # Check to see if the all the properties in the model are valid
119
+ # @return true if the model is valid
120
+ def valid?
121
+ warn '[DEPRECATED] the `valid?` method is obsolete'
122
+ eq_validator = EnumAttributeValidator.new('String', ["x402", "a2a", "mpp", "erc_8004"])
123
+ return false unless eq_validator.valid?(@eq)
124
+ return false if !@_in.nil? && @_in.length < 1
125
+ true
126
+ end
127
+
128
+ # Custom attribute writer method checking allowed values (enum).
129
+ # @param [Object] eq Object to be assigned
130
+ def eq=(eq)
131
+ validator = EnumAttributeValidator.new('String', ["x402", "a2a", "mpp", "erc_8004"])
132
+ unless validator.valid?(eq)
133
+ fail ArgumentError, "invalid value for \"eq\", must be one of #{validator.allowable_values}."
134
+ end
135
+ @eq = eq
136
+ end
137
+
138
+ # Checks equality by comparing each attribute.
139
+ # @param [Object] Object to be compared
140
+ def ==(o)
141
+ return true if self.equal?(o)
142
+ self.class == o.class &&
143
+ eq == o.eq &&
144
+ _in == o._in
145
+ end
146
+
147
+ # @see the `==` method
148
+ # @param [Object] Object to be compared
149
+ def eql?(o)
150
+ self == o
151
+ end
152
+
153
+ # Calculates hash code according to all attributes.
154
+ # @return [Integer] Hash code
155
+ def hash
156
+ [eq, _in].hash
157
+ end
158
+
159
+ # Builds the object from hash
160
+ # @param [Hash] attributes Model attributes in the form of hash
161
+ # @return [Object] Returns the model itself
162
+ def self.build_from_hash(attributes)
163
+ return nil unless attributes.is_a?(Hash)
164
+ attributes = attributes.transform_keys(&:to_sym)
165
+ transformed_hash = {}
166
+ openapi_types.each_pair do |key, type|
167
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
168
+ transformed_hash["#{key}"] = nil
169
+ elsif type =~ /\AArray<(.*)>/i
170
+ # check to ensure the input is an array given that the attribute
171
+ # is documented as an array but the input is not
172
+ if attributes[attribute_map[key]].is_a?(Array)
173
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
174
+ end
175
+ elsif !attributes[attribute_map[key]].nil?
176
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
177
+ end
178
+ end
179
+ new(transformed_hash)
180
+ end
181
+
182
+ # Returns the object in the form of hash
183
+ # @return [Hash] Returns the object in the form of hash
184
+ def to_hash
185
+ hash = {}
186
+ self.class.attribute_map.each_pair do |attr, param|
187
+ value = self.send(attr)
188
+ if value.nil?
189
+ is_nullable = self.class.openapi_nullable.include?(attr)
190
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
191
+ end
192
+
193
+ hash[param] = _to_hash(value)
194
+ end
195
+ hash
196
+ end
197
+
198
+ end
199
+
200
+ end
@@ -1,9 +1,9 @@
1
1
  =begin
2
2
  #Weft API
3
3
 
4
- #The Weft API is the buyer-runtime surface that powers the `weft` CLI, the hosted MCP server (`weft.network/mcp`), and any third-party agent that wants to discover and pay for paid resources on Weft. v1 covers five buyer concerns: 1. Account onboarding (`/api/v1/auth/*`, `/api/v1/me`) 2. CLI authentication (`/api/v1/api_keys`) 3. Wallet visibility (`/api/v1/balance`) 4. Discovery (`/api/v1/search`) 5. Paid execution (`/api/v1/fetch`) 6. Purchase history (`/api/v1/payments`) Seller-side concerns (agent management, payout analytics, webhook delivery, the public storefront for `data_api` resources) live in the dashboard and are intentionally not documented here. They will be split out into a separate, dashboard-scoped spec when they need to be SDK-consumable. All errors share the envelope defined by `ErrorResponse`, except the buyer-runtime endpoints (`/search`, `/fetch`) which use bespoke envelopes carrying additional context — see `SearchErrorResponse` and `FetchErrorResponse`.
4
+ #The Weft API is the buyer-runtime surface that powers the `weft` CLI, the hosted MCP server (`weft.network/mcp`), and any third-party agent that wants to discover and pay for paid resources on Weft. v1 covers five buyer concerns: 1. Account onboarding (`/api/v1/auth/*`, `/api/v1/me`) 2. CLI authentication (`/api/v1/api_keys`) 3. Wallet visibility (`/api/v1/balance`) 4. Discovery (`/api/v1/search`) 5. Paid execution (`/api/v1/fetch`) 6. Purchase history (`/api/v1/purchases`) Seller-side concerns (agent management, payout analytics, webhook delivery, the public storefront for `data_api` resources) live in the dashboard and are intentionally not documented here. They will be split out into a separate, dashboard-scoped spec when they need to be SDK-consumable. All errors share the envelope defined by `ErrorResponse`, except the buyer-runtime endpoints (`/search`, `/fetch`) which use bespoke envelopes carrying additional context — see `SearchErrorResponse` and `FetchErrorResponse`.
5
5
 
6
- The version of the OpenAPI document: 0.7.0
6
+ The version of the OpenAPI document: 0.9.0
7
7
 
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.19.0
@@ -14,25 +14,19 @@ require 'date'
14
14
  require 'time'
15
15
 
16
16
  module Weft
17
- # Per-protocol entry points for the agent. Any field may be `null` if the agent does not expose that protocol surface.
18
- class SearchEndpoints < ApiModelBase
19
- attr_accessor :a2a
17
+ class SearchProviderRef < ApiModelBase
18
+ attr_accessor :provider_id
20
19
 
21
- attr_accessor :mcp
20
+ attr_accessor :display_name
22
21
 
23
- # URL to the agent's OpenAPI document.
24
- attr_accessor :openapi
25
-
26
- # Base URL the `weft_fetch` MCP tool should target for this agent.
27
- attr_accessor :weft_fetch_target
22
+ attr_accessor :origin_domains
28
23
 
29
24
  # Attribute mapping from ruby-style variable name to JSON key.
30
25
  def self.attribute_map
31
26
  {
32
- :'a2a' => :'a2a',
33
- :'mcp' => :'mcp',
34
- :'openapi' => :'openapi',
35
- :'weft_fetch_target' => :'weft_fetch_target'
27
+ :'provider_id' => :'provider_id',
28
+ :'display_name' => :'display_name',
29
+ :'origin_domains' => :'origin_domains'
36
30
  }
37
31
  end
38
32
 
@@ -49,10 +43,9 @@ module Weft
49
43
  # Attribute type mapping.
50
44
  def self.openapi_types
51
45
  {
52
- :'a2a' => :'String',
53
- :'mcp' => :'String',
54
- :'openapi' => :'String',
55
- :'weft_fetch_target' => :'String'
46
+ :'provider_id' => :'String',
47
+ :'display_name' => :'String',
48
+ :'origin_domains' => :'Array<String>'
56
49
  }
57
50
  end
58
51
 
@@ -66,32 +59,30 @@ module Weft
66
59
  # @param [Hash] attributes Model attributes in the form of hash
67
60
  def initialize(attributes = {})
68
61
  if (!attributes.is_a?(Hash))
69
- fail ArgumentError, "The input argument (attributes) must be a hash in `Weft::SearchEndpoints` initialize method"
62
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Weft::SearchProviderRef` initialize method"
70
63
  end
71
64
 
72
65
  # check to see if the attribute exists and convert string to symbol for hash key
73
66
  acceptable_attribute_map = self.class.acceptable_attribute_map
74
67
  attributes = attributes.each_with_object({}) { |(k, v), h|
75
68
  if (!acceptable_attribute_map.key?(k.to_sym))
76
- fail ArgumentError, "`#{k}` is not a valid attribute in `Weft::SearchEndpoints`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
69
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Weft::SearchProviderRef`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
77
70
  end
78
71
  h[k.to_sym] = v
79
72
  }
80
73
 
81
- if attributes.key?(:'a2a')
82
- self.a2a = attributes[:'a2a']
83
- end
84
-
85
- if attributes.key?(:'mcp')
86
- self.mcp = attributes[:'mcp']
74
+ if attributes.key?(:'provider_id')
75
+ self.provider_id = attributes[:'provider_id']
87
76
  end
88
77
 
89
- if attributes.key?(:'openapi')
90
- self.openapi = attributes[:'openapi']
78
+ if attributes.key?(:'display_name')
79
+ self.display_name = attributes[:'display_name']
91
80
  end
92
81
 
93
- if attributes.key?(:'weft_fetch_target')
94
- self.weft_fetch_target = attributes[:'weft_fetch_target']
82
+ if attributes.key?(:'origin_domains')
83
+ if (value = attributes[:'origin_domains']).is_a?(Array)
84
+ self.origin_domains = value
85
+ end
95
86
  end
96
87
  end
97
88
 
@@ -115,10 +106,9 @@ module Weft
115
106
  def ==(o)
116
107
  return true if self.equal?(o)
117
108
  self.class == o.class &&
118
- a2a == o.a2a &&
119
- mcp == o.mcp &&
120
- openapi == o.openapi &&
121
- weft_fetch_target == o.weft_fetch_target
109
+ provider_id == o.provider_id &&
110
+ display_name == o.display_name &&
111
+ origin_domains == o.origin_domains
122
112
  end
123
113
 
124
114
  # @see the `==` method
@@ -130,7 +120,7 @@ module Weft
130
120
  # Calculates hash code according to all attributes.
131
121
  # @return [Integer] Hash code
132
122
  def hash
133
- [a2a, mcp, openapi, weft_fetch_target].hash
123
+ [provider_id, display_name, origin_domains].hash
134
124
  end
135
125
 
136
126
  # Builds the object from hash