guesty-client 0.1.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 (63) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +34 -0
  3. data/LICENSE +21 -0
  4. data/README.md +178 -0
  5. data/lib/guesty/access_tokens/upsert.rb +61 -0
  6. data/lib/guesty/api_error.rb +73 -0
  7. data/lib/guesty/client.rb +138 -0
  8. data/lib/guesty/config.rb +29 -0
  9. data/lib/guesty/conversations/attachments/index.rb +42 -0
  10. data/lib/guesty/conversations/index.rb +58 -0
  11. data/lib/guesty/conversations/messages/reply.rb +55 -0
  12. data/lib/guesty/conversations/posts/index.rb +121 -0
  13. data/lib/guesty/conversations/posts/since.rb +37 -0
  14. data/lib/guesty/conversations/search.rb +31 -0
  15. data/lib/guesty/conversations/show.rb +25 -0
  16. data/lib/guesty/conversations.rb +15 -0
  17. data/lib/guesty/error.rb +32 -0
  18. data/lib/guesty/guest_folio/invoice_items/index.rb +61 -0
  19. data/lib/guesty/guests/profiles/create.rb +25 -0
  20. data/lib/guesty/guests/profiles/show.rb +23 -0
  21. data/lib/guesty/guests/profiles/update.rb +36 -0
  22. data/lib/guesty/guests.rb +5 -0
  23. data/lib/guesty/homes/calendars/show.rb +134 -0
  24. data/lib/guesty/homes/search.rb +46 -0
  25. data/lib/guesty/memory_rate_limiter.rb +28 -0
  26. data/lib/guesty/memory_token_store.rb +33 -0
  27. data/lib/guesty/operation.rb +37 -0
  28. data/lib/guesty/rate_limiter_middleware.rb +23 -0
  29. data/lib/guesty/reservations/accommodation_fare/update.rb +44 -0
  30. data/lib/guesty/reservations/approve.rb +23 -0
  31. data/lib/guesty/reservations/create.rb +50 -0
  32. data/lib/guesty/reservations/custom_fields/update.rb +26 -0
  33. data/lib/guesty/reservations/dates/update.rb +41 -0
  34. data/lib/guesty/reservations/decline.rb +30 -0
  35. data/lib/guesty/reservations/flags/update.rb +33 -0
  36. data/lib/guesty/reservations/payments/create.rb +72 -0
  37. data/lib/guesty/reservations/pre_approve.rb +23 -0
  38. data/lib/guesty/reservations/recover.rb +27 -0
  39. data/lib/guesty/reservations/reviews/extractors/airbnb.rb +66 -0
  40. data/lib/guesty/reservations/reviews/extractors/base.rb +36 -0
  41. data/lib/guesty/reservations/reviews/extractors/booking_com.rb +35 -0
  42. data/lib/guesty/reservations/reviews/extractors/vrbo.rb +46 -0
  43. data/lib/guesty/reservations/reviews/index.rb +67 -0
  44. data/lib/guesty/reservations/search.rb +63 -0
  45. data/lib/guesty/reservations/show.rb +28 -0
  46. data/lib/guesty/reservations/status/cancel.rb +34 -0
  47. data/lib/guesty/reservations/status/update.rb +21 -0
  48. data/lib/guesty/reservations/stays/update.rb +42 -0
  49. data/lib/guesty/reservations/update.rb +19 -0
  50. data/lib/guesty/reservations.rb +13 -0
  51. data/lib/guesty/reviews/respond.rb +19 -0
  52. data/lib/guesty/version.rb +3 -0
  53. data/lib/guesty/views/create.rb +19 -0
  54. data/lib/guesty/views/update.rb +33 -0
  55. data/lib/guesty/webhooks/create.rb +21 -0
  56. data/lib/guesty/webhooks/index.rb +18 -0
  57. data/lib/guesty/webhooks/signatures/verify.rb +76 -0
  58. data/lib/guesty/webhooks/sync.rb +36 -0
  59. data/lib/guesty/webhooks/update.rb +22 -0
  60. data/lib/guesty-client.rb +1 -0
  61. data/lib/guesty.rb +78 -0
  62. data/sig/guesty.rbs +427 -0
  63. metadata +191 -0
data/sig/guesty.rbs ADDED
@@ -0,0 +1,427 @@
1
+ # Public API of the gem, mirroring the inline `# @rbs` annotations in lib/.
2
+ # Shipped with the gem so host apps pick it up through `rbs collection`.
3
+ module Guesty
4
+ VERSION: ::String
5
+
6
+ BASE_URL: ::String
7
+ TIMEOUT: ::Integer
8
+ RETRY_OPTIONS: ::Hash[::Symbol, untyped]
9
+
10
+ type slot = {
11
+ key: ::String,
12
+ client_id: ::String,
13
+ secret: ::String
14
+ }
15
+
16
+ def self.configure: () { (Config) -> void } -> void
17
+ def self.config: () -> Config
18
+
19
+ def self.connection: (?url: ::String, ?skip_auth: bool, ?timeout: ::Integer) -> untyped
20
+ def self.do_request: (::Symbol | ::String request_method, ::String path, ?::Hash[::Symbol, untyped] params, ?retries: ::Integer, ?timeout: ::Integer) -> untyped
21
+ def self.with_priority: (::Symbol priority) { (?) -> untyped } -> untyped
22
+ def self.current_priority: () -> ::Symbol
23
+ def self.current_slot: () -> slot
24
+ def self.rate_limit_key: (::Symbol window) -> ::Symbol
25
+ def self.token_slots: (?::Symbol priority) -> ::Array[slot]
26
+ def self.webhook_key: () -> ::String?
27
+ def self.sync_guest_and_reservation_changes?: () -> bool
28
+ def self.pick_slot: (::Symbol priority) -> slot
29
+ def self.successful_response?: (untyped response) -> bool
30
+ def self.retryable_read?: (::StandardError error) -> bool
31
+ def self.unapplied?: (::StandardError error) -> bool
32
+ def self.delivery_unknown?: (::StandardError error) -> bool
33
+ def self.auth_token: () -> ::String
34
+
35
+ class Error < ::StandardError
36
+ attr_reader fatal: bool
37
+
38
+ def initialize: (?::String message, ?fatal: bool) -> void
39
+ end
40
+
41
+ # Raised by operations before any network call when the arguments are unusable.
42
+ class ArgumentError < Error
43
+ end
44
+
45
+ # Raised by the rate limiter middleware when the injected limiter refuses the
46
+ # request: the call never left the process, so no write landed upstream.
47
+ class ThrottledError < Error
48
+ attr_reader key: ::Symbol
49
+ attr_reader threshold: ::Integer
50
+ attr_reader interval: untyped
51
+ attr_reader retry_after: untyped
52
+
53
+ def initialize: (key: ::Symbol, threshold: ::Integer, interval: untyped, retry_after: untyped) -> void
54
+ end
55
+
56
+ # A rejected Guesty response, classified so callers can tell a retryable
57
+ # glitch from a write that never landed.
58
+ class ApiError < Error
59
+ attr_reader raw_body: untyped
60
+ attr_reader response: untyped
61
+
62
+ def initialize: (untyped response) -> void
63
+
64
+ def status: () -> ::Integer
65
+ def guesty_glitch?: () -> bool
66
+ def retryable_non_delivery?: () -> bool
67
+ def permanent_rejection?: () -> bool
68
+ def transient?: () -> bool
69
+ end
70
+
71
+ class Config
72
+ attr_accessor credentials: ::Hash[::Symbol, untyped]
73
+ attr_accessor token_store: untyped
74
+ attr_accessor rate_limiter: untyped
75
+ attr_accessor slot_picker: untyped
76
+ attr_accessor base_url: ::String
77
+ attr_accessor sync_guest_and_reservation_changes: bool
78
+ attr_accessor custom_fields: ::Hash[::Symbol, ::String]
79
+ attr_accessor default_currency: ::String?
80
+ end
81
+
82
+ class MemoryTokenStore
83
+ class Token
84
+ attr_accessor access_token: ::String
85
+ attr_accessor expires_at: ::Time?
86
+
87
+ def initialize: (access_token: ::String, expires_at: ::Time?) -> void
88
+ def expired?: () -> bool
89
+ end
90
+
91
+ def read: (::String slot_key) -> Token?
92
+ def save: (slot_key: ::String, access_token: ::String, expires_at: ::Time) -> Token
93
+ def clear: () -> ::Hash[untyped, untyped]
94
+ end
95
+
96
+ class MemoryRateLimiter
97
+ def throttle!: (key: ::Symbol, threshold: ::Integer, interval: untyped) -> void
98
+ end
99
+
100
+ class RateLimiterMiddleware
101
+ def initialize: (untyped app, ?::Hash[::Symbol, untyped] options) -> void
102
+ def on_request: (untyped env) -> void
103
+ end
104
+
105
+ # #call! returns the same Result as #call, raising the failure instead of
106
+ # wrapping it — hence the `alias call! call` on every operation below.
107
+ module Operation
108
+ def call!: (*untyped, **untyped) -> untyped
109
+ end
110
+
111
+ module AccessTokens
112
+ class Upsert
113
+ OAUTH_ENDPOINT: ::String
114
+
115
+ def call: () -> ::Dry::Monads::Result[untyped]
116
+ alias call! call
117
+ end
118
+ end
119
+
120
+ module Reservations
121
+ CANCELLED_STATUS: ::String
122
+ CLOSED_STATUSES: ::Array[::String]
123
+
124
+ def self.from_conversation: (untyped conversation) -> ::Array[::Hash[::Symbol, untyped]]
125
+
126
+ class Search
127
+ FILTER_MAPPINGS: ::Hash[::Symbol, ::Hash[::Symbol, ::String]]
128
+
129
+ def self.filters: (::Hash[::Symbol, untyped] attributes) -> ::Array[::Hash[::Symbol, untyped]]
130
+ def call: (fields: ::Array[::String], attributes: ::Hash[::Symbol, untyped], ?skip: ::Integer, ?take: ::Integer) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
131
+ alias call! call
132
+ end
133
+
134
+ class Show
135
+ def call: (reservation_id: ::String, fields: ::Array[::String]) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
136
+ alias call! call
137
+ end
138
+
139
+ class Create
140
+ def call: (attributes: ::Hash[::Symbol, untyped]) -> ::Dry::Monads::Result[::String]
141
+ alias call! call
142
+ end
143
+
144
+ class Update
145
+ def call: (reservation_id: ::String, attributes: ::Hash[::Symbol, untyped]) -> ::Dry::Monads::Result[bool]
146
+ alias call! call
147
+ end
148
+
149
+ class Recover
150
+ def call: (confirmation_code: ::String, start_date: ::Date, end_date: ::Date) -> ::Dry::Monads::Result[::String?]
151
+ alias call! call
152
+ end
153
+
154
+ class Approve
155
+ def call: (reservation_id: ::String) -> ::Dry::Monads::Result[bool]
156
+ alias call! call
157
+ end
158
+
159
+ class Decline
160
+ def call: (reservation_id: ::String, reason: ::String, message: ::String) -> ::Dry::Monads::Result[bool]
161
+ alias call! call
162
+ end
163
+
164
+ class PreApprove
165
+ def call: (reservation_id: ::String) -> ::Dry::Monads::Result[bool]
166
+ alias call! call
167
+ end
168
+
169
+ module Status
170
+ class Update
171
+ def call: (reservation_id: ::String, attributes: ::Hash[::Symbol, untyped]) -> ::Dry::Monads::Result[bool]
172
+ alias call! call
173
+ end
174
+
175
+ class Cancel
176
+ CANCELLED_BY: ::Hash[::Symbol, ::String]
177
+
178
+ def call: (reservation_id: ::String, note: ::String, cancelled_by: ::Symbol) -> ::Dry::Monads::Result[bool]
179
+ alias call! call
180
+ end
181
+ end
182
+
183
+ module Dates
184
+ class Update
185
+ def call: (reservation_id: ::String, attributes: ::Hash[::Symbol, untyped]) -> ::Dry::Monads::Result[bool]
186
+ alias call! call
187
+ end
188
+ end
189
+
190
+ module Stays
191
+ class Update
192
+ def call: (reservation_id: ::String, stay: ::Hash[::Symbol, untyped]) -> ::Dry::Monads::Result[bool]
193
+ alias call! call
194
+ end
195
+ end
196
+
197
+ module Flags
198
+ class Update
199
+ def call: (reservation_id: ::String, flags: ::Hash[::Symbol, bool]) -> ::Dry::Monads::Result[bool]
200
+ alias call! call
201
+ end
202
+ end
203
+
204
+ module AccommodationFare
205
+ class Update
206
+ FARE_TYPES: ::Array[::String]
207
+ ADJUSTED_TYPE: ::String
208
+
209
+ def call: (reservation_id: ::String, amount: ::Integer | ::Float | ::BigDecimal) -> ::Dry::Monads::Result[::BigDecimal]
210
+ alias call! call
211
+ end
212
+ end
213
+
214
+ module CustomFields
215
+ class Update
216
+ def call: (reservation_id: ::String, custom_fields: ::Array[::Hash[::Symbol, untyped]]) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
217
+ alias call! call
218
+ end
219
+ end
220
+
221
+ module Payments
222
+ class Create
223
+ PAYMENT_METHOD_NAME: ::String
224
+ HISTORY_UNAVAILABLE: ::String
225
+
226
+ def call: (reservation_id: ::String, attributes: ::Hash[::Symbol, untyped]) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
227
+ alias call! call
228
+ end
229
+ end
230
+
231
+ module Reviews
232
+ class Index
233
+ def call: (since: ::Time, ?skip: ::Integer, ?take: ::Integer) -> ::Dry::Monads::Result[::Array[::Hash[::Symbol, untyped]]]
234
+ alias call! call
235
+ end
236
+
237
+ module Extractors
238
+ class Base
239
+ def call: (raw_review: ::Hash[::Symbol, untyped]) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
240
+ alias call! call
241
+ end
242
+
243
+ class Airbnb < Base
244
+ end
245
+
246
+ class BookingCom < Base
247
+ end
248
+
249
+ class Vrbo < Base
250
+ end
251
+ end
252
+ end
253
+ end
254
+
255
+ module Conversations
256
+ CHANNELS: ::Hash[::String, ::String]
257
+
258
+ def self.channel: (::String module_type) -> ::String
259
+
260
+ class Index
261
+ FIELDS: ::String
262
+ LIMIT: ::Integer
263
+ MAX_PAGES: ::Integer
264
+
265
+ def call: (since: ::Time) -> ::Dry::Monads::Result[::Array[::Hash[::Symbol, untyped]]]
266
+ alias call! call
267
+ end
268
+
269
+ class Search
270
+ FIELDS: ::String
271
+
272
+ def call: (external_id: ::String) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]?]
273
+ alias call! call
274
+ end
275
+
276
+ class Show
277
+ FIELDS: ::String
278
+
279
+ def call: (conversation_id: ::String) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
280
+ alias call! call
281
+ end
282
+
283
+ module Posts
284
+ class Index
285
+ LIMIT: ::Integer
286
+
287
+ def call: (conversation_id: ::String, ?cursor: ::String?) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
288
+ alias call! call
289
+ end
290
+
291
+ class Since
292
+ MAX_PAGES: ::Integer
293
+
294
+ def call: (conversation_id: ::String, ?since: ::Time?) -> ::Dry::Monads::Result[::Array[untyped]]
295
+ alias call! call
296
+ end
297
+ end
298
+
299
+ module Messages
300
+ class Reply
301
+ BOOKING_MODULE_TYPES: ::Hash[::String, ::String]
302
+
303
+ def self.module_type_for: (::String? channel_name) -> ::String?
304
+
305
+ def call: (conversation_id: ::String, body: ::String, ?module_type: ::String?) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
306
+ alias call! call
307
+ end
308
+ end
309
+
310
+ module Attachments
311
+ class Index
312
+ BATCH_SIZE: ::Integer
313
+
314
+ def call: (keys: ::Array[::String]) -> ::Dry::Monads::Result[::Hash[::String, ::String]]
315
+ alias call! call
316
+ end
317
+ end
318
+ end
319
+
320
+ module Guests
321
+ OTA_LINK_TYPES: ::Hash[::Symbol, ::String]
322
+
323
+ module Profiles
324
+ class Create
325
+ def call: (attributes: ::Hash[::Symbol, untyped]) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
326
+ alias call! call
327
+ end
328
+
329
+ class Show
330
+ def call: (guest_id: ::String, ?fields: ::Array[::String]?) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
331
+ alias call! call
332
+ end
333
+
334
+ class Update
335
+ def call: (guest_id: ::String, attributes: ::Hash[::Symbol, untyped]) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
336
+ alias call! call
337
+ end
338
+ end
339
+ end
340
+
341
+ module Homes
342
+ class Search
343
+ def call: (attributes: ::Hash[::Symbol, untyped], ?skip: ::Integer, ?take: ::Integer) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
344
+ alias call! call
345
+ end
346
+
347
+ module Calendars
348
+ class Show
349
+ BLOCK_TYPE_MAPPING: ::Hash[::Symbol, ::Symbol]
350
+
351
+ def call: (home_id: ::String, start_date: ::Date, end_date: ::Date) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
352
+ alias call! call
353
+ end
354
+ end
355
+ end
356
+
357
+ module GuestFolio
358
+ module InvoiceItems
359
+ class Index
360
+ FIELDS: ::Array[::String]
361
+
362
+ type item = {
363
+ external_id: ::String,
364
+ normal_type: ::String?,
365
+ amount: ::BigDecimal?,
366
+ currency: ::String,
367
+ occurred_at: ::Time?
368
+ }
369
+
370
+ def call: (reservation_id: ::String) -> ::Dry::Monads::Result[::Array[item]]
371
+ alias call! call
372
+ end
373
+ end
374
+ end
375
+
376
+ module Reviews
377
+ class Respond
378
+ def call: (review_id: ::String, text: ::String) -> ::Dry::Monads::Result[bool]
379
+ alias call! call
380
+ end
381
+ end
382
+
383
+ module Views
384
+ class Create
385
+ def call: (title: ::String, section: ::String) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
386
+ alias call! call
387
+ end
388
+
389
+ class Update
390
+ def call: (id: ::String, ?title: ::String?, ?fields: ::String?, ?filters: ::Array[::Hash[::Symbol, untyped]]?, ?sort: ::String?) -> ::Dry::Monads::Result[untyped]
391
+ alias call! call
392
+ end
393
+ end
394
+
395
+ module Webhooks
396
+ class Index
397
+ def call: () -> ::Dry::Monads::Result[::Array[untyped]]
398
+ alias call! call
399
+ end
400
+
401
+ class Create
402
+ def call: (url: ::String, events: ::Array[::String]) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
403
+ alias call! call
404
+ end
405
+
406
+ class Update
407
+ def call: (id: ::String, url: ::String, events: ::Array[::String]) -> ::Dry::Monads::Result[::Hash[::Symbol, untyped]]
408
+ alias call! call
409
+ end
410
+
411
+ class Sync
412
+ def call: (urls: ::Array[::String], events: ::Array[::String]) -> ::Dry::Monads::Result[::Hash[::Symbol, ::Array[::String]]]
413
+ alias call! call
414
+ end
415
+
416
+ module Signatures
417
+ class Verify
418
+ SECRET_PREFIX: ::String
419
+ SIGNATURE_VERSION: ::String
420
+ TOLERANCE: ::ActiveSupport::Duration
421
+
422
+ def call: (payload: ::String, headers: untyped) -> ::Dry::Monads::Result[bool]
423
+ alias call! call
424
+ end
425
+ end
426
+ end
427
+ end
metadata ADDED
@@ -0,0 +1,191 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: guesty-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Guestit
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: activesupport
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '8.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '8.1'
26
+ - !ruby/object:Gem::Dependency
27
+ name: dry-monads
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.10'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.10'
40
+ - !ruby/object:Gem::Dependency
41
+ name: faraday
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.14'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.14'
54
+ - !ruby/object:Gem::Dependency
55
+ name: faraday-retry
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.4'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.4'
68
+ - !ruby/object:Gem::Dependency
69
+ name: mini_mime
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.1'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.1'
82
+ - !ruby/object:Gem::Dependency
83
+ name: oj
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.17'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '3.17'
96
+ description: 'One operation per Guesty Open API endpoint, returning dry-monads Results,
97
+ with OAuth token minting, credential slots, priority lanes, rate limiting and webhook
98
+ signature checks. Framework-free: the host injects credentials, token storage and
99
+ the rate limiter.'
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - CHANGELOG.md
105
+ - LICENSE
106
+ - README.md
107
+ - lib/guesty-client.rb
108
+ - lib/guesty.rb
109
+ - lib/guesty/access_tokens/upsert.rb
110
+ - lib/guesty/api_error.rb
111
+ - lib/guesty/client.rb
112
+ - lib/guesty/config.rb
113
+ - lib/guesty/conversations.rb
114
+ - lib/guesty/conversations/attachments/index.rb
115
+ - lib/guesty/conversations/index.rb
116
+ - lib/guesty/conversations/messages/reply.rb
117
+ - lib/guesty/conversations/posts/index.rb
118
+ - lib/guesty/conversations/posts/since.rb
119
+ - lib/guesty/conversations/search.rb
120
+ - lib/guesty/conversations/show.rb
121
+ - lib/guesty/error.rb
122
+ - lib/guesty/guest_folio/invoice_items/index.rb
123
+ - lib/guesty/guests.rb
124
+ - lib/guesty/guests/profiles/create.rb
125
+ - lib/guesty/guests/profiles/show.rb
126
+ - lib/guesty/guests/profiles/update.rb
127
+ - lib/guesty/homes/calendars/show.rb
128
+ - lib/guesty/homes/search.rb
129
+ - lib/guesty/memory_rate_limiter.rb
130
+ - lib/guesty/memory_token_store.rb
131
+ - lib/guesty/operation.rb
132
+ - lib/guesty/rate_limiter_middleware.rb
133
+ - lib/guesty/reservations.rb
134
+ - lib/guesty/reservations/accommodation_fare/update.rb
135
+ - lib/guesty/reservations/approve.rb
136
+ - lib/guesty/reservations/create.rb
137
+ - lib/guesty/reservations/custom_fields/update.rb
138
+ - lib/guesty/reservations/dates/update.rb
139
+ - lib/guesty/reservations/decline.rb
140
+ - lib/guesty/reservations/flags/update.rb
141
+ - lib/guesty/reservations/payments/create.rb
142
+ - lib/guesty/reservations/pre_approve.rb
143
+ - lib/guesty/reservations/recover.rb
144
+ - lib/guesty/reservations/reviews/extractors/airbnb.rb
145
+ - lib/guesty/reservations/reviews/extractors/base.rb
146
+ - lib/guesty/reservations/reviews/extractors/booking_com.rb
147
+ - lib/guesty/reservations/reviews/extractors/vrbo.rb
148
+ - lib/guesty/reservations/reviews/index.rb
149
+ - lib/guesty/reservations/search.rb
150
+ - lib/guesty/reservations/show.rb
151
+ - lib/guesty/reservations/status/cancel.rb
152
+ - lib/guesty/reservations/status/update.rb
153
+ - lib/guesty/reservations/stays/update.rb
154
+ - lib/guesty/reservations/update.rb
155
+ - lib/guesty/reviews/respond.rb
156
+ - lib/guesty/version.rb
157
+ - lib/guesty/views/create.rb
158
+ - lib/guesty/views/update.rb
159
+ - lib/guesty/webhooks/create.rb
160
+ - lib/guesty/webhooks/index.rb
161
+ - lib/guesty/webhooks/signatures/verify.rb
162
+ - lib/guesty/webhooks/sync.rb
163
+ - lib/guesty/webhooks/update.rb
164
+ - sig/guesty.rbs
165
+ homepage: https://github.com/guestitab/guesty-client
166
+ licenses:
167
+ - MIT
168
+ metadata:
169
+ allowed_push_host: https://rubygems.org
170
+ source_code_uri: https://github.com/guestitab/guesty-client
171
+ changelog_uri: https://github.com/guestitab/guesty-client/blob/staging/CHANGELOG.md
172
+ bug_tracker_uri: https://github.com/guestitab/guesty-client/issues
173
+ rubygems_mfa_required: 'true'
174
+ rdoc_options: []
175
+ require_paths:
176
+ - lib
177
+ required_ruby_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '4.0'
182
+ required_rubygems_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ requirements: []
188
+ rubygems_version: 4.0.23
189
+ specification_version: 4
190
+ summary: Ruby client for the Guesty Open API
191
+ test_files: []