whatsapp_sdk 0.12.1 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codeql-analysis.yml +8 -6
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +0 -3
  5. data/CHANGELOG.md +9 -7
  6. data/Gemfile +0 -4
  7. data/Gemfile.lock +1 -20
  8. data/README.md +35 -55
  9. data/SECURITY.md +21 -0
  10. data/example.rb +23 -15
  11. data/lib/whatsapp_sdk/api/api_configuration.rb +2 -5
  12. data/lib/whatsapp_sdk/api/business_profile.rb +0 -12
  13. data/lib/whatsapp_sdk/api/client.rb +7 -43
  14. data/lib/whatsapp_sdk/api/medias.rb +8 -15
  15. data/lib/whatsapp_sdk/api/messages.rb +4 -81
  16. data/lib/whatsapp_sdk/api/phone_numbers.rb +0 -14
  17. data/lib/whatsapp_sdk/api/request.rb +0 -2
  18. data/lib/whatsapp_sdk/api/response.rb +1 -20
  19. data/lib/whatsapp_sdk/api/responses/business_profile_data_response.rb +11 -34
  20. data/lib/whatsapp_sdk/api/responses/data_response.rb +0 -9
  21. data/lib/whatsapp_sdk/api/responses/error_response.rb +1 -8
  22. data/lib/whatsapp_sdk/api/responses/generic_error_response.rb +8 -26
  23. data/lib/whatsapp_sdk/api/responses/media_data_response.rb +8 -26
  24. data/lib/whatsapp_sdk/api/responses/message_data_response.rb +4 -20
  25. data/lib/whatsapp_sdk/api/responses/message_error_response.rb +0 -1
  26. data/lib/whatsapp_sdk/api/responses/message_template_namespace_data_response.rb +3 -13
  27. data/lib/whatsapp_sdk/api/responses/phone_number_data_response.rb +19 -37
  28. data/lib/whatsapp_sdk/api/responses/phone_numbers_data_response.rb +2 -9
  29. data/lib/whatsapp_sdk/api/responses/read_message_data_response.rb +1 -6
  30. data/lib/whatsapp_sdk/api/responses/success_response.rb +1 -5
  31. data/lib/whatsapp_sdk/api/responses/template_data_response.rb +2 -7
  32. data/lib/whatsapp_sdk/api/responses/templates_data_response.rb +2 -9
  33. data/lib/whatsapp_sdk/api/templates.rb +3 -27
  34. data/lib/whatsapp_sdk/configuration.rb +2 -24
  35. data/lib/whatsapp_sdk/error.rb +0 -1
  36. data/lib/whatsapp_sdk/resource/address.rb +1 -30
  37. data/lib/whatsapp_sdk/resource/address_type.rb +3 -8
  38. data/lib/whatsapp_sdk/resource/business_profile.rb +0 -3
  39. data/lib/whatsapp_sdk/resource/button_parameter.rb +4 -20
  40. data/lib/whatsapp_sdk/resource/component.rb +12 -43
  41. data/lib/whatsapp_sdk/resource/contact.rb +1 -30
  42. data/lib/whatsapp_sdk/resource/contact_response.rb +1 -9
  43. data/lib/whatsapp_sdk/resource/currency.rb +0 -8
  44. data/lib/whatsapp_sdk/resource/date_time.rb +0 -6
  45. data/lib/whatsapp_sdk/resource/email.rb +1 -10
  46. data/lib/whatsapp_sdk/resource/errors.rb +1 -17
  47. data/lib/whatsapp_sdk/resource/interactive.rb +6 -27
  48. data/lib/whatsapp_sdk/resource/interactive_action.rb +10 -24
  49. data/lib/whatsapp_sdk/resource/interactive_action_reply_button.rb +5 -19
  50. data/lib/whatsapp_sdk/resource/interactive_action_section.rb +1 -11
  51. data/lib/whatsapp_sdk/resource/interactive_action_section_row.rb +0 -11
  52. data/lib/whatsapp_sdk/resource/interactive_body.rb +0 -10
  53. data/lib/whatsapp_sdk/resource/interactive_footer.rb +0 -10
  54. data/lib/whatsapp_sdk/resource/interactive_header.rb +25 -53
  55. data/lib/whatsapp_sdk/resource/location.rb +44 -0
  56. data/lib/whatsapp_sdk/resource/media.rb +10 -46
  57. data/lib/whatsapp_sdk/resource/media_types.rb +0 -3
  58. data/lib/whatsapp_sdk/resource/message.rb +0 -5
  59. data/lib/whatsapp_sdk/resource/name.rb +1 -28
  60. data/lib/whatsapp_sdk/resource/org.rb +1 -13
  61. data/lib/whatsapp_sdk/resource/parameter_object.rb +71 -74
  62. data/lib/whatsapp_sdk/resource/phone_number.rb +1 -13
  63. data/lib/whatsapp_sdk/resource/template.rb +23 -36
  64. data/lib/whatsapp_sdk/resource/url.rb +1 -10
  65. data/lib/whatsapp_sdk/version.rb +1 -2
  66. data/lib/whatsapp_sdk.rb +0 -4
  67. data/whatsapp_sdk.gemspec +0 -3
  68. metadata +5 -49
  69. data/sorbet/config +0 -6
  70. data/sorbet/rbi/annotations/faraday.rbi +0 -17
  71. data/sorbet/rbi/annotations/mocha.rbi +0 -34
  72. data/sorbet/rbi/annotations/rainbow.rbi +0 -269
  73. data/sorbet/rbi/gems/faraday-multipart@1.0.4.rbi +0 -270
  74. data/sorbet/rbi/gems/faraday-net_http@2.0.3.rbi +0 -182
  75. data/sorbet/rbi/gems/faraday@2.3.0.rbi +0 -2494
  76. data/sorbet/rbi/gems/method_source@1.0.0.rbi +0 -272
  77. data/sorbet/rbi/gems/minitest@5.16.1.rbi +0 -1459
  78. data/sorbet/rbi/gems/mocha@1.14.0.rbi +0 -60
  79. data/sorbet/rbi/gems/multipart-post@2.2.3.rbi +0 -239
  80. data/sorbet/rbi/gems/netrc@0.11.0.rbi +0 -150
  81. data/sorbet/rbi/gems/oj@3.13.14.rbi +0 -589
  82. data/sorbet/rbi/gems/zeitwerk@2.6.0.rbi +0 -867
  83. data/sorbet/rbi/todo.rbi +0 -8
  84. data/sorbet/shims/request.rbi +0 -10
  85. data/sorbet/tapioca/config.yml +0 -13
  86. data/sorbet/tapioca/require.rb +0 -4
@@ -1,4 +1,3 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require "faraday"
@@ -14,12 +13,8 @@ module WhatsappSdk
14
13
  module Api
15
14
  class Medias < Request
16
15
  class FileNotFoundError < StandardError
17
- extend T::Sig
18
-
19
- sig { returns(String) }
20
16
  attr_reader :file_path
21
17
 
22
- sig { params(file_path: String).void }
23
18
  def initialize(file_path:)
24
19
  @file_path = file_path
25
20
 
@@ -29,12 +24,8 @@ module WhatsappSdk
29
24
  end
30
25
 
31
26
  class InvalidMediaTypeError < StandardError
32
- extend T::Sig
33
-
34
- sig { returns(String) }
35
27
  attr_reader :media_type
36
28
 
37
- sig { params(media_type: String).void }
38
29
  def initialize(media_type:)
39
30
  @media_type = media_type
40
31
  message = "Invalid Media Type #{media_type}. See the supported types in the official documentation " \
@@ -47,7 +38,6 @@ module WhatsappSdk
47
38
  #
48
39
  # @param media_id [String] Media Id.
49
40
  # @return [Api::Response] Response object.
50
- sig { params(media_id: String).returns(Api::Response) }
51
41
  def media(media_id:)
52
42
  response = send_request(
53
43
  http_method: "get",
@@ -68,7 +58,6 @@ module WhatsappSdk
68
58
  # documentation https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types,
69
59
  # but note that the API may allow more depending on the client.
70
60
  # @return [Api::Response] Response object.
71
- sig { params(url: String, file_path: String, media_type: String).returns(Api::Response) }
72
61
  def download(url:, file_path:, media_type:)
73
62
  # Allow download of unsupported media types, since Cloud API may decide to let it through.
74
63
  # https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk/discussions/127
@@ -97,8 +86,7 @@ module WhatsappSdk
97
86
  # see the official documentation https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types.
98
87
  #
99
88
  # @return [Api::Response] Response object.
100
- sig { params(sender_id: Integer, file_path: String, type: String).returns(Api::Response) }
101
- def upload(sender_id:, file_path:, type:)
89
+ def upload(sender_id:, file_path:, type:, headers: {})
102
90
  raise FileNotFoundError.new(file_path: file_path) unless File.file?(file_path)
103
91
 
104
92
  params = {
@@ -107,7 +95,13 @@ module WhatsappSdk
107
95
  type: type
108
96
  }
109
97
 
110
- response = send_request(http_method: "post", endpoint: "#{sender_id}/media", params: params, multipart: true)
98
+ response = send_request(
99
+ http_method: "post",
100
+ endpoint: "#{sender_id}/media",
101
+ params: params,
102
+ headers: headers,
103
+ multipart: true
104
+ )
111
105
 
112
106
  Api::Response.new(
113
107
  response: response,
@@ -119,7 +113,6 @@ module WhatsappSdk
119
113
  #
120
114
  # @param media_id [String] Media Id.
121
115
  # @return [Api::Response] Response object.
122
- sig { params(media_id: String).returns(Api::Response) }
123
116
  def delete(media_id:)
124
117
  response = send_request(
125
118
  http_method: "delete",
@@ -1,4 +1,3 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require_relative "request"
@@ -7,9 +6,7 @@ require_relative "response"
7
6
  module WhatsappSdk
8
7
  module Api
9
8
  class Messages < Request
10
- extend T::Sig
11
-
12
- DEFAULT_HEADERS = T.let({ 'Content-Type' => 'application/json' }.freeze, Hash)
9
+ DEFAULT_HEADERS = { 'Content-Type' => 'application/json' }.freeze
13
10
 
14
11
  # Send a text message.
15
12
  #
@@ -18,12 +15,6 @@ module WhatsappSdk
18
15
  # @param message [String] Text to send.
19
16
  # @param message_id [String] The id of the message to reply to.
20
17
  # @return [Api::Response] Response object.
21
- sig do
22
- params(
23
- sender_id: Integer, recipient_number: Integer, message: String,
24
- message_id: T.nilable(String)
25
- ).returns(Api::Response)
26
- end
27
18
  def send_text(sender_id:, recipient_number:, message:, message_id: nil)
28
19
  params = {
29
20
  messaging_product: "whatsapp",
@@ -56,13 +47,6 @@ module WhatsappSdk
56
47
  # @param address [String] Location address.
57
48
  # @param message_id [String] The id of the message to reply to.
58
49
  # @return [Api::Response] Response object.
59
- sig do
60
- params(
61
- sender_id: Integer, recipient_number: Integer,
62
- longitude: Float, latitude: Float, name: String, address: String,
63
- message_id: T.nilable(String)
64
- ).returns(Api::Response)
65
- end
66
50
  def send_location(
67
51
  sender_id:, recipient_number:, longitude:, latitude:, name:, address:, message_id: nil
68
52
  )
@@ -101,13 +85,6 @@ module WhatsappSdk
101
85
  # @param caption [String] Image caption.
102
86
  # @param message_id [String] The id of the message to reply to.
103
87
  # @return [Api::Response] Response object.
104
- sig do
105
- params(
106
- sender_id: Integer, recipient_number: Integer, image_id: T.nilable(String),
107
- link: T.nilable(String), caption: T.nilable(String),
108
- message_id: T.nilable(String)
109
- ).returns(Api::Response)
110
- end
111
88
  def send_image(
112
89
  sender_id:, recipient_number:, image_id: nil, link: nil, caption: "", message_id: nil
113
90
  )
@@ -146,12 +123,6 @@ module WhatsappSdk
146
123
  # @param link [String] Audio link.
147
124
  # @param message_id [String] The id of the message to reply to.
148
125
  # @return [Api::Response] Response object.
149
- sig do
150
- params(
151
- sender_id: Integer, recipient_number: Integer, audio_id: T.nilable(String),
152
- link: T.nilable(String), message_id: T.nilable(String)
153
- ).returns(Api::Response)
154
- end
155
126
  def send_audio(sender_id:, recipient_number:, audio_id: nil, link: nil, message_id: nil)
156
127
  raise Resource::Errors::MissingArgumentError, "audio_id or link is required" if !audio_id && !link
157
128
 
@@ -186,13 +157,6 @@ module WhatsappSdk
186
157
  # @param caption [String] Image caption.
187
158
  # @param message_id [String] The id of the message to reply to.
188
159
  # @return [Api::Response] Response object.
189
- sig do
190
- params(
191
- sender_id: Integer, recipient_number: Integer,
192
- video_id: T.nilable(String), link: T.nilable(String), caption: String,
193
- message_id: T.nilable(String)
194
- ).returns(Api::Response)
195
- end
196
160
  def send_video(
197
161
  sender_id:, recipient_number:, video_id: nil, link: nil, caption: "", message_id: nil
198
162
  )
@@ -232,15 +196,8 @@ module WhatsappSdk
232
196
  # @param caption [String] Image caption.
233
197
  # @param message_id [String] The id of the message to reply to.
234
198
  # @return [Api::Response] Response object.
235
- sig do
236
- params(
237
- sender_id: Integer, recipient_number: Integer,
238
- document_id: T.nilable(String), link: T.nilable(String), caption: String,
239
- message_id: T.nilable(String)
240
- ).returns(Api::Response)
241
- end
242
199
  def send_document(
243
- sender_id:, recipient_number:, document_id: nil, link: nil, caption: "", message_id: nil
200
+ sender_id:, recipient_number:, document_id: nil, link: nil, caption: "", message_id: nil, filename: nil
244
201
  )
245
202
  if !document_id && !link
246
203
  raise Resource::Errors::MissingArgumentError,
@@ -258,6 +215,7 @@ module WhatsappSdk
258
215
  else
259
216
  { id: document_id, caption: caption }
260
217
  end
218
+ params[:document] = params[:document].merge({ filename: filename }) if filename
261
219
  params[:context] = { message_id: message_id } if message_id
262
220
 
263
221
  response = send_request(
@@ -280,12 +238,6 @@ module WhatsappSdk
280
238
  # @param link [String] Image link.
281
239
  # @param message_id [String] The id of the message to reply to.
282
240
  # @return [Api::Response] Response object.
283
- sig do
284
- params(
285
- sender_id: Integer, recipient_number: Integer, sticker_id: T.nilable(String),
286
- link: T.nilable(String), message_id: T.nilable(String)
287
- ).returns(Api::Response)
288
- end
289
241
  def send_sticker(sender_id:, recipient_number:, sticker_id: nil, link: nil, message_id: nil)
290
242
  raise Resource::Errors::MissingArgumentError, "sticker or link is required" if !sticker_id && !link
291
243
 
@@ -293,7 +245,7 @@ module WhatsappSdk
293
245
  messaging_product: "whatsapp",
294
246
  to: recipient_number,
295
247
  recipient_type: "individual",
296
- type: Resource::Media::Type::Sticker
248
+ type: Resource::Media::Type::STICKER
297
249
  }
298
250
  params[:sticker] = link ? { link: link } : { id: sticker_id }
299
251
  params[:context] = { message_id: message_id } if message_id
@@ -319,13 +271,6 @@ module WhatsappSdk
319
271
  # @param contacts_json [Json] Contacts.
320
272
  # @param message_id [String] The id of the message to reply to.
321
273
  # @return [Api::Response] Response object.
322
- sig do
323
- params(
324
- sender_id: Integer, recipient_number: Integer,
325
- contacts: T.nilable(T::Array[Resource::Contact]),
326
- contacts_json: T::Hash[T.untyped, T.untyped], message_id: T.nilable(String)
327
- ).returns(Api::Response)
328
- end
329
274
  def send_contacts(
330
275
  sender_id:, recipient_number:, contacts: nil, contacts_json: {}, message_id: nil
331
276
  )
@@ -365,13 +310,6 @@ module WhatsappSdk
365
310
  # If you pass interactive_json, you can't pass interactive.
366
311
  # @param message_id [String] The id of the message to reply to.
367
312
  # @return [Api::Response] Response object.
368
- sig do
369
- params(
370
- sender_id: Integer, recipient_number: Integer,
371
- interactive: T.nilable(Resource::Interactive),
372
- interactive_json: T.nilable(T::Hash[T.untyped, T.untyped]), message_id: T.nilable(String)
373
- ).returns(Api::Response)
374
- end
375
313
  def send_interactive_message(
376
314
  sender_id:, recipient_number:, interactive: nil, interactive_json: nil, message_id: nil
377
315
  )
@@ -414,7 +352,6 @@ module WhatsappSdk
414
352
  # @param sender_id [Integer] Sender' phone number.
415
353
  # @param message_id [Integer] Message ID.
416
354
  # @return [Api::Response] Response object.
417
- sig { params(sender_id: Integer, message_id: String).returns(Api::Response) }
418
355
  def read_message(sender_id:, message_id:)
419
356
  params = {
420
357
  messaging_product: "whatsapp",
@@ -443,13 +380,6 @@ module WhatsappSdk
443
380
  # @param components [Component] Component.
444
381
  # @param components_json [Json] The component as a Json. If you pass components_json, you can't pass components.
445
382
  # @return [Api::Response] Response object.
446
- sig do
447
- params(
448
- sender_id: Integer, recipient_number: Integer, name: String, language: String,
449
- components: T.nilable(T::Array[Resource::Component]),
450
- components_json: T.nilable(T::Array[T::Hash[T.untyped, T.untyped]])
451
- ).returns(Api::Response)
452
- end
453
383
  def send_template(
454
384
  sender_id:, recipient_number:, name:, language:, components: nil, components_json: nil
455
385
  )
@@ -494,12 +424,6 @@ module WhatsappSdk
494
424
  # @param message_id [String] the id of the message to reaction.
495
425
  # @param emoji [String] unicode of the emoji to send.
496
426
  # @return [Api::Response] Response object.
497
- sig do
498
- params(
499
- sender_id: Integer, recipient_number: Integer, message_id: String,
500
- emoji: T.any(String, Integer)
501
- ).returns(Api::Response)
502
- end
503
427
  def send_reaction(sender_id:, recipient_number:, message_id:, emoji:)
504
428
  params = {
505
429
  messaging_product: "whatsapp",
@@ -526,7 +450,6 @@ module WhatsappSdk
526
450
 
527
451
  private
528
452
 
529
- sig { params(sender_id: Integer).returns(String) }
530
453
  def endpoint(sender_id)
531
454
  "#{sender_id}/messages"
532
455
  end
@@ -1,4 +1,3 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require_relative "request"
@@ -17,7 +16,6 @@ module WhatsappSdk
17
16
  #
18
17
  # @param business_id [Integer] Business Id.
19
18
  # @return [Api::Response] Response object.
20
- sig { params(business_id: Integer).returns(Api::Response) }
21
19
  def registered_numbers(business_id)
22
20
  response = send_request(
23
21
  http_method: "get",
@@ -34,7 +32,6 @@ module WhatsappSdk
34
32
  #
35
33
  # @param phone_number_id [Integer] The registered number we want to retrieve.
36
34
  # @return [Api::Response] Response object.
37
- sig { params(phone_number_id: Integer).returns(Api::Response) }
38
35
  def registered_number(phone_number_id)
39
36
  response = send_request(
40
37
  http_method: "get",
@@ -52,12 +49,6 @@ module WhatsappSdk
52
49
  # @param phone_number_id [Integer] The registered number we want to retrieve.
53
50
  # @param pin [Integer] Pin of 6 digits.
54
51
  # @return [Api::Response] Response object.
55
- sig do
56
- params(
57
- phone_number_id: Integer,
58
- pin: Integer
59
- ).returns(Api::Response)
60
- end
61
52
  def register_number(phone_number_id, pin)
62
53
  response = send_request(
63
54
  http_method: "post",
@@ -75,11 +66,6 @@ module WhatsappSdk
75
66
  #
76
67
  # @param phone_number_id [Integer] The registered number we want to retrieve.
77
68
  # @return [Api::Response] Response object.
78
- sig do
79
- params(
80
- phone_number_id: Integer
81
- ).returns(Api::Response)
82
- end
83
69
  def deregister_number(phone_number_id)
84
70
  response = send_request(
85
71
  http_method: "post",
@@ -4,8 +4,6 @@
4
4
  module WhatsappSdk
5
5
  module Api
6
6
  class Request
7
- extend T::Sig
8
-
9
7
  def initialize(client = WhatsappSdk.configuration.client)
10
8
  @client = client
11
9
  end
@@ -1,4 +1,3 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require_relative "responses/message_data_response"
@@ -11,24 +10,8 @@ require_relative "responses/business_profile_data_response"
11
10
  module WhatsappSdk
12
11
  module Api
13
12
  class Response
14
- extend T::Sig
13
+ attr_accessor :error, :data, :raw_response
15
14
 
16
- sig { returns(T.nilable(Api::Responses::ErrorResponse)) }
17
- attr_accessor :error
18
-
19
- sig { returns(T.nilable(Api::Responses::DataResponse)) }
20
- attr_accessor :data
21
-
22
- sig { returns(T::Hash[T.untyped, T.untyped]) }
23
- attr_accessor :raw_response
24
-
25
- sig do
26
- params(
27
- response: T::Hash[T.untyped, T.untyped],
28
- data_class_type: T.class_of(Api::Responses::DataResponse),
29
- error_class_type: T.class_of(Api::Responses::ErrorResponse)
30
- ).void
31
- end
32
15
  def initialize(response:, data_class_type:, error_class_type: Responses::MessageErrorResponse)
33
16
  @raw_response = response
34
17
  @data = data_class_type.build_from_response(response: response)
@@ -36,13 +19,11 @@ module WhatsappSdk
36
19
  end
37
20
 
38
21
  # @return [Boolean] Whether or not the response is successful.
39
- sig { returns(T::Boolean) }
40
22
  def ok?
41
23
  @error.nil?
42
24
  end
43
25
 
44
26
  # @return [Boolean] Whether or not the response has an error.
45
- sig { returns(T::Boolean) }
46
27
  def error?
47
28
  !!@error
48
29
  end
@@ -1,4 +1,3 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require_relative "data_response"
@@ -7,44 +6,22 @@ module WhatsappSdk
7
6
  module Api
8
7
  module Responses
9
8
  class BusinessProfileDataResponse < DataResponse
10
- sig { returns(T.nilable(String)) }
11
- attr_accessor :about
9
+ attr_accessor :about, :address, :description, :email, :messaging_product,
10
+ :profile_picture_url, :vertical, :websites
12
11
 
13
- sig { returns(T.nilable(String)) }
14
- attr_accessor :address
15
-
16
- sig { returns(T.nilable(String)) }
17
- attr_accessor :description
18
-
19
- sig { returns(T.nilable(String)) }
20
- attr_accessor :email
21
-
22
- sig { returns(T.nilable(String)) }
23
- attr_accessor :messaging_product
24
-
25
- sig { returns(T.nilable(String)) }
26
- attr_accessor :profile_picture_url
27
-
28
- sig { returns(T.nilable(String)) }
29
- attr_accessor :vertical
30
-
31
- sig { returns(T::Array[String]) }
32
- attr_accessor :websites
33
-
34
- sig { params(response: T::Hash[T.untyped, T.untyped]).void }
35
12
  def initialize(response)
36
- @about = T.let(response["data"][0]["about"], T.nilable(String))
37
- @address = T.let(response["data"][0]["address"], T.nilable(String))
38
- @description = T.let(response["data"][0]["description"], T.nilable(String))
39
- @email = T.let(response["data"][0]["email"], T.nilable(String))
40
- @messaging_product = T.let(response["data"][0]["messaging_product"], T.nilable(String))
41
- @profile_picture_url = T.let(response["data"][0]["profile_picture_url"], T.nilable(String))
42
- @vertical = T.let(response["data"][0]["vertical"], T.nilable(String))
43
- @websites = T.let(response["data"][0]["websites"], T.nilable(T::Array[String]))
13
+ @about = response["data"][0]["about"]
14
+ @address = response["data"][0]["address"]
15
+ @description = response["data"][0]["description"]
16
+ @email = response["data"][0]["email"]
17
+ @messaging_product = response["data"][0]["messaging_product"]
18
+ @profile_picture_url = response["data"][0]["profile_picture_url"]
19
+ @vertical = response["data"][0]["vertical"]
20
+ @websites = response["data"][0]["websites"]
21
+
44
22
  super(response)
45
23
  end
46
24
 
47
- sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(BusinessProfileDataResponse)) }
48
25
  def self.build_from_response(response:)
49
26
  return nil if response['error']
50
27
 
@@ -1,24 +1,15 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module WhatsappSdk
5
4
  module Api
6
5
  module Responses
7
6
  class DataResponse
8
- extend ::T::Sig
9
- extend ::T::Helpers
10
-
11
- abstract!
12
-
13
- sig { returns(T::Hash[T.untyped, T.untyped]) }
14
7
  attr_reader :raw_data_response
15
8
 
16
- sig { params(response: T::Hash[T.untyped, T.untyped]).void }
17
9
  def initialize(response)
18
10
  @raw_data_response = response
19
11
  end
20
12
 
21
- sig { abstract.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(DataResponse)) }
22
13
  def self.build_from_response(response:); end
23
14
  end
24
15
  end
@@ -1,4 +1,3 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require_relative "data_response"
@@ -7,20 +6,14 @@ module WhatsappSdk
7
6
  module Api
8
7
  module Responses
9
8
  class ErrorResponse < DataResponse
10
- sig { returns(T.nilable(T::Boolean)) }
11
- attr_accessor :error
9
+ attr_accessor :error, :status
12
10
 
13
- sig { returns(T.nilable(Integer)) }
14
- attr_accessor :status
15
-
16
- sig { params(response: T::Hash[T.untyped, T.untyped]).void }
17
11
  def initialize(response:)
18
12
  @error = response["error"]
19
13
  @status = response["status"]
20
14
  super(response)
21
15
  end
22
16
 
23
- sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(ErrorResponse)) }
24
17
  def self.build_from_response(response:)
25
18
  return unless response["error"]
26
19
 
@@ -1,4 +1,3 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require_relative "error_response"
@@ -7,36 +6,19 @@ module WhatsappSdk
7
6
  module Api
8
7
  module Responses
9
8
  class GenericErrorResponse < ErrorResponse
10
- sig { returns(Integer) }
11
- attr_reader :code
9
+ attr_reader :code, :subcode, :message, :type, :data, :fbtrace_id
12
10
 
13
- sig { returns(T.nilable(Integer)) }
14
- attr_reader :subcode
15
-
16
- sig { returns(T.nilable(String)) }
17
- attr_reader :message
18
-
19
- sig { returns(T.nilable(String)) }
20
- attr_reader :type
21
-
22
- sig { returns(T.nilable(String)) }
23
- attr_reader :data
24
-
25
- sig { returns(T.nilable(String)) }
26
- attr_reader :fbtrace_id
27
-
28
- sig { params(response: T::Hash[T.untyped, T.untyped]).void }
29
11
  def initialize(response:)
30
- @code = T.let(response["code"], Integer)
31
- @subcode = T.let(response["error_subcode"], T.nilable(Integer))
32
- @message = T.let(response["message"], T.nilable(String))
33
- @type = T.let(response["type"], T.nilable(String))
34
- @data = T.let(response["data"], T.nilable(String))
35
- @fbtrace_id = T.let(response["fbtrace_id"], T.nilable(String))
12
+ @code = response["code"]
13
+ @subcode = response["error_subcode"]
14
+ @message = response["message"]
15
+ @type = response["type"]
16
+ @data = response["data"]
17
+ @fbtrace_id = response["fbtrace_id"]
18
+
36
19
  super(response: response)
37
20
  end
38
21
 
39
- sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(GenericErrorResponse)) }
40
22
  def self.build_from_response(response:)
41
23
  error_response = response["error"]
42
24
  return unless error_response
@@ -1,4 +1,3 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require_relative "data_response"
@@ -7,36 +6,19 @@ module WhatsappSdk
7
6
  module Api
8
7
  module Responses
9
8
  class MediaDataResponse < DataResponse
10
- sig { returns(String) }
11
- attr_accessor :id
9
+ attr_accessor :id, :url, :mime_type, :sha256, :file_size, :messaging_product
12
10
 
13
- sig { returns(T.nilable(String)) }
14
- attr_accessor :url
15
-
16
- sig { returns(T.nilable(String)) }
17
- attr_accessor :mime_type
18
-
19
- sig { returns(T.nilable(String)) }
20
- attr_accessor :sha256
21
-
22
- sig { returns(T.nilable(Integer)) }
23
- attr_accessor :file_size
24
-
25
- sig { returns(T.nilable(String)) }
26
- attr_accessor :messaging_product
27
-
28
- sig { params(response: T::Hash[T.untyped, T.untyped]).void }
29
11
  def initialize(response)
30
- @id = T.let(response["id"], String)
31
- @messaging_product = T.let(response["messaging_product"], T.nilable(String))
32
- @url = T.let(response["url"], T.nilable(String))
33
- @mime_type = T.let(response["mime_type"], T.nilable(String))
34
- @sha256 = T.let(response["sha256"], T.nilable(String))
35
- @file_size = T.let(response["file_size"], T.nilable(Integer))
12
+ @id = response["id"]
13
+ @messaging_product = response["messaging_product"]
14
+ @url = response["url"]
15
+ @mime_type = response["mime_type"]
16
+ @sha256 = response["sha256"]
17
+ @file_size = response["file_size"]
18
+
36
19
  super(response)
37
20
  end
38
21
 
39
- sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(MediaDataResponse)) }
40
22
  def self.build_from_response(response:)
41
23
  return unless response["id"]
42
24
 
@@ -1,4 +1,3 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require_relative "../request"
@@ -10,28 +9,15 @@ module WhatsappSdk
10
9
  module Api
11
10
  module Responses
12
11
  class MessageDataResponse < DataResponse
13
- extend T::Sig
12
+ attr_reader :contacts, :messages
14
13
 
15
- sig { returns(T::Array[Resource::ContactResponse]) }
16
- attr_reader :contacts
17
-
18
- sig { returns(T::Array[Resource::Message]) }
19
- attr_reader :messages
20
-
21
- sig { params(response: T::Hash[T.untyped, T.untyped]).void }
22
14
  def initialize(response:)
23
- @contacts = T.let(
24
- response["contacts"]&.map { |contact_json| parse_contact(contact_json) },
25
- T::Array[Resource::ContactResponse]
26
- )
27
- @messages = T.let(
28
- response["messages"]&.map { |contact_json| parse_message(contact_json) },
29
- T::Array[Resource::Message]
30
- )
15
+ @contacts = response["contacts"]&.map { |contact_json| parse_contact(contact_json) }
16
+ @messages = response["messages"]&.map { |contact_json| parse_message(contact_json) }
17
+
31
18
  super(response)
32
19
  end
33
20
 
34
- sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(MessageDataResponse)) }
35
21
  def self.build_from_response(response:)
36
22
  return unless response["messages"]
37
23
 
@@ -40,12 +26,10 @@ module WhatsappSdk
40
26
 
41
27
  private
42
28
 
43
- sig { params(message_json: T::Hash[T.untyped, T.untyped]).returns(Resource::Message) }
44
29
  def parse_message(message_json)
45
30
  Resource::Message.new(id: message_json["id"])
46
31
  end
47
32
 
48
- sig { params(contact_json: T::Hash[T.untyped, T.untyped]).returns(Resource::ContactResponse) }
49
33
  def parse_contact(contact_json)
50
34
  Resource::ContactResponse.new(input: contact_json["input"], wa_id: contact_json["wa_id"])
51
35
  end
@@ -1,4 +1,3 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require_relative "generic_error_response"
@@ -1,4 +1,3 @@
1
- # typed: strict
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require_relative "data_response"
@@ -8,24 +7,15 @@ module WhatsappSdk
8
7
  module Api
9
8
  module Responses
10
9
  class MessageTemplateNamespaceDataResponse < DataResponse
11
- sig { returns(String) }
12
- attr_accessor :message_template_namespace
10
+ attr_accessor :message_template_namespace, :id
13
11
 
14
- sig { returns(String) }
15
- attr_accessor :id
16
-
17
- sig { params(response: T::Hash[T.untyped, T.untyped]).void }
18
12
  def initialize(response)
19
- @id = T.let(response["id"], String)
20
- @message_template_namespace = T.let(response["message_template_namespace"], String)
13
+ @id = response["id"]
14
+ @message_template_namespace = response["message_template_namespace"]
21
15
 
22
16
  super(response)
23
17
  end
24
18
 
25
- sig do
26
- override.params(response: T::Hash[T.untyped, T.untyped])
27
- .returns(T.nilable(MessageTemplateNamespaceDataResponse))
28
- end
29
19
  def self.build_from_response(response:)
30
20
  return unless response["id"]
31
21