bzapper 0.7.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.
@@ -0,0 +1,388 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GERADO por script/generate.rb a partir de packages/sdk/openapi.yaml — não edite à mão.
4
+
5
+ module Bzapper
6
+ module Resources
7
+ # Recursos avançados: editar/apagar/encaminhar, perfil, privacidade, chats, etiquetas, bloqueio e chamadas — `client.advanced`.
8
+ class Advanced < Base
9
+ # Edit the text of a sent message. `PATCH /messages/{id}`
10
+ #
11
+ # @param id [String] Instance ID (UUID).
12
+ # @param text [String] (corpo)
13
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
14
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
15
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
16
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
17
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
18
+ def edit_message(id, text:, idempotency_key: nil, timeout: nil)
19
+ payload = compact(
20
+ "text" => text
21
+ )
22
+ request("PATCH",
23
+ "/messages/#{segment(id, "id")}",
24
+ body: payload,
25
+ idempotency_key: idempotency_key,
26
+ timeout: timeout)
27
+ end
28
+
29
+ # Revoke a message (delete for everyone). `DELETE /messages/{id}`
30
+ #
31
+ # @param id [String] Instance ID (UUID).
32
+ # @param for_everyone [Boolean, nil] (query)
33
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
34
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
35
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
36
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
37
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
38
+ def revoke_message(id, for_everyone: nil, idempotency_key: nil, timeout: nil)
39
+ query = {
40
+ "for_everyone" => for_everyone
41
+ }
42
+ request("DELETE",
43
+ "/messages/#{segment(id, "id")}",
44
+ query: query,
45
+ idempotency_key: idempotency_key,
46
+ timeout: timeout)
47
+ end
48
+
49
+ # Forward a message (experimental). `POST /messages/forward`
50
+ #
51
+ # @param instance_id [String] (corpo)
52
+ # @param to [String] (corpo)
53
+ # @param from_chat [String] (corpo)
54
+ # @param wa_message_id [String] (corpo)
55
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
56
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
57
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
58
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
59
+ def forward_message(instance_id:, to:, from_chat:, wa_message_id:, idempotency_key: nil,
60
+ timeout: nil)
61
+ payload = compact(
62
+ "instance_id" => instance_id,
63
+ "to" => to,
64
+ "from_chat" => from_chat,
65
+ "wa_message_id" => wa_message_id
66
+ )
67
+ request("POST",
68
+ "/messages/forward",
69
+ body: payload,
70
+ idempotency_key: idempotency_key,
71
+ timeout: timeout)
72
+ end
73
+
74
+ # Number profile (white-label) — status (ok), name/photo (experimental). `PATCH
75
+ # /instances/{id}/profile`
76
+ #
77
+ # @param id [String] Instance ID (UUID).
78
+ # @param display_name [String, nil] (corpo)
79
+ # @param status_message [String, nil] (corpo)
80
+ # @param picture [String, nil] (corpo) Photo in base64.
81
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
82
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
83
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
84
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
85
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
86
+ def set_profile(id, display_name: UNSET, status_message: UNSET, picture: UNSET,
87
+ idempotency_key: nil, timeout: nil)
88
+ payload = compact(
89
+ "display_name" => display_name,
90
+ "status_message" => status_message,
91
+ "picture" => picture
92
+ )
93
+ request("PATCH",
94
+ "/instances/#{segment(id, "id")}/profile",
95
+ body: payload,
96
+ idempotency_key: idempotency_key,
97
+ timeout: timeout)
98
+ end
99
+
100
+ # Set a privacy setting. `PATCH /instances/{id}/privacy`
101
+ #
102
+ # @param id [String] Instance ID (UUID).
103
+ # @param setting [String] (corpo)
104
+ # @param value [String] (corpo)
105
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
106
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
107
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
108
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
109
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
110
+ def set_privacy(id, setting:, value:, idempotency_key: nil, timeout: nil)
111
+ payload = compact(
112
+ "setting" => setting,
113
+ "value" => value
114
+ )
115
+ request("PATCH",
116
+ "/instances/#{segment(id, "id")}/privacy",
117
+ body: payload,
118
+ idempotency_key: idempotency_key,
119
+ timeout: timeout)
120
+ end
121
+
122
+ # Archive/unarchive a chat. `POST /chats/{jid}/archive`
123
+ #
124
+ # @param jid [String] Group JID (…@g.us).
125
+ # @param instance_id [String] (corpo)
126
+ # @param on [Boolean] (corpo)
127
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
128
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
129
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
130
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
131
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
132
+ def archive_chat(jid, instance_id:, on:, idempotency_key: nil, timeout: nil)
133
+ payload = compact(
134
+ "instance_id" => instance_id,
135
+ "on" => on
136
+ )
137
+ request("POST",
138
+ "/chats/#{segment(jid, "jid")}/archive",
139
+ body: payload,
140
+ idempotency_key: idempotency_key,
141
+ timeout: timeout)
142
+ end
143
+
144
+ # Pin/unpin a chat. `POST /chats/{jid}/pin`
145
+ #
146
+ # @param jid [String] Group JID (…@g.us).
147
+ # @param instance_id [String] (corpo)
148
+ # @param on [Boolean] (corpo)
149
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
150
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
151
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
152
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
153
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
154
+ def pin_chat(jid, instance_id:, on:, idempotency_key: nil, timeout: nil)
155
+ payload = compact(
156
+ "instance_id" => instance_id,
157
+ "on" => on
158
+ )
159
+ request("POST",
160
+ "/chats/#{segment(jid, "jid")}/pin",
161
+ body: payload,
162
+ idempotency_key: idempotency_key,
163
+ timeout: timeout)
164
+ end
165
+
166
+ # Mark a chat read/unread. `POST /chats/{jid}/read`
167
+ #
168
+ # @param jid [String] Group JID (…@g.us).
169
+ # @param instance_id [String] (corpo)
170
+ # @param on [Boolean] (corpo)
171
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
172
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
173
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
174
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
175
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
176
+ def mark_chat(jid, instance_id:, on:, idempotency_key: nil, timeout: nil)
177
+ payload = compact(
178
+ "instance_id" => instance_id,
179
+ "on" => on
180
+ )
181
+ request("POST",
182
+ "/chats/#{segment(jid, "jid")}/read",
183
+ body: payload,
184
+ idempotency_key: idempotency_key,
185
+ timeout: timeout)
186
+ end
187
+
188
+ # Mute/unmute a chat. `POST /chats/{jid}/mute`
189
+ #
190
+ # @param jid [String] Group JID (…@g.us).
191
+ # @param instance_id [String] (corpo)
192
+ # @param on [Boolean] (corpo)
193
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
194
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
195
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
196
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
197
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
198
+ def mute_chat(jid, instance_id:, on:, idempotency_key: nil, timeout: nil)
199
+ payload = compact(
200
+ "instance_id" => instance_id,
201
+ "on" => on
202
+ )
203
+ request("POST",
204
+ "/chats/#{segment(jid, "jid")}/mute",
205
+ body: payload,
206
+ idempotency_key: idempotency_key,
207
+ timeout: timeout)
208
+ end
209
+
210
+ # Apply/remove a label on a chat (experimental). `POST /chats/{jid}/labels`
211
+ #
212
+ # @param jid [String] Group JID (…@g.us).
213
+ # @param instance_id [String] (corpo)
214
+ # @param label_id [String] (corpo)
215
+ # @param apply [Boolean, nil] (corpo) true = apply, false = remove.
216
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
217
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
218
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
219
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
220
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
221
+ def apply_chat_label(jid, instance_id:, label_id:, apply: UNSET, idempotency_key: nil,
222
+ timeout: nil)
223
+ payload = compact(
224
+ "instance_id" => instance_id,
225
+ "label_id" => label_id,
226
+ "apply" => apply
227
+ )
228
+ request("POST",
229
+ "/chats/#{segment(jid, "jid")}/labels",
230
+ body: payload,
231
+ idempotency_key: idempotency_key,
232
+ timeout: timeout)
233
+ end
234
+
235
+ # List the number's labels (experimental). `GET /labels`
236
+ #
237
+ # @param instance_id [String] (query) Instance ID (UUID).
238
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
239
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
240
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
241
+ def list_labels(instance_id:, timeout: nil)
242
+ query = {
243
+ "instance_id" => instance_id
244
+ }
245
+ request("GET", "/labels", query: query, timeout: timeout)
246
+ end
247
+
248
+ # Create a label (experimental). `POST /labels`
249
+ #
250
+ # @param instance_id [String] (corpo)
251
+ # @param name [String] (corpo)
252
+ # @param color [String, nil] (corpo)
253
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
254
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
255
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
256
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
257
+ def create_label(instance_id:, name:, color: UNSET, idempotency_key: nil, timeout: nil)
258
+ payload = compact(
259
+ "instance_id" => instance_id,
260
+ "name" => name,
261
+ "color" => color
262
+ )
263
+ request("POST",
264
+ "/labels",
265
+ body: payload,
266
+ idempotency_key: idempotency_key,
267
+ timeout: timeout)
268
+ end
269
+
270
+ # Delete a label (experimental). `DELETE /labels/{id}`
271
+ #
272
+ # @param id [String] Label ID.
273
+ # @param instance_id [String] (query) Instance ID (UUID).
274
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
275
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
276
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
277
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
278
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
279
+ def delete_label(id, instance_id:, idempotency_key: nil, timeout: nil)
280
+ query = {
281
+ "instance_id" => instance_id
282
+ }
283
+ request("DELETE",
284
+ "/labels/#{segment(id, "id")}",
285
+ query: query,
286
+ idempotency_key: idempotency_key,
287
+ timeout: timeout)
288
+ end
289
+
290
+ # Block a contact. `POST /contacts/{jid}/block`
291
+ #
292
+ # @param jid [String] Group JID (…@g.us).
293
+ # @param instance_id [String] (corpo)
294
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
295
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
296
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
297
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
298
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
299
+ def block_contact(jid, instance_id:, idempotency_key: nil, timeout: nil)
300
+ payload = compact(
301
+ "instance_id" => instance_id
302
+ )
303
+ request("POST",
304
+ "/contacts/#{segment(jid, "jid")}/block",
305
+ body: payload,
306
+ idempotency_key: idempotency_key,
307
+ timeout: timeout)
308
+ end
309
+
310
+ # Unblock a contact. `POST /contacts/{jid}/unblock`
311
+ #
312
+ # @param jid [String] Group JID (…@g.us).
313
+ # @param instance_id [String] (corpo)
314
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
315
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
316
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
317
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
318
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
319
+ def unblock_contact(jid, instance_id:, idempotency_key: nil, timeout: nil)
320
+ payload = compact(
321
+ "instance_id" => instance_id
322
+ )
323
+ request("POST",
324
+ "/contacts/#{segment(jid, "jid")}/unblock",
325
+ body: payload,
326
+ idempotency_key: idempotency_key,
327
+ timeout: timeout)
328
+ end
329
+
330
+ # List blocked contacts. `GET /blocklist`
331
+ #
332
+ # @param instance_id [String] (query) Instance ID (UUID).
333
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
334
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
335
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
336
+ def get_blocklist(instance_id:, timeout: nil)
337
+ query = {
338
+ "instance_id" => instance_id
339
+ }
340
+ request("GET", "/blocklist", query: query, timeout: timeout)
341
+ end
342
+
343
+ # Reject a call. `POST /calls/reject`
344
+ #
345
+ # @param instance_id [String] (corpo)
346
+ # @param call_from [String] (corpo)
347
+ # @param call_id [String] (corpo)
348
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
349
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
350
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
351
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
352
+ def reject_call(instance_id:, call_from:, call_id:, idempotency_key: nil, timeout: nil)
353
+ payload = compact(
354
+ "instance_id" => instance_id,
355
+ "call_from" => call_from,
356
+ "call_id" => call_id
357
+ )
358
+ request("POST",
359
+ "/calls/reject",
360
+ body: payload,
361
+ idempotency_key: idempotency_key,
362
+ timeout: timeout)
363
+ end
364
+
365
+ # Start a call (experimental). `POST /calls/offer`
366
+ #
367
+ # @param instance_id [String] (corpo)
368
+ # @param to [String] (corpo)
369
+ # @param video [Boolean, nil] (corpo)
370
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
371
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
372
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
373
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
374
+ def offer_call(instance_id:, to:, video: UNSET, idempotency_key: nil, timeout: nil)
375
+ payload = compact(
376
+ "instance_id" => instance_id,
377
+ "to" => to,
378
+ "video" => video
379
+ )
380
+ request("POST",
381
+ "/calls/offer",
382
+ body: payload,
383
+ idempotency_key: idempotency_key,
384
+ timeout: timeout)
385
+ end
386
+ end
387
+ end
388
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GERADO por script/generate.rb a partir de packages/sdk/openapi.yaml — não edite à mão.
4
+
5
+ module Bzapper
6
+ module Resources
7
+ # Avisos "atualize sua integração" — `client.advisories`.
8
+ class Advisories < Base
9
+ # List pending integration advisories. `GET /advisories`
10
+ #
11
+ # Advisories that affect THIS account and have not been dismissed. Use `action` — it states
12
+ # exactly what to do. Automate with the `advisory.published` webhook.
13
+ #
14
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
15
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
16
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
17
+ def list_advisories(timeout: nil)
18
+ request("GET", "/advisories", timeout: timeout)
19
+ end
20
+
21
+ # Dismiss an advisory. `POST /advisories/{id}/read`
22
+ #
23
+ # Marks the advisory as handled; it stops being returned by `GET /advisories`.
24
+ #
25
+ # @param id [String] parâmetro de caminho
26
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
27
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
28
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
29
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
30
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
31
+ def mark_advisory_read(id, idempotency_key: nil, timeout: nil)
32
+ request("POST",
33
+ "/advisories/#{segment(id, "id")}/read",
34
+ idempotency_key: idempotency_key,
35
+ timeout: timeout)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bzapper
4
+ # Recursos da API (um por tag da spec): `client.messages`, `client.instances`,
5
+ # `client.groups`, `client.contacts`, `client.campaigns`, `client.webhooks`…
6
+ #
7
+ # Convenções (iguais em todos os métodos, gerados de `openapi.yaml`):
8
+ #
9
+ # * Nome do método = `operationId` em snake_case (`sendText` → `send_text`).
10
+ # * Parâmetros de caminho são posicionais; query e corpo são keyword args.
11
+ # * Obrigatórios da spec não têm padrão (faltou → `ArgumentError` do Ruby).
12
+ # * Campos de corpo opcionais têm padrão {Bzapper::UNSET} — não informado = não enviado.
13
+ # `nil` explícito vai como `null` (limpa o campo num PATCH).
14
+ # * Filtros de query com `nil` são omitidos; listas vão como CSV; `Time` vira ISO 8601 UTC.
15
+ # * Toda chamada aceita `timeout:` (segundos, por tentativa); as escritas aceitam
16
+ # `idempotency_key:` (senão a SDK gera uma e a repete nas novas tentativas).
17
+ # * O retorno é o JSON inteiro da resposta (`Hash`/`Array` com chaves **string**; `{"data"
18
+ # => [...]}` NÃO é desembrulhado, para preservar paginação/metadados). 204 → `nil`.
19
+ module Resources
20
+ # Encanamento comum de {Base} e {Bzapper::PartnerClient}.
21
+ # @api private
22
+ module Requests
23
+ private
24
+
25
+ def request(method, path, query: nil, body: nil, multipart: nil, idempotency_key: nil, timeout: nil)
26
+ @transport.request(method, path, query: query, body: body, multipart: multipart,
27
+ idempotency_key: idempotency_key, timeout: timeout)
28
+ end
29
+
30
+ def segment(value, name)
31
+ Codec.path_segment(value, name)
32
+ end
33
+
34
+ def compact(fields)
35
+ Codec.compact(fields)
36
+ end
37
+
38
+ def upload(field, file, filename, content_type)
39
+ Upload.new(field, file, filename: filename, content_type: content_type)
40
+ end
41
+ end
42
+
43
+ # @api private
44
+ class Base
45
+ include Requests
46
+
47
+ def initialize(transport)
48
+ @transport = transport
49
+ end
50
+
51
+ def inspect
52
+ "#<#{self.class.name}>"
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,177 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GERADO por script/generate.rb a partir de packages/sdk/openapi.yaml — não edite à mão.
4
+
5
+ module Bzapper
6
+ module Resources
7
+ # Cobrança: plano, assinatura, add-ons, faturas e preços — `client.billing`.
8
+ class Billing < Base
9
+ # Effective account limits (plan + add-ons + usage). `GET /me/entitlements`
10
+ #
11
+ # Returns the resolved entitlement of the authenticated account: its effective plan, limits,
12
+ # contracted add-ons, free allowances per pillar and period usage. This is what the UI uses for
13
+ # the usage meter.
14
+ #
15
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
16
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
17
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
18
+ def get_my_entitlements(timeout: nil)
19
+ request("GET", "/me/entitlements", timeout: timeout)
20
+ end
21
+
22
+ # Put the Pro plan in the cart (pending until the cart is paid). `POST /me/plan/upgrade`
23
+ #
24
+ # Does not charge nor activate anything: Pro goes into the cart together with any add-ons, and
25
+ # is activated when the cart is paid (`POST /me/addons/cart/checkout`).
26
+ #
27
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
28
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
29
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
30
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
31
+ def upgrade_plan(idempotency_key: nil, timeout: nil)
32
+ request("POST", "/me/plan/upgrade", idempotency_key: idempotency_key, timeout: timeout)
33
+ end
34
+
35
+ # Cancel Pro at the end of the current cycle. `POST /me/plan/cancel`
36
+ #
37
+ # Pro stays active until renewal, then the account drops to Free.
38
+ #
39
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
40
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
41
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
42
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
43
+ def cancel_plan(idempotency_key: nil, timeout: nil)
44
+ request("POST", "/me/plan/cancel", idempotency_key: idempotency_key, timeout: timeout)
45
+ end
46
+
47
+ # Undo a scheduled Pro cancellation. `POST /me/plan/uncancel`
48
+ #
49
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
50
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
51
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
52
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
53
+ def uncancel_plan(idempotency_key: nil, timeout: nil)
54
+ request("POST", "/me/plan/uncancel", idempotency_key: idempotency_key, timeout: timeout)
55
+ end
56
+
57
+ # Plan/subscription state (null on Free). `GET /me/subscription`
58
+ #
59
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
60
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
61
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
62
+ def get_my_subscription(timeout: nil)
63
+ request("GET", "/me/subscription", timeout: timeout)
64
+ end
65
+
66
+ # Add (+) or remove (−) add-ons in the cart. `POST /me/addons`
67
+ #
68
+ # A positive `delta` adds to the cart (charged only when the cart is paid); a negative one
69
+ # reduces the cart or the active quantity. Requires Pro (409 not_pro).
70
+ #
71
+ # @param kind [String] (corpo) Quantity add-ons: number, project, storage_gb, retention_block
72
+ # (+30 days). Feature toggles (0/1): campaigns, schedule_year.
73
+ # @param delta [Integer] (corpo) Non-zero. > 0 adds to the cart; < 0 reduces the cart/active
74
+ # quantity.
75
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
76
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
77
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
78
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
79
+ def change_addon(kind:, delta:, idempotency_key: nil, timeout: nil)
80
+ payload = compact(
81
+ "kind" => kind,
82
+ "delta" => delta
83
+ )
84
+ request("POST",
85
+ "/me/addons",
86
+ body: payload,
87
+ idempotency_key: idempotency_key,
88
+ timeout: timeout)
89
+ end
90
+
91
+ # Cart state (pending Pro/add-ons + prorated total). `GET /me/addons/cart`
92
+ #
93
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
94
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
95
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
96
+ def get_addon_cart(timeout: nil)
97
+ request("GET", "/me/addons/cart", timeout: timeout)
98
+ end
99
+
100
+ # Empty the cart. `DELETE /me/addons/cart`
101
+ #
102
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
103
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
104
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
105
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
106
+ def clear_addon_cart(idempotency_key: nil, timeout: nil)
107
+ request("DELETE", "/me/addons/cart", idempotency_key: idempotency_key, timeout: timeout)
108
+ end
109
+
110
+ # Pay the cart (creates the invoice and opens the in-app payment). `POST
111
+ # /me/addons/cart/checkout`
112
+ #
113
+ # Returns the Stripe `client_secret` for Stripe Elements plus the invoice id. With `save_card:
114
+ # true`, the card is kept for recurring charges once the invoice is paid.
115
+ #
116
+ # @param save_card [Boolean, nil] (corpo)
117
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
118
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
119
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
120
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
121
+ def checkout_addon_cart(save_card: UNSET, idempotency_key: nil, timeout: nil)
122
+ payload = compact(
123
+ "save_card" => save_card
124
+ )
125
+ request("POST",
126
+ "/me/addons/cart/checkout",
127
+ body: payload,
128
+ idempotency_key: idempotency_key,
129
+ timeout: timeout)
130
+ end
131
+
132
+ # The account's invoices (latest 24, newest first). `GET /me/invoices`
133
+ #
134
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
135
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
136
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
137
+ def list_my_invoices(timeout: nil)
138
+ request("GET", "/me/invoices", timeout: timeout)
139
+ end
140
+
141
+ # Reopen the in-app payment of an open invoice. `POST /me/invoices/{id}/pay`
142
+ #
143
+ # @param id [String] Invoice ID.
144
+ # @param idempotency_key [String, nil] chave de idempotência (senão a SDK gera uma).
145
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
146
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
147
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
148
+ # @raise [ArgumentError] parâmetro de caminho vazio, "." ou "..".
149
+ def pay_invoice(id, idempotency_key: nil, timeout: nil)
150
+ request("POST",
151
+ "/me/invoices/#{segment(id, "id")}/pay",
152
+ idempotency_key: idempotency_key,
153
+ timeout: timeout)
154
+ end
155
+
156
+ # Stripe publishable key for the front-end checkout. `GET /billing/config`
157
+ #
158
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
159
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
160
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
161
+ def get_billing_config(timeout: nil)
162
+ request("GET", "/billing/config", timeout: timeout)
163
+ end
164
+
165
+ # Public rate card per currency (plans, add-ons, free allowances). `GET /pricing`
166
+ #
167
+ # Public (no authentication). Cached for 5 minutes.
168
+ #
169
+ # @param timeout [Numeric, nil] segundos por tentativa (padrão: o do cliente).
170
+ # @return [Hash, Array, nil] o JSON da resposta, inteiro (nil em 204).
171
+ # @raise [Bzapper::Error] resposta fora de 2xx ou falha de rede.
172
+ def get_pricing(timeout: nil)
173
+ request("GET", "/pricing", timeout: timeout)
174
+ end
175
+ end
176
+ end
177
+ end